web-dev-qa-db-fra.com

Comment obtenir la branche actuelle dans les actions github

Je crée des images de docker avec des actions Github et je veux marquer les images avec le nom de la branche, je n'ai trouvé que GITHUB_REF variable, mais il en résulte refs/heads/feature-branch-1 et je n'ai besoin que de feature-branch-1.

21
aborilov

J'ai ajouté une étape distincte pour extraire le nom de la branche de $GITHUB_REF et définissez-le sur la sortie pas à pas

- name: Extract branch name
      Shell: bash
      run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
      id: extract_branch

après cela, je peux l'utiliser dans les étapes suivantes avec

- name: Push to ECR
      id: ecr
      uses: jwalton/gh-ecr-Push@master
      with:
        access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        region: us-west-2
        image: eng:${{ steps.extract_branch.outputs.branch }}
28
aborilov

Je crois GITHUB_REF est la seule variable d'environnement qui inclut le nom de la branche.

Vous pouvez extraire uniquement le nom de la branche du reste de cette chaîne comme ceci:

${GITHUB_REF##*/}

Exemple:

$ GITHUB_REF=refs/heads/feature-branch-1
$ echo ${GITHUB_REF##*/}
feature-branch-1

Mise à jour: ajout d'un exemple de workflow complet.

Workflow

name: CI
on: Push
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Git checkout
        uses: actions/checkout@v1
      - name: Branch name
        run: echo running on branch ${GITHUB_REF##*/}
      - name: Build
        run: docker build -t tedmiston/tag-example:${GITHUB_REF##*/} .

Source: https://github.com/tedmiston/x/blob/master/.github/workflows/workflow.yml

Exemple de sortie - branche principale

Run docker build -t tedmiston/tag-example:${GITHUB_REF##*/} .
  docker build -t tedmiston/tag-example:${GITHUB_REF##*/} .
  Shell: /bin/bash -e {0}
Sending build context to Docker daemon  146.9kB

Step 1/1 : FROM Alpine
latest: Pulling from library/Alpine
9d48c3bd43c5: Pulling fs layer
9d48c3bd43c5: Verifying Checksum
9d48c3bd43c5: Download complete
9d48c3bd43c5: Pull complete
Digest: sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb
Status: Downloaded newer image for Alpine:latest
 ---> 961769676411
Successfully built 961769676411
Successfully tagged tedmiston/tag-example:master

Journal: https://github.com/tedmiston/x/commit/cdcc58a908e41d3d90c39ab3bf6fef1ad2c4238a/checks#step:4:16

Exemple de sortie - branche non maître

Run docker build -t tedmiston/tag-example:${GITHUB_REF##*/} .
  docker build -t tedmiston/tag-example:${GITHUB_REF##*/} .
  Shell: /bin/bash -e {0}
Sending build context to Docker daemon  144.9kB

Step 1/1 : FROM Alpine
latest: Pulling from library/Alpine
9d48c3bd43c5: Pulling fs layer
9d48c3bd43c5: Verifying Checksum
9d48c3bd43c5: Download complete
9d48c3bd43c5: Pull complete
Digest: sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb
Status: Downloaded newer image for Alpine:latest
 ---> 961769676411
Successfully built 961769676411
Successfully tagged tedmiston/tag-example:branch-name-test

Journal: https://github.com/tedmiston/x/commit/4e8d31259f861aaa2c30375756fc081c3659bddf/checks#step:4:16


Voir cette réponse pour plus d'informations sur la syntaxe d'expansion des paramètres.

Pour référence, la page Environnements virtuels pour les actions GitHub répertorie toutes les variables d'environnement disponibles dans l'environnement d'exécution.

11
Taylor Edmiston

Sachez que si vous exécutez votre action GitHub sur le déclencheur de demande d'extraction, alors GITHUB_REF la variable contiendra quelque chose comme refs/pull/421/merge donc si vous essayez de git Push à ce nom, il échouera très probablement.

Cependant, vous pouvez utiliser des références sur le contexte GitHub dans votre YAML. Quelque chose comme: ${{ github.head_ref }}

https://help.github.com/en/actions/automating-your-workflow-with-github-actions/contexts-and-expression-syntax-for-github-actions#github-context

Github action context refs

7
Dusan Plavak

pour le définir comme une variable en, j'utilise cette syntaxe:

- name: Extract branch name
  Shell: bash
  run: echo "::set-env name=BRANCH_NAME::$(echo ${GITHUB_REF#refs/heads/} | sed 's/\//_/g')"
- name: Test
  run: echo "${BRANCH_NAME}"

J'ai trouvé cette syntaxe ici: Actions Github - Starflows # Comment définir la variable env? # 68

Rmq: le sed 's/\//_/g' doit remplacer \ par _ dans le nom de la branche

3
LE GALL Benoît

Je viens de faire un test simple dans Actions GitHub en utilisant un script bash:

#!/bin/bash

echo Reserved for REPO_NAME=${GITHUB_REPOSITORY##*/}
echo GITHUB_REF=${GITHUB_REF}
echo EXTRACT_GITHUB_REF=${GITHUB_REF##*/}
echo EXTRACT_GITHUB_REF_HEADS=$(echo ${GITHUB_REF#refs/heads/})

cd $REPO_NAME
git checkout ${GITHUB_REF##*/}
git checkout $(echo ${GITHUB_REF#refs/heads/})

Voici une capture d'écran de la sortie:

enter image description here Donc, ${GITHUB_REF##*/} Et $(echo ${GITHUB_REF#refs/heads/}) sont corrects

3
Chetabahana

Vous pouvez utiliser https://github.com/rlespinasse/github-slug-action

- uses: rlespinasse/github-slug-action@master
- name: Print slug variables
  run: |
    echo ${{ env.GITHUB_REF_SLUG }}
    echo ${{ env.GITHUB_HEAD_REF_SLUG }}
    echo ${{ env.GITHUB_BASE_REF_SLUG }}

Il extraira github_ref ​​des variables d'environnement.

2
Antoine

if: github.ref == 'refs/heads/integration' && github.event_name == 'Push'

Vous pouvez utiliser la commande ci-dessus et remplacer la branche ou l'événement que vous souhaitez exécuter.

0
Tarun Gupta