setup-bun/src/utils.ts

79 lines
1.9 KiB
TypeScript
Raw Normal View History

release: v2.0 :tada: (#80) * feat: add input bun-version-file (#76) * feat: add input for bun-version-file * docs: update example bun version file * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> * refactor: reduce read from file code * [autofix.ci] apply automated fixes * feat: read from all known files if not specified * [autofix.ci] apply automated fixes * fix: just continue if file doesnt exist * [autofix.ci] apply automated fixes * fix: return output if found version * [autofix.ci] apply automated fixes * fix: make whitespace in .tool-versions optional * [autofix.ci] apply automated fixes * log loglog * [autofix.ci] apply automated fixes * log log log * [autofix.ci] apply automated fixes * better warnings, fix ci failing * [autofix.ci] apply automated fixes * feat: log obtained version * [autofix.ci] apply automated fixes * build: bump version * [autofix.ci] apply automated fixes * fix: add .zip extension if it's not present Workaround for https://github.com/actions/toolkit/issues/1179 Fixes https://github.com/oven-sh/setup-bun/issues/79 * [autofix.ci] apply automated fixes * docs: add comment for easier understanding * ci: more readable version * ci: match name * docs: add package.json and .tool-versions to bun-version-file examples * ci: add cache test * ci: install another pkg for cache test * ci: install more pkgs for cache test * ci: block all trusted deps in cache test * ci: more deps for cache test * ci: cache test should cache * refactor: dont try all files if not defined * [autofix.ci] apply automated fixes * ci: remove cache test * feat: support .bunrc * [autofix.ci] apply automated fixes * refactor: .bun-version instead .bunrc * [autofix.ci] apply automated fixes * feat: add bun paths and url to output Fixes https://github.com/oven-sh/setup-bun/issues/81 * [autofix.ci] apply automated fixes * ci: test for .bun-version * feat: make .bun-version as default in bun-version-file * ci: remove cache before test * ci: remove cache before test * ci: remove cache before test * ci: remove cache before test --------- Co-authored-by: Ade Hery Shopyan <51158020+adeherysh@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2024-06-21 21:11:16 +02:00
import { debug, warning } from "@actions/core";
import { info } from "node:console";
import { existsSync, readFileSync, renameSync } from "node:fs";
import { join, basename } from "node:path";
export function retry<T>(
fn: () => Promise<T>,
retries: number,
timeout = 10000
): Promise<T> {
return fn().catch((err) => {
if (retries <= 0) {
throw err;
}
return new Promise((resolve) => setTimeout(resolve, timeout)).then(() =>
retry(fn, retries - 1, timeout)
);
});
}
release: v2.0 :tada: (#80) * feat: add input bun-version-file (#76) * feat: add input for bun-version-file * docs: update example bun version file * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> * refactor: reduce read from file code * [autofix.ci] apply automated fixes * feat: read from all known files if not specified * [autofix.ci] apply automated fixes * fix: just continue if file doesnt exist * [autofix.ci] apply automated fixes * fix: return output if found version * [autofix.ci] apply automated fixes * fix: make whitespace in .tool-versions optional * [autofix.ci] apply automated fixes * log loglog * [autofix.ci] apply automated fixes * log log log * [autofix.ci] apply automated fixes * better warnings, fix ci failing * [autofix.ci] apply automated fixes * feat: log obtained version * [autofix.ci] apply automated fixes * build: bump version * [autofix.ci] apply automated fixes * fix: add .zip extension if it's not present Workaround for https://github.com/actions/toolkit/issues/1179 Fixes https://github.com/oven-sh/setup-bun/issues/79 * [autofix.ci] apply automated fixes * docs: add comment for easier understanding * ci: more readable version * ci: match name * docs: add package.json and .tool-versions to bun-version-file examples * ci: add cache test * ci: install another pkg for cache test * ci: install more pkgs for cache test * ci: block all trusted deps in cache test * ci: more deps for cache test * ci: cache test should cache * refactor: dont try all files if not defined * [autofix.ci] apply automated fixes * ci: remove cache test * feat: support .bunrc * [autofix.ci] apply automated fixes * refactor: .bun-version instead .bunrc * [autofix.ci] apply automated fixes * feat: add bun paths and url to output Fixes https://github.com/oven-sh/setup-bun/issues/81 * [autofix.ci] apply automated fixes * ci: test for .bun-version * feat: make .bun-version as default in bun-version-file * ci: remove cache before test * ci: remove cache before test * ci: remove cache before test * ci: remove cache before test --------- Co-authored-by: Ade Hery Shopyan <51158020+adeherysh@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2024-06-21 21:11:16 +02:00
export function addExtension(path: string, ext: string): string {
if (!path.endsWith(ext)) {
renameSync(path, path + ext);
return path + ext;
}
return path;
}
const FILE_VERSION_READERS = {
"package.json": (content: string) =>
JSON.parse(content).packageManager?.split("bun@")?.[1],
".tool-versions": (content: string) =>
content.match(/^bun\s*(?<version>.*?)$/m)?.groups?.version,
release: v2.0 :tada: (#80) * feat: add input bun-version-file (#76) * feat: add input for bun-version-file * docs: update example bun version file * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> * refactor: reduce read from file code * [autofix.ci] apply automated fixes * feat: read from all known files if not specified * [autofix.ci] apply automated fixes * fix: just continue if file doesnt exist * [autofix.ci] apply automated fixes * fix: return output if found version * [autofix.ci] apply automated fixes * fix: make whitespace in .tool-versions optional * [autofix.ci] apply automated fixes * log loglog * [autofix.ci] apply automated fixes * log log log * [autofix.ci] apply automated fixes * better warnings, fix ci failing * [autofix.ci] apply automated fixes * feat: log obtained version * [autofix.ci] apply automated fixes * build: bump version * [autofix.ci] apply automated fixes * fix: add .zip extension if it's not present Workaround for https://github.com/actions/toolkit/issues/1179 Fixes https://github.com/oven-sh/setup-bun/issues/79 * [autofix.ci] apply automated fixes * docs: add comment for easier understanding * ci: more readable version * ci: match name * docs: add package.json and .tool-versions to bun-version-file examples * ci: add cache test * ci: install another pkg for cache test * ci: install more pkgs for cache test * ci: block all trusted deps in cache test * ci: more deps for cache test * ci: cache test should cache * refactor: dont try all files if not defined * [autofix.ci] apply automated fixes * ci: remove cache test * feat: support .bunrc * [autofix.ci] apply automated fixes * refactor: .bun-version instead .bunrc * [autofix.ci] apply automated fixes * feat: add bun paths and url to output Fixes https://github.com/oven-sh/setup-bun/issues/81 * [autofix.ci] apply automated fixes * ci: test for .bun-version * feat: make .bun-version as default in bun-version-file * ci: remove cache before test * ci: remove cache before test * ci: remove cache before test * ci: remove cache before test --------- Co-authored-by: Ade Hery Shopyan <51158020+adeherysh@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2024-06-21 21:11:16 +02:00
".bumrc": (content: string) => content, // https://github.com/owenizedd/bum
".bun-version": (content: string) => content,
};
export function readVersionFromFile(file: string): string | undefined {
const cwd = process.env.GITHUB_WORKSPACE;
if (!cwd) {
return;
}
if (!file) {
return;
}
debug(`Reading version from ${file}`);
const path = join(cwd, file);
const base = basename(file);
if (!existsSync(path)) {
warning(`File ${path} not found`);
return;
}
const reader = FILE_VERSION_READERS[base] ?? (() => undefined);
let output: string | undefined;
try {
output = reader(readFileSync(path, "utf8"))?.trim();
if (!output) {
warning(`Failed to read version from ${file}`);
return;
}
} catch (error) {
const { message } = error as Error;
warning(`Failed to read ${file}: ${message}`);
} finally {
if (output) {
info(`Obtained version ${output} from ${file}`);
return output;
}
}
}