build-tools/code-gen.ts (57 lines of code) (raw):

import { spawnSync } from 'node:child_process'; import { readFileSync, writeFileSync } from 'node:fs'; import * as os from 'node:os'; import { join } from 'node:path'; import * as gh from '@actions/github'; const { version } = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8')); const { commit, suffix } = (function () { if (gh.context.sha) { return { commit: gh.context.sha, suffix: '' }; } const revParse = spawnSync('git', ['rev-parse', '--verify', 'HEAD'], { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'], }); if (revParse.error != null) { throw revParse.error; } if (revParse.status !== 0) { const description = revParse.signal != null ? `signal ${revParse.signal}` : `exit code ${revParse.status}`; console.error(`git rev-parse failed with ${description}`); process.exit(revParse.status ?? 128 + os.constants.signals[revParse.signal!]); } const diffStat = spawnSync('git', ['diff', '--stat', '--exit-code'], { stdio: 'ignore', }); if (diffStat.error != null) { throw diffStat.error; } if (diffStat.status == 0) { return { commit: revParse.stdout.trim(), suffix: '@local' }; } else if (diffStat.status == 1) { return { commit: revParse.stdout.trim(), suffix: '@dirty' }; } else { const description = diffStat.signal != null ? `signal ${diffStat.signal}` : `exit code ${diffStat.status}`; console.error(`git diff failed with ${description}`); process.exit(diffStat.status ?? 128 + os.constants.signals[diffStat.signal!]); } })(); writeFileSync( join(__dirname, '..', 'src', 'version.ts'), [ "import { versionMajorMinor } from 'typescript';", '', '// GENERATED: This file is generated by build-tools/code-gen.ts -- Do not edit by hand!', '', '/** The short version number for this JSII compiler (e.g: `X.Y.Z`) */', `export const SHORT_VERSION = '${version}';`, '', '/** The qualified version number for this JSII compiler (e.g: `X.Y.Z (build #######)`) */', `export const VERSION = '${version} (build ${commit.slice(0, 7)}${suffix})';`, '', '/** The release line identifier for this JSII compiler (e.g: `X.Y`) */', `export const RELEASE_LINE = versionMajorMinor;`, '', ].join('\n'), 'utf-8', );