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.", );