mirror of
https://github.com/pnpm/action-setup.git
synced 2026-09-10 03:03:23 +08:00
refactor: use pnpm 12 native bootstrap
Install the plain pnpm v12 package as the single native bootstrap, remove the legacy @pnpm/exe lockfile and runtime path, and retain the standalone input as a no-op for workflow compatibility.
This commit is contained in:
@@ -178,9 +178,7 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
standalone:
|
standalone:
|
||||||
# npm 12 blocks dependency lifecycle scripts by default. @pnpm/exe needs
|
name: 'Native pnpm bootstrap (npm 12)'
|
||||||
# its install script to replace the placeholder with the native binary.
|
|
||||||
name: 'Standalone mode (pnpm 12 / npm 12)'
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
@@ -192,7 +190,9 @@ jobs:
|
|||||||
node-version: 26
|
node-version: 26
|
||||||
|
|
||||||
- name: Use npm 12
|
- name: Use npm 12
|
||||||
run: npm install --global npm@12.0.2
|
run: |
|
||||||
|
npm install --global npm@12.0.2
|
||||||
|
test "$(npm --version)" = "12.0.2"
|
||||||
|
|
||||||
- name: Run the action
|
- name: Run the action
|
||||||
uses: ./
|
uses: ./
|
||||||
|
|||||||
@@ -106,9 +106,7 @@ If `run_install` is a YAML string representation of either an object or an array
|
|||||||
|
|
||||||
### `standalone`
|
### `standalone`
|
||||||
|
|
||||||
**Optional** (_type:_ `boolean`, _default:_ `false`) When set to true, [@pnpm/exe](https://www.npmjs.com/package/@pnpm/exe), which is a Node.js bundled package, will be installed, enabling using `pnpm` without Node.js.
|
**Deprecated** compatibility input. The action now bootstraps with pnpm v12's plain `pnpm` package, which installs a standalone native executable. The input is retained so existing workflows do not need to change, but its value no longer affects installation.
|
||||||
|
|
||||||
This is useful when you want to use a incompatible pair of Node.js and pnpm.
|
|
||||||
|
|
||||||
## Outputs
|
## Outputs
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -28,7 +28,7 @@ inputs:
|
|||||||
required: false
|
required: false
|
||||||
default: 'package.json'
|
default: 'package.json'
|
||||||
standalone:
|
standalone:
|
||||||
description: When set to true, @pnpm/exe, which is a Node.js bundled package, will be installed, enabling using pnpm without Node.js.
|
description: Deprecated compatibility input. The pnpm v12 bootstrap is always a standalone native executable.
|
||||||
required: false
|
required: false
|
||||||
default: 'false'
|
default: 'false'
|
||||||
outputs:
|
outputs:
|
||||||
|
|||||||
Vendored
+134
-134
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
|
||||||
// Usage: node scripts/update-bootstrap.mjs [version]
|
// Usage: node scripts/update-bootstrap.mjs [version]
|
||||||
// If version is omitted, fetches the latest next-11 tag from npm.
|
// If version is omitted, fetches the latest pnpm 12 tag from npm.
|
||||||
// Regenerates the bootstrap lockfiles used by action-setup to install pnpm via npm.
|
// Regenerates the bootstrap lockfiles used by action-setup to install pnpm via npm.
|
||||||
|
|
||||||
import { execSync } from 'child_process'
|
import { execSync } from 'child_process'
|
||||||
@@ -16,14 +16,13 @@ const version = process.argv[2] || resolveLatestVersion()
|
|||||||
console.log(`Updating bootstrap lockfiles to pnpm@${version} ...`)
|
console.log(`Updating bootstrap lockfiles to pnpm@${version} ...`)
|
||||||
|
|
||||||
generateLock('pnpm-lock.json', { pnpm: version }, 'bootstrap-pnpm')
|
generateLock('pnpm-lock.json', { pnpm: version }, 'bootstrap-pnpm')
|
||||||
generateLock('exe-lock.json', { '@pnpm/exe': version }, 'bootstrap-exe')
|
|
||||||
|
|
||||||
console.log('Done!')
|
console.log('Done!')
|
||||||
|
|
||||||
function resolveLatestVersion() {
|
function resolveLatestVersion() {
|
||||||
const json = execSync('npm view @pnpm/exe dist-tags --json', { encoding: 'utf8' })
|
const json = execSync('npm view pnpm dist-tags --json', { encoding: 'utf8' })
|
||||||
const tags = JSON.parse(json)
|
const tags = JSON.parse(json)
|
||||||
const version = tags['next-11'] || tags['latest']
|
const version = tags['next-12'] || tags['latest-12'] || tags['latest']
|
||||||
if (!version) {
|
if (!version) {
|
||||||
console.error('Could not determine latest pnpm version from npm dist-tags')
|
console.error('Could not determine latest pnpm version from npm dist-tags')
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
|
|||||||
@@ -1,327 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "bootstrap-exe",
|
|
||||||
"lockfileVersion": 3,
|
|
||||||
"requires": true,
|
|
||||||
"packages": {
|
|
||||||
"": {
|
|
||||||
"dependencies": {
|
|
||||||
"@pnpm/exe": "11.19.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@pnpm/exe": {
|
|
||||||
"version": "11.19.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@pnpm/exe/-/exe-11.19.0.tgz",
|
|
||||||
"integrity": "sha512-P1mw8BZaNkEpttlyzKsxTj7PVs94bMB4cQ8pJhgbrCTSBP7xCzKS3VlOwIInS7aS5by6KAbfO5Vs9yK/ekugrg==",
|
|
||||||
"hasInstallScript": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@reflink/reflink": "0.1.19",
|
|
||||||
"detect-libc": "^2.1.2"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"pn": "pn",
|
|
||||||
"pnpm": "pnpm",
|
|
||||||
"pnpx": "pnpx",
|
|
||||||
"pnx": "pnx"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/pnpm"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"@pnpm/linux-arm64": "11.19.0",
|
|
||||||
"@pnpm/linux-x64": "11.19.0",
|
|
||||||
"@pnpm/linuxstatic-arm64": "11.19.0",
|
|
||||||
"@pnpm/linuxstatic-x64": "11.19.0",
|
|
||||||
"@pnpm/macos-arm64": "11.19.0",
|
|
||||||
"@pnpm/win-arm64": "11.19.0",
|
|
||||||
"@pnpm/win-x64": "11.19.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@pnpm/linux-arm64": {
|
|
||||||
"version": "11.19.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@pnpm/linux-arm64/-/linux-arm64-11.19.0.tgz",
|
|
||||||
"integrity": "sha512-c5AJqnsj0BMqMCOtctOzsCqyfY+afFe1kdM9F2FrNhYwtnQRMHoJy+51qfee4yuTPOVRyk3Yh1dwvyAadiznvA==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/pnpm"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@pnpm/linux-x64": {
|
|
||||||
"version": "11.19.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@pnpm/linux-x64/-/linux-x64-11.19.0.tgz",
|
|
||||||
"integrity": "sha512-KOKpA9o75SvmRQgWO+EqEpQzJg1b9uHk5y61PAx90sSpdYtKDPua2eBXBglzv8YK1xM3DsYXFEf7Scs+3HeDsA==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/pnpm"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@pnpm/linuxstatic-arm64": {
|
|
||||||
"version": "11.19.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@pnpm/linuxstatic-arm64/-/linuxstatic-arm64-11.19.0.tgz",
|
|
||||||
"integrity": "sha512-Ci9WxgCInZc3F43R6BfaHevi+dYqaI5CLi6421egFsK649eHvYPytvu+zABhTNlYGNJbD8j9w+AUYInz/TPsyQ==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/pnpm"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@pnpm/linuxstatic-x64": {
|
|
||||||
"version": "11.19.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@pnpm/linuxstatic-x64/-/linuxstatic-x64-11.19.0.tgz",
|
|
||||||
"integrity": "sha512-GNMk96vNJ4uEWigekarjHofXNDFsTYRL0Mw2YlDkv/W+u0cn/UAVPHfd5aAfsf6Arel2ZQfxPUTXlpunFujWnA==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/pnpm"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@pnpm/macos-arm64": {
|
|
||||||
"version": "11.19.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@pnpm/macos-arm64/-/macos-arm64-11.19.0.tgz",
|
|
||||||
"integrity": "sha512-I3Ee/GQlPxEOeBSzqxBNwcTHxVebjMiN2xLdTBS6OK2TAPzbWMIExjU5brxhr8rAk73p7mbv/a/2tFC/3gl6FA==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"darwin"
|
|
||||||
],
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/pnpm"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@pnpm/win-arm64": {
|
|
||||||
"version": "11.19.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@pnpm/win-arm64/-/win-arm64-11.19.0.tgz",
|
|
||||||
"integrity": "sha512-rOiWuJ9wjaFY9ZDVPGVjpvjIQHZNB72rioxvuyzDKJ7dqKQ97VF27a4rmOtjhMB5u83cdDGEJ+OY+H1+TP+frw==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
],
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/pnpm"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@pnpm/win-x64": {
|
|
||||||
"version": "11.19.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@pnpm/win-x64/-/win-x64-11.19.0.tgz",
|
|
||||||
"integrity": "sha512-l26XeTxoGxfU+mVcZ5jFdP9hNe5yrOlLPSkAlwwpXPI1iyyU4JUSxm6Jdyxu1UAU1FerD/BvLK2vrlR6d9ogag==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
],
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/pnpm"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@reflink/reflink": {
|
|
||||||
"version": "0.1.19",
|
|
||||||
"resolved": "https://registry.npmjs.org/@reflink/reflink/-/reflink-0.1.19.tgz",
|
|
||||||
"integrity": "sha512-DmCG8GzysnCZ15bres3N5AHCmwBwYgp0As6xjhQ47rAUTUXxJiK+lLUxaGsX3hd/30qUpVElh05PbGuxRPgJwA==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"@reflink/reflink-darwin-arm64": "0.1.19",
|
|
||||||
"@reflink/reflink-darwin-x64": "0.1.19",
|
|
||||||
"@reflink/reflink-linux-arm64-gnu": "0.1.19",
|
|
||||||
"@reflink/reflink-linux-arm64-musl": "0.1.19",
|
|
||||||
"@reflink/reflink-linux-x64-gnu": "0.1.19",
|
|
||||||
"@reflink/reflink-linux-x64-musl": "0.1.19",
|
|
||||||
"@reflink/reflink-win32-arm64-msvc": "0.1.19",
|
|
||||||
"@reflink/reflink-win32-x64-msvc": "0.1.19"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@reflink/reflink-darwin-arm64": {
|
|
||||||
"version": "0.1.19",
|
|
||||||
"resolved": "https://registry.npmjs.org/@reflink/reflink-darwin-arm64/-/reflink-darwin-arm64-0.1.19.tgz",
|
|
||||||
"integrity": "sha512-ruy44Lpepdk1FqDz38vExBY/PVUsjxZA+chd9wozjUH9JjuDT/HEaQYA6wYN9mf041l0yLVar6BCZuWABJvHSA==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"darwin"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@reflink/reflink-darwin-x64": {
|
|
||||||
"version": "0.1.19",
|
|
||||||
"resolved": "https://registry.npmjs.org/@reflink/reflink-darwin-x64/-/reflink-darwin-x64-0.1.19.tgz",
|
|
||||||
"integrity": "sha512-By85MSWrMZa+c26TcnAy8SDk0sTUkYlNnwknSchkhHpGXOtjNDUOxJE9oByBnGbeuIE1PiQsxDG3Ud+IVV9yuA==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"darwin"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@reflink/reflink-linux-arm64-gnu": {
|
|
||||||
"version": "0.1.19",
|
|
||||||
"resolved": "https://registry.npmjs.org/@reflink/reflink-linux-arm64-gnu/-/reflink-linux-arm64-gnu-0.1.19.tgz",
|
|
||||||
"integrity": "sha512-7P+er8+rP9iNeN+bfmccM4hTAaLP6PQJPKWSA4iSk2bNvo6KU6RyPgYeHxXmzNKzPVRcypZQTpFgstHam6maVg==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@reflink/reflink-linux-arm64-musl": {
|
|
||||||
"version": "0.1.19",
|
|
||||||
"resolved": "https://registry.npmjs.org/@reflink/reflink-linux-arm64-musl/-/reflink-linux-arm64-musl-0.1.19.tgz",
|
|
||||||
"integrity": "sha512-37iO/Dp6m5DDaC2sf3zPtx/hl9FV3Xze4xoYidrxxS9bgP3S8ALroxRK6xBG/1TtfXKTvolvp+IjrUU6ujIGmA==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@reflink/reflink-linux-x64-gnu": {
|
|
||||||
"version": "0.1.19",
|
|
||||||
"resolved": "https://registry.npmjs.org/@reflink/reflink-linux-x64-gnu/-/reflink-linux-x64-gnu-0.1.19.tgz",
|
|
||||||
"integrity": "sha512-jbI8jvuYCaA3MVUdu8vLoLAFqC+iNMpiSuLbxlAgg7x3K5bsS8nOpTRnkLF7vISJ+rVR8W+7ThXlXlUQ93ulkw==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"libc": [
|
|
||||||
"glibc"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@reflink/reflink-linux-x64-musl": {
|
|
||||||
"version": "0.1.19",
|
|
||||||
"resolved": "https://registry.npmjs.org/@reflink/reflink-linux-x64-musl/-/reflink-linux-x64-musl-0.1.19.tgz",
|
|
||||||
"integrity": "sha512-e9FBWDe+lv7QKAwtKOt6A2W/fyy/aEEfr0g6j/hWzvQcrzHCsz07BNQYlNOjTfeytrtLU7k449H1PI95jA4OjQ==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"libc": [
|
|
||||||
"musl"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@reflink/reflink-win32-arm64-msvc": {
|
|
||||||
"version": "0.1.19",
|
|
||||||
"resolved": "https://registry.npmjs.org/@reflink/reflink-win32-arm64-msvc/-/reflink-win32-arm64-msvc-0.1.19.tgz",
|
|
||||||
"integrity": "sha512-09PxnVIQcd+UOn4WAW73WU6PXL7DwGS6wPlkMhMg2zlHHG65F3vHepOw06HFCq+N42qkaNAc8AKIabWvtk6cIQ==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@reflink/reflink-win32-x64-msvc": {
|
|
||||||
"version": "0.1.19",
|
|
||||||
"resolved": "https://registry.npmjs.org/@reflink/reflink-win32-x64-msvc/-/reflink-win32-x64-msvc-0.1.19.tgz",
|
|
||||||
"integrity": "sha512-E//yT4ni2SyhwP8JRjVGWr3cbnhWDiPLgnQ66qqaanjjnMiu3O/2tjCPQXlcGc/DEYofpDc9fvhv6tALQsMV9w==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/detect-libc": {
|
|
||||||
"version": "2.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
|
|
||||||
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,25 +5,149 @@
|
|||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"pnpm": "11.19.0"
|
"pnpm": "12.3.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@pnpm/exe.darwin-arm64": {
|
||||||
|
"version": "12.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@pnpm/exe.darwin-arm64/-/exe.darwin-arm64-12.3.4.tgz",
|
||||||
|
"integrity": "sha512-PAyUol8T1+/+ViOiXAt51ECA+QnfXCqz6foL4bW+LsoX0NcVd5XVEM2mRQu+LV4oc7uRz9zf9U0P+XFfuQeDAw==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@pnpm/exe.darwin-x64": {
|
||||||
|
"version": "12.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@pnpm/exe.darwin-x64/-/exe.darwin-x64-12.3.4.tgz",
|
||||||
|
"integrity": "sha512-fxP9JCk0Cdye+ePuj+GJJLMUMTqHGWRdb1dtv4How876uQ2ehxvenpgiYAir/ceO9PsYUZkFTtyZdx+rRu5QOA==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@pnpm/exe.linux-arm64": {
|
||||||
|
"version": "12.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@pnpm/exe.linux-arm64/-/exe.linux-arm64-12.3.4.tgz",
|
||||||
|
"integrity": "sha512-t71AVA7LRqiKTyZ5xMYaZc2n5DfdpMbfokZuiIOXHBOM03ECnF0t4iYwaBDqJgVjlKYUOwaF/bRQajGNA4cJ4w==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@pnpm/exe.linux-arm64-musl": {
|
||||||
|
"version": "12.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@pnpm/exe.linux-arm64-musl/-/exe.linux-arm64-musl-12.3.4.tgz",
|
||||||
|
"integrity": "sha512-FBOt0/7ye6O6q4AllVV5QMviB6qE6fqkeczV/+MDWQsmo+QJrlfsh6X7CpH/tClVpBZEyIbjpUoT8bNhCYBxEg==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@pnpm/exe.linux-x64": {
|
||||||
|
"version": "12.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@pnpm/exe.linux-x64/-/exe.linux-x64-12.3.4.tgz",
|
||||||
|
"integrity": "sha512-2ZqOlSPkfwX1h5cR+FPiWf8+F+2hZT/3TvhUK5sigHqwaQCIiq8R7CGxhndKs63JtcLi2a1Qpo+wX/EoyfjyJQ==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@pnpm/exe.linux-x64-musl": {
|
||||||
|
"version": "12.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@pnpm/exe.linux-x64-musl/-/exe.linux-x64-musl-12.3.4.tgz",
|
||||||
|
"integrity": "sha512-RPmk7Jb/aYaFvL2iyDN/AtMY+hUEsue732WmXpcuQ9tBpMnGyA5py7Z3+e+qmQaJ0zY/4ni9jJiyPBQHujmv6w==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@pnpm/exe.win32-arm64": {
|
||||||
|
"version": "12.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@pnpm/exe.win32-arm64/-/exe.win32-arm64-12.3.4.tgz",
|
||||||
|
"integrity": "sha512-ANyrHqyqco6SXBysUTRF74itDyyraea7IbFsKFdNXTjcFnfycTDx37EwuhdpPYFNSIh2JhUG4fByclsRfiHX7w==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@pnpm/exe.win32-x64": {
|
||||||
|
"version": "12.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@pnpm/exe.win32-x64/-/exe.win32-x64-12.3.4.tgz",
|
||||||
|
"integrity": "sha512-WH/KqBPY/hq2Tb7SgQltEZytimcjgKRaCRL/aM9CI0c67iKc5TVmHUhIiL3Ux9FB4bWn36i6XewUcScQI+zG8w==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
]
|
||||||
|
},
|
||||||
"node_modules/pnpm": {
|
"node_modules/pnpm": {
|
||||||
"version": "11.19.0",
|
"version": "12.3.4",
|
||||||
"resolved": "https://registry.npmjs.org/pnpm/-/pnpm-11.19.0.tgz",
|
"resolved": "https://registry.npmjs.org/pnpm/-/pnpm-12.3.4.tgz",
|
||||||
"integrity": "sha512-eIHz7VkNRyxKlV4riLISF5ERYGbcyIy8o4SeybYPG7qm0syyIfqR2k4cZb7yvL43k2Wup6xTnHv4be3DobItzg==",
|
"integrity": "sha512-lhqkH7B32joEpEHZ+OFevAyW2o73ELLrZ7+e58sGEOq9SPH9hfUc/+c4RnhfoPh8VqOocqHYk/hEZ0G1zORUVw==",
|
||||||
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
"pn": "bin/pnpm.mjs",
|
"pn": "pn",
|
||||||
"pnpm": "bin/pnpm.mjs",
|
"pnpm": "pnpm",
|
||||||
"pnpx": "bin/pnpx.mjs",
|
"pnpx": "pnpx",
|
||||||
"pnx": "bin/pnpx.mjs"
|
"pnx": "pnx"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=22.13"
|
"node": ">=18.*"
|
||||||
},
|
},
|
||||||
"funding": {
|
"optionalDependencies": {
|
||||||
"url": "https://opencollective.com/pnpm"
|
"@pnpm/exe.darwin-arm64": "12.3.4",
|
||||||
|
"@pnpm/exe.darwin-x64": "12.3.4",
|
||||||
|
"@pnpm/exe.linux-arm64": "12.3.4",
|
||||||
|
"@pnpm/exe.linux-arm64-musl": "12.3.4",
|
||||||
|
"@pnpm/exe.linux-x64": "12.3.4",
|
||||||
|
"@pnpm/exe.linux-x64-musl": "12.3.4",
|
||||||
|
"@pnpm/exe.win32-arm64": "12.3.4",
|
||||||
|
"@pnpm/exe.win32-x64": "12.3.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-50
@@ -7,17 +7,12 @@ import util from 'util'
|
|||||||
import { Inputs } from '../inputs'
|
import { Inputs } from '../inputs'
|
||||||
import { parse as parseYaml } from 'yaml'
|
import { parse as parseYaml } from 'yaml'
|
||||||
import pnpmLock from './bootstrap/pnpm-lock.json'
|
import pnpmLock from './bootstrap/pnpm-lock.json'
|
||||||
import exeLock from './bootstrap/exe-lock.json'
|
|
||||||
|
|
||||||
const BOOTSTRAP_PNPM_PACKAGE_JSON = JSON.stringify({ private: true, dependencies: { pnpm: pnpmLock.packages['node_modules/pnpm'].version } })
|
const bootstrapPnpmVersion = pnpmLock.packages['node_modules/pnpm'].version
|
||||||
const bootstrapExeVersion = exeLock.packages['node_modules/@pnpm/exe'].version
|
const BOOTSTRAP_PNPM_PACKAGE_JSON = JSON.stringify({
|
||||||
const BOOTSTRAP_EXE_PACKAGE_JSON = JSON.stringify({
|
|
||||||
private: true,
|
private: true,
|
||||||
dependencies: { '@pnpm/exe': bootstrapExeVersion },
|
dependencies: { pnpm: bootstrapPnpmVersion },
|
||||||
// npm 12 blocks dependency lifecycle scripts unless they are explicitly
|
allowScripts: { [`pnpm@${bootstrapPnpmVersion}`]: true },
|
||||||
// approved. @pnpm/exe's verified, lockfile-pinned install script replaces
|
|
||||||
// the placeholder executable with the native binary for this platform.
|
|
||||||
allowScripts: { [`@pnpm/exe@${bootstrapExeVersion}`]: true },
|
|
||||||
})
|
})
|
||||||
|
|
||||||
export interface SelfInstallerResult {
|
export interface SelfInstallerResult {
|
||||||
@@ -27,20 +22,14 @@ export interface SelfInstallerResult {
|
|||||||
|
|
||||||
export async function runSelfInstaller(inputs: Inputs): Promise<SelfInstallerResult> {
|
export async function runSelfInstaller(inputs: Inputs): Promise<SelfInstallerResult> {
|
||||||
const { version, dest, packageJsonFile } = inputs
|
const { version, dest, packageJsonFile } = inputs
|
||||||
|
const targetVersion = readTargetVersion({ version, packageJsonFile })
|
||||||
// pnpm v11 requires Node >= 22.13; use standalone (exe) bootstrap which
|
|
||||||
// bundles its own Node.js when the system Node is too old
|
|
||||||
const systemNode = await getSystemNodeVersion()
|
|
||||||
const standalone = inputs.standalone || systemNode.major < 22 || (systemNode.major === 22 && systemNode.minor < 13)
|
|
||||||
|
|
||||||
// Install bootstrap pnpm via npm (integrity verified by committed lockfile)
|
// Install bootstrap pnpm via npm (integrity verified by committed lockfile)
|
||||||
await rm(dest, { recursive: true, force: true })
|
await rm(dest, { recursive: true, force: true })
|
||||||
await mkdir(dest, { recursive: true })
|
await mkdir(dest, { recursive: true })
|
||||||
|
|
||||||
const lockfile = standalone ? exeLock : pnpmLock
|
await writeFile(path.join(dest, 'package.json'), BOOTSTRAP_PNPM_PACKAGE_JSON)
|
||||||
const packageJson = standalone ? BOOTSTRAP_EXE_PACKAGE_JSON : BOOTSTRAP_PNPM_PACKAGE_JSON
|
await writeFile(path.join(dest, 'package-lock.json'), JSON.stringify(pnpmLock))
|
||||||
await writeFile(path.join(dest, 'package.json'), packageJson)
|
|
||||||
await writeFile(path.join(dest, 'package-lock.json'), JSON.stringify(lockfile))
|
|
||||||
|
|
||||||
// Append the action's node directory to PATH so npm's
|
// Append the action's node directory to PATH so npm's
|
||||||
// `#!/usr/bin/env node` shebang resolves on runners (e.g. GHE
|
// `#!/usr/bin/env node` shebang resolves on runners (e.g. GHE
|
||||||
@@ -61,12 +50,7 @@ export async function runSelfInstaller(inputs: Inputs): Promise<SelfInstallerRes
|
|||||||
return { exitCode: npmExitCode, binDest: path.join(dest, 'node_modules', '.bin') }
|
return { exitCode: npmExitCode, binDest: path.join(dest, 'node_modules', '.bin') }
|
||||||
}
|
}
|
||||||
|
|
||||||
// On Windows with standalone mode, npm's .bin shims can't properly
|
const pnpmHome = path.join(dest, 'node_modules', '.bin')
|
||||||
// execute the extensionless @pnpm/exe native binaries. Add the
|
|
||||||
// @pnpm/exe directory directly to PATH so pnpm.exe is found natively.
|
|
||||||
const pnpmHome = standalone && process.platform === 'win32'
|
|
||||||
? path.join(dest, 'node_modules', '@pnpm', 'exe')
|
|
||||||
: path.join(dest, 'node_modules', '.bin')
|
|
||||||
// PNPM_HOME/bin is where `pnpm self-update` places the target version
|
// PNPM_HOME/bin is where `pnpm self-update` places the target version
|
||||||
// binary. It must have higher PATH precedence than pnpmHome (which
|
// binary. It must have higher PATH precedence than pnpmHome (which
|
||||||
// contains the bootstrap binary) so the self-updated version is found
|
// contains the bootstrap binary) so the self-updated version is found
|
||||||
@@ -81,23 +65,17 @@ export async function runSelfInstaller(inputs: Inputs): Promise<SelfInstallerRes
|
|||||||
const pnpmBinLink = path.join(dest, 'node_modules', '.bin', 'pnpm')
|
const pnpmBinLink = path.join(dest, 'node_modules', '.bin', 'pnpm')
|
||||||
if (!existsSync(pnpmBinLink)) {
|
if (!existsSync(pnpmBinLink)) {
|
||||||
await mkdir(path.join(dest, 'node_modules', '.bin'), { recursive: true })
|
await mkdir(path.join(dest, 'node_modules', '.bin'), { recursive: true })
|
||||||
const target = standalone
|
await symlink(path.join('..', 'pnpm', 'pnpm'), pnpmBinLink)
|
||||||
? path.join('..', '@pnpm', 'exe', 'pnpm')
|
|
||||||
: path.join('..', 'pnpm', 'bin', 'pnpm.mjs')
|
|
||||||
await symlink(target, pnpmBinLink)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const bootstrapPnpm = standalone
|
const bootstrapPnpm = path.join(dest, 'node_modules', 'pnpm', process.platform === 'win32' ? 'pnpm.exe' : 'pnpm')
|
||||||
? path.join(dest, 'node_modules', '@pnpm', 'exe', process.platform === 'win32' ? 'pnpm.exe' : 'pnpm')
|
|
||||||
: path.join(dest, 'node_modules', 'pnpm', 'bin', 'pnpm.mjs')
|
|
||||||
|
|
||||||
// Self-update the bootstrap to the requested pnpm version. readTargetVersion
|
if (targetVersion === bootstrapPnpmVersion) {
|
||||||
// either returns a value or throws, so this always runs.
|
return { exitCode: 0, binDest: pnpmHome }
|
||||||
const targetVersion = readTargetVersion({ version, packageJsonFile })
|
}
|
||||||
const cmd = standalone ? bootstrapPnpm : process.execPath
|
|
||||||
const args = standalone ? ['self-update', targetVersion] : [bootstrapPnpm, 'self-update', targetVersion]
|
const exitCode = await runCommand(bootstrapPnpm, ['self-update', targetVersion], { cwd: dest })
|
||||||
const exitCode = await runCommand(cmd, args, { cwd: dest })
|
|
||||||
if (exitCode !== 0) {
|
if (exitCode !== 0) {
|
||||||
return { exitCode, binDest: pnpmHome }
|
return { exitCode, binDest: pnpmHome }
|
||||||
}
|
}
|
||||||
@@ -187,19 +165,6 @@ Please specify it by one of the following ways:
|
|||||||
- in the package.json with the key "devEngines.packageManager"`)
|
- in the package.json with the key "devEngines.packageManager"`)
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSystemNodeVersion(): Promise<{ major: number; minor: number }> {
|
|
||||||
return new Promise((resolve) => {
|
|
||||||
const cp = spawn('node', ['--version'], { stdio: ['pipe', 'pipe', 'pipe'], shell: process.platform === 'win32' })
|
|
||||||
let output = ''
|
|
||||||
cp.stdout.on('data', (data: Buffer) => { output += data.toString() })
|
|
||||||
cp.on('close', () => {
|
|
||||||
const match = output.match(/^v(\d+)\.(\d+)/)
|
|
||||||
resolve(match ? { major: parseInt(match[1], 10), minor: parseInt(match[2], 10) } : { major: 0, minor: 0 })
|
|
||||||
})
|
|
||||||
cp.on('error', () => resolve({ major: 0, minor: 0 }))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function runCommand(cmd: string, args: string[], opts: { cwd: string; env?: Record<string, string | undefined> }): Promise<number> {
|
function runCommand(cmd: string, args: string[], opts: { cwd: string; env?: Record<string, string | undefined> }): Promise<number> {
|
||||||
return new Promise<number>((resolve, reject) => {
|
return new Promise<number>((resolve, reject) => {
|
||||||
const cp = spawn(cmd, args, {
|
const cp = spawn(cmd, args, {
|
||||||
|
|||||||
Reference in New Issue
Block a user