Натыкание версии на слияние и многое другое
В прошлом я писал статьи о том, как создавать версии, но все меняется. Это последняя и лучшая версия вашего кода в 2020 году.
Я предполагаю, что для этой статьи вы используете инструмент CI, а примеры будут основаны на действиях GitHub. Однако вы сможете легко применить их к любому инструменту CI. Я также предполагаю, что вы используете git-подобный сервис, такой как GitHub, для запросов на вытягивание или какой-то проверки кода.
Многие современные инструменты теперь используют теги git как фактическое место для версии вашего кода. Формат тегов версий использует семантическое управление версиями по следующей схеме:
v1.2.3
Эта статья покажет вам, как легко и автоматически создавать версии вашего кода.
Шаг 1. Поднять версию при слиянии
Разработчик отправляет запрос на вытягивание (PR), другие люди просматривают PR, затем он объединяется в вашу основную ветку (обычно ведущую). При слиянии с вашей основной веткой это запустит некоторые действия, такие как изменение номера версии и развертывание вашего кода.
Вот действие GitHub, чтобы автоматически получить самую последнюю версию, увеличить номер патча, пометить его и вставить метку:
Просто добавьте это .github/workflows/bump.yml
, и готово! Прочтите файл gitbump.sh, если хотите точно знать, что он делает.
Шаг 2. При необходимости используйте новый номер версии в коде
Если вы хотите использовать тег версии, созданный на шаге 1 (например, для печати номера версии в пользовательском интерфейсе или когда кто-то набирает yourapp --version
), вам нужно будет заменить номер версии в каком-либо коде.
Вы можете получить последнюю версию из тегов GitHub с помощью:
$(git tag --sort=-v:refname --list "v[0-9]*" | head -n 1 | cut -c 2-)
Для этого в GitHub Actions используйте следующее, чтобы установить VERSION
env var, который вы можете использовать повсюду:
echo "VERSION=$(git tag --sort=-v:refname --list "v[0-9]*" | head -n 1 | cut -c 2-)" >> $GITHUB_ENV
Обновить версию в любом файле
Если у вас есть версия semver в файле, который вы хотите автоматически обновлять, вы можете использовать:
docker run --rm -i -v $PWD:/app -w /app treeder/bump --filename index.html --replace $VERSION
Это найдет версию в формате X.Y.Z и заменит ее новой версией. Если в файле есть несколько версий, вы можете передать дополнительные флаги в treeder / bump, чтобы он делал то, что вы хотите. Смотрите README.
Обновите версию в программе Go
Для программ Go (golang) вы можете использовать такой флаг сборки (в вашем основном пакете должен быть var Version string
):
go build -ldflags "-X main.Version=$VERSION"
Обновите версию образа Docker
Чтобы создать версию и отправить образ Docker с этой новой версией:
docker build -t treeder/myimage:latest . docker tag treeder/myimage:latest treeder/myimage:$VERSION docker push treeder/myimage:$VERSION docker push treeder/myimage:latest
Заключение
И вот оно: полностью автоматизированное управление версиями, которое соответствует вашему коду в git. Кусок торта, правда?
Дайте мне знать, если у вас возникнут какие-либо вопросы в комментариях ниже.