packages/miew/tools/version.js

Summary

Maintainability
C
1 day
Test Coverage
/* eslint-env node */

import yargs from 'yargs'
import { spawnSync } from 'child_process'
import packageJson from '../package.json'

const version = {
  base: packageJson.version,
  date: new Date()
    .toISOString()
    .replace(/[-:]|\..+/gi, '')
    .replace(/T/, '.')
}

if (process.env.NODE_ENV === 'production' || yargs.argv.release) {
  version.combined = version.base
} else {
  version.hash = (function () {
    function stdout(cmd) {
      return cmd.stdout === null ? 'nogit' : String(cmd.stdout).trim()
    }

    const gitLogHash = stdout(
      spawnSync('git', ['log', '-n1', '--pretty=format:%h'])
    )
    const gitStatus = stdout(spawnSync('git', ['status', '-s']))

    return gitLogHash + (gitLogHash !== 'nogit' && gitStatus ? '-mod' : '')
  })()
  version.combined = `${version.base}+${version.date}.${version.hash}`
}

version.copyright = `${packageJson.description} v${version.combined}
Copyright (c) 2015-${new Date().getFullYear()} ${packageJson.author}`

if (require.main === module) {
  process.stdout.write(version.copyright)
}

export default version