gh-action-bump-version/merge-release-run.js

66 lines
2.2 KiB
JavaScript
Raw Normal View History

2019-01-26 23:00:32 +00:00
#!/usr/bin/env node
2019-01-26 22:29:58 +00:00
const fs = require('fs')
2019-02-02 17:07:12 +00:00
const path = require('path')
2019-05-23 18:43:01 +00:00
const bent = require('bent')
const git = require('simple-git')()
const { execSync } = require('child_process')
2019-05-23 18:43:01 +00:00
const { promisify } = require('util')
2019-01-26 23:48:46 +00:00
2019-05-23 18:43:01 +00:00
const getlog = promisify(git.log.bind(git))
2019-05-23 18:43:01 +00:00
const get = bent('json', 'https://registry.npmjs.org/')
2019-05-23 18:43:01 +00:00
const event = JSON.parse(fs.readFileSync('/github/workflow/event.json').toString())
2019-02-02 17:07:12 +00:00
let pkg = require(path.join(process.cwd(), 'package.json'))
2019-05-23 18:13:42 +00:00
2019-05-23 18:43:01 +00:00
const run = async () => {
if (!process.env.NPM_AUTH_TOKEN) throw new Error('Merge-release requires NPM_AUTH_TOKEN')
2019-05-23 18:43:01 +00:00
let latest
try {
latest = await get(pkg.name + '/latest')
} catch (e) {
// unpublished
}
2019-05-23 18:13:42 +00:00
2019-05-23 18:43:01 +00:00
let messages
2019-05-23 18:13:42 +00:00
2019-05-23 18:43:01 +00:00
if (latest) {
if (latest.gitHead === process.env.GITHUB_SHA) return console.log('SHA matches latest release, skipping.')
if (latest.gitHead) {
2019-09-09 23:02:03 +00:00
try {
let logs = await getlog({ from: latest.gitHead, to: process.env.GITHUB_SHA })
messages = logs.all.map(r => r.message + '\n' + r.body)
} catch (e) {
latest = null
}
2019-05-23 18:43:01 +00:00
// g.log({from: 'f0002b6c9710f818b9385aafeb1bde994fe3b370', to: '53a92ca2d1ea3c55977f44d93e48e31e37d0bc69'}, (err, l) => console.log(l.all.map(r => r.message + '\n' + r.body)))
} else {
latest = null
}
}
if (!latest) {
messages = event.commits.map(commit => commit.message + '\n' + commit.body)
}
let version = 'patch'
if (messages.map(message => message.includes('BREAKING CHANGE')).includes(true)) {
version = 'major'
} else if (messages.map(message => message.toLowerCase().startsWith('feat')).includes(true)) {
version = 'minor'
}
2019-09-10 00:09:00 +00:00
const exec = str => process.stdout.write(execSync(str))
2019-05-23 18:43:01 +00:00
let current = execSync(`npm view ${pkg.name} version`).toString()
2019-09-10 00:09:00 +00:00
exec(`npm version --allow-same-version=true --git-tag-version=false ${current} `)
2019-09-10 01:53:52 +00:00
console.log('current:', current, '/', 'version:', version)
2019-05-23 18:43:01 +00:00
let newVersion = execSync(`npm version --git-tag-version=false ${version}`).toString()
2019-09-10 01:53:52 +00:00
console.log('new version:', newVersion)
2019-09-10 00:09:00 +00:00
exec(`npm publish --access=public`)
2019-09-10 03:20:32 +00:00
exec(`git checkout package.json`) // cleanup
2019-09-10 02:07:49 +00:00
exec(`git tag ${newVersion}`)
2019-09-10 02:37:12 +00:00
exec(`git push merge-release --tags`)
2019-05-23 18:43:01 +00:00
}
run()