60da0e5749
* feat(action): Do cleanup when workflow failed or cancelled early. * fix: avoid naming collision with get-installation-token state. * tmp: add more logging for debugging purposes. * fix: rm wasUpdated state. * FIX: changing approach, separate entrypoint, using db to handle cases when main() never ran. * fix(cleanup): revert changes to exitHandler. * FIX: using event payload for issue and comment retrieval instead of DB. * FIX: use installation token. * feat(docs): wiki article explaining how it works. * fix(docs): shortening. * fix(docs): shortening. * fix: no console. * todo: DNRY for findPullfrogComment. * FIX(DNRY): upgrading octokit/rest and reusing findInitialComment() from triggerWorkflow.ts. * Revert "FIX(DNRY): upgrading octokit/rest and reusing findInitialComment() from triggerWorkflow.ts." This reverts commit 7dd239ba0986c5b0aeacb6ddc9f2deddb83aee82. * fix: rm todo. * fix(DNRY): shortening early exit logging statements. * FIX(API): Avoid extra call for comment body. * feat(DNRY): extracting and reusing buildWorkflowErrorMessage() from exitHandler.ts. * fix(DNRY): extracting more similarities into buildErrorCommentBody. * feat: Add conditional reason check. * fix(merge): replacing resolveInstallationToken with getJobToken. * fix(debug): using higher severity. * fix: Adjusting the implementation of getIsCancelled to use job status instead of workflow. * fix: Take steps conclusion into account when job is in progress. * fix: generic log msg. * fix: jsdoc. * fix(docs): Updating the wiki article according to recent changes. * fix(post): Handling the case when current job runs within matrix. * fix: finding the most recent comment that is ours ANS stuck. * feat(opt): using progressCommentId from object-based prompt when present. * fix(docs): Shortening the documentation 3 times down. * FIX: Only using the prompt.progressCommentId but with validation that it is stuck.
87 lines
2.4 KiB
JavaScript
87 lines
2.4 KiB
JavaScript
// @ts-check
|
|
|
|
import { build } from "esbuild";
|
|
import { readFileSync, writeFileSync } from "fs";
|
|
|
|
// Plugin to strip shebangs from output files
|
|
/**
|
|
* @type {import("esbuild").Plugin}
|
|
*/
|
|
const stripShebangPlugin = {
|
|
name: "strip-shebang",
|
|
setup(build) {
|
|
build.onEnd((result) => {
|
|
if (result.errors.length > 0) return;
|
|
|
|
// Strip shebang from the output file
|
|
const outputFile = build.initialOptions.outfile;
|
|
if (outputFile) {
|
|
try {
|
|
const content = readFileSync(outputFile, "utf8");
|
|
// Remove shebang line from the beginning if present
|
|
const withoutShebang = content.startsWith("#!")
|
|
? content.slice(content.indexOf("\n") + 1)
|
|
: content;
|
|
writeFileSync(outputFile, withoutShebang);
|
|
} catch (error) {
|
|
// File might not exist, ignore
|
|
}
|
|
}
|
|
});
|
|
},
|
|
};
|
|
|
|
/**
|
|
* @type {import("esbuild").BuildOptions}
|
|
*/
|
|
const sharedConfig = {
|
|
bundle: true,
|
|
format: "esm",
|
|
platform: "node",
|
|
target: "node24",
|
|
minify: false,
|
|
sourcemap: false,
|
|
// Bundle all dependencies - GitHub Actions doesn't have node_modules
|
|
// Only mark optional peer dependencies as external
|
|
external: [
|
|
"@valibot/to-json-schema",
|
|
"effect",
|
|
"sury",
|
|
],
|
|
// Provide a proper require shim for CommonJS modules bundled into ESM
|
|
// We use a unique variable name to avoid conflicts with bundled imports
|
|
banner: {
|
|
js: `import { createRequire as __createRequire } from 'module'; import { fileURLToPath as __fileURLToPath } from 'url'; import { dirname as __dirnameFn } from 'path'; const require = __createRequire(import.meta.url); const __filename = __fileURLToPath(import.meta.url); const __dirname = __dirnameFn(__filename);`,
|
|
},
|
|
// Enable tree-shaking to remove unused code
|
|
treeShaking: true,
|
|
// Drop console statements in production (but keep for debugging)
|
|
drop: [],
|
|
};
|
|
|
|
// Build the main entry bundle
|
|
await build({
|
|
...sharedConfig,
|
|
entryPoints: ["./entry.ts"],
|
|
outfile: "./entry",
|
|
plugins: [stripShebangPlugin],
|
|
});
|
|
|
|
// Build the post cleanup entry bundle
|
|
await build({
|
|
...sharedConfig,
|
|
entryPoints: ["./post.ts"],
|
|
outfile: "./post",
|
|
plugins: [stripShebangPlugin],
|
|
});
|
|
|
|
// Build the get-installation-token action
|
|
await build({
|
|
...sharedConfig,
|
|
entryPoints: ["./get-installation-token/entry.ts"],
|
|
outfile: "./get-installation-token/entry",
|
|
plugins: [stripShebangPlugin],
|
|
});
|
|
|
|
console.log("» build completed successfully");
|