Отримайте поточний висунутий тег у Github Actions


13

Чи є спосіб отримати доступ до поточного тегу, який було натиснуто в Github Action? У CircleCI ви можете отримати це значення за допомогою $CIRCLE_TAGзмінної.

Ямл "Мій робочий процес" запускається таким тегом:

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 }}

1
Це ідеально дякую, лише одне питання, на що йдеться: 10? довжина струни?
Джон Б

2
Це означає, що витяг підрядок починається з 10-ї позиції (індексація на основі 0). Таким чином він пропускає refs/tags/і просто повертає останню частину рядка.
peterevans

Гаразд ще одне питання, вибачте, я хочу використовувати цю змінну $ RELEASE_VERSION для створення шляху призначення для дії S3 на кшталт цього: DEST_PATH: "${{ secrets.AWS_S3_BUCKET }}/$RELEASE_VERSION"але не можу зрозуміти синтаксис, будь-які ідеї? (це в ENV для сторонньої дії, яку я, до речі, використовую пізніше в ямлі)
Джон Б

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, але це, безумовно, не назавжди), ось скріншот для підтвердження.

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


1

Тож завдяки всій допомозі від @peterevans мені вдалося досягти результату, якого я хотів:

  • для позначення коміту
  • натисніть тег, щоб запустити дію github
  • github дія встановлює тег git як env var
  • запустіть встановити та скласти
  • використовувати chrislennon/action-aws-cliдію для встановлення Aws cli, використовуючи секрети для ключів
  • запустити команду для синхронізації збірки до нового відра 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.