mirror of
https://github.com/oven-sh/setup-bun.git
synced 2025-07-19 13:08:27 +02:00
fix: retry installing three times, add windows for testing (#72)
* ci: test windows * ci: specify shell * ci: we don't have >1.1.0 * fix: retry installing version three times * [autofix.ci] apply automated fixes * build: bump version to 1.2.1 * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
9e6479509b
commit
932c3b236c
7 changed files with 93 additions and 59 deletions
|
@ -13,6 +13,7 @@ import { downloadTool, extractZip } from "@actions/tool-cache";
|
|||
import { getExecOutput } from "@actions/exec";
|
||||
import { writeBunfig } from "./bunfig";
|
||||
import { saveState } from "@actions/core";
|
||||
import { retry } from "./utils";
|
||||
|
||||
export type Input = {
|
||||
customUrl?: string;
|
||||
|
@ -86,17 +87,8 @@ export default async (options: Input): Promise<Output> => {
|
|||
|
||||
if (!cacheHit) {
|
||||
info(`Downloading a new version of Bun: ${url}`);
|
||||
const zipPath = await downloadTool(url);
|
||||
const extractedZipPath = await extractZip(zipPath);
|
||||
const extractedBunPath = await extractBun(extractedZipPath);
|
||||
try {
|
||||
renameSync(extractedBunPath, bunPath);
|
||||
} catch {
|
||||
// If mv does not work, try to copy the file instead.
|
||||
// For example: EXDEV: cross-device link not permitted
|
||||
copyFileSync(extractedBunPath, bunPath);
|
||||
}
|
||||
revision = await getRevision(bunPath);
|
||||
// TODO: remove this, temporary fix for https://github.com/oven-sh/setup-bun/issues/73
|
||||
revision = await retry(async () => await downloadBun(url, bunPath), 3);
|
||||
}
|
||||
|
||||
if (!revision) {
|
||||
|
@ -123,6 +115,24 @@ export default async (options: Input): Promise<Output> => {
|
|||
};
|
||||
};
|
||||
|
||||
async function downloadBun(
|
||||
url: string,
|
||||
bunPath: string
|
||||
): Promise<string | undefined> {
|
||||
const zipPath = await downloadTool(url);
|
||||
const extractedZipPath = await extractZip(zipPath);
|
||||
const extractedBunPath = await extractBun(extractedZipPath);
|
||||
try {
|
||||
renameSync(extractedBunPath, bunPath);
|
||||
} catch {
|
||||
// If mv does not work, try to copy the file instead.
|
||||
// For example: EXDEV: cross-device link not permitted
|
||||
copyFileSync(extractedBunPath, bunPath);
|
||||
}
|
||||
|
||||
return await getRevision(bunPath);
|
||||
}
|
||||
|
||||
function isCacheEnabled(options: Input): boolean {
|
||||
const { customUrl, version, noCache } = options;
|
||||
if (noCache) {
|
||||
|
|
8
src/utils.ts
Normal file
8
src/utils.ts
Normal file
|
@ -0,0 +1,8 @@
|
|||
export function retry<T>(fn: () => Promise<T>, retries: number): Promise<T> {
|
||||
return fn().catch((err) => {
|
||||
if (retries <= 0) {
|
||||
throw err;
|
||||
}
|
||||
return retry(fn, retries - 1);
|
||||
});
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue