From 77266480b999a075ae5bcf80d04773bc74f5db0b Mon Sep 17 00:00:00 2001 From: Bradley Ayers Date: Wed, 6 Aug 2025 13:37:54 +1000 Subject: [PATCH] automatically expand the github actions step when there is a failure --- index.js | 14 +++++++++++--- index.ts | 17 ++++++++++++++--- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index f88f603..fc2361b 100644 --- a/index.js +++ b/index.js @@ -1,10 +1,11 @@ import { readFile, stat } from "node:fs/promises"; async function main() { + let anyErrors = false; const workspaceRoot = await getWorkspaceRoot(); const ciReport = await readCiReport(workspaceRoot); if (!ciReport) { console.log("CI report file does not exist. No CI tasks may have been executed."); - return; + return anyErrors; } for (const action of ciReport.actions) { const taskInfo = taskInfoOf(action); @@ -13,6 +14,7 @@ async function main() { } const { stdout, stderr } = await readStatus({ workspaceRoot, taskInfo }); const { project, task, command, status } = taskInfo; + anyErrors = anyErrors || status === "failed"; const target = `${project}:${task}`; writeGroup(`${statusBadges[status]} ${bold(target)}`, ({ println }) => { if (command) { @@ -30,6 +32,7 @@ async function main() { } }); } + return anyErrors; } async function getWorkspaceRoot() { return process.cwd(); @@ -129,11 +132,16 @@ function blue(text) { } const stdoutBadge = bgDarkGray(` ${green("⏺")} STDOUT `); const stderrBadge = bgDarkGray(` ${red("⏺")} STDERR `); +let anyErrors; try { - await main(); + anyErrors = await main(); } catch (error) { console.error(error); process.exit(0); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxELEtBQUssVUFBVSxJQUFJO0lBQ2xCLE1BQU0sYUFBYSxHQUFHLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQztJQUMvQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNuRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLG9FQUFvRSxDQUFDLENBQUM7UUFDbEYsT0FBTztJQUNSLENBQUM7SUFDRCxLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN2QyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2YsU0FBUztRQUNWLENBQUM7UUFDRCxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sVUFBVSxDQUFDLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDekUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUNwRCxNQUFNLE1BQU0sR0FBRyxHQUFHLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNwQyxVQUFVLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7WUFDckUsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFD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 \ No newline at end of file +if (anyErrors === true) { + console.error("Some tasks failed. Please check the output above."); + process.exit(1); +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxELEtBQUssVUFBVSxJQUFJO0lBQ2xCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztJQUV0QixNQUFNLGFBQWEsR0FBRyxNQUFNLGdCQUFnQixFQUFFLENBQUM7SUFDL0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sU0FBUyxDQUFDO0lBQ2xCLENBQUM7SUFDRCxLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN2QyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2YsU0FBUztRQUNWLENBQUM7UUFDRCxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sVUFBVSxDQUFDLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDekUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQztRQUNwRCxTQUFTLEdBQUcsU0FBUyxJQUFJLE1BQU0sS0FBSyxRQUFRLENBQUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsR0FBRyxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7UUFDcEMsVUFBVSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFB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 \ No newline at end of file diff --git a/index.ts b/index.ts index 05beade..a8d1c47 100644 --- a/index.ts +++ b/index.ts @@ -1,11 +1,13 @@ import { readFile, stat } from "node:fs/promises"; -async function main(): Promise { +async function main(): Promise { + let anyErrors = false; + const workspaceRoot = await getWorkspaceRoot(); const ciReport = await readCiReport(workspaceRoot); if (!ciReport) { console.log("CI report file does not exist. No CI tasks may have been executed."); - return; + return anyErrors; } for (const action of ciReport.actions) { const taskInfo = taskInfoOf(action); @@ -14,6 +16,7 @@ async function main(): Promise { } const { stdout, stderr } = await readStatus({ workspaceRoot, taskInfo }); const { project, task, command, status } = taskInfo; + anyErrors = anyErrors || status === "failed"; const target = `${project}:${task}`; writeGroup(`${statusBadges[status]} ${bold(target)}`, ({ println }) => { if (command) { @@ -31,6 +34,7 @@ async function main(): Promise { } }); } + return anyErrors; } async function getWorkspaceRoot(): Promise { @@ -195,9 +199,16 @@ type Meta = type: "archive-creation" | "hash-generation" | "no-operation" | "output-hydration"; }; +let anyErrors; + try { - await main(); + anyErrors = await main(); } catch (error) { console.error(error); process.exit(0); } + +if (anyErrors === true) { + console.error("Some tasks failed. Please check the output above."); + process.exit(1); +}