1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-07-26 13:48:33 +02:00

chore: remove link flags (#10076)

This commit is contained in:
Mateusz Kwasniewski 2025-06-03 13:47:24 +02:00 committed by GitHub
parent 68660e1e1f
commit 0819b2cf32
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 18 additions and 92 deletions

View File

@ -27,7 +27,6 @@ import type {
IFeatureToggle,
} from '../../../../../interfaces/featureToggle.ts';
import AddIcon from '@mui/icons-material/Add';
import { useUiFlag } from 'hooks/useUiFlag';
import { Badge } from 'component/common/Badge/Badge';
import LinkIcon from '@mui/icons-material/Link';
import { UPDATE_FEATURE } from '../../../../providers/AccessProvider/permissions.ts';
@ -246,17 +245,13 @@ const FeatureOverviewMetaData: FC<FeatureOverviewMetaDataProps> = ({
const showDependentFeatures = useShowDependentFeatures(project);
const featureLinksEnabled = useUiFlag('featureLinks');
return (
<>
{featureLinksEnabled ? (
<FeatureLinks
links={feature.links || []}
project={feature.project}
feature={feature.name}
/>
) : null}
<FeatureLinks
links={feature.links || []}
project={feature.project}
feature={feature.name}
/>
<StyledMetaDataContainer>
<div>
<StyledTitle>Flag details</StyledTitle>

View File

@ -12,7 +12,6 @@ import Input from 'component/common/Input/Input';
import { FeatureFlagNamingTooltip } from './FeatureFlagNamingTooltip.tsx';
import { usePlausibleTracker } from 'hooks/usePlausibleTracker';
import type { ProjectLinkTemplateSchema } from 'openapi';
import { useUiFlag } from 'hooks/useUiFlag';
import ProjectLinkTemplates from './ProjectLinkTemplates/ProjectLinkTemplates.tsx';
interface IProjectEnterpriseSettingsForm {
@ -155,8 +154,6 @@ const ProjectEnterpriseSettingsForm: React.FC<
{ key: 'private', label: 'private' },
];
const projectLinkTemplatesEnabled = useUiFlag('projectLinkTemplates');
useEffect(() => {
setPreviousPattern(featureNamingPattern || '');
}, [projectId]);
@ -354,12 +351,10 @@ The flag name should contain the project name, the feature name, and the ticket
/>
</StyledFlagNamingContainer>
{projectLinkTemplatesEnabled && (
<ProjectLinkTemplates
linkTemplates={linkTemplates || []}
setLinkTemplates={setLinkTemplates}
/>
)}
<ProjectLinkTemplates
linkTemplates={linkTemplates || []}
setLinkTemplates={setLinkTemplates}
/>
</StyledFieldset>
<StyledButtonContainer>{children}</StyledButtonContainer>
</StyledForm>

View File

@ -88,8 +88,6 @@ export type UiFlags = {
edgeObservability?: boolean;
addEditStrategy?: boolean;
registerFrontendClient?: boolean;
featureLinks?: boolean;
projectLinkTemplates?: boolean;
customMetrics?: boolean;
lifecycleMetrics?: boolean;
sideMenuCleanup?: boolean;

View File

@ -303,9 +303,7 @@ export default class ExportImportService
await this.importTagTypes(dto, auditUser);
await this.importTags(dto, auditUser);
await this.importContextFields(dto, auditUser);
if (this.flagResolver.isEnabled('featureLinks')) {
await this.importLinks(dto, auditUser);
}
await this.importLinks(dto, auditUser);
}
async import(
@ -924,9 +922,7 @@ export default class ExportImportService
this.segmentReadModel.getAll(),
this.tagTypeStore.getAll(),
this.dependentFeaturesReadModel.getDependencies(featureNames),
this.flagResolver.isEnabled('featureLinks')
? this.featureLinksReadModel.getLinks(...featureNames)
: Promise.resolve([]),
this.featureLinksReadModel.getLinks(...featureNames),
]);
this.addSegmentsToStrategies(featureStrategies, strategySegments);
const filteredContextFields = contextFields

View File

@ -108,9 +108,6 @@ export default class FeatureLinkController extends Controller {
>,
res: Response,
): Promise<void> {
if (!this.flagResolver.isEnabled('featureLinks')) {
res.status(404).end();
}
const { projectId, featureName } = req.params;
await this.transactionalFeatureLinkService.transactional((service) =>
@ -132,9 +129,6 @@ export default class FeatureLinkController extends Controller {
>,
res: Response,
): Promise<void> {
if (!this.flagResolver.isEnabled('featureLinks')) {
res.status(404).end();
}
const { projectId, linkId, featureName } = req.params;
await this.transactionalFeatureLinkService.transactional((service) =>
@ -156,9 +150,6 @@ export default class FeatureLinkController extends Controller {
>,
res: Response,
): Promise<void> {
if (!this.flagResolver.isEnabled('featureLinks')) {
res.status(404).end();
}
const { projectId, linkId } = req.params;
await this.transactionalFeatureLinkService.transactional((service) =>

View File

@ -1114,9 +1114,7 @@ export class FeatureToggleService {
this.featureCollaboratorsReadModel.getFeatureCollaborators(
featureName,
),
this.flagResolver.isEnabled('featureLinks')
? this.featureLinksReadModel.getLinks(featureName)
: Promise.resolve([]),
this.featureLinksReadModel.getLinks(featureName),
]);
if (environmentVariants) {
@ -2559,10 +2557,6 @@ export class FeatureToggleService {
featureName: string,
auditUser: IAuditUser,
) {
if (!this.flagResolver.isEnabled('projectLinkTemplates')) {
return;
}
const featureLinksFromTemplates = (
await this.projectStore.getProjectLinkTemplates(projectId)
).map((template) => ({

View File

@ -59,18 +59,13 @@ const mockConstraints = (): IConstraint[] => {
const irrelevantDate = new Date();
beforeAll(async () => {
const flags = {
featureLinks: true,
projectLinkTemplates: true,
};
const config = createTestConfig({ experimental: { flags } });
const config = createTestConfig();
db = await dbInit(
'feature_toggle_service_v2_service_serial',
config.getLogger,
{
dbInitMethod: 'legacy' as const,
experimental: { flags },
},
);
unleashConfig = config;

View File

@ -13,13 +13,7 @@ let projectStore: IProjectStore;
let environmentStore: IEnvironmentStore;
beforeAll(async () => {
db = await dbInit('project_store_serial', getLogger, {
experimental: {
flags: {
projectLinkTemplates: true,
},
},
});
db = await dbInit('project_store_serial', getLogger);
stores = db.stores;
projectStore = stores.projectStore;
environmentStore = stores.environmentStore;

View File

@ -260,9 +260,6 @@ class ProjectStore implements IProjectStore {
data: IProjectEnterpriseSettingsUpdate,
): Promise<void> {
try {
const projectLinkTemplatesEnabled = this.flagResolver.isEnabled(
'projectLinkTemplates',
);
const link_templates = JSON.stringify(
data.linkTemplates ? data.linkTemplates : [],
);
@ -276,11 +273,7 @@ class ProjectStore implements IProjectStore {
feature_naming_example: data.featureNaming?.example,
feature_naming_description:
data.featureNaming?.description,
...(projectLinkTemplatesEnabled
? {
link_templates,
}
: {}),
link_templates,
});
} else {
await this.db(SETTINGS_TABLE).insert({
@ -289,11 +282,7 @@ class ProjectStore implements IProjectStore {
feature_naming_pattern: data.featureNaming?.pattern,
feature_naming_example: data.featureNaming?.example,
feature_naming_description: data.featureNaming?.description,
...(projectLinkTemplatesEnabled
? {
link_templates,
}
: {}),
link_templates,
});
}
} catch (err) {
@ -653,10 +642,6 @@ class ProjectStore implements IProjectStore {
throw new NotFoundError('No project found');
}
const projectLinkTemplatesEnabled = this.flagResolver.isEnabled(
'projectLinkTemplates',
);
return {
id: row.id,
name: row.name,
@ -673,9 +658,7 @@ class ProjectStore implements IProjectStore {
example: row.feature_naming_example,
description: row.feature_naming_description,
},
...(projectLinkTemplatesEnabled
? { linkTemplates: row.link_templates || [] }
: {}),
linkTemplates: row.link_templates || [],
};
}

View File

@ -664,10 +664,7 @@ export function registerPrometheusMetrics(
help: 'Count most popular domains used in feature links',
labelNames: ['domain'],
query: () => {
if (flagResolver.isEnabled('featureLinks')) {
return stores.featureLinkReadModel.getTopDomains();
}
return Promise.resolve([]);
return stores.featureLinkReadModel.getTopDomains();
},
map: (result) =>
result.map(({ domain, count }) => ({

View File

@ -58,8 +58,6 @@ export type IFlagKey =
| 'edgeObservability'
| 'addEditStrategy'
| 'registerFrontendClient'
| 'featureLinks'
| 'projectLinkTemplates'
| 'reportUnknownFlags'
| 'lastSeenBulkQuery'
| 'newGettingStartedEmail'
@ -278,14 +276,6 @@ const flags: IFlags = {
process.env.UNLEASH_EXPERIMENTAL_REGISTER_FRONTEND_CLIENT,
false,
),
featureLinks: parseEnvVarBoolean(
process.env.UNLEASH_EXPERIMENTAL_FEATURE_LINKS,
false,
),
projectLinkTemplates: parseEnvVarBoolean(
process.env.UNLEASH_EXPERIMENTAL_PROJECT_LINK_TEMPLATES,
false,
),
reportUnknownFlags: parseEnvVarBoolean(
process.env.UNLEASH_EXPERIMENTAL_REPORT_UNKNOWN_FLAGS,
false,

View File

@ -53,8 +53,6 @@ process.nextTick(async () => {
addEditStrategy: true,
strictSchemaValidation: true,
registerFrontendClient: true,
featureLinks: true,
projectLinkTemplates: true,
reportUnknownFlags: true,
customMetrics: true,
lifecycleMetrics: true,