comty/scripts/versionManager.js
2020-12-14 20:29:29 +01:00

136 lines
4.1 KiB
JavaScript

const path = require("path")
const process = require('process')
const getPackages = require("./utils/getPackages")
const fs = require("fs")
const rootPackageJSON = require(path.resolve(process.cwd(), './package.json'))
const versionFile = path.resolve(process.cwd(), './.version')
let version = null
module.exports.version = version
let parsedVersion = {
major: 0,
minor: 0,
patch: 0
}
module.exports.parsedVersion = parsedVersion
try { //init from runtime
if (!fs.existsSync(versionFile)) {
console.log(`.version file not exist, creating...`)
fs.writeFileSync(versionFile, rootPackageJSON.version)
}
version = fs.readFileSync(versionFile, 'utf8')
const args = process.argv.slice(2);
const parsed = version.split('.')
parsedVersion.major = parsed[0] ? Number(parsed[0]) : 0
parsedVersion.minor = parsed[1] ? Number(parsed[1]) : 0
parsedVersion.patch = parsed[2] ? Number(parsed[2]) : 0
if (args[0]) {
switch (args[0]) {
case "update": {
console.log(`⚙ Updating version (${version}) to (${args[1]})`)
return updateVersion(args[1])
}
case "bump": {
return bumpVersion(args[1])
}
default: {
console.error("Invalid arguments!")
break;
}
}
}
} catch (error) {
console.error("Fatal error! >", error)
return false
}
function parsedVersionToString(version) {
return `${version.major}.${version.minor}.${version.patch}`
}
module.exports.parsedVersionToString = parsedVersionToString
function getVersion() {
return version
}
module.exports.getVersion = getVersion
function updateVersion(to) {
if (!to) {
return false
}
let updated
if (typeof (to) == "object") {
updated = parsedVersionToString(to)
} else {
const parsed = to.split('.')
parsedVersion.major = parsed[0] ? Number(parsed[0]) : 0
parsedVersion.minor = parsed[1] ? Number(parsed[1]) : 0
parsedVersion.patch = parsed[2] ? Number(parsed[2]) : 0
updated = parsedVersionToString(parsedVersion)
}
console.log(`✅ Version updated to > ${updated}`)
return fs.writeFileSync(versionFile, updated)
}
module.exports.updateVersion = updateVersion
function bumpVersion(params) {
const bumps = {
major: params.includes("major"),
minor: params.includes("minor"),
patch: params.includes("patch"),
}
if (bumps.major) {
parsedVersion.major = parsedVersion.major + 1
parsedVersion.minor = 0
parsedVersion.path = 0
}
if (bumps.minor) {
parsedVersion.minor = parsedVersion.minor + 1
parsedVersion.path = 0
}
if (bumps.patch) {
parsedVersion.patch = parsedVersion.patch + 1
}
function bumpTable(major, minor, patch) {
this.major = major ? parsedVersion.major : false;
this.minor = minor ? parsedVersion.minor : false;
this.patch = patch ? parsedVersion.patch : false;
}
console.table(new bumpTable(bumps.major, bumps.minor, bumps.patch));
return updateVersion(parsedVersion)
}
module.exports.bumpVersion = bumpVersion
function syncPackagesVersions() {
const pkgs = getPackages()
pkgs.forEach((pkg) => {
try {
const pkgFilePath = path.resolve(process.cwd(), `./packages/${pkg}/package.json`)
if (!fs.existsSync(pkgFilePath)) {
console.log(`[${pkg}] ❌ This package is not bootstraped! > package.json not found. > Run npm run bootstrap for init this package.`)
return false
}
const pkgFile = JSON.parse(fs.readFileSync(pkgFilePath, 'utf8'))
if (pkgFile.version !== version) {
console.log(`[${pkg}] ✅ New version synchronized`)
return fs.writeFileSync(pkgFilePath, version)
}
console.log(`[${pkg}] 💠 Version is synchronized, no changes have been made...`)
} catch (error) {
console.error(`[${pkg}] ❌ Error syncing ! > ${error}`)
}
})
}
module.exports.syncPackagesVersions = syncPackagesVersions