mirror of
https://github.com/zhigang1992/mobx-utils.git
synced 2026-01-12 22:48:56 +08:00
87 lines
2.4 KiB
JavaScript
Executable File
87 lines
2.4 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
/* Publish.js, publish a new version of the npm package as found in the current directory */
|
|
/* Run this file from the root of the repository */
|
|
|
|
const shell = require("shelljs")
|
|
const fs = require("fs")
|
|
const readline = require("readline")
|
|
|
|
const rl = readline.createInterface({
|
|
input: process.stdin,
|
|
output: process.stdout,
|
|
})
|
|
|
|
function run(command, options) {
|
|
const continueOnErrors = options && options.continueOnErrors
|
|
const ret = shell.exec(command, options)
|
|
if (!continueOnErrors && ret.code !== 0) {
|
|
shell.exit(1)
|
|
}
|
|
return ret
|
|
}
|
|
|
|
function exit(code, msg) {
|
|
console.error(msg)
|
|
shell.exit(code)
|
|
}
|
|
|
|
async function prompt(question, defaultValue) {
|
|
return new Promise((resolve) => {
|
|
rl.question(`${question} [${defaultValue}]: `, (answer) => {
|
|
answer = answer && answer.trim()
|
|
resolve(answer ? answer : defaultValue)
|
|
})
|
|
})
|
|
}
|
|
|
|
async function main() {
|
|
const pkg = JSON.parse(fs.readFileSync("package.json", "utf8"))
|
|
|
|
// Bump version number
|
|
let nrs = pkg.version.split(".")
|
|
nrs[2] = 1 + parseInt(nrs[2], 10)
|
|
const version = (pkg.version = await prompt(
|
|
"Please specify the new package version of '" + pkg.name + "' (Ctrl^C to abort)",
|
|
nrs.join(".")
|
|
))
|
|
if (!version.match(/^\d+\.\d+\.\d+$/)) {
|
|
exit(1, "Invalid semantic version: " + version)
|
|
}
|
|
|
|
// Check registry data
|
|
const npmInfoRet = run(`npm info ${pkg.name} --json`, {
|
|
continueOnErrors: true,
|
|
silent: true,
|
|
})
|
|
if (npmInfoRet.code === 0) {
|
|
//package is registered in npm?
|
|
var publishedPackageInfo = JSON.parse(npmInfoRet.stdout)
|
|
if (
|
|
publishedPackageInfo.versions == version ||
|
|
publishedPackageInfo.versions.includes(version)
|
|
) {
|
|
exit(2, "Version " + pkg.version + " is already published to npm")
|
|
}
|
|
|
|
fs.writeFileSync("package.json", JSON.stringify(pkg, null, 2), "utf8")
|
|
|
|
// build
|
|
run("npm run prepublishOnly")
|
|
// Finally, commit and publish!
|
|
run("npm publish")
|
|
run(`git commit -am "Published version ${version}"`)
|
|
run(`git tag ${version}`)
|
|
|
|
run("git push")
|
|
run("git push --tags")
|
|
console.log("Published!")
|
|
exit(0)
|
|
} else {
|
|
exit(1, pkg.name + " is not an existing npm package")
|
|
}
|
|
}
|
|
|
|
main().catch((e) => {
|
|
throw e
|
|
})
|