Files
Firelink/scripts/engine-payload-manifest.node-test.js
T
NimBold d8a6440998 ci: cache verified engine payloads
- cache target-scoped engine payloads with exact lock and toolchain keys\n- validate manifest provenance, checksums, and paths before reuse\n- restrict cache writes to trusted main pushes while allowing release restores\n- fall back to source provisioning when a cache is absent or invalid\n- harden release checksum generation against pipeline races
2026-09-06 20:55:06 +03:30

98 lines
3.0 KiB
JavaScript

import assert from 'node:assert/strict';
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import test from 'node:test';
import {
assertPayloadManifestProvenance,
buildPayloadProvenance,
readAndValidatePayloadManifest,
} from './engine-payload-manifest.js';
import { sha256 } from './engine-payload-integrity.js';
const TARGET = 'x86_64-unknown-linux-gnu';
const SOURCES = {
'yt-dlp': {
version: '2026.08.19',
url: 'https://example.invalid/yt-dlp.zip',
sha256: 'a'.repeat(64),
},
deno: {
version: '2.9.6',
url: 'https://example.invalid/deno.zip',
sha256: 'b'.repeat(64),
},
ffmpeg: {
version: '9.0.1',
url: 'https://example.invalid/ffmpeg.tar.xz',
sha256: 'c'.repeat(64),
},
aria2c: {
version: '1.37.0-firelink-native-dns-v1',
url: 'https://example.invalid/aria2.tar.xz',
sha256: 'd'.repeat(64),
buildFromSource: true,
patchSha256: 'e'.repeat(64),
allocationTelemetry: true,
firelinkRouteContract: {
revision: 'firelink-native-dns-v1',
dnsResolver: 'native-async',
networkTargetPolicy: 'firelink-v1',
networkTargetPolicyDigest: 'sha256:test',
},
},
};
function createPayload() {
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'firelink-engine-manifest-'));
const file = path.join(root, 'aria2c');
fs.writeFileSync(file, 'verified engine');
const manifest = {
schemaVersion: 1,
target: TARGET,
generatedFrom: buildPayloadProvenance(SOURCES),
files: { aria2c: sha256(file) },
};
fs.writeFileSync(path.join(root, 'payload-manifest.json'), `${JSON.stringify(manifest)}\n`);
return { root, manifest };
}
test('payload manifest validation binds files and source provenance', () => {
const { root, manifest } = createPayload();
try {
assert.deepEqual(readAndValidatePayloadManifest(root, SOURCES, TARGET), manifest);
assert.doesNotThrow(() => assertPayloadManifestProvenance(manifest, SOURCES, TARGET));
} finally {
fs.rmSync(root, { recursive: true, force: true });
}
});
test('payload manifest validation rejects changed provenance and path traversal', () => {
const { root, manifest } = createPayload();
try {
const changed = { ...manifest, generatedFrom: { ...manifest.generatedFrom } };
changed.generatedFrom.aria2c = {
...changed.generatedFrom.aria2c,
patchSha256: 'f'.repeat(64),
};
fs.writeFileSync(path.join(root, 'payload-manifest.json'), JSON.stringify(changed));
assert.throws(
() => readAndValidatePayloadManifest(root, SOURCES, TARGET),
/provenance mismatch/,
);
const traversal = {
...manifest,
files: { '../outside': '0'.repeat(64) },
};
fs.writeFileSync(path.join(root, 'payload-manifest.json'), JSON.stringify(traversal));
assert.throws(
() => readAndValidatePayloadManifest(root, SOURCES, TARGET),
/escapes its root|files do not match/,
);
} finally {
fs.rmSync(root, { recursive: true, force: true });
}
});