Skip to content

Commit 2374bcc

Browse files
committed
switch release tools to ship.js base
1 parent 41f74f5 commit 2374bcc

File tree

3 files changed

+1141
-360
lines changed

3 files changed

+1141
-360
lines changed

package.json

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,20 @@
99
"bugs": {
1010
"url": "https://github.com/kazupon/vue-i18n-loader/issues"
1111
},
12+
"changelog": {
13+
"labels": {
14+
"Type: Feature": ":star: Features",
15+
"Type: Bug": ":bug: Bug Fixes",
16+
"Type: Security": ":lock: Security Fixes",
17+
"Type: Performance": ":chart_with_upwards_trend: Performance Fixes",
18+
"Type: Improvement": ":zap: Improvement Features",
19+
"Type: Breaking": ":boom: Breaking Change",
20+
"Type: Deprecated": ":warning: Deprecated Features",
21+
"Type: I18n": ":globe_with_meridians: Internationalization",
22+
"Type: A11y": ":wheelchair: Accessibility",
23+
"Type: Documentation": ":pencil: Documentation"
24+
}
25+
},
1226
"dependencies": {
1327
"js-yaml": "^3.13.1",
1428
"json5": "^2.1.1"
@@ -25,15 +39,14 @@
2539
"@typescript-eslint/eslint-plugin": "^2.14.0",
2640
"@typescript-eslint/parser": "^2.14.0",
2741
"@typescript-eslint/typescript-estree": "^2.14.0",
28-
"conventional-changelog-cli": "^2.0.12",
29-
"conventional-github-releaser": "^3.1.2",
3042
"eslint": "^6.8.0",
3143
"eslint-plugin-vue-libs": "^4.0.0",
32-
"git-commit-message-convention": "git://github.com/kazupon/git-commit-message-convention.git",
3344
"jest": "^24.9.0",
3445
"jsdom": "^15.2.1",
46+
"lerna-changelog": "^1.0.0",
3547
"memory-fs": "^0.5.0",
3648
"opener": "^1.5.1",
49+
"shipjs": "^0.13.1",
3750
"ts-jest": "^24.2.0",
3851
"typescript": "^3.7.4",
3952
"typescript-eslint-language-service": "^2.0.3",
@@ -64,11 +77,11 @@
6477
},
6578
"scripts": {
6679
"build": "tsc -p .",
67-
"changelog": "conventional-changelog -i CHANGELOG.md -s -n ./node_modules/git-commit-message-convention/convention.js",
6880
"clean": "rm -rf ./coverage && rm -rf ./lib/*.js*",
6981
"coverage": "opener coverage/lcov-report/index.html",
7082
"lint": "eslint ./src ./test --ext .ts",
71-
"release": "conventional-github-releaser -n ./node_modules/git-commit-message-convention/convention.js",
83+
"release:prepare": "shipjs prepare",
84+
"release:trigger": "shipjs trigger",
7285
"test": "npm run lint && npm run test:cover",
7386
"test:cover": "npm run test:unit -- --coverage",
7487
"test:unit": "jest --env node",

ship.config.js

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
const execa = require(require.resolve('execa'))
2+
const { promisify } = require('util')
3+
const fs = require('fs')
4+
const path = require('path')
5+
const read = promisify(fs.readFile)
6+
const write = fs.writeFileSync
7+
8+
function extractSpecificChangelog (changelog, version) {
9+
if (!changelog) {
10+
return null
11+
}
12+
const escapedVersion = version.replace(/\./g, '\\.')
13+
const regex = new RegExp(
14+
`(#+?\\s\\[?v?${escapedVersion}\\]?[\\s\\S]*?)(#+?\\s\\[?v?\\d\\.\\d\\.\\d\\]?)`,
15+
'g'
16+
)
17+
const matches = regex.exec(changelog)
18+
return matches ? matches[1] : null
19+
}
20+
21+
async function commitChangelog (current, next) {
22+
const { stdout } = await execa('npx', ['lerna-changelog', '--next-version', `v${next}`])
23+
const escapedVersion = next.replace(/\./g, '\\.')
24+
const regex = new RegExp(
25+
`(#+?\\s\\[?v?${escapedVersion}\\]?[\\s\\S]*?)(#+?\\s\\[?v?\\d\\.\\d\\.\\d\\]?)`,
26+
'g'
27+
)
28+
const matches = regex.exec(stdout.toString())
29+
const head = matches ? matches[1] : stdout
30+
const changelog = await read('./CHANGELOG.md', 'utf8')
31+
return write('./CHANGELOG.md', `${head}\n\n${changelog}`)
32+
}
33+
34+
module.exports = {
35+
mergeStrategy: { toSameBranch: ['master'] },
36+
monorepo: undefined,
37+
updateChangelog: false,
38+
beforeCommitChanges: ({ nextVersion, exec, dir }) => {
39+
return new Promise(resolve => {
40+
const pkg = require('./package.json')
41+
commitChangelog(pkg.version, nextVersion).then(resolve)
42+
})
43+
},
44+
formatCommitMessage: ({
45+
version,
46+
releaseType,
47+
mergeStrategy,
48+
baseBranch
49+
}) => `${releaseType} release v${version}`,
50+
formatPullRequestTitle: ({
51+
version,
52+
releaseType
53+
}) => `${releaseType} release v${version}`,
54+
shouldRelease: () => true,
55+
releases: {
56+
extractChangelog: ({ version, dir }) => {
57+
const changelogPath = path.resolve(dir, 'CHANGELOG.md')
58+
try {
59+
const changelogFile = fs.readFileSync(changelogPath, 'utf-8').toString()
60+
const ret = extractSpecificChangelog(changelogFile, version)
61+
return ret
62+
} catch (err) {
63+
if (err.code === 'ENOENT') {
64+
return null
65+
}
66+
throw err
67+
}
68+
}
69+
}
70+
}

0 commit comments

Comments
 (0)