Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@red-hat-developer-hub/backstage-plugin-extensions-common': minor
'@red-hat-developer-hub/backstage-plugin-extensions': minor
'@red-hat-developer-hub/extensions-cli': minor
---

Removed the Plugin Certification Program. The `CERTIFIED_BY` annotation, certification badges, certified filter, and all related UI, translations, and metadata have been removed from the Extensions Catalog.
3 changes: 1 addition & 2 deletions workspaces/extensions/api/plugins/facets.bru
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,14 @@ meta {
}

get {
url: {{baseURL}}/api/extensions/plugins/facets?facet=metadata.name&facet=metadata.namespace&facet=metadata.annotations.extensions.backstage.io/certified-by
url: {{baseURL}}/api/extensions/plugins/facets?facet=metadata.name&facet=metadata.namespace
body: none
auth: bearer
}

params:query {
facet: metadata.name
facet: metadata.namespace
facet: metadata.annotations.extensions.backstage.io/certified-by
}

auth:bearer {
Expand Down
8 changes: 0 additions & 8 deletions workspaces/extensions/docs/catalog/plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -229,14 +229,6 @@ spec:

## Annotations

### Certification

```yaml
metadata:
annotations:
extensions.backstage.io/certified-by: Company name
```

### Support type for Core and Community plugins

```yaml
Expand Down
2 changes: 1 addition & 1 deletion workspaces/extensions/docs/tools/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ The `export-csv` command parses extensions YAML files and generates CSV reports.

- `name`, `title`, `author`, `categories`, `lifecycle`
- `metadataDescription`, `specDescription`, `support`, `publisher`, `highlights`
- `certified-by`, `verified-by`, `pre-installed`
- `verified-by`, `pre-installed`
- `packages`, `backend packages`, `frontend packages`

**Package CSV columns:**
Expand Down
29 changes: 0 additions & 29 deletions workspaces/extensions/e2e-tests/extensions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -142,35 +142,6 @@ test.describe('Admin > Extensions', () => {
await extensions.emptyCategoryComboBox();
});

test('Verify certified badge in extensions', async ({
browser: _browser,
}) => {
await extensions.selectDropdown(`${translations.search.supportType}`);
await extensions.toggleOption(translations.badges.certified);
await sharedPage.keyboard.press(`Escape`);
await extensionHelper.verifyHeading('Certified Plugin ');
await expect(extensions.badge.first()).toBeVisible();
await extensions.badge.first().hover();
await extensionHelper.verifyHeading('Certified Plugin ');
await extensionHelper.clickHeading('Certified Plugin ');
await extensionHelper.closeBar('Close');
await extensionHelper.clickLink(translations.common.readMore);
await extensionHelper.verifyTextInLocator(
'',
translations.metadata.about,
true,
);
await extensionHelper.verifyHeading(translations.metadata.versions);
await extensionHelper.verifyTableHeadingAndRows([
translations.table.packageName,
translations.table.version,
translations.table.role,
translations.table.status,
]);
await extensionHelper.closeBar('Close');
await extensions.resetSupportTypeFilter(translations.badges.certified);
});

test('Verify Generally available badge in extensions', async ({
browser: _browser,
}) => {
Expand Down
1 change: 0 additions & 1 deletion workspaces/extensions/e2e-tests/pages/extensions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ export class Extensions {
private get supportTypeOptions() {
return [
this.translations.badges.generallyAvailable,
this.translations.badges.certified,
this.translations.badges.customPlugin,
this.translations.badges.techPreview,
this.translations.badges.devPreview,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ metadata:
description: This is a certified plugin example
annotations:
extensions.backstage.io/pre-installed: 'true'
extensions.backstage.io/certified-by: Vendor A
spec:
categories:
- Test plugin entity
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ metadata:
description: This is a certified plugin example
annotations:
extensions.backstage.io/pre-installed: 'true'
extensions.backstage.io/certified-by: Vendor A
spec:
categories:
- Test plugin entity
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ metadata:
description: This is a certified plugin example
annotations:
extensions.backstage.io/pre-installed: 'true'
extensions.backstage.io/certified-by: Vendor B
spec:
categories:
- Test plugin entity
Original file line number Diff line number Diff line change
Expand Up @@ -213,8 +213,6 @@ export default async ({
support: p => p?.spec?.support,
publisher: p => p?.spec?.publisher,
highlights: p => (p?.spec?.highlights || []).join(', '),
'certified-by': p =>
p?.metadata?.annotations?.['extensions.backstage.io/certified-by'],
'verified-by': p =>
p?.metadata?.annotations?.['extensions.backstage.io/verified-by'],
'pre-installed': p =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,6 @@ export const EXTENSIONS_API_VERSION = 'extensions.backstage.io/v1alpha1';

// @public (undocumented)
export enum ExtensionsAnnotation {
// (undocumented)
CERTIFIED_BY = 'extensions.backstage.io/certified-by',
// (undocumented)
PRE_INSTALLED = 'extensions.backstage.io/pre-installed',
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,5 @@
* @public
*/
export enum ExtensionsAnnotation {
CERTIFIED_BY = 'extensions.backstage.io/certified-by',
PRE_INSTALLED = 'extensions.backstage.io/pre-installed',
}
Original file line number Diff line number Diff line change
Expand Up @@ -480,7 +480,6 @@ export const extensionsTranslationRef: TranslationRef<
readonly 'tooltips.missingDynamicArtifact': string;
readonly 'tooltips.extensionsDisabled': string;
readonly 'tooltips.noPermissions': string;
readonly 'supportTypes.certifiedBy': string;
readonly 'supportTypes.verifiedBy': string;
readonly 'supportTypes.customPlugins': string;
readonly 'collection.kubernetes': string;
Expand All @@ -506,12 +505,9 @@ export const extensionsTranslationRef: TranslationRef<
readonly 'aria.expandSection': string;
readonly 'aria.collapseSection': string;
readonly 'aria.sortBy': string;
readonly 'badges.certifiedBy': string;
readonly 'badges.verifiedBy': string;
readonly 'badges.certified': string;
readonly 'badges.verified': string;
readonly 'badges.customPlugin': string;
readonly 'badges.stableAndSecured': string;
readonly 'badges.generallyAvailable': string;
readonly 'badges.gaAndSupportedBy': string;
readonly 'badges.gaAndSupported': string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,6 @@ const extensionsTranslationDe = createTranslationMessages({
'metadata.category': 'Kategorie',
'metadata.versions': 'Versionen',
'metadata.backstageCompatibility': 'Backstage-Kompatibilitätsversion',
'supportTypes.certifiedBy': 'Zertifiziert von {{value}} ({{count}})',
'supportTypes.verifiedBy': 'Verifiziert von {{value}} ({{count}})',
'supportTypes.customPlugins': 'Benutzerdefinierte Plugins ({{count}})',
'collection.kubernetes': 'Kubernetes',
Expand Down Expand Up @@ -286,12 +285,9 @@ const extensionsTranslationDe = createTranslationMessages({
'aria.collapseSection': 'Abschnitt reduzieren',
'aria.sortBy': 'Sortieren nach {{field}}',
'aria.filterBy': 'Filtern nach {{field}}',
'badges.certified': 'Zertifiziert',
'badges.certifiedBy': 'Zertifiziert von {{provider}}',
'badges.verified': 'Verifiziert',
'badges.verifiedBy': 'Verifiziert von {{provider}}',
'badges.customPlugin': 'Benutzerdefiniertes Plugin',
'badges.stableAndSecured': 'Stabil und gesichert durch {{provider}}',
'badges.generallyAvailable': 'Allgemein verfügbar (GA)',
'badges.gaAndSupportedBy':
'Allgemein verfügbar (GA) und unterstützt durch {{provider}}',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,6 @@ const extensionsTranslationEs = createTranslationMessages({
'metadata.category': 'Categoría',
'metadata.versions': 'Versiones',
'metadata.backstageCompatibility': 'Versión de compatibilidad de Backstage',
'supportTypes.certifiedBy': 'Certificado por {{value}} ({{count}})',
'supportTypes.verifiedBy': 'Verificado por {{value}} ({{count}})',
'supportTypes.customPlugins': 'Complementos personalizados ({{count}})',
'collection.kubernetes': 'Kubernetes',
Expand Down Expand Up @@ -288,12 +287,9 @@ const extensionsTranslationEs = createTranslationMessages({
'aria.collapseSection': 'Contraer sección',
'aria.sortBy': 'Ordenar por {{field}}',
'aria.filterBy': 'Filtrar por {{field}}',
'badges.certified': 'Certificado',
'badges.certifiedBy': 'Certificado por {{provider}}',
'badges.verified': 'Verificado',
'badges.verifiedBy': 'Verificado por {{provider}}',
'badges.customPlugin': 'Complemento personalizado',
'badges.stableAndSecured': 'Estable y protegido por {{provider}}',
'badges.generallyAvailable': 'Disponibilidad general (GA)',
'badges.gaAndSupportedBy':
'Disponibilidad general (GA) y con soporte de {{provider}}',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,6 @@ const extensionsTranslationFr = createTranslationMessages({
'metadata.category': 'Catégorie',
'metadata.versions': 'Versions',
'metadata.backstageCompatibility': 'Version de compatibilité backstage',
'supportTypes.certifiedBy': 'Certifié par {{value}} ({{count}})',
'supportTypes.verifiedBy': 'Vérifié par {{value}} ({{count}})',
'supportTypes.customPlugins': 'Plugins personnalisés ({{count}})',
'collection.kubernetes': 'Kubernetes',
Expand Down Expand Up @@ -287,12 +286,9 @@ const extensionsTranslationFr = createTranslationMessages({
'aria.collapseSection': 'Réduire la section',
'aria.sortBy': 'Trier par {{field}}',
'aria.filterBy': 'Filtrer par {{field}}',
'badges.certified': 'Certifié',
'badges.certifiedBy': 'Certifié par {{provider}}',
'badges.verified': 'Vérifié',
'badges.verifiedBy': 'Vérifié par {{provider}}',
'badges.customPlugin': 'Plugin personnalisé',
'badges.stableAndSecured': 'Stable et sécurisé par {{provider}}',
'badges.generallyAvailable': 'Généralement disponible (GA)',
'badges.gaAndSupportedBy':
'Généralement disponible (GA) et pris en charge par {{provider}}',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,6 @@ const extensionsTranslationIt = createTranslationMessages({
'metadata.category': 'Categoria',
'metadata.versions': 'Versioni',
'metadata.backstageCompatibility': 'Versione compatibile con Backstage',
'supportTypes.certifiedBy': 'Certificato da {{value}} ({{count}})',
'supportTypes.verifiedBy': 'Verificato da {{value}} ({{count}})',
'supportTypes.customPlugins': 'Plugin personalizzati ({{count}})',
'collection.kubernetes': 'Kubernetes',
Expand Down Expand Up @@ -290,12 +289,9 @@ const extensionsTranslationIt = createTranslationMessages({
'aria.collapseSection': 'Comprimi sezione',
'aria.sortBy': 'Ordina per {{field}}',
'aria.filterBy': 'Filtra per {{field}}',
'badges.certified': 'Certificato',
'badges.certifiedBy': 'Certificato da {{provider}}',
'badges.verified': 'Verificato',
'badges.verifiedBy': 'Verificato da {{provider}}',
'badges.customPlugin': 'Plugin personalizzato',
'badges.stableAndSecured': 'Stabile e protetto da {{provider}}',
'badges.generallyAvailable': 'Generalmente disponibile',
'badges.gaAndSupportedBy':
'Generalmente disponibile e supportato da {{provider}}',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,6 @@ const extensionsTranslationJa = createTranslationMessages({
'metadata.category': 'カテゴリー',
'metadata.versions': 'バージョン',
'metadata.backstageCompatibility': 'Backstage 互換バージョン',
'supportTypes.certifiedBy': '{{value}} により認定済み ({{count}})',
'supportTypes.verifiedBy': '{{value}} により検証済み ({{count}})',
'supportTypes.customPlugins': 'カスタムプラグイン ({{count}})',
'collection.kubernetes': 'Kubernetes',
Expand Down Expand Up @@ -287,12 +286,9 @@ const extensionsTranslationJa = createTranslationMessages({
'aria.collapseSection': 'セクションを折りたたむ',
'aria.sortBy': '{{field}} でソート',
'aria.filterBy': '{{field}} でフィルタリング',
'badges.certified': '認定済み',
'badges.certifiedBy': '{{provider}} により認定済み',
'badges.verified': '検証済み',
'badges.verifiedBy': '{{provider}} により検証済み',
'badges.customPlugin': 'カスタムプラグイン',
'badges.stableAndSecured': '安定および {{provider}} により保護',
'badges.generallyAvailable': '一般提供 (GA)',
'badges.gaAndSupportedBy':
'一般提供 (GA) および {{provider}} のサポート対象',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,6 @@ export const extensionsMessages = {

// Support type filters
supportTypes: {
certifiedBy: 'Certified by {{value}} ({{count}})',
verifiedBy: 'Verified by {{value}} ({{count}})',
customPlugins: 'Custom plugins ({{count}})',
},
Expand Down Expand Up @@ -374,12 +373,9 @@ export const extensionsMessages = {

// Badge labels and tooltips
badges: {
certified: 'Certified',
certifiedBy: 'Certified by {{provider}}',
verified: 'Verified',
verifiedBy: 'Verified by {{provider}}',
customPlugin: 'Custom plugin',
stableAndSecured: 'Stable and secured by {{provider}}',
generallyAvailable: 'Generally available (GA)',
gaAndSupportedBy: 'Generally available (GA) and supported by {{provider}}',
gaAndSupported: 'Generally available (GA) and supported',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,21 +44,6 @@ const getBadgeOptions = (
const supportLevel = entity.spec?.support?.level;
const supportProvider = entity.spec?.support?.provider;

if (entity.metadata.annotations?.[ExtensionsAnnotation.CERTIFIED_BY]) {
return {
isBadge: true,
color: colors.certified,
label: t('badges.certified'),
tooltip: t('badges.certifiedBy' as any, {
provider:
entity.metadata.annotations[ExtensionsAnnotation.CERTIFIED_BY],
}),
statusTooltip: t('badges.stableAndSecured' as any, {
provider:
entity.metadata.annotations[ExtensionsAnnotation.CERTIFIED_BY],
}),
};
}
if (supportLevel === ExtensionsSupportLevel.GENERALLY_AVAILABLE) {
return {
isBadge: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,9 +116,6 @@ const SupportTypeFilter = () => {
const selected = useMemo(() => {
const selectedFilters = searchParams.getAll('filter');
return items.filter(item => {
if (item.value === 'certified') {
return selectedFilters.includes('certified');
}
if (item.value === 'custom') {
return selectedFilters.includes('custom');
}
Expand Down Expand Up @@ -148,9 +145,7 @@ const SupportTypeFilter = () => {
params.forEach((value, key) => {
if (
key === 'filter' &&
(value === `certified` ||
value === `custom` ||
value.startsWith('support-level='))
(value === `custom` || value.startsWith('support-level='))
) {
add();
} else {
Expand Down
1 change: 0 additions & 1 deletion workspaces/extensions/plugins/extensions/src/consts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
export const themeId = 'extensions';

export const colors = {
certified: '#A18FFF',
generallyAvailable: '#6EC664',
custom: '#EC7A08',
} as const;
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,7 @@ export const useFilteredPluginFacet = (
}
if (
excludeFilterType === 'support' &&
(filter === 'certified' ||
filter === 'custom' ||
filter.startsWith('support-level='))
(filter === 'custom' || filter.startsWith('support-level='))
) {
return false;
}
Expand Down Expand Up @@ -122,28 +120,18 @@ export const useFilteredPluginFacet = (
) {
return true;
}
// Check certification annotation as fallback
const certifiedBy =
plugin.metadata?.annotations?.[ExtensionsAnnotation.CERTIFIED_BY];
return certifiedBy && authors.includes(certifiedBy);
return false;
});
}

// Apply support type filters
const showCertified = activeFilters.includes('certified');
const showCustom = activeFilters.includes('custom');
const supportLevels = activeFilters
.filter(filter => filter.startsWith('support-level='))
.map(filter => filter.substring('support-level='.length));

if (showCertified || showCustom || supportLevels.length > 0) {
if (showCustom || supportLevels.length > 0) {
filteredPlugins = filteredPlugins.filter(plugin => {
if (
showCertified &&
plugin.metadata?.annotations?.[ExtensionsAnnotation.CERTIFIED_BY]
) {
return true;
}
if (
showCustom &&
plugin.metadata?.annotations?.[
Expand Down
Loading
Loading