70 votes

Obtenir le tag poussé actuel dans Github Actions

Existe-t-il un moyen d'accéder au tag courant qui a été poussé dans une action Github ? Dans CircleCI, vous pouvez accéder à cette valeur avec la fonction $CIRCLE_TAG variable.

Mon flux de travail yaml est déclenché par une balise comme celle-ci :

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

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

112voto

peterevans Points 13455

Pour autant que je sache, il n'existe pas de variable de balisage. Cependant, elle peut être extraite de GITHUB_REF qui contient la référence extraite, par ex. refs/tags/v1.2.3

Essayez ce flux de travail. Il crée une nouvelle variable d'environnement avec la version extraite que vous pouvez utiliser dans les étapes suivantes.

on:
  push:
    tags:
      - 'v*.*.*'
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set env
        run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
      - 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@v2
      - name: Set output
        id: vars
        run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
      - name: Check output
        env:
          RELEASE_VERSION: ${{ steps.vars.outputs.tag }}
        run: |
          echo $RELEASE_VERSION
          echo ${{ steps.vars.outputs.tag }}

1 votes

C'est parfait, merci. Juste une question : à quoi fait référence le :10 ? à la longueur de la chaîne ?

4 votes

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 juste la dernière partie de la chaîne.

0 votes

Ok, une dernière question, désolé, je veux utiliser la 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 je n'arrive 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 d'ailleurs)

12voto

Allen Pestaluky Points 176

Contextes GitHub fournit github.ref_name . Vous pouvez l'utiliser comme ceci : ${{github.ref_name}} .

Voici un exemple de cette utilisation dans le nom de fichier de l'artefact, qui peut être similaire à l'utilisation du chemin de fichier que vous avez demandé :

- name: Create tag artifact
  uses: actions/upload-artifact@v2
  with:
    name: ${{github.ref_name}}
    path: Release

2 votes

Merci, il devrait y avoir une solution à partir de 2021

1 votes

D'accord, cela devrait être la réponse acceptée.

4voto

lewislbr Points 520

Ce qui a marché pour moi :

run: echo "GIT_TAG=`echo $(git describe --tags --abbrev=0)`" >> $GITHUB_ENV

0 votes

Il convient de noter que la méthode ci-dessus échoue si aucune balise de version n'est présente, ce qui ne convient pas dans tous les cas (d'autres réponses proposent des alternatives qui se rabattent sur une chaîne vide) mais pourrait aider si elle n'est pas censée échouer.

0 votes

C'est une astuce intéressante lorsque vous souhaitez obtenir une balise pour un flux de travail qui est distribué manuellement.

0 votes

Cela n'a pas fonctionné pour moi, GIT_TAG ne contenait pas la balise

4voto

Jon B Points 1425

Grâce à l'aide de @peterevans, j'ai réussi à obtenir le résultat que je souhaitais :

  • pour marquer un commit
  • pousser le tag pour déclencher l'action github
  • L'action github définit la balise git comme une variable d'environnement.
  • exécuter l'installation et la construction
  • utiliser chrislennon/action-aws-cli action pour installer aws cli en utilisant des secrets pour les clés
  • Exécutez la commande pour synchroniser la construction avec un nouveau seau S3 en utilisant le tag 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/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

0 votes

Que fait cette partie ${GITHUB_REF:10} ?

8 votes

Même si cette question est assez ancienne, je vais y répondre pour référence future : Le site :10 supprime les dix premiers caractères de la variable d'environnement GITHUB_REF qui contient refs/tags/v1.2.3 ce qui donne v1.2.3

2voto

rmunn Points 2576

Voici une exécution du flux de travail montrant que le GITHUB_REF contient la variable d'environnement refs/tags/v0.0.2 :

Je l'ai fait en créant le tag, 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'

Comme le journal a été supprimé, voici une capture d'écran pour preuve :

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X