'use strict'; const { test } = require('node:test'); const assert = require('node:assert/strict'); const fs = require('node:fs'); const os = require('node:os'); const path = require('node:path'); const { execFileSync } = require('node:child_process'); const { getBuildId, isGitRevision } = require('../src/utils/buildId'); test('build ID resolves real Git checkouts, packed refs, worktrees, baked images and unknown sources', t => { const root = fs.mkdtempSync(path.join(os.tmpdir(), 'ped-build-id-')); t.after(() => fs.rmSync(root, { recursive: true, force: true })); const repo = path.join(root, 'repo'); fs.mkdirSync(repo); const git = (...args) => execFileSync('git', ['-C', repo, ...args], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], }).trim(); git('init'); git('-c', 'user.name=Build Test', '-c', 'user.email=build@example.invalid', '-c', 'commit.gpgsign=false', 'commit', '--allow-empty', '-m', 'test'); const sha = git('rev-parse', 'HEAD'); assert.equal(sha.length, 40); assert.equal(getBuildId(repo), sha); git('pack-refs', '--all', '--prune'); assert.equal(fs.existsSync(path.join(repo, '.git', git('symbolic-ref', 'HEAD'))), false); assert.equal(getBuildId(repo), sha); const worktree = path.join(root, 'worktree'); git('worktree', 'add', '--detach', worktree, 'HEAD'); assert.equal(fs.statSync(path.join(worktree, '.git')).isFile(), true); assert.equal(getBuildId(worktree), sha); git('checkout', '--detach', 'HEAD'); assert.equal(getBuildId(repo), sha); // No accidental ancestor Git discovery for an unversioned source directory. const plain = path.join(repo, 'plain'); fs.mkdirSync(plain); assert.equal(getBuildId(plain), 'unknown'); const baked = 'b'.repeat(40); fs.writeFileSync(path.join(plain, 'BUILD_ID'), baked + '\n'); assert.equal(getBuildId(plain), baked); fs.writeFileSync(path.join(worktree, 'BUILD_ID'), baked); assert.equal(getBuildId(worktree), baked, 'baked metadata takes precedence'); for (const invalid of ['unknown', '', 'abc1234', 'z'.repeat(40), '