mirror of
https://github.com/nodejs/node.git
synced 2025-05-17 18:26:24 +00:00

PR-URL: https://github.com/nodejs/node/pull/35474 Reviewed-By: Ruy Adorno <ruyadorno@github.com> Reviewed-By: Ujjwal Sharma <ryzokuken@disroot.org> Reviewed-By: Ben Coe <bencoe@gmail.com> Reviewed-By: Geoffrey Booth <webmaster@geoffreybooth.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Shelley Vohr <codebytere@gmail.com> Reviewed-By: Guy Bedford <guybedford@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
117 lines
2.9 KiB
JavaScript
117 lines
2.9 KiB
JavaScript
// called with all the options already set to their defaults
|
|
|
|
const retrieveTag = require('./retrieve-tag.js')
|
|
const semver = require('semver')
|
|
const enforceClean = require('./enforce-clean.js')
|
|
const writeJson = require('./write-json.js')
|
|
const readJson = require('read-package-json-fast')
|
|
const git = require('@npmcli/git')
|
|
const commit = require('./commit.js')
|
|
const tag = require('./tag.js')
|
|
|
|
const runScript = require('@npmcli/run-script')
|
|
const runner = opts => event => runScript({
|
|
...opts,
|
|
stdio: 'inherit',
|
|
event,
|
|
})
|
|
|
|
module.exports = async (newversion, opts) => {
|
|
const {
|
|
path,
|
|
allowSameVersion,
|
|
tagVersionPrefix,
|
|
commitHooks,
|
|
gitTagVersion,
|
|
signGitCommit,
|
|
signGitTag,
|
|
force,
|
|
ignoreScripts,
|
|
preid,
|
|
pkg,
|
|
log,
|
|
message,
|
|
} = opts
|
|
|
|
const { valid, clean, inc } = semver
|
|
const current = pkg.version
|
|
const currentClean = clean(current)
|
|
|
|
const newV = valid(newversion, { loose: true }) ? clean(newversion, { loose: true })
|
|
: newversion === 'from-git' ? await retrieveTag(opts)
|
|
: inc(currentClean, newversion, { loose: true }, preid)
|
|
|
|
if (!newV) {
|
|
throw Object.assign(new Error('Invalid version: ' + newversion), {
|
|
current,
|
|
requested: newversion,
|
|
})
|
|
}
|
|
|
|
if (newV === currentClean && !allowSameVersion) {
|
|
throw Object.assign(new Error('Version not changed'), {
|
|
current,
|
|
requested: newversion,
|
|
newVersion: newV,
|
|
})
|
|
}
|
|
|
|
const isGitDir = newversion === 'from-git' || await git.is(opts)
|
|
|
|
// ok! now we know the new version, and the old version is in pkg
|
|
|
|
// - check if git dir is clean
|
|
// returns false if we should not keep doing git stuff
|
|
const doGit = isGitDir && await enforceClean(opts)
|
|
|
|
const runScript = ignoreScripts ? () => {} : runner({
|
|
...opts,
|
|
pkg,
|
|
env: {
|
|
npm_old_version: current,
|
|
npm_new_version: newV,
|
|
},
|
|
})
|
|
|
|
|
|
await runScript('preversion')
|
|
|
|
// - update the files
|
|
pkg.version = newV
|
|
delete pkg._id
|
|
await writeJson(`${path}/package.json`, pkg)
|
|
|
|
// try to update shrinkwrap, but ok if this fails
|
|
const locks = [`${path}/package-lock.json`, `${path}/npm-shrinkwrap.json`]
|
|
const haveLocks = []
|
|
for (const lock of locks) {
|
|
try {
|
|
const sw = await readJson(lock)
|
|
sw.version = newV
|
|
if (sw.packages && sw.packages['']) {
|
|
sw.packages[''].version = newV
|
|
}
|
|
await writeJson(lock, sw)
|
|
haveLocks.push(lock)
|
|
} catch (er) {}
|
|
}
|
|
|
|
await runScript('version')
|
|
|
|
if (doGit) {
|
|
// - git add, git commit, git tag
|
|
await git.spawn(['add', `${path}/package.json`], opts)
|
|
// sometimes people .gitignore their lockfiles
|
|
for (const lock of haveLocks) {
|
|
await git.spawn(['add', lock], opts).catch(() => {})
|
|
}
|
|
await commit(newV, opts)
|
|
await tag(newV, opts)
|
|
} else
|
|
log.verbose('version', 'Not tagging: not in a git repo or no git cmd')
|
|
|
|
await runScript('postversion')
|
|
|
|
return newV
|
|
}
|