@maggioli-rd/sr-codeowners-plugin
Version:
Maggioli Semantic Release Plugin: Codeowners
42 lines (41 loc) • 1.61 kB
JavaScript
import SemanticReleaseError from "@semantic-release/error";
import { execa } from "execa";
import { getConfig } from "./utils.js";
export const verifyRelease = async (pluginConfig, { logger }) => {
const { excludeRegex, header, codeownersPath, limit, leaderboard } = getConfig(pluginConfig);
var cmd = "git shortlog -s -e -n --all |";
if (leaderboard == true) {
logger.log("Set " + leaderboard + " as leaderboard");
cmd = "git shortlog -s -e -n --all | sed -e 's/^/# /' >> " + codeownersPath + " && " + cmd;
}
else {
logger.log("Skip leaderboard!");
}
if (header.length != 0) {
logger.log("Set " + header + " as header");
cmd = "echo '" + header + "' > " + codeownersPath + " && " + cmd;
}
else {
logger.log("Skip header!");
cmd = "touch " + codeownersPath + " && " + cmd;
}
if (excludeRegex.length != 0) {
logger.log("Set " + excludeRegex + " as excludeRegex");
cmd = cmd + " grep -v -E '" + excludeRegex + "' |";
}
else {
logger.log("Skip excludeRegex!");
}
logger.log("Set " + limit + " as limit");
cmd = "(rm CODEOWNERS " + codeownersPath + " || true) && " + cmd + " sed 's/.*<\\(.*\\)>/\\1/' | sed -e 's/^/* /' | sort -u | head -" + limit + " >> " + codeownersPath;
logger.log("Running cmd: " + cmd);
await verifyCommand("bash", ["-c", cmd]);
};
const verifyCommand = async (command, args) => {
try {
await execa(command, args);
}
catch (error) {
throw new SemanticReleaseError(`${command} returned an error: ${error}`);
}
};