mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43: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"
|
node scripts/prepare-commit-msg.js "$1" "$2"
|
||||||
@ -1,5 +1,7 @@
|
|||||||
# Message de commit (conventionnel) :
|
# 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>]
|
# <type>(<scope>): <description> [#<ticket-id>]
|
||||||
# ex : feat(frontend): ajout de la gestion des utilisateurs dans le dashboard [#1]
|
# ex : feat(frontend): ajout de la gestion des utilisateurs dans le dashboard [#1]
|
||||||
#
|
#
|
||||||
|
|||||||
@ -1,30 +1,95 @@
|
|||||||
const fs = require('fs');
|
const fs = require("fs");
|
||||||
const path = require('path');
|
const path = require("path");
|
||||||
|
const { execSync } = require("child_process");
|
||||||
|
|
||||||
// Fichier template
|
function getBranchName() {
|
||||||
const TEMPLATE_FILE = path.join(__dirname, './commit-template.txt');
|
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
|
// Arguments passés par Husky
|
||||||
const commitMsgFile = process.argv[2];
|
const commitMsgFile = process.argv[2];
|
||||||
const commitType = process.argv[3];
|
const commitType = process.argv[3];
|
||||||
|
|
||||||
// Vérifie si le commit est interactif
|
// Vérifie si le commit est interactif
|
||||||
if (commitType === 'message' || commitType === 'template') {
|
if (commitType === "message" || commitType === "template") {
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vérifie si le fichier template existe
|
const currentCommitMessage = fs.readFileSync(commitMsgFile, "utf8");
|
||||||
if (fs.existsSync(TEMPLATE_FILE)) {
|
const branchName = getBranchName();
|
||||||
try {
|
const newBranchMessage = formatCommitMessageFromBranchName(branchName);
|
||||||
// Lit le fichier template
|
let newCommitMessage = "";
|
||||||
const templateContent = fs.readFileSync(TEMPLATE_FILE, 'utf8');
|
|
||||||
|
|
||||||
// Ajoute le contenu du template au message de commit
|
if (newBranchMessage) {
|
||||||
fs.appendFileSync(commitMsgFile, `\n${templateContent}`);
|
// Vérifie si le message de commit est déjà présent
|
||||||
} catch (error) {
|
const messageRegex = new RegExp(`^${newBranchMessage}`, "m");
|
||||||
console.error('Erreur lors de la modification du message de commit :', error);
|
if (!messageRegex.test(currentCommitMessage)) {
|
||||||
process.exit(1);
|
newCommitMessage = `${newBranchMessage}\n${getCommitTemplateMsg()}\n${currentCommitMessage}`;
|
||||||
}
|
} else {
|
||||||
|
// Si le message de commit est déjà présent, on ne fait rien
|
||||||
|
newCommitMessage = currentCommitMessage;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
console.warn(`Fichier template introuvable : ${TEMPLATE_FILE}`);
|
newCommitMessage = `${currentCommitMessage}\n${getCommitTemplateMsg()}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fs.writeFileSync(commitMsgFile, newCommitMessage);
|
||||||
|
|||||||
Reference in New Issue
Block a user