const fs = require("fs"); const path = require("path"); const { execSync } = require("child_process"); function getBranchName() { return execSync("git rev-parse --abbrev-ref HEAD").toString().trim(); } function formatCommitMessageFromBranchName(branchName) { // Vérifie si le nom de la branche suit le format "type-(ID_TIKET)-nom_de_fonctionnalité" const typeAllowed = [ "feat", "fix", "docs", "style", "refactor", "test", "chore", ]; const typeRegex = typeAllowed.join("|"); const regex = new RegExp(`^(${typeRegex})-([0-9]+)-(.+)$`); const match = branchName.match(regex); const regexWithoutTicket = new RegExp(`^(${typeRegex})-(.+)$`); const matchWithoutTicket = branchName.match(regexWithoutTicket); if (match) { const type = match[1]; const idTicket = match[2]; const featureName = match[3]; return `${type}: ${featureName.replace(/[-_]/g, " ")} [${idTicket}]`; } else if (matchWithoutTicket) { const type = matchWithoutTicket[1]; const featureName = matchWithoutTicket[2]; return `${type}: ${featureName.replace(/[-_]/g, " ")}`; } return null; } /** * Ajoute le contenu du fichier template au message de commit * @param {*} commitMsg */ function getCommitTemplateMsg() { // Fichier template const TEMPLATE_FILE = path.join(__dirname, "./commit-template.txt"); // Vérifie si le fichier template existe if (fs.existsSync(TEMPLATE_FILE)) { try { // Lit le fichier template const templateContent = fs.readFileSync(TEMPLATE_FILE, "utf8"); // Ajoute le contenu du template au message de commit return `${templateContent}`; } catch (error) { console.error( "Erreur lors de la modification du message de commit :", error ); process.exit(1); } } else { console.warn(`Fichier template introuvable : ${TEMPLATE_FILE}`); } } // ---------------------------------------------------- // MAIN // ---------------------------------------------------- // Arguments passés par Husky const commitMsgFile = process.argv[2]; const commitType = process.argv[3]; // Vérifie si le commit est interactif if (commitType === "message" || commitType === "template") { process.exit(0); } const currentCommitMessage = fs.readFileSync(commitMsgFile, "utf8"); const branchName = getBranchName(); const newBranchMessage = formatCommitMessageFromBranchName(branchName); let newCommitMessage = ""; if (newBranchMessage) { // Vérifie si le message de commit est déjà présent const messageRegex = new RegExp(`^${newBranchMessage}`, "m"); if (!messageRegex.test(currentCommitMessage)) { newCommitMessage = `${newBranchMessage}\n${getCommitTemplateMsg()}\n${currentCommitMessage}`; } else { // Si le message de commit est déjà présent, on ne fait rien newCommitMessage = currentCommitMessage; } } else { newCommitMessage = `${currentCommitMessage}\n${getCommitTemplateMsg()}`; } fs.writeFileSync(commitMsgFile, newCommitMessage);