Files

54 lines
1.5 KiB
JavaScript

#!/usr/bin/env node
// Self-bootstrapping entry point — only uses Node stdlib so it runs before
// node_modules exists. Installs deps, then dynamically imports the action.
import { existsSync } from "node:fs";
import { execSync } from "node:child_process";
import { fileURLToPath } from "node:url";
import { dirname } from "node:path";
const dir = dirname(fileURLToPath(import.meta.url));
if (!existsSync(`${dir}/node_modules`)) {
console.error("» installing dependencies...");
// Try to activate pnpm via corepack (Node 24 ships corepack).
// If that works, use pnpm with the lockfile for a fast, reproducible install.
// Otherwise fall back to plain npm install.
let installed = false;
try {
execSync("corepack enable pnpm", { stdio: "pipe" });
execSync("pnpm install --frozen-lockfile", {
cwd: dir,
stdio: "inherit",
timeout: 120_000,
});
installed = true;
} catch {
// corepack or pnpm not available
}
if (!installed) {
execSync("npm install --no-fund --no-audit", {
cwd: dir,
stdio: "inherit",
timeout: 120_000,
});
}
}
const [{ main }, core] = await Promise.all([
import(`${dir}/main.ts`),
import("@actions/core"),
]);
main()
.then((result: { success: boolean; error?: string }) => {
if (!result.success) {
core.setFailed(result.error ?? "shockbot run failed");
}
})
.catch((err: unknown) => {
core.setFailed(err instanceof Error ? err.message : String(err));
});