55 lines
1.8 KiB
JavaScript
55 lines
1.8 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Release verification. Always: every published package carries one shared
|
|
* version, and — when running from a tag or publishing — the
|
|
* `landlock-run-vX.Y.Z` tag matches it. With `--prebuilds`: every platform package's declared
|
|
* binaries exist with the right ELF architecture (run after
|
|
* `assemble-prebuilds.mjs` or a local `build:native`).
|
|
*/
|
|
|
|
import path from 'node:path';
|
|
import { packageDirs, platformDirs, readJson, root, verifyPlatformBinaries } from './repo.mjs';
|
|
|
|
const TAG_PREFIX = 'refs/tags/landlock-run-v';
|
|
|
|
function verifyVersions() {
|
|
const packages = packageDirs().map((dir) => ({
|
|
dir,
|
|
manifest: readJson(path.join(root, dir, 'package.json')),
|
|
}));
|
|
const versions = new Set(packages.map((pkg) => pkg.manifest.version));
|
|
if (versions.size !== 1) {
|
|
throw new Error([
|
|
'published package versions must match:',
|
|
...packages.map((pkg) => `${pkg.dir}: ${pkg.manifest.version}`),
|
|
].join('\n'));
|
|
}
|
|
|
|
const version = packages[0].manifest.version;
|
|
const ref = process.env.GITHUB_REF || '';
|
|
const publish = process.env.RELEASE_PUBLISH === 'true';
|
|
if (publish && !ref.startsWith(TAG_PREFIX)) {
|
|
throw new Error('publishing requires running the workflow from a landlock-run-v* tag');
|
|
}
|
|
if (ref.startsWith(TAG_PREFIX)) {
|
|
const tagVersion = ref.slice(TAG_PREFIX.length);
|
|
if (tagVersion !== version) {
|
|
throw new Error(`tag/version mismatch: tag landlock-run-v${tagVersion}, packages ${version}`);
|
|
}
|
|
}
|
|
|
|
console.log(`Verified release version ${version}`);
|
|
}
|
|
|
|
function verifyPrebuilds() {
|
|
for (const dir of platformDirs()) {
|
|
const { name, count } = verifyPlatformBinaries(path.join(root, dir));
|
|
console.log(`Verified ${name}: ${count} binaries`);
|
|
}
|
|
}
|
|
|
|
verifyVersions();
|
|
if (process.argv.includes('--prebuilds')) {
|
|
verifyPrebuilds();
|
|
}
|