Skip to content
Merged
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
6 changes: 4 additions & 2 deletions .github/workflows/external-plugin-command-router.yml
Original file line number Diff line number Diff line change
Expand Up @@ -746,8 +746,9 @@ jobs:
if (process.env.QUALITY_JOB_RESULT === 'failure' || process.env.QUALITY_JOB_RESULT === 'cancelled') {
qualityResult = {
overall_status: 'infra_error',
skill_validator_status: 'infra_error',
vally_lint_status: 'infra_error',
smoke_status: 'infra_error',
version_match_status: 'infra_error',
failure_class: 'infra',
summary: 'Quality-gate workflow failed unexpectedly. Re-run intake to retry.',
};
Expand All @@ -756,8 +757,9 @@ jobs:
} else {
qualityResult = {
overall_status: 'infra_error',
skill_validator_status: 'infra_error',
vally_lint_status: 'infra_error',
smoke_status: 'infra_error',
version_match_status: 'infra_error',
failure_class: 'infra',
summary: 'Quality-gate workflow did not return results. Re-run intake to retry.',
};
Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/external-plugin-intake.yml
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,9 @@ jobs:
if (process.env.QUALITY_JOB_RESULT === 'failure' || process.env.QUALITY_JOB_RESULT === 'cancelled') {
qualityResult = {
overall_status: 'infra_error',
skill_validator_status: 'infra_error',
vally_lint_status: 'infra_error',
smoke_status: 'infra_error',
version_match_status: 'infra_error',
failure_class: 'infra',
summary: 'Quality-gate workflow failed unexpectedly. Re-run intake to retry.',
};
Expand All @@ -123,8 +124,9 @@ jobs:
} else {
qualityResult = {
overall_status: 'infra_error',
skill_validator_status: 'infra_error',
vally_lint_status: 'infra_error',
smoke_status: 'infra_error',
version_match_status: 'infra_error',
failure_class: 'infra',
summary: 'Quality-gate workflow did not return results. Re-run intake to retry.',
};
Expand Down
15 changes: 11 additions & 4 deletions .github/workflows/external-plugin-pr-quality-gates.yml
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ jobs:
overall_status: 'infra_error',
failure_class: 'infra',
checked_plugins: [],
version_match_status: 'infra_error',
summary: 'External plugin PR change detection failed unexpectedly. Re-run this workflow.',
};
} else if (shouldRun) {
Expand All @@ -165,6 +166,7 @@ jobs:
overall_status: 'infra_error',
failure_class: 'infra',
checked_plugins: [],
version_match_status: 'infra_error',
summary: 'External plugin PR quality checks failed unexpectedly. Re-run this workflow.',
};
} else if (process.env.QUALITY_RESULT_JSON) {
Expand All @@ -174,6 +176,7 @@ jobs:
overall_status: 'infra_error',
failure_class: 'infra',
checked_plugins: [],
version_match_status: 'infra_error',
summary: 'External plugin PR quality checks did not return a result payload.',
};
}
Expand Down Expand Up @@ -242,14 +245,15 @@ jobs:
const sourceUrl = String(entry?.source_tree_url || '');
const locator = String(entry?.source?.sha || entry?.source?.ref || 'repository');
const sourceCell = sourceUrl ? `[${locator}](${sourceUrl})` : locator;
return `| ${name} | ${quality.vally_lint_status || 'not_run'} | ${quality.smoke_status || 'not_run'} | ${quality.overall_status || 'not_run'} | ${sourceCell} |`;
return `| ${name} | ${quality.vally_lint_status || 'not_run'} | ${quality.smoke_status || 'not_run'} | ${quality.version_match_status || 'not_run'} | ${quality.overall_status || 'not_run'} | ${sourceCell} |`;
})
: ['| _none_ | not_run | not_run | not_run | _n/a_ |'];
: ['| _none_ | not_run | not_run | not_run | not_run | _n/a_ |'];
const failureDetails = checkedPlugins.flatMap((entry) => {
const name = String(entry?.name || 'unknown');
const quality = entry?.quality || {};
const shouldShowVally = quality.vally_lint_status === 'fail' || quality.vally_lint_status === 'infra_error' || String(quality.vally_lint_output || '').trim().length > 0;
const shouldShowSmoke = quality.smoke_status === 'fail' || quality.smoke_status === 'infra_error' || String(quality.smoke_output || '').trim().length > 0;
const shouldShowVersionMatch = quality.version_match_status === 'fail' || quality.version_match_status === 'infra_error' || String(quality.version_match_output || '').trim().length > 0;

const details = [];
if (shouldShowVally) {
Expand All @@ -258,6 +262,9 @@ jobs:
if (shouldShowSmoke) {
details.push(formatGateOutput(name, 'install smoke test', quality.smoke_status, quality.smoke_output));
}
if (shouldShowVersionMatch) {
details.push(formatGateOutput(name, 'version match', quality.version_match_status, quality.version_match_output));
}
return details;
});

Expand All @@ -270,8 +277,8 @@ jobs:
'',
'### Per-plugin quality summary',
'',
'| Plugin | vally lint | install smoke test | overall | source tree |',
'|---|---|---|---|---|',
'| Plugin | vally lint | install smoke test | version match | overall | source tree |',
'|---|---|---|---|---|---|',
...rows,
'',
...(failureDetails.length > 0
Expand Down
19 changes: 19 additions & 0 deletions eng/external-plugin-intake.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -425,10 +425,12 @@ function normalizeQualityGateResult(rawResult) {
overall_status: "not_run",
vally_lint_status: "not_run",
smoke_status: "not_run",
version_match_status: "not_run",
failure_class: "none",
summary: "",
vally_lint_output: "",
smoke_output: "",
version_match_output: "",
};

if (!rawResult || typeof rawResult !== "object" || Array.isArray(rawResult)) {
Expand All @@ -444,6 +446,7 @@ function normalizeQualityGateResult(rawResult) {
function buildQualityGatesCommentSection(qualityResult) {
const vallyState = qualityResult.vally_lint_status || "not_run";
const smokeState = qualityResult.smoke_status || "not_run";
const versionMatchState = qualityResult.version_match_status || "not_run";
const summaryText = String(qualityResult.summary || "").trim() || "_No quality gate details were provided._";

const sections = [
Expand All @@ -453,6 +456,7 @@ function buildQualityGatesCommentSection(qualityResult) {
"|---|---|",
`| vally lint | ${vallyState} |`,
`| install smoke test | ${smokeState} |`,
`| version match | ${versionMatchState} |`,
"",
summaryText,
];
Expand Down Expand Up @@ -487,6 +491,21 @@ function buildQualityGatesCommentSection(qualityResult) {
);
}

const versionMatchOutput = String(qualityResult.version_match_output || "").trim();
if (versionMatchOutput) {
sections.push(
"",
"<details>",
"<summary>Version match output</summary>",
"",
"```text",
versionMatchOutput,
"```",
"",
"</details>",
);
}

return sections.join("\n");
}

Expand Down
2 changes: 1 addition & 1 deletion eng/external-plugin-pr-quality-gates.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ export async function runExternalPluginPrQualityGates(plugins) {
? "No changed external plugin entries were detected in plugins/external.json."
: checkedPlugins
.map((entry) =>
`- ${entry.name}: vally-lint=${entry.quality.vally_lint_status}, install-smoke=${entry.quality.smoke_status}, overall=${entry.quality.overall_status}`
`- ${entry.name}: vally-lint=${entry.quality.vally_lint_status}, install-smoke=${entry.quality.smoke_status}, version-match=${entry.quality.version_match_status}, overall=${entry.quality.overall_status}`
)
.join("\n");

Expand Down
Loading
Loading