Obtenez le tag poussé actuel dans les actions Github

13

Existe-t-il un moyen d'accéder à la balise actuelle qui a été poussée dans une action Github? Dans CircleCI, vous pouvez accéder à cette valeur avec la $CIRCLE_TAGvariable.

Mon workflow yaml est déclenché par une balise comme ceci:

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

Et je veux utiliser ce numéro de version comme chemin de fichier plus tard dans le flux de travail.

J'ai inclus ma solution finale basée sur la réponse choisie comme autre réponse ci-dessous: https://stackoverflow.com/a/58195087/756514

Jon B
la source

Réponses:

22

Pour autant que je sache, il n'y a pas de variable de balise. Cependant, il peut être extrait de celui GITHUB_REFqui contient la référence extraite , par exemplerefs/tags/v1.2.3

Essayez ce workflow. Il crée une nouvelle variable d'environnement avec la version extraite que vous pouvez utiliser dans les étapes ultérieures.

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

Vous pouvez également utiliser 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
la source
1
C'est parfait merci, juste une question à quoi fait référence: 10? Longueur de chaine?
Jon B
2
Cela signifie qu'il extrait la sous-chaîne à partir de la 10e position (indexation basée sur 0). Il saute donc refs/tags/et renvoie simplement la dernière partie de la chaîne.
peterevans
Ok encore une question désolé, je veux utiliser cette variable $ RELEASE_VERSION pour créer un chemin de destination pour une action S3 comme ceci: DEST_PATH: "${{ secrets.AWS_S3_BUCKET }}/$RELEASE_VERSION"mais vous ne pouvez pas obtenir la syntaxe correcte, des idées? (ceci est dans un ENV pour une action tierce que j'utilise plus tard dans le yaml au fait)
Jon B
1
Consultez la documentation ici pour connaître les expressions autorisées. help.github.com/en/articles/…
peterevans
4
Notez qu'au lieu d'utiliser ${GITHUB_REF:10}pour filtrer le nom de la balise, j'utiliserais l'extension de paramètre ${GITHUB_REF#refs/*/}. Cela élargirait /refs/tags/v1.0.1à v1.0.1comme prévu, mais travailleraient aussi avec des noms locaux: /refs/heads/masterserait étendue à master, voir gnu.org/software/bash/manual/html_node/...
Stefan Haberl
2

Voici une exécution de workflow montrant que la GITHUB_REFvariable d'environnement contient refs/tags/v0.0.2:

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

J'ai couru cela en créant la balise, puis en faisant git push origin v0.0.2.

Voici un extrait du flux de travail que vous voyez dans ce journal:

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'

Étant donné que ce journal sera finalement supprimé (je ne sais pas combien de temps les journaux d'actions Github sont conservés, mais ce n'est sûrement pas éternel), voici une capture d'écran pour preuve.

entrez la description de l'image ici

rmunn
la source
1

Donc, grâce à toute l'aide de @peterevans, j'ai réussi à obtenir le résultat que je voulais, qui était:

  • pour marquer un commit
  • pousser la balise pour déclencher l'action github
  • l'action github définit la balise git comme une variable env
  • exécuter l'installation et la construction
  • utiliser l' chrislennon/action-aws-cliaction pour installer aws cli en utilisant des secrets pour les clés
  • exécuter la commande pour synchroniser la génération vers un nouveau compartiment S3 en utilisant la balise env var comme nom de répertoire

Voici un exemple de ce que j'ai exécuté en utilisant l'action de 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/[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
la source