workflow: use lerna-changelog (#3650)

This commit is contained in:
Haoqun Jiang
2019-04-09 14:14:54 +08:00
committed by GitHub
parent fbfbd29be5
commit 44fb60ff1a
7 changed files with 165 additions and 64 deletions
+1
View File
@@ -8,3 +8,4 @@ temp
.vuerc
.version
.versions
.changelog
+14 -1
View File
@@ -5,5 +5,18 @@
"packages": [
"packages/@vue/babel-preset-app",
"packages/@vue/cli*"
]
],
"changelog": {
"repo": "vuejs/vue-cli",
"labels": {
"PR: New Feature": ":rocket: New Feature",
"PR: Breaking Change": ":boom: Breaking Change",
"PR: Bug Fix": ":bug: Bug Fix",
"PR: Documentation": ":memo: Documentation",
"PR: Internal": ":house: Internal",
"PR: Underlying Tools": ":hammer: Underlying Tools"
},
"cacheDir": ".changelog",
"nextVersionFromMetadata": true
}
}
+2 -3
View File
@@ -14,7 +14,7 @@
"sync": "node scripts/syncDeps.js",
"boot": "node scripts/bootstrap.js",
"release": "yarn --pure-lockfile && yarn clean && node scripts/release.js",
"changelog": "node scripts/genChangelog.js run",
"version": "node scripts/markVersions.js && node scripts/genChangelog.js && git add packages/vue-cli-version-marker CHANGELOG.md",
"docs": "vuepress dev docs",
"docs:build": "vuepress build docs",
"patch-chromedriver": "node scripts/patchChromedriver.js"
@@ -43,12 +43,10 @@
]
},
"devDependencies": {
"@vue/conventional-changelog": "^0.1.1",
"@vuepress/plugin-pwa": "^1.0.0-alpha.44",
"@vuepress/theme-vue": "1.0.0-alpha.44",
"babel-core": "7.0.0-bridge.0",
"babel-eslint": "^10.0.1",
"conventional-changelog": "^3.0.6",
"debug": "^4.1.0",
"eslint": "^5.14.1",
"eslint-plugin-graphql": "^3.0.3",
@@ -62,6 +60,7 @@
"inquirer": "^6.0.0",
"jest": "^23.1.0",
"lerna": "^3.13.0",
"lerna-changelog": "^0.8.2",
"lint-staged": "^8.1.4",
"memfs": "^2.15.2",
"minimist": "^1.2.0",
+11 -29
View File
@@ -1,43 +1,25 @@
const fs = require('fs')
const path = require('path')
const execa = require('execa')
const cc = require('conventional-changelog')
const config = require('@vue/conventional-changelog')
function genNewRelease (version) {
return new Promise(resolve => {
const newReleaseStream = cc({
config,
releaseCount: 2,
pkg: {
transform (pkg) {
pkg.version = `v${version}`
return pkg
}
}
})
let output = ''
newReleaseStream.on('data', buf => {
output += buf
})
newReleaseStream.on('end', () => resolve(output))
})
async function genNewRelease () {
const { stdout } = await execa(require.resolve('lerna-changelog/bin/cli'))
return stdout
}
const gen = (module.exports = async version => {
const newRelease = await genNewRelease(version)
const gen = (module.exports = async () => {
const newRelease = await genNewRelease()
const changelogPath = path.resolve(__dirname, '../CHANGELOG.md')
const newChangelog = newRelease + fs.readFileSync(changelogPath, { encoding: 'utf8' })
const newChangelog = newRelease + '\n\n\n' + fs.readFileSync(changelogPath, { encoding: 'utf8' })
fs.writeFileSync(changelogPath, newChangelog)
delete process.env.PREFIX
await execa('git', ['add', '-A'], { stdio: 'inherit' })
await execa('git', ['commit', '-m', `chore: ${version} changelog [ci skip]`], { stdio: 'inherit' })
})
if (process.argv[2] === 'run') {
const version = require('../lerna.json').version
gen(version)
if (require.main === module) {
gen().catch(err => {
console.error(err)
process.exit(1)
})
}
+41
View File
@@ -0,0 +1,41 @@
const fs = require('fs')
const path = require('path')
const execa = require('execa')
const semver = require('semver')
// TODO:
// in v4 we don't need version marker's package.json to store all the versions
// so this logic can be removed
async function markVersions () {
const packages = JSON.parse(
(await execa(require.resolve('lerna/cli'), ['list', '--json'])).stdout
).filter(p => !p.private)
const markerPath = path.resolve(__dirname, '../packages/vue-cli-version-marker/package.json')
const marker = JSON.parse(fs.readFileSync(markerPath))
const curVersion = marker.version
const mainVersion = require('../lerna.json').version
const releaseType = semver.diff(curVersion, mainVersion) || 'patch'
marker.version = semver.inc(marker.version, releaseType)
marker.devDependencies = packages.reduce((prev, pkg) => {
prev[pkg.name] = pkg.version
return prev
}, {})
fs.writeFileSync(markerPath, JSON.stringify(marker, null, 2))
// publish separately
// must specify registry url: https://github.com/lerna/lerna/issues/896#issuecomment-311894609
await execa(
'npm',
['publish', '--registry', 'https://registry.npmjs.org/'],
{ stdio: 'inherit', cwd: path.dirname(markerPath) }
)
}
markVersions().catch(err => {
console.error(err)
process.exit(1)
})
-31
View File
@@ -33,8 +33,6 @@ Note: eslint-config-* packages should be released separately & manually.
process.env.VUE_CLI_RELEASE = true
const fs = require('fs')
const path = require('path')
const execa = require('execa')
const semver = require('semver')
const inquirer = require('inquirer')
@@ -106,35 +104,6 @@ const release = async () => {
lernaArgs.push('--force-publish')
}
await execa(require.resolve('lerna/cli'), lernaArgs, { stdio: 'inherit' })
await require('./genChangelog')(version)
const packages = JSON.parse(
(await execa(require.resolve('lerna/cli'), ['list', '--json'])).stdout
).filter(p => !p.private)
const versionMarkerPath = path.resolve(__dirname, '../packages/vue-cli-version-marker/package.json')
const versionMarkerPkg = JSON.parse(fs.readFileSync(versionMarkerPath))
versionMarkerPkg.version = semver.inc(versionMarkerPkg.version, releaseType)
versionMarkerPkg.devDependencies = packages.reduce((prev, pkg) => {
prev[pkg.name] = pkg.version
return prev
}, {})
fs.writeFileSync(versionMarkerPath, JSON.stringify(versionMarkerPkg, null, 2))
const tagName = `vue-cli-version-marker@${versionMarkerPkg.version}`
await execa('git', ['add', '-A'], { stdio: 'inherit' })
await execa('git', ['commit', '-m', `chore: ${tagName}`], { stdio: 'inherit' })
// Must specify registry url: https://github.com/lerna/lerna/issues/896#issuecomment-311894609
await execa(
'npm',
['publish', '--registry', 'https://registry.npmjs.org/'],
{ stdio: 'inherit', cwd: path.dirname(versionMarkerPath) }
)
await execa('git', ['tag', tagName], { stdio: 'inherit' })
await execa('git', ['push', '--follow-tags'], { stdio: 'inherit' })
}
release().catch(err => {
+96
View File
@@ -2575,6 +2575,11 @@ any-observable@^0.3.0:
resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==
any-promise@^1.0.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
anymatch@^2.0.0:
version "2.0.0"
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:
dependencies:
restore-cursor "^2.0.0"
cli-highlight@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-1.2.3.tgz#b200f97ed0e43d24633e89de0f489a48bb87d2bf"
integrity sha512-cmc4Y2kJuEpT2KZd9pgWWskpDMMfJu2roIcY1Ya/aIItufF5FKsV/NtA6vvdhSUllR8KJfvQDNmIcskU+MKLDg==
dependencies:
chalk "^2.3.0"
highlight.js "^9.6.0"
mz "^2.4.0"
parse5 "^3.0.3"
yargs "^10.0.3"
cli-spinners@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c"
@@ -8309,6 +8325,11 @@ hex-color-regex@^1.1.0:
resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
highlight.js@^9.6.0:
version "9.15.6"
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.15.6.tgz#72d4d8d779ec066af9a17cb14360c3def0aa57c4"
integrity sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==
hmac-drbg@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
@@ -10170,6 +10191,21 @@ left-pad@^1.3.0:
resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==
lerna-changelog@^0.8.2:
version "0.8.2"
resolved "https://registry.yarnpkg.com/lerna-changelog/-/lerna-changelog-0.8.2.tgz#05dc24add91741a4c198a79f82a1a4ac3fbb4754"
integrity sha512-GrWs8K3DrPpO1sUrcloYp9ioj+PNAX27U6tM0+10fhbNzBB7h4HS+4N5DWKhEQRDoJjZh1QA+wWwTpDNJdJHyA==
dependencies:
chalk "^2.4.1"
cli-highlight "^1.2.3"
execa "^0.10.0"
make-fetch-happen "^4.0.1"
normalize-git-url "^3.0.2"
p-map "^1.2.0"
progress "^2.0.0"
string.prototype.padend "^3.0.0"
yargs "^11.0.0"
lerna@^3.13.0:
version "3.13.0"
resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.13.0.tgz#3a9fe155d763a9814939a631ff958957322f2f31"
@@ -11493,6 +11529,15 @@ mute-stream@~0.0.4:
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
mz@^2.4.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
dependencies:
any-promise "^1.0.0"
object-assign "^4.0.1"
thenify-all "^1.0.0"
nan@^2.9.2:
version "2.12.1"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552"
@@ -11783,6 +11828,11 @@ nopt@^4.0.1, nopt@~4.0.1:
abbrev "1"
osenv "^0.1.4"
normalize-git-url@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4"
integrity sha1-jl8Uvgva7bc+ByADEKpBbCc1D8Q=
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:
version "2.4.2"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.2.tgz#6b2abd85774e51f7936f1395e45acb905dc849b2"
@@ -12504,6 +12554,13 @@ parse5@5.1.0:
resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2"
integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==
parse5@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==
dependencies:
"@types/node" "*"
parseurl@~1.3.2:
version "1.3.2"
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:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
thenify-all@^1.0.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
dependencies:
thenify ">= 3.1.0 < 4"
"thenify@>= 3.1.0 < 4":
version "3.3.0"
resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839"
integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=
dependencies:
any-promise "^1.0.0"
thread-loader@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.2.tgz#f585dd38e852c7f9cded5d092992108148f5eb30"
@@ -17653,6 +17724,13 @@ yargs-parser@^11.1.1:
camelcase "^5.0.0"
decamelize "^1.2.0"
yargs-parser@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==
dependencies:
camelcase "^4.1.0"
yargs-parser@^9.0.2:
version "9.0.2"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
@@ -17678,6 +17756,24 @@ yargs@12.0.2:
y18n "^3.2.1 || ^4.0.0"
yargs-parser "^10.1.0"
yargs@^10.0.3:
version "10.1.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5"
integrity sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==
dependencies:
cliui "^4.0.0"
decamelize "^1.1.1"
find-up "^2.1.0"
get-caller-file "^1.0.1"
os-locale "^2.0.0"
require-directory "^2.1.1"
require-main-filename "^1.0.1"
set-blocking "^2.0.0"
string-width "^2.0.0"
which-module "^2.0.0"
y18n "^3.2.1"
yargs-parser "^8.1.0"
yargs@^11.0.0:
version "11.1.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77"