Files
Termix/scripts/beta-version.cjs
T

46 lines
1.2 KiB
JavaScript

#!/usr/bin/env node
/**
* Works out beta numbers from a list of tags on stdin.
*
* node scripts/beta-version.cjs 26.11.0 < tags.txt -> 26.11.0-beta.3
* node scripts/beta-version.cjs 26.11.0 --latest < tags.txt -> v26.11.0-beta.2
*/
const fs = require("fs");
function betaNumbers(base, tags) {
const prefix = `v${base}-beta.`;
return tags
.map((tag) => tag.trim())
.filter((tag) => tag.startsWith(prefix))
.map((tag) => Number(tag.slice(prefix.length)))
.filter((n) => Number.isInteger(n) && n > 0)
.sort((a, b) => a - b);
}
function nextBeta(base, tags) {
const numbers = betaNumbers(base, tags);
return `${base}-beta.${(numbers.at(-1) ?? 0) + 1}`;
}
function latestBetaTag(base, tags) {
const numbers = betaNumbers(base, tags);
return numbers.length ? `v${base}-beta.${numbers.at(-1)}` : "";
}
if (require.main === module) {
const base = process.argv[2];
if (!base || !/^\d+\.\d+\.\d+$/.test(base)) {
console.error("beta-version: pass a version like 26.11.0");
process.exit(1);
}
const tags = fs.readFileSync(0, "utf8").split("\n");
console.log(
process.argv.includes("--latest")
? latestBetaTag(base, tags)
: nextBeta(base, tags),
);
}
module.exports = { latestBetaTag, nextBeta };