8
votes

Comment obtenir le sha court pour le flux de travail github?

Je crée un flux de travail dans GitHub qui crée et utilise une image docker. Par conséquent, j'ai démarré mon fichier de flux de travail avec une variable d'environnement globale pour cette image docker qui est visible pour tous les travaux de mon flux de travail:

name: continuous integration
on:
  push:
    branches:
      - '**'

env:
  IMAGE: docker.pkg.github.com/${{ github.repository }}/jactor-persistence:${{ github.sha }}

Je veux remplacer ${{ github.sha }} par le sha court du commit head, le même que le résultat de la commande suivante git rev-parse --short HEAD

Est-ce possible?


0 commentaires

3 Réponses :


0
votes

Il ne semble pas disponible: le contexte github github.sha que github.sha comme sha de validation complet (qui a déclenché l'exécution du workflow)

Vous devrez en quelque sorte calculer la chaîne que vous voulez (en sélectionnant uniquement les n premiers caractères de ${{ github.sha }} .

Cela signifie que vous pouvez:

  • définir une variable comme indiqué dans la réponse de peterevans
  • l'écrire sur le disque
  • cat $my_var pour utiliser votre VAR à chaque étape

Voir le numéro 68 des actions/starter-workflows et des exemples .

Mais depuis octobre 2019 , vous avez désormais " Env au niveau du workflow et du travail "

Il est courant de devoir définir un ensemble de variables d'environnement qui sont utilisées dans plusieurs étapes d'un travail et même plusieurs travaux dans un flux de travail.

Vous pouvez maintenant ajouter une carte d' env au niveau du flux de travail et du travail .
Ces variables d'environnement seront fusionnées avec l' env définie à tout échelon inférieur de la hiérarchie.

Voir:


5 commentaires

oui ... c'est ce à quoi je suis parvenu moi-même. Mais est-ce possible de le faire dans une expression de la variable globale (ici quelque part ${{ github.sha }} ), pour éviter de dupliquer tout ce qui a besoin de la variable


@ jactor-rises Bien sûr pour global, mais la réponse de peterevans utilise une variable.


.... J'ai maintenant cela, mais j'aimerais avoir un environnement global. variable pour éviter de dupliquer du code dans mes jobs ...


@ jactor-rises Ce serait utiliser une carte d'environnement: voir ma réponse modifiée ci-dessus.


oui ... et j'utilise l'environnement de flux de travail ( env en haut du fichier de flux de travail) afin qu'il soit disponible pour tous mes travaux dans le flux de travail. Mais au stade du workflow, est-il possible de manipuler ${{ github.sha }} pour être le sha court, ou dois-je dupliquer cette logique dans mes travaux?



6
votes

Comme VonC l'a mentionné, vous pouvez simplement calculer la chaîne vous-même lors d'une étape précédente.

      - name: Set outputs
        id: vars
        run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
      - name: Check outputs
        run: echo ${{ steps.vars.outputs.sha_short }}


7 commentaires

Bon ajout à ma réponse. Le problème est de savoir que 7 est assez court, et pas trop court: stackoverflow.com/a/21015031/6309


git rev-parse --short varie git rev-parse --short t git rev-parse --short pour le rendre unique? Je ne peux pas tout à fait dire à partir de la documentation.


Pourtant, c'est le cas: c'est ce qu'illustre stackoverflow.com/a/21015031/6309 .


Merci. J'en ai fait la réponse au lieu de sélectionner les 7 premiers caractères.


Excellente réponse, mais cela ne fonctionne pas correctement lorsqu'il est exécuté sous Windows. Besoin de citer la chaîne d'écho. echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"


Merci @MaxGhost. Mise à jour de la réponse.


Oh aussi - il vaut la peine de mentionner que le hachage de commit sur HEAD pendant un PR se référera en fait à un commit de fusion qui est le résultat de la fusion de la branche PR dans la branche cible. CI s'exécute sur cette fusion pour s'assurer que la construction ne sera pas interrompue même en tenant compte des conflits de fusion possibles. C'est le bon hachage de validation lorsque CI est exécuté sur la branche principale. Ce n'est généralement pas un problème, mais cela pourrait être pour vous selon le cas d'utilisation.



3
votes

Vous pouvez également définir une variable d'environnement avec le sha court:

    - name: My step
      run: myscript ${SHORT_SHA}

SHORT_SHA peut alors être utilisé comme n'importe quelle autre variable d'environnement, par exemple comme ceci:

    - name: Add SHORT_SHA env property with commit short sha
      run: echo "SHORT_SHA=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_ENV


0 commentaires