You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

119 lines
2.5 KiB

const path = require('path');
const semver = require('semver');
const { spawn } = require('child_process');
const fs = require('fs');
const root = path.resolve(__dirname, '..');
const pjsPath = path.resolve(root, 'package.json');
const pjs = require(pjsPath);
function parseVersion(tag) {
const { major, minor, prerelease, patch } = semver.parse(tag);
// Describe will give is commits since last tag
const [ commitsSinceTag, hash ] = prerelease[0] ? prerelease[0].split('-') : [
1,
process.env.TRAVIS_COMMIT || ''
];
return {
major,
minor,
prerelease,
patch,
commit: commitsSinceTag - 1,
hash
};
}
function getCommandOutput(command, args, cb) {
let output = '';
const cmd = spawn(command, args);
cmd.stdout.on('data', (data) => {
output += data;
});
cmd.on('close', (code) => {
if (code != 0) {
cb(new Error(`Command returned unsuccessful code: ${code}`));
return;
}
cb(null, output.trim());
});
}
function getVersion(cb) {
// https://docs.travis-ci.com/user/environment-variables/
if (process.env.TRAVIS_TAG) {
setImmediate(() => cb(null, parseVersion(process.env.TRAVIS_TAG.trim())));
return;
}
getCommandOutput('git', ['describe', '--tags'], (err, result) => {
if (err) {
cb(err);
return;
}
cb(null, parseVersion(result.trim()));
});
}
function getBranch(cb) {
if (process.env.TRAVIS_TAG) {
// TRAVIS_BRANCH matches TRAVIS_TAG when TRAVIS_TAG is set
// "git branch --contains tags/TRAVIS_TAG" doesn't work on travis so we have to assume 'master'
setImmediate(() => cb(null, 'master'));
return;
} else if (process.env.TRAVIS_BRANCH) {
setImmediate(() => cb(null, process.env.TRAVIS_BRANCH.trim()));
return;
}
getCommandOutput('git', ['rev-parse', '--abbrev-ref', 'HEAD'], (err, result) => {
if (err) {
cb(err);
return;
}
cb(null, result.trim());
});
}
function getPackageVersion(tag, branch) {
let baseVersion = `v${tag.major}.${tag.minor}.${tag.patch}`;
if (tag.commit === 0 && branch === 'master') {
return baseVersion;
}
baseVersion += '-';
if (branch !== 'master') {
baseVersion += (tag.commit + 1 + '.' + branch);
} else {
baseVersion += (tag.commit + 1);
}
return baseVersion;
}
getVersion((err, tag) => {
if (err) {
throw err;
}
getBranch((err, branch) => {
if (err) {
throw err;
}
pjs.version = getPackageVersion(tag, branch);
fs.writeFileSync(pjsPath, JSON.stringify(pjs, null, 2));
})
});