mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 15:33:22 +00:00
96 lines
2.9 KiB
JavaScript
96 lines
2.9 KiB
JavaScript
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);
|