Как я могу проверить в интервале цикла, если теги существуют перед выполнением команды `git checkout $ tag`? - PullRequest
0 голосов
/ 08 февраля 2019

В скрипте bash я жду, когда будет выпущен определенный удаленный тег git, прежде чем использовать его в своем скрипте.

Как проверить в интервальном цикле наличие тегов перед выполнением команды git checkout $tag?

Пример:

 while sleep 3; do git fetch && git rev-parse --verify <tag> && break; done

Редактировать

Я создал следующие функции bash:


function wait_for_tag() {
  tag=v${1#v}
  interval=${2:-20}
    while :; do

        echo "Waiting for tag ${tag}..."
        git remote update > /dev/null 2>&1
        git rev-parse --verify --quiet "${tag}" && break
        sleep ${interval}
    done
}

function git_checkout() {
  tag=v${1#v}
    is_release && wait_for_tag "${tag}"
    git checkout ${tag} || echo "testing"
    npm install
}

Я ожидаю, когда я выполню git_checkout v2.0.13-bs-redux-saga-router-dom-intl, чтобы извлечь тег, если он уже существует, в противном случае, получить новые теги и повторить попыткупозже.

Кажется, это хорошо работает в локальной среде, но когда я делаю это в Gitlab-CI, параллельные конвейеры никогда не видят новый тег, даже если они помечены и существуют в пользовательском интерфейсе Gitlab.

Как я могу убедиться, что функция wait_for_tag действительно извлекает теги и почему git remote update не может это сделать?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Вы можете использовать git rev-parse, чтобы проверить, существует тег или нет:

git rev-parse -q --verify "refs/tags/$tag" >/dev/null

В упомянутом цикле в сочетании с git checkout это может выглядеть так:

tag="foo"
while true; do
    git fetch --all
    if git rev-parse -q --verify "refs/tags/$tag" >/dev/null; then
        git checkout "$tag" && break
    fi
    sleep 5
done

В этом случае вам действительно нужно передать имя тега как $tag - без хэша или ветвления коммита.

0 голосов
/ 08 февраля 2019

Вы можете использовать git rev-parse, чтобы проверить, существует ли тег.Как то так:

while :; do
  git remote update
  git rev-parse --verify --quiet SomeInterestingTag && break

  # the tag did not exist
  sleep 10
done
...