Читая новости на отличном ресурсе по Go, наткнулся на статью Дейва Чени Гоферы, тэгируйте свои релизы. Вкратце, там говорится о полезности тэгов к комитам пакета в git репозитории, а так же о том, что при указании версии, стоит обратить внимание на формат SemVer 2.0.0.
Что самое интересное, статья написана 24 июня, примерно в то же время, может быть, днём ранее, я написал инструмент для себя, который позволяет автоматизировать процесс изменения патч-версии приложений, написанных на Go.
Вдохновил меня на этот поступок, как ни странно, инструмент из мира node.js — npm. Дело в том, что npm имеет в своём арсенале команду version patch
, которая делает три простые и очень нужные вещи для npm пакетов:
- Увеличивает на единичку в файле package.json версию патча, согласно SemVer 2.0.0;
- Комитит файла package.json;
- Навешивает на комит тэг, соответствующий версии в package.json.
В нашем главном проекте Blank, в npm пакетах, мы дописали скрипты в файл package.json для автоматической заливки изменений на github.
"scripts": {
"patch": "npm version patch && npm run push",
"push": "git push origin master --follow-tags && npm publish"
}
Таким образом, для того, чтобы «зарелизить» новую патч-версию своего приложения, достаточно написать в корне проекта:
> npm run patch
NPM остальное сделает сам — увеличит версию патча, сделает комит, навесит тэг с версией и отправит на github.
Мне эта штука так понравилась, что, не найдя ничего похожего для Go, я решил сделать подобный инструмент для гоферов. Итак, представляю patcher.
Что он делает:
- В файле main.go в корне проекта ищет переменную version и увеличивает на единицу патч-версию;
- Комитит файл main.go с сообщением Version update: ЗНАЧЕНИЕ_ПЕРЕМЕННОЙ_version;
- Навешивает к комиту тэг vЗНАЧЕНИЕ_ПЕРЕМЕННОЙ_version;
Кроме того, при запуске с ключом -p (patcher -p
), утилита тут же отправит все изменения в удалённый репозиторий. Вот так всё просто.
Далее уже можно настроить систему непрерывной интеграции, например, на сборку тэгированных релизов с автоматическим обновлением сервисов, либо с публикацией на ресурсах для скачивания приложения.
Установка производится как обычно:
> go get github.com/ivahaev/patcher
Если $GOPATH/bin
находится в вашем $PATH
, запуск производится из командной строки
> patcher [filename [varName]] [-p]
Или если в $PATH
не прописаны пути:
> $GOPATH/bin/patcher [filename [varName]] [-p]
Есть два необязательных параметра — имя файла, в котором находится переменная с версией и, имя самой переменной с версией приложения. По-умолчанию, эти параметры равны main.go и version, соответственно. Также, если указать ключ -p, утилита автоматически отправит изменения в удалённый репозиторий.
Я использую эту утилиту каждый день и она делает мою жизнь гораздо ярче, чего и вам желаю :).
В другой раз расскажу о том, как всё это используется для непрерывной интеграции в наших проектах.