Я пытаюсь поднять версию моего файла package.json, когда я фиксирую, но только в том случае, если сообщение о фиксации имеет префикс правильно: MJ
префикс вызывает исправление патча, ^
префикс запускает незначительное повышение.Для этого я написал задание gulp, и оно работает, единственная проблема в том, что я не могу получить сообщение о текущем коммите, выполнить задачу, затем добавить package.json в коммит и продолжить.
Я попытался запустить задачу на этих двух git-хуках:
pre-commit
Проблема:
- У меня есть доступ только к предыдущей фиксациисообщение в этом хуке, а не то, что мы делаем прямо сейчас.
Что работает
- Я могу повысить версию, но только на основе предыдущего сообщения коммита
- Я могу поставить package.json
- package.json, а затем добавить его в коммит вместе с остальными
prepare-commit-msg
Проблема:
- staging package.json не добавляет его в коммит
Что работает
- Я могу повысить версию на основе текущейсообщение коммита
- Я могу поставить package.json
Это мое задание, которое я пробовал с двумя хуками.Я удалил немного шума, чтобы попытаться сохранить его минимальным
import * as fs from "fs";
import gulp from "gulp";
import * as shell from "shelljs";
import pkg from "./package.json";
const getCommitMsg = () => fs.readFileSync(".git/COMMIT_EDITMSG", "utf8");
gulp.task(
BUMP_VERSION.task,
(done) => {
const message = getCommitMsg();
const isMinor = message.startsWith(MINOR_PREFIX);
const isPatch = message.startsWith(PATCH_PREFIX);
if (!isMinor && !isPatch) {
done();
return exit(EC.NOT_VERSION);
}
const newPatch = isPatch ? parseInt(patch) + 1 : 0;
const newMinor = isMinor ? parseInt(minor) + 1 : minor;
const newVersion = `${major}.${newMinor}.${newPatch}`;
const newPkg = Object.assign({}, pkg, { version: newVersion }); // update version
fs.writeFileSync("./package.json", JSON.stringify(newPkg, null, 4));
shell.exec("git add ./package.json");
done();
},
);
Практически все зависит от сообщения фиксации, которое выбирается с помощью функции getCommitMsg
.Может быть, fs.readFileSync(".git/COMMIT_EDITMSG", "utf8");
не путь?Возможно, есть другая команда, которую я мог бы запустить (с shelljs
), чтобы получить текущее сообщение о фиксации в хуке pre-commit
?В противном случае, если я использую хук prepare-commit-msg
, тогда я могу получить правильное сообщение, но тогда как мне добавить его в текущий коммит вместе с другими промежуточными файлами?