Автоинкремент версии проекта при коммите в git

20.04.2019

Задача: автоматически инкрементировать номер версии мелких иземений (третью цифру в последовательности чисел 1.2.3) для переменной version в файле package.json при коммите в ветку dev.

Для решения задачи можно использовать механизм хуков git, который реализуется автоматическим исполнением скриптов с определенными именами в подпапке .git/hooks корневой директории проекта при определенных действиях.

По умолчанию папка хуков содержит набор bash–скриптов с примерами и расширением .sample.

В контексте поставленной задачи нас интересует скрипт с именем pre-commit.sample.

Для того, чтобы скрипт начал выполнятся автоматически перед определенным действием, его необходимо переименовать убрав расширение и сделать файл исполняемым. Обычно я не удаляю файлы с примерами, а создаю новый файл (команды нужно выполнять из корня проекта):

cd .git/hooks
touch pre-commit
chmod +x pre-commit

Скрипт, решающий описанную в начале статьи задачу, может выглядеть так:

#!/bin/bash

devChanged="$(git branch | grep \* | cut -d ' ' -f2-)"

if [[ $devChanged == dev ]]; then
  curVersion=$(cat package.json | grep version |  awk '{print $2}' | sed 's/"//g' | sed 's/,//g')
  newVersion=( ${curVersion//./ } )
  ((newVersion[2]++))
  cat package.json | sed "s/version\": \"${curVersion}/version\": \"${newVersion
  [0]}.${newVersion[1]}.${newVersion[2]}/" > package.json.temp
  mv package.json.temp package.json
  git add package.json
fi