Pobierz bieżący przekazany tag w Github Actions

13

Czy istnieje sposób na uzyskanie dostępu do bieżącego znacznika, który został wypchnięty w ramach akcji Github? W CircleCI możesz uzyskać dostęp do tej wartości za pomocą $CIRCLE_TAGzmiennej.

Mój yaml Workflow jest uruchamiany przez taki tag:

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

I chcę użyć tego numeru wersji jako ścieżki pliku później w przepływie pracy.

Podałem swoje ostateczne rozwiązanie oparte na wybranej odpowiedzi jako kolejną odpowiedź poniżej: https://stackoverflow.com/a/58195087/756514

Jon B.
źródło

Odpowiedzi:

22

O ile mi wiadomo, nie ma zmiennej zmiennej. Można go jednak wyodrębnić, z GITHUB_REFktórego zawiera wypisane oznaczenie, nprefs/tags/v1.2.3

Wypróbuj ten przepływ pracy. Tworzy nową zmienną środowiskową z wyodrębnioną wersją, której można użyć w późniejszych krokach.

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

Alternatywnie użyj 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
źródło
1
To doskonałe, dziękuję, tylko jedno pytanie, do czego odnosi się: 10? Długość łańcucha?
Jon B
2
Oznacza to, że wyodrębnia podciąg zaczynając od 10. pozycji (indeksowanie 0). Pomija refs/tags/i po prostu zwraca ostatnią część ciągu.
peterevans
Ok jeszcze jedno pytanie przepraszam, chcę użyć tej zmiennej $ RELEASE_VERSION, aby utworzyć ścieżkę docelową dla akcji S3, taką jak: DEST_PATH: "${{ secrets.AWS_S3_BUCKET }}/$RELEASE_VERSION"ale czy nie można uzyskać poprawnej składni, jakieś pomysły? (to jest w ENV dla akcji innej firmy, której używam później w yaml)
Jon B
1
Sprawdź w dokumentacji tutaj, jakie wyrażenia są dozwolone. help.github.com/en/articles/…
peterevans
4
Zauważ, że zamiast używać ${GITHUB_REF:10}do filtrowania nazwy znacznika, użyłbym rozszerzenia parametru ${GITHUB_REF#refs/*/}. To by rozwijać /refs/tags/v1.0.1się v1.0.1zgodnie z oczekiwaniami, ale również praca z nazwiskami branży: /refs/heads/masterbędzie rozszerzona master, zobacz gnu.org/software/bash/manual/html_node/...
Stefan Haberl
2

Oto przebieg przepływu pracy pokazujący, że GITHUB_REFzmienna środowiskowa zawiera refs/tags/v0.0.2:

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

Uruchomiłem to, tworząc tag, a potem robiąc git push origin v0.0.2.

Oto fragment przepływu pracy widoczny w tym dzienniku:

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'

Ponieważ ten dziennik zostanie ostatecznie usunięty (nie wiem, jak długo są przechowywane dzienniki Akcji Github, ale na pewno nie będzie to na zawsze), oto zrzut ekranu dla dowodów.

wprowadź opis zdjęcia tutaj

rmunn
źródło
1

Dzięki całej pomocy @peterevans udało mi się osiągnąć oczekiwany przeze mnie wynik, którym było:

  • aby oznaczyć zatwierdzenie
  • naciśnij tag, aby uruchomić akcję github
  • github akcja ustawia tag git jako zmienną env
  • uruchom instalację i kompilację
  • użyj chrislennon/action-aws-cliakcji, aby zainstalować aws cli przy użyciu kluczy tajnych
  • uruchom polecenie, aby zsynchronizować kompilację z nowym segmentem S3, używając tagu env var jako nazwy katalogu

Oto przykład tego, co prowadziłem za pomocą akcji Chrisa Lennona:

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/[email protected]
      - 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
Jon B.
źródło