#!/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)); });