"use strict";
const { execFileSync } = require("node:child_process");
const fs = require("node:fs");
const path = require("node:path");
const root = path.resolve(__dirname, "..");
const read = (f) => fs.readFileSync(path.join(root, f), "utf8");
const meta = JSON.parse(
execFileSync("cargo", ["metadata", "--no-deps", "--format-version", "1"], {
cwd: root,
encoding: "utf8",
maxBuffer: 1 << 24,
}),
);
const manifestVersion = (name) => {
const p = meta.packages.find((x) => x.name === name);
return p && p.version;
};
const lockToml = read("Cargo.lock");
const lockVersion = (name) => {
const m = lockToml.match(new RegExp(`name = "${name}"\\nversion = "([^"]+)"`));
return m && m[1];
};
const pkg = JSON.parse(read("node/package.json"));
const lock = JSON.parse(read("node/package-lock.json"));
const locations = {
"manifest: murk-cli": manifestVersion("murk-cli"),
"manifest: murk-napi": manifestVersion("murk-napi"),
"Cargo.lock: murk-cli": lockVersion("murk-cli"),
"Cargo.lock: murk-napi": lockVersion("murk-napi"),
"node/package.json": pkg.version,
"node/package-lock.json (root)": lock.version,
"node/package-lock.json (packages[''])": lock.packages?.[""]?.version,
};
for (const [where, version] of Object.entries(locations)) {
console.log(` ${String(version).padEnd(8)} ${where}`);
}
const distinct = [...new Set(Object.values(locations))];
if (distinct.length !== 1 || !distinct[0]) {
console.error(
`::error::murk version drift across ${Object.keys(locations).length} locations: ${distinct.join(", ")}`,
);
process.exit(1);
}
console.log(`OK: all versions consistent at ${distinct[0]}`);