mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 15:33:22 +00:00
chore: Ajout Hook Husky
This commit is contained in:
@ -1,4 +1 @@
|
||||
#!/bin/sh
|
||||
. "$(dirname "$0")/_/husky.sh"
|
||||
|
||||
node scripts/prepare-commit-msg.js "$1" "$2"
|
||||
@ -1,5 +1,7 @@
|
||||
# Message de commit (conventionnel) :
|
||||
#
|
||||
# Construction automatique depuis une branche aux formats:
|
||||
# - <type>-<ticket-id>-ma_super_description
|
||||
# - <type>-ma_super_description
|
||||
# <type>(<scope>): <description> [#<ticket-id>]
|
||||
# ex : feat(frontend): ajout de la gestion des utilisateurs dans le dashboard [#1]
|
||||
#
|
||||
|
||||
@ -1,30 +1,95 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const { execSync } = require("child_process");
|
||||
|
||||
// Fichier template
|
||||
const TEMPLATE_FILE = path.join(__dirname, './commit-template.txt');
|
||||
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);
|
||||
if (commitType === "message" || commitType === "template") {
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
// Vérifie si le fichier template existe
|
||||
if (fs.existsSync(TEMPLATE_FILE)) {
|
||||
try {
|
||||
// Lit le fichier template
|
||||
const templateContent = fs.readFileSync(TEMPLATE_FILE, 'utf8');
|
||||
const currentCommitMessage = fs.readFileSync(commitMsgFile, "utf8");
|
||||
const branchName = getBranchName();
|
||||
const newBranchMessage = formatCommitMessageFromBranchName(branchName);
|
||||
let newCommitMessage = "";
|
||||
|
||||
// Ajoute le contenu du template au message de commit
|
||||
fs.appendFileSync(commitMsgFile, `\n${templateContent}`);
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la modification du message de commit :', error);
|
||||
process.exit(1);
|
||||
}
|
||||
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 {
|
||||
console.warn(`Fichier template introuvable : ${TEMPLATE_FILE}`);
|
||||
}
|
||||
newCommitMessage = `${currentCommitMessage}\n${getCommitTemplateMsg()}`;
|
||||
}
|
||||
|
||||
fs.writeFileSync(commitMsgFile, newCommitMessage);
|
||||
|
||||
Reference in New Issue
Block a user