mirror of
https://github.com/Boof2015/prism.git
synced 2026-08-12 13:20:53 +02:00
72 lines
1.8 KiB
JavaScript
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')
|