Skip to content

Instantly share code, notes, and snippets.

@danielsharvey
Forked from amcdnl/version.ts
Last active June 6, 2019 02:47
Show Gist options
  • Save danielsharvey/3b2a2c86ff9a67a98b7200ae955259e8 to your computer and use it in GitHub Desktop.
Save danielsharvey/3b2a2c86ff9a67a98b7200ae955259e8 to your computer and use it in GitHub Desktop.

Revisions

  1. danielsharvey revised this gist Jun 6, 2019. 3 changed files with 54 additions and 5 deletions.
    3 changes: 3 additions & 0 deletions build_number.json
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,3 @@
    {
    "buildNumber": 1
    }
    5 changes: 5 additions & 0 deletions package-partial.json
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,5 @@
    {
    "scripts": {
    "prestart": "node version.js"
    }
    }
    51 changes: 46 additions & 5 deletions version.ts
    Original file line number Diff line number Diff line change
    @@ -1,21 +1,62 @@

    // See https://medium.com/@amcdnl/version-stamping-your-app-with-the-angular-cli-d563284bb94d

    const { gitDescribeSync } = require('git-describe');
    const { version } = require('../package.json');
    const { resolve, relative } = require('path');
    const { writeFileSync } = require('fs-extra');

    const moment = require('moment');

    const { version } = require('./package.json');
    var { buildNumber } = require('./build_number.json');

    buildNumber++;

    const gitInfo = gitDescribeSync({
    dirtyMark: false,
    dirtySemver: false
    });

    gitInfo.version = version;
    let prerelease = version.split('-');
    let _version = prerelease.shift();
    let [major, minor, patch] = _version.split('.');

    if(gitInfo.dirty) prerelease.push('dirty');

    let raw = [_version, ...prerelease].join('-');
    let build = [buildNumber, gitInfo.distance, gitInfo.hash].filter(v => v).join('.');

    // full: <version>[-prerelease][-dirty]+<buildNumber>.<distance>.<sha>

    let versionInfo = {
    raw: raw, // '4.0.0-rc.6',
    major: major, // 4,
    minor: minor, // 0,
    patch: patch, // 0,
    prerelease: prerelease, // [ 'local' ],
    buildNumber: buildNumber,
    build: build, // 'sha.73808dd',
    version: version, // '4.0.0-local',
    // codeName: 'snapshot',
    // isSnapshot: true,
    full: [raw, build].join('+'), // '4.0.0-local+sha.73808dd',
    // branch: 'master',
    // commitSHA: '73808dd38b5ccd729404936834d1568bd066de81'
    hash: gitInfo.hash,
    buildDate: moment().format(),
    };

    const bnFile = resolve(__dirname, 'build_number.json');
    writeFileSync(bnFile,
    `${JSON.stringify({buildNumber:buildNumber}, null, 4)}
    `, { encoding: 'utf-8' });

    const file = resolve(__dirname, '..', 'src', 'environments', 'version.ts');
    const file = resolve(__dirname, 'angular_src', 'environments', 'version.ts');
    writeFileSync(file,
    `// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!
    /* tslint:disable */
    export const VERSION = ${JSON.stringify(gitInfo, null, 4)};
    export const VERSION = ${JSON.stringify(versionInfo, null, 4)};
    /* tslint:enable */
    `, { encoding: 'utf-8' });

    console.log(`Wrote version info ${gitInfo.raw} to ${relative(resolve(__dirname, '..'), file)}`);
    console.log(`Wrote version info ${versionInfo.version} to ${relative(resolve(__dirname, '.'), file)}`);
  2. @amcdnl amcdnl created this gist Feb 13, 2018.
    21 changes: 21 additions & 0 deletions version.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,21 @@
    const { gitDescribeSync } = require('git-describe');
    const { version } = require('../package.json');
    const { resolve, relative } = require('path');
    const { writeFileSync } = require('fs-extra');

    const gitInfo = gitDescribeSync({
    dirtyMark: false,
    dirtySemver: false
    });

    gitInfo.version = version;

    const file = resolve(__dirname, '..', 'src', 'environments', 'version.ts');
    writeFileSync(file,
    `// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!
    /* tslint:disable */
    export const VERSION = ${JSON.stringify(gitInfo, null, 4)};
    /* tslint:enable */
    `, { encoding: 'utf-8' });

    console.log(`Wrote version info ${gitInfo.raw} to ${relative(resolve(__dirname, '..'), file)}`);