diff --git a/dist/action.js b/dist/action.js index e812bea..9d34bac 100644 --- a/dist/action.js +++ b/dist/action.js @@ -2,16 +2,16 @@ import { tmpdir } from "node:os"; import * as action from "@actions/core"; import setup from "./setup.js"; if (!process.env.RUNNER_TEMP) { - process.env.RUNNER_TEMP = tmpdir(); + process.env.RUNNER_TEMP = tmpdir(); } setup({ - version: action.getInput("bun-version") || undefined, - customUrl: action.getInput("bun-download-url") || undefined, + version: action.getInput("bun-version") || undefined, + customUrl: action.getInput("bun-download-url") || undefined, }) - .then(({ version, cacheHit }) => { + .then(({ version, cacheHit }) => { action.setOutput("bun-version", version); action.setOutput("cache-hit", cacheHit ? "1" : "0"); - }) - .catch((error) => { +}) + .catch((error) => { action.setFailed(error); - }); +}); diff --git a/dist/setup.js b/dist/setup.js index afc875d..108970c 100644 --- a/dist/setup.js +++ b/dist/setup.js @@ -8,88 +8,85 @@ import { restoreCache, saveCache } from "@actions/cache"; import { mv } from "@actions/io"; import { getExecOutput } from "@actions/exec"; export default async (options) => { - const { url, cacheKey } = getDownloadUrl(options); - const cacheEnabled = cacheKey && cache.isFeatureAvailable(); - const path = join(homedir(), ".bun", "bin", "bun"); - let version; - let cacheHit = false; - if (cacheEnabled) { - const cacheRestored = await restoreCache([path], cacheKey); - if (cacheRestored) { - version = await verifyBun(path); - if (version) { - cacheHit = true; - action.info("Using a cached version of Bun."); - } else { - action.warning( - "Found a cached version of Bun, but it appears to be corrupted? Attempting to download a new version." - ); - } + const { url, cacheKey } = getDownloadUrl(options); + const cacheEnabled = cacheKey && cache.isFeatureAvailable(); + const dir = join(homedir(), ".bun", "bin"); + action.addPath(dir); + const path = join(dir, "bun"); + let version; + let cacheHit = false; + if (cacheEnabled) { + const cacheRestored = await restoreCache([path], cacheKey); + if (cacheRestored) { + version = await verifyBun(path); + if (version) { + cacheHit = true; + action.info("Using a cached version of Bun."); + } + else { + action.warning("Found a cached version of Bun, but it appears to be corrupted? Attempting to download a new version."); + } + } } - } - if (!cacheHit) { - action.info(`Downloading a new version of Bun: ${url}`); - const zipPath = await downloadTool(url); - const extractedPath = await extractZip(zipPath); - const exePath = await extractBun(extractedPath); - await mv(exePath, path); - version = await verifyBun(path); - } - if (!version) { - throw new Error( - "Downloaded a new version of Bun, but failed to check its version? Try again in debug mode." - ); - } - if (cacheEnabled) { - try { - await saveCache([path], cacheKey); - } catch (error) { - action.warning("Failed to save Bun to cache."); + if (!cacheHit) { + action.info(`Downloading a new version of Bun: ${url}`); + const zipPath = await downloadTool(url); + const extractedPath = await extractZip(zipPath); + const exePath = await extractBun(extractedPath); + await mv(exePath, path); + version = await verifyBun(path); } - } - return { - version, - cacheHit, - }; + if (!version) { + throw new Error("Downloaded a new version of Bun, but failed to check its version? Try again in debug mode."); + } + if (cacheEnabled) { + try { + await saveCache([path], cacheKey); + } + catch (error) { + action.warning("Failed to save Bun to cache."); + } + } + return { + version, + cacheHit, + }; }; function getDownloadUrl(options) { - if (options?.customUrl) { + if (options?.customUrl) { + return { + url: options.customUrl, + cacheKey: null, + }; + } + const release = options?.version ?? "latest"; + const os = options?.os ?? process.platform; + const arch = options?.arch ?? process.arch; + const avx2 = options?.avx2 ?? true; + const profile = options?.profile ?? false; + const { href } = new URL(`${release}/${os}/${arch}?avx2=${avx2}&profile=${profile}`, "https://bun.sh/download/"); return { - url: options.customUrl, - cacheKey: null, + url: href, + cacheKey: /^canary|latest$/i.test(release) + ? null + : `bun-${release}-${os}-${arch}-${avx2}-${profile}`, }; - } - const release = options?.version ?? "latest"; - const os = options?.os ?? process.platform; - const arch = options?.arch ?? process.arch; - const avx2 = options?.avx2 ?? true; - const profile = options?.profile ?? false; - const { href } = new URL( - `${release}/${os}/${arch}?avx2=${avx2}&profile=${profile}`, - "https://bun.sh/download/" - ); - return { - url: href, - cacheKey: /^canary|latest$/i.test(release) - ? null - : `bun-${release}-${os}-${arch}-${avx2}-${profile}`, - }; } async function extractBun(path) { - for (const entry of await readdir(path, { withFileTypes: true })) { - const entryPath = join(path, entry.name); - if (entry.name === "bun" && entry.isFile()) { - return entryPath; + for (const entry of await readdir(path, { withFileTypes: true })) { + const entryPath = join(path, entry.name); + if (entry.name === "bun" && entry.isFile()) { + return entryPath; + } + if (entry.isDirectory()) { + return extractBun(entryPath); + } } - if (entry.isDirectory()) { - return extractBun(entryPath); - } - } - throw new Error("Could not find executable: bun"); + throw new Error("Could not find executable: bun"); } async function verifyBun(path) { - const { exitCode, stdout } = await getExecOutput(path, ["--version"], { - ignoreReturnCode: true, - }); - return exitCode === 0 ? stdout.trim() : undefined; + const { exitCode, stdout } = await getExecOutput(path, ["--version"], { + ignoreReturnCode: true, + }); + return exitCode === 0 ? stdout.trim() : undefined; } diff --git a/src/setup.ts b/src/setup.ts index 562ae18..7366f7c 100644 --- a/src/setup.ts +++ b/src/setup.ts @@ -17,7 +17,9 @@ export default async (options?: { }> => { const { url, cacheKey } = getDownloadUrl(options); const cacheEnabled = cacheKey && cache.isFeatureAvailable(); - const path = join(homedir(), ".bun", "bin", "bun"); + const dir = join(homedir(), ".bun", "bin"); + action.addPath(dir); + const path = join(dir, "bun"); let version: string | undefined; let cacheHit = false; if (cacheEnabled) {