Invoke wrangler to check if it's installed, but don't auto-install through npx/bunx

This commit is contained in:
Maximo Guk 2024-06-15 23:22:47 -05:00
parent aa5d18dd1e
commit 66efca2cbb
No known key found for this signature in database
GPG key ID: 6ACC2847315F8810
5 changed files with 52 additions and 32 deletions

View file

@ -0,0 +1,5 @@
---
"wrangler-action": minor
---
This unreverts #235 ensuring wrangler-action will re-use existing wrangler installations, thanks @AdiRishi! and ensures we don't automatically install wrangler when checking if it present

4
package-lock.json generated
View file

@ -1,12 +1,12 @@
{ {
"name": "wrangler-action", "name": "wrangler-action",
"version": "3.5.0", "version": "3.6.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "wrangler-action", "name": "wrangler-action",
"version": "3.5.0", "version": "3.6.1",
"license": "MIT OR Apache-2.0", "license": "MIT OR Apache-2.0",
"dependencies": { "dependencies": {
"@actions/core": "^1.10.1", "@actions/core": "^1.10.1",

View file

@ -90,7 +90,8 @@ async function installWrangler() {
let installedVersionSatisfiesRequirement = false; let installedVersionSatisfiesRequirement = false;
try { try {
const { stdout } = await getExecOutput( const { stdout } = await getExecOutput(
packageManager.exec, // We want to simply invoke wrangler to check if it's installed, but don't want to auto-install it at this stage
packageManager.execNoInstall,
["wrangler", "--version"], ["wrangler", "--version"],
{ {
cwd: config["workingDirectory"], cwd: config["workingDirectory"],

View file

@ -7,22 +7,25 @@ describe("getPackageManager", () => {
.toMatchInlineSnapshot(` .toMatchInlineSnapshot(`
{ {
"exec": "npx", "exec": "npx",
"execNoInstall": "npx --no-install",
"install": "npm i", "install": "npm i",
} }
`); `);
expect(getPackageManager("yarn", { workingDirectory: "test/npm" })) expect(getPackageManager("yarn", { workingDirectory: "test/npm" }))
.toMatchInlineSnapshot(` .toMatchInlineSnapshot(`
{ {
"exec": "yarn", "exec": "yarn",
"install": "yarn add", "execNoInstall": "yarn",
} "install": "yarn add",
`); }
`);
expect(getPackageManager("pnpm", { workingDirectory: "test/npm" })) expect(getPackageManager("pnpm", { workingDirectory: "test/npm" }))
.toMatchInlineSnapshot(` .toMatchInlineSnapshot(`
{ {
"exec": "pnpm exec", "exec": "pnpm exec",
"execNoInstall": "pnpm exec",
"install": "pnpm add", "install": "pnpm add",
} }
`); `);
@ -31,6 +34,7 @@ describe("getPackageManager", () => {
.toMatchInlineSnapshot(` .toMatchInlineSnapshot(`
{ {
"exec": "bunx", "exec": "bunx",
"execNoInstall": "bun run",
"install": "bun i", "install": "bun i",
} }
`); `);
@ -39,51 +43,56 @@ describe("getPackageManager", () => {
test("should use npm if no value provided and package-lock.json exists", () => { test("should use npm if no value provided and package-lock.json exists", () => {
expect(getPackageManager("", { workingDirectory: "test/npm" })) expect(getPackageManager("", { workingDirectory: "test/npm" }))
.toMatchInlineSnapshot(` .toMatchInlineSnapshot(`
{ {
"exec": "npx", "exec": "npx",
"install": "npm i", "execNoInstall": "npx --no-install",
} "install": "npm i",
`); }
`);
}); });
test("should use yarn if no value provided and yarn.lock exists", () => { test("should use yarn if no value provided and yarn.lock exists", () => {
expect(getPackageManager("", { workingDirectory: "test/yarn" })) expect(getPackageManager("", { workingDirectory: "test/yarn" }))
.toMatchInlineSnapshot(` .toMatchInlineSnapshot(`
{ {
"exec": "yarn", "exec": "yarn",
"install": "yarn add", "execNoInstall": "yarn",
} "install": "yarn add",
`); }
`);
}); });
test("should use pnpm if no value provided and pnpm-lock.yaml exists", () => { test("should use pnpm if no value provided and pnpm-lock.yaml exists", () => {
expect(getPackageManager("", { workingDirectory: "test/pnpm" })) expect(getPackageManager("", { workingDirectory: "test/pnpm" }))
.toMatchInlineSnapshot(` .toMatchInlineSnapshot(`
{ {
"exec": "pnpm exec", "exec": "pnpm exec",
"install": "pnpm add", "execNoInstall": "pnpm exec",
} "install": "pnpm add",
`); }
`);
}); });
test("should use bun if no value provided and bun.lockb exists", () => { test("should use bun if no value provided and bun.lockb exists", () => {
expect(getPackageManager("", { workingDirectory: "test/bun" })) expect(getPackageManager("", { workingDirectory: "test/bun" }))
.toMatchInlineSnapshot(` .toMatchInlineSnapshot(`
{ {
"exec": "bunx", "exec": "bunx",
"install": "bun i", "execNoInstall": "bun run",
} "install": "bun i",
}
`); `);
}); });
test("should use npm if no value provided and no lockfile is present", () => { test("should use npm if no value provided and no lockfile is present", () => {
expect(getPackageManager("", { workingDirectory: "test/empty" })) expect(getPackageManager("", { workingDirectory: "test/empty" }))
.toMatchInlineSnapshot(` .toMatchInlineSnapshot(`
{ {
"exec": "npx", "exec": "npx",
"install": "npm i", "execNoInstall": "npx --no-install",
} "install": "npm i",
`); }
`);
}); });
test("should throw if an invalid value is provided", () => { test("should throw if an invalid value is provided", () => {

View file

@ -4,24 +4,29 @@ import * as path from "node:path";
interface PackageManager { interface PackageManager {
install: string; install: string;
exec: string; exec: string;
execNoInstall: string;
} }
const PACKAGE_MANAGERS = { const PACKAGE_MANAGERS = {
npm: { npm: {
install: "npm i", install: "npm i",
exec: "npx", exec: "npx",
execNoInstall: "npx --no-install",
}, },
yarn: { yarn: {
install: "yarn add", install: "yarn add",
exec: "yarn", exec: "yarn",
execNoInstall: "yarn",
}, },
pnpm: { pnpm: {
install: "pnpm add", install: "pnpm add",
exec: "pnpm exec", exec: "pnpm exec",
execNoInstall: "pnpm exec",
}, },
bun: { bun: {
install: "bun i", install: "bun i",
exec: "bunx", exec: "bunx",
execNoInstall: "bun run",
}, },
} as const satisfies Readonly<Record<string, PackageManager>>; } as const satisfies Readonly<Record<string, PackageManager>>;