import { dayjs } from '@wener/common/dayjs'; export interface BuildInfo { version: string; date?: string; isProd: boolean; isDev: boolean; commit: { shortSha?: string; timestamp?: string; tag?: string; refName?: string; branch?: string; }; } let _info: BuildInfo; export function getBuildInfo(): BuildInfo { return (_info ||= (() => { if (!globalThis?.process) { // avoid below reference error (globalThis as any).process = { env: {} as any }; } const buildInfo = { date: process.env.BUILD_DATE, commit: { shortSha: process.env.CI_COMMIT_SHORT_SHA, timestamp: process.env.CI_COMMIT_TIMESTAMP, tag: process.env.CI_COMMIT_TAG, refName: process.env.CI_COMMIT_REF_NAME, branch: process.env.CI_COMMIT_BRANCH, }, }; const midInfo = { ...buildInfo, version: buildInfo.date ? dayjs(buildInfo.date).format('YYYY.MM.DD') : '0.0.0', isProd: Boolean( buildInfo.commit.branch === 'main' || buildInfo.commit.branch === 'master' || buildInfo.commit.branch?.startsWith('release/') || buildInfo.commit.refName?.match(/^v\d/) || buildInfo.commit.refName?.match(/^release\//), ), }; return Object.freeze({ ...midInfo, date: buildInfo.date, isDev: !midInfo.isProd }); })()); }