Skip to content

Commit 1cb9fdf

Browse files
committed
workflow: release script
1 parent 5f76980 commit 1cb9fdf

File tree

2 files changed

+73
-15
lines changed

2 files changed

+73
-15
lines changed

scripts/release.js

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,63 @@
11
process.env.VUE_CLI_RELEASE = true
22

3-
// const execa = require('execa')
4-
// const semver = require('semver')
5-
// const inquirer = require('inquirer')
6-
// const { syncDeps } = require('./syncDeps')
3+
const execa = require('execa')
4+
const semver = require('semver')
5+
const inquirer = require('inquirer')
6+
const { syncDeps } = require('./syncDeps')
77

8-
// const curVersion = require('../lerna.json').version
8+
const curVersion = require('../lerna.json').version
99

10-
// prompt for new version
11-
// run syncDeps(local, version)
12-
// run lerna publish with version
10+
const release = async () => {
11+
console.log(`Current version: ${curVersion}`)
12+
13+
const bumps = ['patch', 'minor', 'major', 'prerelease']
14+
const versions = {}
15+
bumps.forEach(b => { versions[b] = semver.inc(curVersion, b) })
16+
const bumpChoices = bumps.map(b => ({ name: `${b} (${versions[b]})`, value: b }))
17+
18+
const { bump, customVersion } = await inquirer.prompt([
19+
{
20+
name: 'bump',
21+
message: 'Select release type:',
22+
type: 'list',
23+
choices: [
24+
...bumpChoices,
25+
{ name: 'custom', value: 'custom' }
26+
]
27+
},
28+
{
29+
name: 'customVersion',
30+
message: 'Input version:',
31+
type: 'input',
32+
when: answers => answers.bump === 'custom'
33+
}
34+
])
35+
36+
const version = customVersion || versions[bump]
37+
38+
const { yes } = await inquirer.prompt([{
39+
name: 'yes',
40+
message: `Confirm releasing ${version}?`,
41+
type: 'confirm'
42+
}])
43+
44+
if (yes) {
45+
await syncDeps({
46+
version,
47+
local: true,
48+
skipPrompt: true
49+
})
50+
}
51+
52+
const lernaBinPath = require.resolve('lerna/bin/lerna')
53+
await execa(lernaBinPath, [
54+
'publish',
55+
'--repo-version',
56+
version
57+
], { stdio: 'inherit' })
58+
}
59+
60+
release().catch(err => {
61+
console.error(err)
62+
process.exit(1)
63+
})

scripts/syncDeps.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,12 @@ const flushWrite = () => {
6868
}
6969
}
7070

71-
async function syncDeps (local, inlineVersion) {
71+
async function syncDeps ({ local, version, skipPrompt }) {
7272
// 1. update all package deps
7373
const updatedDeps = new Set()
7474

7575
if (!local) {
76+
console.log('Syncing remote deps...')
7677
const packages = await globby(['packages/@vue/*/package.json'])
7778
await Promise.all(packages.filter(filePath => {
7879
return filePath.match(/cli-service|cli-plugin|babel-preset|eslint-config/)
@@ -105,26 +106,27 @@ async function syncDeps (local, inlineVersion) {
105106
}))
106107
}
107108

109+
console.log('Syncing local deps...')
108110
const updatedRE = new RegExp(`'(${Array.from(updatedDeps).join('|')})': '\\^(\\d+\\.\\d+\\.\\d+[^']*)'`)
109111
const paths = await globby(['packages/@vue/**/*.js'])
110112
paths
111113
.filter(p => !/\/files\//.test(p) && !/\/node_modules/.test(p))
112114
.forEach(filePath => {
113115
let isUpdated = false
114116
const makeReplacer = versionGetter => (_, pkg, curVersion) => {
115-
const version = versionGetter(pkg)
116-
if (!version) return _
117-
if (checkUpdate(pkg, filePath, curVersion, version)) {
117+
const targetVersion = versionGetter(pkg)
118+
if (!targetVersion) return _
119+
if (checkUpdate(pkg, filePath, curVersion, targetVersion)) {
118120
isUpdated = true
119121
}
120-
return `'${pkg}': '^${version}'`
122+
return `'${pkg}': '^${targetVersion}'`
121123
}
122124

123125
const localReplacer = makeReplacer(
124126
pkg => {
125127
try {
126128
// inline version takes priority
127-
return inlineVersion || require(`../packages/${pkg}/package.json`).version
129+
return version || require(`../packages/${pkg}/package.json`).version
128130
} catch (e) {}
129131
}
130132
)
@@ -146,6 +148,11 @@ async function syncDeps (local, inlineVersion) {
146148
return console.log(`All packages up-to-date.`)
147149
}
148150

151+
if (skipPrompt) {
152+
flushWrite()
153+
return
154+
}
155+
149156
const { yes } = await inquirer.prompt([{
150157
name: 'yes',
151158
type: 'confirm',
@@ -161,7 +168,7 @@ exports.syncDeps = syncDeps
161168

162169
if (!process.env.VUE_CLI_RELEASE) {
163170
const args = require('minimist')(process.argv.slice(2))
164-
syncDeps(args.local, args.version).catch(err => {
171+
syncDeps(args).catch(err => {
165172
console.log(err)
166173
process.exit(1)
167174
})

0 commit comments

Comments
 (0)