Last active
September 8, 2019 23:14
-
-
Save luzeduardo/f1d5a4e9b045573377fe8916049e2f03 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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