workflow: release script

This commit is contained in:
Evan You
2018-01-25 16:18:45 -05:00
parent 5f76980a91
commit 1cb9fdfe9f
2 changed files with 73 additions and 15 deletions

View File

@@ -1,12 +1,63 @@
process.env.VUE_CLI_RELEASE = true
// const execa = require('execa')
// const semver = require('semver')
// const inquirer = require('inquirer')
// const { syncDeps } = require('./syncDeps')
const execa = require('execa')
const semver = require('semver')
const inquirer = require('inquirer')
const { syncDeps } = require('./syncDeps')
// const curVersion = require('../lerna.json').version
const curVersion = require('../lerna.json').version
// prompt for new version
// run syncDeps(local, version)
// run lerna publish with version
const release = async () => {
console.log(`Current version: ${curVersion}`)
const bumps = ['patch', 'minor', 'major', 'prerelease']
const versions = {}
bumps.forEach(b => { versions[b] = semver.inc(curVersion, b) })
const bumpChoices = bumps.map(b => ({ name: `${b} (${versions[b]})`, value: b }))
const { bump, customVersion } = await inquirer.prompt([
{
name: 'bump',
message: 'Select release type:',
type: 'list',
choices: [
...bumpChoices,
{ name: 'custom', value: 'custom' }
]
},
{
name: 'customVersion',
message: 'Input version:',
type: 'input',
when: answers => answers.bump === 'custom'
}
])
const version = customVersion || versions[bump]
const { yes } = await inquirer.prompt([{
name: 'yes',
message: `Confirm releasing ${version}?`,
type: 'confirm'
}])
if (yes) {
await syncDeps({
version,
local: true,
skipPrompt: true
})
}
const lernaBinPath = require.resolve('lerna/bin/lerna')
await execa(lernaBinPath, [
'publish',
'--repo-version',
version
], { stdio: 'inherit' })
}
release().catch(err => {
console.error(err)
process.exit(1)
})

View File

@@ -68,11 +68,12 @@ const flushWrite = () => {
}
}
async function syncDeps (local, inlineVersion) {
async function syncDeps ({ local, version, skipPrompt }) {
// 1. update all package deps
const updatedDeps = new Set()
if (!local) {
console.log('Syncing remote deps...')
const packages = await globby(['packages/@vue/*/package.json'])
await Promise.all(packages.filter(filePath => {
return filePath.match(/cli-service|cli-plugin|babel-preset|eslint-config/)
@@ -105,6 +106,7 @@ async function syncDeps (local, inlineVersion) {
}))
}
console.log('Syncing local deps...')
const updatedRE = new RegExp(`'(${Array.from(updatedDeps).join('|')})': '\\^(\\d+\\.\\d+\\.\\d+[^']*)'`)
const paths = await globby(['packages/@vue/**/*.js'])
paths
@@ -112,19 +114,19 @@ async function syncDeps (local, inlineVersion) {
.forEach(filePath => {
let isUpdated = false
const makeReplacer = versionGetter => (_, pkg, curVersion) => {
const version = versionGetter(pkg)
if (!version) return _
if (checkUpdate(pkg, filePath, curVersion, version)) {
const targetVersion = versionGetter(pkg)
if (!targetVersion) return _
if (checkUpdate(pkg, filePath, curVersion, targetVersion)) {
isUpdated = true
}
return `'${pkg}': '^${version}'`
return `'${pkg}': '^${targetVersion}'`
}
const localReplacer = makeReplacer(
pkg => {
try {
// inline version takes priority
return inlineVersion || require(`../packages/${pkg}/package.json`).version
return version || require(`../packages/${pkg}/package.json`).version
} catch (e) {}
}
)
@@ -146,6 +148,11 @@ async function syncDeps (local, inlineVersion) {
return console.log(`All packages up-to-date.`)
}
if (skipPrompt) {
flushWrite()
return
}
const { yes } = await inquirer.prompt([{
name: 'yes',
type: 'confirm',
@@ -161,7 +168,7 @@ exports.syncDeps = syncDeps
if (!process.env.VUE_CLI_RELEASE) {
const args = require('minimist')(process.argv.slice(2))
syncDeps(args.local, args.version).catch(err => {
syncDeps(args).catch(err => {
console.log(err)
process.exit(1)
})