Skip to content

Instantly share code, notes, and snippets.

@luzeduardo
Last active September 8, 2019 23:14
Show Gist options
  • Save luzeduardo/f1d5a4e9b045573377fe8916049e2f03 to your computer and use it in GitHub Desktop.
Save luzeduardo/f1d5a4e9b045573377fe8916049e2f03 to your computer and use it in GitHub Desktop.
const spawn = require('child_process').spawn
const path = require('path')
const spawnPromise = (command, args, options) => new Promise(
(resolve, reject) => {
const task = spawn(command, args, options)
const { stdout } = task
stdout.on('data', (data) => {
resolve(data)
})
task.on('exit', (code) => {
if (code === 0) {
resolve()
} else {
if (args === undefined) { args = [] }
// console.error(chalk.red.bold(`❯ 💣 Failed on ${command} ${args.join(' ')}`))
reject(code)
}
})
}
)
async function stash_before_release() {
await spawnPromise(
'git',
[
"stash"
],
)
}
async function fetch() {
await spawnPromise(
'git',
[
"fetch"
],
)
}
async function pull_branch(branch) {
await spawnPromise(
'git',
[
"checkout",
branch
],
)
await spawnPromise(
'git',
[
"pull",
"-pr",
branch
],
)
}
async function lastReleaseNumber() {
const result = await spawnPromise(
'git',
[
"log",
"--merges",
"--pretty=format:%s",
],
)
return result.toString().split("\n").slice(0,20).find(commitMessage => commitMessage.toLowerCase().includes('release') )
}
function getVersionNumber(line) {
const regexVersion = /(\d+).(\d+).(\d+)/
const version = regexVersion.exec(line);
return version && version || new Error("Wrong value provided for version string check\n\n")
}
function start_release(releaseNumberArray, type){
const version = sumVersioningChanges(releaseNumberArray, type)
// const result = await spawnPromise(
// 'git',
// [
// "release",
// "start",
// version,
// ],
// )
return version
}
async function changePackageJson(type) {
return await spawnPromise(
'npm',
[
"version",
type
],
)
}
const mountSummedVersionString = array => array.join('.')
const sumVersioningChanges = (lastVersionArray, type) => {
let changed = false;
let newVersionArray = lastVersionArray.slice(1,4)
let version = 0
if (type.toLowerCase() === 'major') {
version = parseInt(newVersionArray[0], 10) + 1
newVersionArray[0] = version
newVersionArray[1] = 0
newVersionArray[2] = 0
changed = true
} else if (type.toLowerCase() === 'minor') {
version = parseInt(newVersionArray[1], 10) + 1
newVersionArray[1] = version
newVersionArray[2] = 0
changed = true
} else if (type.toLowerCase() === 'patch') {
version = parseInt(newVersionArray[2], 10) + 1
newVersionArray[2] = version
changed = true
}
if(!changed){
throw new Error('Must provide a type for release in: [minor, major or patch]')
}
return mountSummedVersionString(newVersionArray)
}
async function main(changeType 'patch') {
// await stash_before_release()
// await fetch();
const lastCommitMessageRelease = await lastReleaseNumber();
const releaseNumberArray = getVersionNumber(lastCommitMessageRelease)
// await pull_branch('dev')
// await pull_branch('master')
const newV = start_release(releaseNumberArray, changeType)
console.log(newV)
}
// main('patch')
changePackageJson('1.1.2')
module.exports = {
// spawnPromise: spawnPromise,
// writeIdSync: writeIdSync,
// isIdFreshSync: isIdFreshSync
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment