Ottieni il tag push corrente in Github Actions


13

C'è un modo per accedere al tag corrente che è stato inserito in un'azione Github? In CircleCI puoi accedere a questo valore con la $CIRCLE_TAGvariabile.

Il mio flusso di lavoro yaml viene attivato da un tag in questo modo:

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

E voglio usare quel numero di versione come percorso del file più avanti nel flusso di lavoro.

Ho incluso la mia soluzione finale basata sulla risposta scelta come un'altra risposta di seguito: https://stackoverflow.com/a/58195087/756514

Risposte:


22

Per quanto ne so non esiste una variabile tag. Tuttavia, può essere estratto da GITHUB_REFquale contiene il riferimento estratto, ad esrefs/tags/v1.2.3

Prova questo flusso di lavoro. Crea una nuova variabile di ambiente con la versione estratta che è possibile utilizzare nei passaggi successivi.

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

In alternativa, utilizzare 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
È perfetto grazie, solo una domanda a cosa si riferisce il: 10? lunghezza della stringa?
Jon B,

2
Significa che sta estraendo la sottostringa a partire dalla decima posizione (indicizzazione basata su 0). Quindi salta refs/tags/e restituisce solo l'ultima parte della stringa.
Peterevans,

Ok, un'altra domanda scusa, voglio usare quella variabile $ RELEASE_VERSION per creare un percorso di destinazione per un'azione S3 in questo modo: DEST_PATH: "${{ secrets.AWS_S3_BUCKET }}/$RELEASE_VERSION"ma non riesci a ottenere la sintassi corretta, qualche idea? (questo è in un ENV per un'azione di terze parti che userò più avanti nello yaml comunque)
Jon B

1
Consulta la documentazione qui per quali espressioni sono consentite. help.github.com/en/articles/…
peterevans,

4
Si noti che invece di utilizzare ${GITHUB_REF:10}per filtrare il nome del tag, utilizzare l'espansione dei parametri ${GITHUB_REF#refs/*/}. Che espandere /refs/tags/v1.0.1a v1.0.1come previsto, ma sarebbe anche il lavoro con i nomi di filiale: /refs/heads/mastersarebbe esteso a master, vedere gnu.org/software/bash/manual/html_node/...
Stefan Haberl

2

Ecco un'esecuzione del flusso di lavoro che mostra che la GITHUB_REFvariabile di ambiente contiene refs/tags/v0.0.2:

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

L'ho eseguito creando il tag, quindi facendo git push origin v0.0.2 .

Ecco uno snippet del flusso di lavoro che vedi in quel registro:

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'

Dato che quel registro alla fine verrà eliminato (non so per quanto tempo verranno conservati i registri delle azioni Github, ma sicuramente non sarà per sempre), ecco uno screenshot per le prove.

inserisci qui la descrizione dell'immagine


1

Quindi grazie a tutto l'aiuto di @peterevans sono riuscito a raggiungere il risultato che volevo che era:

  • per taggare un commit
  • premi il tag per attivare l'azione github
  • L'azione github imposta il tag git come var env
  • eseguire install & build
  • usa l' chrislennon/action-aws-cliazione per installare aws cli usando i segreti per le chiavi
  • eseguire il comando per sincronizzare la build con un nuovo bucket S3 utilizzando il tag env var come nome della directory

Ecco un esempio di ciò che ho eseguito usando l'azione di Chris Lennon:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.