Skip to content

Commit 82061d5

Browse files
committed
feat: auto-swap to __coverage images for frontend plugins in PR mode
Implements automatic image tag swap from 'pr_XXX__version' to 'pr_XXX__version__coverage' when E2E_COLLECT_COVERAGE=1 is set and the plugin is a frontend-plugin. Changes: 1. Add 'role' field to PluginMetadata and PackageCRD types 2. Parse spec.backstage.role in parseMetadataFile() 3. Swap to __coverage tag in resolvePluginPackages() when: - GIT_PR_NUMBER is set (PR mode) - E2E_COLLECT_COVERAGE=1 - Plugin role is 'frontend-plugin' The regex preserves OCI alias: plugin:tag!alias → plugin:tag__coverage!alias Only affects PR checks. Nightly mode, {{inherit}}, and local dev paths are unchanged. Backend plugins skip the swap (no browser coverage). Implements: #95 (comment)
1 parent 50016f2 commit 82061d5

1 file changed

Lines changed: 14 additions & 2 deletions

File tree

src/utils/plugin-metadata.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,16 @@ export interface PluginMetadata {
1414
pluginConfig: Record<string, unknown>;
1515
packageName: string;
1616
sourceFile: string;
17+
role?: string;
1718
}
1819

1920
interface PackageCRD {
2021
spec?: {
2122
packageName?: string;
2223
dynamicArtifact?: string;
24+
backstage?: {
25+
role?: string;
26+
};
2327
appConfigExamples?: Array<{
2428
title?: string;
2529
content?: Record<string, unknown>;
@@ -218,6 +222,7 @@ export async function parseMetadataFile(
218222
const packagePath = parsed?.spec?.dynamicArtifact;
219223
const packageName = parsed?.spec?.packageName;
220224
const pluginConfig = parsed?.spec?.appConfigExamples?.[0]?.content;
225+
const role = parsed?.spec?.backstage?.role;
221226

222227
if (!packagePath) {
223228
throw new Error(
@@ -235,6 +240,7 @@ export async function parseMetadataFile(
235240
pluginConfig: pluginConfig || {},
236241
packageName,
237242
sourceFile: filePath,
243+
role,
238244
};
239245
}
240246

@@ -473,8 +479,14 @@ async function resolvePluginPackages(
473479
if (prOciUrls) {
474480
const prUrl = prOciUrls.get(displayName);
475481
if (prUrl) {
476-
console.log(`[PluginMetadata] PR: ${pkg}${prUrl}`);
477-
return { ...plugin, package: prUrl };
482+
const usesCoverage =
483+
process.env.E2E_COLLECT_COVERAGE === "1" &&
484+
metadata.role === "frontend-plugin";
485+
const resolved = usesCoverage
486+
? prUrl.replace(/(:[^!]+)/, "$1__coverage")
487+
: prUrl;
488+
console.log(`[PluginMetadata] PR: ${pkg}${resolved}`);
489+
return { ...plugin, package: resolved };
478490
}
479491
}
480492

0 commit comments

Comments
 (0)