Получить текущий заданный тег в Github Actions

13

Есть ли способ получить доступ к текущему тегу, который был добавлен в Github Action? В CircleCI вы можете получить доступ к этому значению с помощью $CIRCLE_TAGпеременной.

Мой рабочий процесс yaml запускается тегом, например так:

on:
  push:
    tags:
      - 'v*.*.*'

И я хочу использовать этот номер версии в качестве пути к файлу позже в рабочем процессе.

Я включил мое окончательное решение на основе выбранного ответа в качестве другого ответа ниже: https://stackoverflow.com/a/58195087/756514

Джон Б
источник

Ответы:

22

Насколько я знаю, нет переменной тега. Тем не менее, он может быть извлечен из GITHUB_REFкоторого содержит проверенную ссылку, например,refs/tags/v1.2.3

Попробуйте этот рабочий процесс. Он создает новую переменную среды с извлеченной версией, которую вы можете использовать в последующих шагах.

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set env
        run: echo ::set-env name=RELEASE_VERSION::${GITHUB_REF:10}
      - name: Test
        run: |
          echo $RELEASE_VERSION
          echo ${{ env.RELEASE_VERSION }}

В качестве альтернативы используйте set-output:

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set output
        id: vars
        run: echo ::set-output name=tag::${GITHUB_REF:10}
      - name: Check output
        env:
          RELEASE_VERSION: ${{ steps.vars.outputs.tag }}
        run: |
          echo $RELEASE_VERSION
          echo ${{ steps.vars.outputs.tag }}
peterevans
источник
1
Это прекрасно, спасибо, только один вопрос, на что ссылается: 10? длина строки?
Джон B
2
Это означает, что он извлекает подстроку, начиная с 10-й позиции (индексация на основе 0). Так что он пропускает refs/tags/и просто возвращает последнюю часть строки.
peterevans
Хорошо, еще один вопрос, извините, я хочу использовать эту переменную $ RELEASE_VERSION для создания пути назначения для действия S3, например, так: DEST_PATH: "${{ secrets.AWS_S3_BUCKET }}/$RELEASE_VERSION"но не можете получить правильный синтаксис, есть идеи? (это в ENV для стороннего действия, которое я, кстати, позже использую в yaml)
Джон B
1
Смотрите документацию здесь, чтобы узнать, какие выражения разрешены. help.github.com/en/articles/…
peterevans
4
Обратите внимание, что вместо того, ${GITHUB_REF:10}чтобы фильтровать имя тега, я бы использовал расширение параметра ${GITHUB_REF#refs/*/}. Это расширилось бы /refs/tags/v1.0.1до v1.0.1ожидаемого уровня, но также работало бы с именами ветвей: /refs/heads/masterбудет расширено master, см. Gnu.org/software/bash/manual/html_node/…
Стефан Хаберл
2

Вот рабочий процесс, показывающий, что GITHUB_REFпеременная среды содержит refs/tags/v0.0.2:

https://github.com/rmunn/Testing/runs/242676390

Я запустил это, создав тег, а затем сделав git push origin v0.0.2.

Вот фрагмент рабочего процесса, который вы видите в этом журнале:

steps:
- uses: actions/checkout@v1
- name: Dump GitHub context
  env:
    GITHUB_CONTEXT: ${{ toJson(github) }}
  run: echo "$GITHUB_CONTEXT"
  if: runner.os != 'Windows'
- name: Show GitHub ref
  run: echo "$GITHUB_REF"
  if: runner.os != 'Windows'
- name: Dump event JSON
  env:
    EVENT_JSON_FILENAME: ${{ github.event_path }}
  run: cat "$EVENT_JSON_FILENAME"
  if: runner.os != 'Windows'

Поскольку этот журнал в конечном итоге будет удален (я не знаю, как долго сохраняются журналы Github Actions, но это, безусловно, не навсегда), вот скриншот для доказательства.

введите описание изображения здесь

rmunn
источник
1

Так что благодаря помощи @peterevans мне удалось достичь желаемого результата:

  • пометить коммит
  • нажмите тег, чтобы вызвать действие GitHub
  • действие github устанавливает тег git как переменную env
  • запустить установить и построить
  • используйте chrislennon/action-aws-cliдействие для установки aws cli, используя секреты для ключей
  • команда run для синхронизации сборки с новой корзиной S3 с использованием тега env var в качестве имени dir

Вот пример того, что я бежал, используя действие Криса Леннона:

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set env
        run: echo ::set-env name=RELEASE_VERSION::$(echo ${GITHUB_REF:10})
      - name: yarn install & build
        run: |
          yarn install
          yarn build
      - uses: chrislennon/action-aws-cli@v1.1
      - name: Publish to AWS S3
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
        run: aws s3 sync dist s3://$AWS_S3_BUCKET/$RELEASE_VERSION/ --acl public-read
Джон Б
источник