Skip to content

Commit 309c8b1

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 838ff72 commit 309c8b1

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>;
@@ -227,6 +231,7 @@ export async function parseMetadataFile(
227231
const packagePath = parsed?.spec?.dynamicArtifact;
228232
const packageName = parsed?.spec?.packageName;
229233
const pluginConfig = parsed?.spec?.appConfigExamples?.[0]?.content;
234+
const role = parsed?.spec?.backstage?.role;
230235

231236
if (!packagePath) {
232237
throw new Error(
@@ -244,6 +249,7 @@ export async function parseMetadataFile(
244249
pluginConfig: pluginConfig || {},
245250
packageName,
246251
sourceFile: filePath,
252+
role,
247253
};
248254
}
249255

@@ -482,8 +488,14 @@ async function resolvePluginPackages(
482488
if (prOciUrls) {
483489
const prUrl = prOciUrls.get(displayName);
484490
if (prUrl) {
485-
console.log(`[PluginMetadata] PR: ${pkg}${prUrl}`);
486-
return { ...plugin, package: prUrl };
491+
const usesCoverage =
492+
process.env.E2E_COLLECT_COVERAGE === "1" &&
493+
metadata.role === "frontend-plugin";
494+
const resolved = usesCoverage
495+
? prUrl.replace(/(:[^!]+)/, "$1__coverage")
496+
: prUrl;
497+
console.log(`[PluginMetadata] PR: ${pkg}${resolved}`);
498+
return { ...plugin, package: resolved };
487499
}
488500
}
489501

0 commit comments

Comments
 (0)