Как я могу поднять версию package.json, когда я фиксирую на основе сообщения фиксации? - PullRequest
2 голосов
/ 30 марта 2019

Я пытаюсь поднять версию моего файла 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, тогда я могу получить правильное сообщение, но тогда как мне добавить его в текущий коммит вместе с другими промежуточными файлами?

1 Ответ

0 голосов
/ 30 марта 2019

Вы можете использовать ловушку commit-msg, чтобы прочитать сообщение о коммите, выполнить действия на его основе, сценические файлы и зафиксировать

.git/hooks/commit-msg

COMMIT_MSG_FILE=$1

node bump.js
git add package.json
git commit -m "`cat $COMMIT_MSG_FILE`" --no-verify
false

node bump.js увеличит версию в package.json (аналогично вашей задаче gulp)

git add package.json установит измененный файл

git commit -m " cat $ COMMIT_MSG_FILE " --no-verify фиксирует подготовленные файлы, но пропускает перехватчики (pre-commit и commit-msg)

false остановит первоначальный коммит, так как мы уже зафиксировали в последней строке

...