Обычно проще запускать сборки для любого коммита в ветке, чем использовать теги таким способом. Например, в gitflow
единственными коммитами в master
должны быть слияния, представляющие новые выпуски, поэтому, если вы использовали это соглашение, вы могли бы просто отслеживать master
для запуска сборок.
Если вы хотите использовать теги, на самом деле есть два варианта.
Простой вариант - использовать соглашения о присвоении имен для ваших тегов, как предлагает Ян Скляренко. Конечно, кто-то может поместить неправильный тег в неправильное место, что является либо функцией (она гибкая), либо ошибкой (ошибки приводят к потере производственных сборок). И там есть элемент «скрытой магии». Но это, по крайней мере, простой в реализации вариант.
Более сложный способ более или менее прямо выполнить то, что вы просите, - это запустить сборку для любого тега, но затем включить шаг сборки, который прерывается, если этот тег не будет найден в master
. филиал».
Теперь я помещаю «в ветку master
» в кавычках, потому что, как указывает г-н Скляренко, он немного говорит о том, как ветви и теги структурированы в git. На самом деле вы бы сказали, что хотите знать о новых тегах, которые «доступны на коммитах, доступных с master
». И на самом деле, вы, вероятно, имеете в виду «достижимый из master
только с использованием указателей первого родителя» То есть
D
/ \
A -- B - E -- F <--(master)
\
C <--(branch)
Если мы пометим C
, это не достижимо с master
. («Достижимый» означает через родительские указатели, поэтому вы можете следовать только линиям влево на диаграмме.)
D
достижимо с master
, но если все было сделано "нормально", D
является вторым родителем E
. Поэтому, если мы говорим «достижимы указателями первого родителя», то A
, B
, E
и F
квалифицируются - и это, вероятно, то, что вы подразумеваете под «на master
».
Единственный способ, которым я знаю, чтобы выполнить такую проверку в TC, это выполнить сценарий сборки; Итак, вам нужна команда git, которая предоставит информацию, соответствует ли этот тег критериям? Вы можете использовать это:
git rev-list --first-parent master |grep -q $(git rev-parse <tagname>)
(где <tagname>
- имя тега), который вернет 0
, если тег соответствует критериям.
Учитывая, как вы используете теги, вы также можете проверить, является ли данный тег самым последним тегом в master
. То есть, если у вас есть
A -- B -- C -- D <--(master)
^
tag-1.0
вы можете захотеть построить только , если кто-то пометит D
, а не, если они пометят A
, B
или C
(поскольку у вас уже есть тег C
) , В этом случае вы можете проверить, является ли
git describe --tags --first-parent --abbrev=0 master
возвращает имя вашего нового тега.