import assert from 'node:assert/strict'; import { execFileSync, spawnSync } from 'node:child_process'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import test from 'node:test'; const script = path.resolve('runtime/checkout-active-release.sh'); const roots = []; const git = (cwd, ...args) => execFileSync('git', args, { cwd, encoding: 'utf8', env: { ...process.env, GIT_AUTHOR_NAME: 'Sammo Test', GIT_AUTHOR_EMAIL: 'sammo-test@example.invalid', GIT_COMMITTER_NAME: 'Sammo Test', GIT_COMMITTER_EMAIL: 'sammo-test@example.invalid', }, }).trim(); const fixture = () => { const root = fs.mkdtempSync(path.join(os.tmpdir(), 'sammo-active-release-')); roots.push(root); git(root, 'init', '-b', 'main'); fs.writeFileSync(path.join(root, 'version.txt'), 'one\n'); git(root, 'add', 'version.txt'); git(root, 'commit', '-m', 'first'); const first = git(root, 'rev-parse', 'HEAD'); fs.writeFileSync(path.join(root, 'version.txt'), 'two\n'); git(root, 'commit', '-am', 'second'); const second = git(root, 'rev-parse', 'HEAD'); git(root, 'update-ref', 'refs/sammo/active-gateway', first); return { root, first, second }; }; test.afterEach(() => { for (const root of roots.splice(0)) fs.rmSync(root, { recursive: true, force: true }); }); test('checks out the persistent active release instead of the previous bootstrap HEAD', () => { const { root, first, second } = fixture(); assert.equal(git(root, 'rev-parse', 'HEAD'), second); execFileSync('/bin/sh', [script, root, 'refs/sammo/active-gateway']); assert.equal(git(root, 'rev-parse', 'HEAD'), first); }); test('rejects refs outside the managed release namespace', () => { const { root } = fixture(); const result = spawnSync('/bin/sh', [script, root, 'refs/heads/main'], { encoding: 'utf8' }); assert.equal(result.status, 64); assert.match(result.stderr, /refs\/sammo/u); }); test('refuses to hide tracked bootstrap checkout changes', () => { const { root, second } = fixture(); fs.writeFileSync(path.join(root, 'version.txt'), 'dirty\n'); const result = spawnSync('/bin/sh', [script, root, 'refs/sammo/active-gateway'], { encoding: 'utf8' }); assert.equal(result.status, 65); assert.equal(git(root, 'rev-parse', 'HEAD'), second); });