31 lines
841 B
JavaScript
31 lines
841 B
JavaScript
const assert = require("node:assert/strict");
|
|
const { execFileSync } = require("node:child_process");
|
|
|
|
const { version } = require("../package.json");
|
|
|
|
const git = (...arguments_) =>
|
|
execFileSync("git", arguments_, { encoding: "utf8" }).trim(); // eslint-disable-line sonarjs/no-os-command-from-path -- Repository checks use the developer/CI Git installation; arguments never invoke a shell.
|
|
|
|
assert.equal(
|
|
git("status", "--porcelain"),
|
|
"",
|
|
"Commit all changes before preparing a release",
|
|
);
|
|
|
|
const tag_ = git(
|
|
"tag",
|
|
"--merged",
|
|
"HEAD",
|
|
"--list",
|
|
"v[0-9]*",
|
|
"--sort=-version:refname",
|
|
)
|
|
.split("\n")
|
|
.find(tag => /^v\d+\.\d+\.\d+$/.test(tag));
|
|
|
|
assert.equal(
|
|
version,
|
|
tag_?.slice(1) ?? "0.0.0",
|
|
"Version is already prepared or release tags are missing. Fetch tags; finish the existing release before preparing another.",
|
|
);
|