|
|
- 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));
- })
-
- });
|