Skip to content

Commit 44fb60f

Browse files
authored
workflow: use lerna-changelog (#3650)
1 parent fbfbd29 commit 44fb60f

File tree

7 files changed

+165
-64
lines changed

7 files changed

+165
-64
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ temp
88
.vuerc
99
.version
1010
.versions
11+
.changelog

lerna.json

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,18 @@
55
"packages": [
66
"packages/@vue/babel-preset-app",
77
"packages/@vue/cli*"
8-
]
8+
],
9+
"changelog": {
10+
"repo": "vuejs/vue-cli",
11+
"labels": {
12+
"PR: New Feature": ":rocket: New Feature",
13+
"PR: Breaking Change": ":boom: Breaking Change",
14+
"PR: Bug Fix": ":bug: Bug Fix",
15+
"PR: Documentation": ":memo: Documentation",
16+
"PR: Internal": ":house: Internal",
17+
"PR: Underlying Tools": ":hammer: Underlying Tools"
18+
},
19+
"cacheDir": ".changelog",
20+
"nextVersionFromMetadata": true
21+
}
922
}

package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"sync": "node scripts/syncDeps.js",
1515
"boot": "node scripts/bootstrap.js",
1616
"release": "yarn --pure-lockfile && yarn clean && node scripts/release.js",
17-
"changelog": "node scripts/genChangelog.js run",
17+
"version": "node scripts/markVersions.js && node scripts/genChangelog.js && git add packages/vue-cli-version-marker CHANGELOG.md",
1818
"docs": "vuepress dev docs",
1919
"docs:build": "vuepress build docs",
2020
"patch-chromedriver": "node scripts/patchChromedriver.js"
@@ -43,12 +43,10 @@
4343
]
4444
},
4545
"devDependencies": {
46-
"@vue/conventional-changelog": "^0.1.1",
4746
"@vuepress/plugin-pwa": "^1.0.0-alpha.44",
4847
"@vuepress/theme-vue": "1.0.0-alpha.44",
4948
"babel-core": "7.0.0-bridge.0",
5049
"babel-eslint": "^10.0.1",
51-
"conventional-changelog": "^3.0.6",
5250
"debug": "^4.1.0",
5351
"eslint": "^5.14.1",
5452
"eslint-plugin-graphql": "^3.0.3",
@@ -62,6 +60,7 @@
6260
"inquirer": "^6.0.0",
6361
"jest": "^23.1.0",
6462
"lerna": "^3.13.0",
63+
"lerna-changelog": "^0.8.2",
6564
"lint-staged": "^8.1.4",
6665
"memfs": "^2.15.2",
6766
"minimist": "^1.2.0",

scripts/genChangelog.js

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,25 @@
11
const fs = require('fs')
22
const path = require('path')
33
const execa = require('execa')
4-
const cc = require('conventional-changelog')
5-
const config = require('@vue/conventional-changelog')
64

7-
function genNewRelease (version) {
8-
return new Promise(resolve => {
9-
const newReleaseStream = cc({
10-
config,
11-
releaseCount: 2,
12-
pkg: {
13-
transform (pkg) {
14-
pkg.version = `v${version}`
15-
return pkg
16-
}
17-
}
18-
})
19-
20-
let output = ''
21-
newReleaseStream.on('data', buf => {
22-
output += buf
23-
})
24-
newReleaseStream.on('end', () => resolve(output))
25-
})
5+
async function genNewRelease () {
6+
const { stdout } = await execa(require.resolve('lerna-changelog/bin/cli'))
7+
return stdout
268
}
279

28-
const gen = (module.exports = async version => {
29-
const newRelease = await genNewRelease(version)
10+
const gen = (module.exports = async () => {
11+
const newRelease = await genNewRelease()
3012
const changelogPath = path.resolve(__dirname, '../CHANGELOG.md')
3113

32-
const newChangelog = newRelease + fs.readFileSync(changelogPath, { encoding: 'utf8' })
14+
const newChangelog = newRelease + '\n\n\n' + fs.readFileSync(changelogPath, { encoding: 'utf8' })
3315
fs.writeFileSync(changelogPath, newChangelog)
3416

3517
delete process.env.PREFIX
36-
await execa('git', ['add', '-A'], { stdio: 'inherit' })
37-
await execa('git', ['commit', '-m', `chore: ${version} changelog [ci skip]`], { stdio: 'inherit' })
3818
})
3919

40-
if (process.argv[2] === 'run') {
41-
const version = require('../lerna.json').version
42-
gen(version)
20+
if (require.main === module) {
21+
gen().catch(err => {
22+
console.error(err)
23+
process.exit(1)
24+
})
4325
}

scripts/markVersions.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
const fs = require('fs')
2+
const path = require('path')
3+
4+
const execa = require('execa')
5+
const semver = require('semver')
6+
7+
// TODO:
8+
// in v4 we don't need version marker's package.json to store all the versions
9+
// so this logic can be removed
10+
async function markVersions () {
11+
const packages = JSON.parse(
12+
(await execa(require.resolve('lerna/cli'), ['list', '--json'])).stdout
13+
).filter(p => !p.private)
14+
const markerPath = path.resolve(__dirname, '../packages/vue-cli-version-marker/package.json')
15+
const marker = JSON.parse(fs.readFileSync(markerPath))
16+
17+
const curVersion = marker.version
18+
const mainVersion = require('../lerna.json').version
19+
20+
const releaseType = semver.diff(curVersion, mainVersion) || 'patch'
21+
22+
marker.version = semver.inc(marker.version, releaseType)
23+
marker.devDependencies = packages.reduce((prev, pkg) => {
24+
prev[pkg.name] = pkg.version
25+
return prev
26+
}, {})
27+
fs.writeFileSync(markerPath, JSON.stringify(marker, null, 2))
28+
29+
// publish separately
30+
// must specify registry url: https://github.com/lerna/lerna/issues/896#issuecomment-311894609
31+
await execa(
32+
'npm',
33+
['publish', '--registry', 'https://registry.npmjs.org/'],
34+
{ stdio: 'inherit', cwd: path.dirname(markerPath) }
35+
)
36+
}
37+
38+
markVersions().catch(err => {
39+
console.error(err)
40+
process.exit(1)
41+
})

scripts/release.js

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ Note: eslint-config-* packages should be released separately & manually.
3333

3434
process.env.VUE_CLI_RELEASE = true
3535

36-
const fs = require('fs')
37-
const path = require('path')
3836
const execa = require('execa')
3937
const semver = require('semver')
4038
const inquirer = require('inquirer')
@@ -106,35 +104,6 @@ const release = async () => {
106104
lernaArgs.push('--force-publish')
107105
}
108106
await execa(require.resolve('lerna/cli'), lernaArgs, { stdio: 'inherit' })
109-
110-
await require('./genChangelog')(version)
111-
112-
const packages = JSON.parse(
113-
(await execa(require.resolve('lerna/cli'), ['list', '--json'])).stdout
114-
).filter(p => !p.private)
115-
const versionMarkerPath = path.resolve(__dirname, '../packages/vue-cli-version-marker/package.json')
116-
const versionMarkerPkg = JSON.parse(fs.readFileSync(versionMarkerPath))
117-
118-
versionMarkerPkg.version = semver.inc(versionMarkerPkg.version, releaseType)
119-
versionMarkerPkg.devDependencies = packages.reduce((prev, pkg) => {
120-
prev[pkg.name] = pkg.version
121-
return prev
122-
}, {})
123-
fs.writeFileSync(versionMarkerPath, JSON.stringify(versionMarkerPkg, null, 2))
124-
125-
const tagName = `vue-cli-version-marker@${versionMarkerPkg.version}`
126-
await execa('git', ['add', '-A'], { stdio: 'inherit' })
127-
await execa('git', ['commit', '-m', `chore: ${tagName}`], { stdio: 'inherit' })
128-
129-
// Must specify registry url: https://github.com/lerna/lerna/issues/896#issuecomment-311894609
130-
await execa(
131-
'npm',
132-
['publish', '--registry', 'https://registry.npmjs.org/'],
133-
{ stdio: 'inherit', cwd: path.dirname(versionMarkerPath) }
134-
)
135-
136-
await execa('git', ['tag', tagName], { stdio: 'inherit' })
137-
await execa('git', ['push', '--follow-tags'], { stdio: 'inherit' })
138107
}
139108

140109
release().catch(err => {

yarn.lock

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2575,6 +2575,11 @@ any-observable@^0.3.0:
25752575
resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
25762576
integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==
25772577

2578+
any-promise@^1.0.0:
2579+
version "1.3.0"
2580+
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
2581+
integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
2582+
25782583
anymatch@^2.0.0:
25792584
version "2.0.0"
25802585
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
@@ -4207,6 +4212,17 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0:
42074212
dependencies:
42084213
restore-cursor "^2.0.0"
42094214

4215+
cli-highlight@^1.2.3:
4216+
version "1.2.3"
4217+
resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-1.2.3.tgz#b200f97ed0e43d24633e89de0f489a48bb87d2bf"
4218+
integrity sha512-cmc4Y2kJuEpT2KZd9pgWWskpDMMfJu2roIcY1Ya/aIItufF5FKsV/NtA6vvdhSUllR8KJfvQDNmIcskU+MKLDg==
4219+
dependencies:
4220+
chalk "^2.3.0"
4221+
highlight.js "^9.6.0"
4222+
mz "^2.4.0"
4223+
parse5 "^3.0.3"
4224+
yargs "^10.0.3"
4225+
42104226
cli-spinners@^0.1.2:
42114227
version "0.1.2"
42124228
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c"
@@ -8309,6 +8325,11 @@ hex-color-regex@^1.1.0:
83098325
resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
83108326
integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
83118327

8328+
highlight.js@^9.6.0:
8329+
version "9.15.6"
8330+
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.15.6.tgz#72d4d8d779ec066af9a17cb14360c3def0aa57c4"
8331+
integrity sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==
8332+
83128333
hmac-drbg@^1.0.0:
83138334
version "1.0.1"
83148335
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
@@ -10170,6 +10191,21 @@ left-pad@^1.3.0:
1017010191
resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
1017110192
integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==
1017210193

10194+
lerna-changelog@^0.8.2:
10195+
version "0.8.2"
10196+
resolved "https://registry.yarnpkg.com/lerna-changelog/-/lerna-changelog-0.8.2.tgz#05dc24add91741a4c198a79f82a1a4ac3fbb4754"
10197+
integrity sha512-GrWs8K3DrPpO1sUrcloYp9ioj+PNAX27U6tM0+10fhbNzBB7h4HS+4N5DWKhEQRDoJjZh1QA+wWwTpDNJdJHyA==
10198+
dependencies:
10199+
chalk "^2.4.1"
10200+
cli-highlight "^1.2.3"
10201+
execa "^0.10.0"
10202+
make-fetch-happen "^4.0.1"
10203+
normalize-git-url "^3.0.2"
10204+
p-map "^1.2.0"
10205+
progress "^2.0.0"
10206+
string.prototype.padend "^3.0.0"
10207+
yargs "^11.0.0"
10208+
1017310209
lerna@^3.13.0:
1017410210
version "3.13.0"
1017510211
resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.13.0.tgz#3a9fe155d763a9814939a631ff958957322f2f31"
@@ -11493,6 +11529,15 @@ mute-stream@~0.0.4:
1149311529
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
1149411530
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
1149511531

11532+
mz@^2.4.0:
11533+
version "2.7.0"
11534+
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
11535+
integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
11536+
dependencies:
11537+
any-promise "^1.0.0"
11538+
object-assign "^4.0.1"
11539+
thenify-all "^1.0.0"
11540+
1149611541
nan@^2.9.2:
1149711542
version "2.12.1"
1149811543
resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552"
@@ -11783,6 +11828,11 @@ nopt@^4.0.1, nopt@~4.0.1:
1178311828
abbrev "1"
1178411829
osenv "^0.1.4"
1178511830

11831+
normalize-git-url@^3.0.2:
11832+
version "3.0.2"
11833+
resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4"
11834+
integrity sha1-jl8Uvgva7bc+ByADEKpBbCc1D8Q=
11835+
1178611836
normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0:
1178711837
version "2.4.2"
1178811838
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.2.tgz#6b2abd85774e51f7936f1395e45acb905dc849b2"
@@ -12504,6 +12554,13 @@ [email protected]:
1250412554
resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2"
1250512555
integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==
1250612556

12557+
parse5@^3.0.3:
12558+
version "3.0.3"
12559+
resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
12560+
integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==
12561+
dependencies:
12562+
"@types/node" "*"
12563+
1250712564
parseurl@~1.3.2:
1250812565
version "1.3.2"
1250912566
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
@@ -15878,6 +15935,20 @@ text-table@^0.2.0, text-table@~0.2.0:
1587815935
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1587915936
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
1588015937

15938+
thenify-all@^1.0.0:
15939+
version "1.6.0"
15940+
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
15941+
integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
15942+
dependencies:
15943+
thenify ">= 3.1.0 < 4"
15944+
15945+
"thenify@>= 3.1.0 < 4":
15946+
version "3.3.0"
15947+
resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839"
15948+
integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=
15949+
dependencies:
15950+
any-promise "^1.0.0"
15951+
1588115952
thread-loader@^2.1.2:
1588215953
version "2.1.2"
1588315954
resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.2.tgz#f585dd38e852c7f9cded5d092992108148f5eb30"
@@ -17653,6 +17724,13 @@ yargs-parser@^11.1.1:
1765317724
camelcase "^5.0.0"
1765417725
decamelize "^1.2.0"
1765517726

17727+
yargs-parser@^8.1.0:
17728+
version "8.1.0"
17729+
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
17730+
integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==
17731+
dependencies:
17732+
camelcase "^4.1.0"
17733+
1765617734
yargs-parser@^9.0.2:
1765717735
version "9.0.2"
1765817736
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
@@ -17678,6 +17756,24 @@ [email protected]:
1767817756
y18n "^3.2.1 || ^4.0.0"
1767917757
yargs-parser "^10.1.0"
1768017758

17759+
yargs@^10.0.3:
17760+
version "10.1.2"
17761+
resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5"
17762+
integrity sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==
17763+
dependencies:
17764+
cliui "^4.0.0"
17765+
decamelize "^1.1.1"
17766+
find-up "^2.1.0"
17767+
get-caller-file "^1.0.1"
17768+
os-locale "^2.0.0"
17769+
require-directory "^2.1.1"
17770+
require-main-filename "^1.0.1"
17771+
set-blocking "^2.0.0"
17772+
string-width "^2.0.0"
17773+
which-module "^2.0.0"
17774+
y18n "^3.2.1"
17775+
yargs-parser "^8.1.0"
17776+
1768117777
yargs@^11.0.0:
1768217778
version "11.1.0"
1768317779
resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77"

0 commit comments

Comments
 (0)