From 22b34e7ac9d22ff6314fc1db318fcf2e5466425b Mon Sep 17 00:00:00 2001 From: Kia King Ishii Date: Fri, 20 Nov 2020 15:59:51 +0900 Subject: [PATCH] chore: update release script to match with other latest vue libs (#134) --- package.json | 5 ++- scripts/release.js | 110 +++++++++++++++++++++++++++++++++++++++++++++ scripts/release.sh | 34 -------------- yarn.lock | 7 ++- 4 files changed, 120 insertions(+), 36 deletions(-) create mode 100644 scripts/release.js delete mode 100644 scripts/release.sh diff --git a/package.json b/package.json index 1a3f8371..0c989f0b 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "lint:js": "prettier --check --write \"{bin,docs,scripts,src}/**/*.js\"", "lint:ts": "prettier --check --write --parser typescript \"{src,docs,types}/**/*.ts\"", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s", - "release": "bash scripts/release.sh", + "release": "node scripts/release.js", "docs": "run-p dev docs-dev", "docs-dev": "node ./bin/vitepress dev docs", "docs-build": "yarn build && node ./bin/vitepress build docs", @@ -94,12 +94,15 @@ "@types/postcss-load-config": "^2.0.1", "chokidar": "^3.4.2", "conventional-changelog-cli": "^2.1.0", + "enquirer": "^2.3.6", + "execa": "^4.1.0", "koa": "^2.13.0", "koa-static": "^5.0.0", "lint-staged": "^10.3.0", "npm-run-all": "^4.1.5", "prettier": "^2.0.5", "rimraf": "^3.0.2", + "semver": "^7.3.2", "typescript": "^3.8.3", "yorkie": "^2.0.0" } diff --git a/scripts/release.js b/scripts/release.js new file mode 100644 index 00000000..ad14fdf3 --- /dev/null +++ b/scripts/release.js @@ -0,0 +1,110 @@ +const fs = require('fs') +const path = require('path') +const chalk = require('chalk') +const semver = require('semver') +const { prompt } = require('enquirer') +const execa = require('execa') +const currentVersion = require('../package.json').version + +const versionIncrements = ['patch', 'minor', 'major'] + +const tags = ['latest', 'next'] + +const inc = (i) => semver.inc(currentVersion, i) +const bin = (name) => path.resolve(__dirname, `../node_modules/.bin/${name}`) +const run = (bin, args, opts = {}) => + execa(bin, args, { stdio: 'inherit', ...opts }) +const step = (msg) => console.log(chalk.cyan(msg)) + +async function main() { + let targetVersion + + const { release } = await prompt({ + type: 'select', + name: 'release', + message: 'Select release type', + choices: versionIncrements.map((i) => `${i} (${inc(i)})`).concat(['custom']) + }) + + if (release === 'custom') { + targetVersion = ( + await prompt({ + type: 'input', + name: 'version', + message: 'Input custom version', + initial: currentVersion + }) + ).version + } else { + targetVersion = release.match(/\((.*)\)/)[1] + } + + if (!semver.valid(targetVersion)) { + throw new Error(`Invalid target version: ${targetVersion}`) + } + + const { tag } = await prompt({ + type: 'select', + name: 'tag', + message: 'Select tag type', + choices: tags + }) + + console.log(tag) + + const { yes } = await prompt({ + type: 'confirm', + name: 'yes', + message: `Releasing v${targetVersion} with the "${tag}" tag. Confirm?` + }) + + if (!yes) { + return + } + + // Update the package version. + step('\nUpdating the package version...') + updatePackage(targetVersion) + + // Build the package. + step('\nBuilding the package...') + await run('yarn', ['build']) + + // Generate the changelog. + step('\nGenerating the changelog...') + await run('yarn', ['changelog']) + + // Commit changes to the Git. + step('\nCommitting changes...') + await run('git', ['add', '-A']) + await run('git', ['commit', '-m', `release: v${targetVersion}`]) + + // Publish the package. + step('\nPublishing the package...') + await run('yarn', [ + 'publish', + '--tag', + tag, + '--new-version', + targetVersion, + '--no-commit-hooks', + '--no-git-tag-version' + ]) + + // Push to GitHub. + step('\nPushing to GitHub...') + await run('git', ['tag', `v${targetVersion}`]) + await run('git', ['push', 'origin', `refs/tags/v${targetVersion}`]) + await run('git', ['push']) +} + +function updatePackage(version) { + const pkgPath = path.resolve(path.resolve(__dirname, '..'), 'package.json') + const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) + + pkg.version = version + + fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n') +} + +main().catch((err) => console.error(err)) diff --git a/scripts/release.sh b/scripts/release.sh deleted file mode 100644 index 22b92c33..00000000 --- a/scripts/release.sh +++ /dev/null @@ -1,34 +0,0 @@ -set -e -echo "Current version:" $(grep version package.json | sed -E 's/^.*"([0-9][^"]+)".*$/\1/') -echo "Enter the new version you want to publish e.g., 0.0.2: " -read VERSION - -read -p "Releasing v$VERSION - are you sure? (y/n)" -n 1 -r -echo # (optional) move to a new line -if [[ $REPLY =~ ^[Yy]$ ]] -then - echo "Releasing v$VERSION ..." - - # generate the version so that the changelog can be generated too - yarn version --no-git-tag-version --no-commit-hooks --new-version $VERSION - - yarn run build - - # changelog - yarn run changelog - yarn prettier --write CHANGELOG.md - echo "Please check the git history and the changelog and press enter" - read OKAY - - # commit and tag - git add CHANGELOG.md package.json - git commit -m "release: v$VERSION" - git tag "v$VERSION" - - # commit - yarn publish --new-version "$VERSION" --no-commit-hooks --no-git-tag-version - - # publish - git push origin refs/tags/v$VERSION - git push -fi diff --git a/yarn.lock b/yarn.lock index d1c6519a..72ac6e61 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1316,7 +1316,7 @@ execa@^0.8.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.0.3: +execa@^4.0.3, execa@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== @@ -3286,6 +3286,11 @@ semver@^6.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"