mirror of
https://github.com/pnpm/action-setup.git
synced 2026-03-30 00:00:22 +00:00
Add `pnpm run update-bootstrap [version]` to regenerate the bootstrap lockfiles. Bumps from 11.0.0-beta.3 to 11.0.0-beta.4-1.
48 lines
1.8 KiB
JavaScript
48 lines
1.8 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
// Usage: node scripts/update-bootstrap.mjs [version]
|
|
// If version is omitted, fetches the latest next-11 tag from npm.
|
|
// Regenerates the bootstrap lockfiles used by action-setup to install pnpm via npm.
|
|
|
|
import { execSync } from 'child_process'
|
|
import { mkdtempSync, rmSync, readFileSync, writeFileSync } from 'fs'
|
|
import { join } from 'path'
|
|
import { tmpdir } from 'os'
|
|
|
|
const BOOTSTRAP_DIR = new URL('../src/install-pnpm/bootstrap/', import.meta.url).pathname
|
|
|
|
const version = process.argv[2] || resolveLatestVersion()
|
|
|
|
console.log(`Updating bootstrap lockfiles to pnpm@${version} ...`)
|
|
|
|
generateLock('pnpm-lock.json', { pnpm: version }, 'bootstrap-pnpm')
|
|
generateLock('exe-lock.json', { '@pnpm/exe': version }, 'bootstrap-exe')
|
|
|
|
console.log('Done!')
|
|
|
|
function resolveLatestVersion() {
|
|
const json = execSync('npm view @pnpm/exe dist-tags --json', { encoding: 'utf8' })
|
|
const tags = JSON.parse(json)
|
|
const version = tags['next-11'] || tags['latest']
|
|
if (!version) {
|
|
console.error('Could not determine latest pnpm version from npm dist-tags')
|
|
process.exit(1)
|
|
}
|
|
return version
|
|
}
|
|
|
|
function generateLock(filename, dependencies, name) {
|
|
const tmp = mkdtempSync(join(tmpdir(), 'pnpm-bootstrap-'))
|
|
try {
|
|
writeFileSync(join(tmp, 'package.json'), JSON.stringify({ private: true, dependencies }))
|
|
execSync('npm install --package-lock-only --ignore-scripts', { cwd: tmp, stdio: 'pipe' })
|
|
const lock = readFileSync(join(tmp, 'package-lock.json'), 'utf8')
|
|
const parsed = JSON.parse(lock)
|
|
parsed.name = name
|
|
writeFileSync(join(BOOTSTRAP_DIR, filename), JSON.stringify(parsed, null, 2) + '\n')
|
|
console.log(` ${filename} -> ${Object.values(dependencies)[0]}@${version}`)
|
|
} finally {
|
|
rmSync(tmp, { recursive: true, force: true })
|
|
}
|
|
}
|