Merge pull request #188 from simpleauthority/feat/add-bun-support

Add bun support
This commit is contained in:
Cina Saffary 2023-10-10 15:19:09 -05:00 committed by GitHub
commit 032a7248fa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 64 additions and 1 deletions

View file

@ -0,0 +1,5 @@
---
"wrangler-action": minor
---
Added support for Bun as a package manager

View file

@ -42,6 +42,6 @@ inputs:
description: "A string of environment variable names, separated by newlines. These will be bound to your Worker using the values of matching environment variables declared in `env` of this workflow."
required: false
packageManager:
description: "The package manager you'd like to use to install and run wrangler. If not specified, a value will be inferred based on the presence of a lockfile. Valid values: [npm, pnpm, yarn]"
description: "The package manager you'd like to use to install and run wrangler. If not specified, a value will be inferred based on the presence of a lockfile. Valid values: [npm, pnpm, yarn, bun]"
required: false
default: npm

View file

@ -26,6 +26,14 @@ describe("getPackageManager", () => {
"install": "pnpm add",
}
`);
expect(getPackageManager('bun', { workingDirectory: "test/bun" }))
.toMatchInlineSnapshot(`
{
"exec": "bunx",
"install": "bun i",
}
`);
});
test("should use npm if no value provided and package-lock.json exists", () => {
@ -58,6 +66,16 @@ describe("getPackageManager", () => {
`);
});
test("should use bun if no value provided and bun.lockb exists", () => {
expect(getPackageManager("", { workingDirectory: "test/bun" }))
.toMatchInlineSnapshot(`
{
"exec": "bunx",
"install": "bun i",
}
`);
});
test("should use npm if no value provided and no lockfile is present", () => {
expect(getPackageManager("", { workingDirectory: "test/empty" }))
.toMatchInlineSnapshot(`

View file

@ -19,6 +19,10 @@ const PACKAGE_MANAGERS = {
install: "pnpm add",
exec: "pnpm exec",
},
bun: {
install: "bun i",
exec: "bunx"
},
} as const satisfies Readonly<Record<string, PackageManager>>;
type PackageManagerValue = keyof typeof PACKAGE_MANAGERS;
@ -35,6 +39,9 @@ function detectPackageManager(
if (existsSync(path.join(workingDirectory, "pnpm-lock.yaml"))) {
return "pnpm";
}
if (existsSync(path.join(workingDirectory, "bun.lockb"))) {
return "bun";
}
return null;
}

0
test/bun/bun.lockb Executable file
View file

26
test/bun/index.ts Normal file
View file

@ -0,0 +1,26 @@
type Env = {
SECRET1?: string;
SECRET2?: string;
};
export default {
fetch(request: Request, env: Env) {
const url = new URL(request.url);
if (url.pathname === "/secret-health-check") {
const { SECRET1, SECRET2 } = env;
if (SECRET1 !== "SECRET_1_VALUE" || SECRET2 !== "SECRET_2_VALUE") {
throw new Error("SECRET1 or SECRET2 is not defined");
}
return new Response("OK");
}
// @ts-expect-error
return Response.json({
...request,
headers: Object.fromEntries(request.headers),
});
},
};

3
test/bun/package.json Normal file
View file

@ -0,0 +1,3 @@
{
"name": "wrangler-action-bun-test",
}

4
test/bun/wrangler.toml Normal file
View file

@ -0,0 +1,4 @@
name = "wrangler-action-test"
main = "./index.ts"
compatibility_date = "2023-07-07"
workers_dev = true