Files
prism/scripts/build/writeAppBuildMetadata.cjs
T
2026-04-22 00:05:56 -04:00

72 lines
1.8 KiB
JavaScript

#!/usr/bin/env node
const fs = require('fs')
const path = require('path')
const { execFileSync } = require('child_process')
const outputPath = path.resolve(__dirname, '../../out/build-metadata.json')
const repoRoot = path.resolve(__dirname, '../..')
const DIRTY_ENV_TRUE_VALUES = new Set(['1', 'true', 'yes', 'dirty'])
const DIRTY_ENV_FALSE_VALUES = new Set(['0', 'false', 'no', 'clean'])
function normalizeCommitHash(value) {
if (typeof value !== 'string') return null
const trimmed = value.trim()
return trimmed.length > 0 ? trimmed : null
}
function parseDirtyEnvValue(value) {
if (typeof value !== 'string') return null
const normalized = value.trim().toLowerCase()
if (!normalized) return null
if (DIRTY_ENV_TRUE_VALUES.has(normalized)) return true
if (DIRTY_ENV_FALSE_VALUES.has(normalized)) return false
return null
}
function execGit(args) {
return execFileSync('git', args, {
cwd: repoRoot,
encoding: 'utf8',
stdio: ['ignore', 'pipe', 'ignore'],
})
}
function resolveBuildMetadata() {
const envCommitHash = normalizeCommitHash(process.env.PRISM_GIT_COMMIT)
const envDirty = parseDirtyEnvValue(process.env.PRISM_GIT_DIRTY)
if (envCommitHash) {
return {
commitHash: envCommitHash,
isDirty: envDirty ?? false,
}
}
try {
const commitHash = normalizeCommitHash(execGit(['rev-parse', 'HEAD']))
if (!commitHash) {
return {
commitHash: null,
isDirty: false,
}
}
const isDirty = envDirty ?? execGit(['status', '--porcelain']).trim().length > 0
return {
commitHash,
isDirty,
}
} catch {
return {
commitHash: null,
isDirty: false,
}
}
}
const metadata = resolveBuildMetadata()
fs.mkdirSync(path.dirname(outputPath), { recursive: true })
fs.writeFileSync(outputPath, `${JSON.stringify(metadata, null, 2)}\n`, 'utf8')