¿Cómo obtener la rama actual dentro de Github Actions?

Resuelto aborilov asked hace 54 años • 35 respuestas

Estoy creando imágenes de Docker con Github Actions y quiero etiquetar imágenes con el nombre de la rama.

Encontré la GITHUB_REFvariable, pero da como resultado refs/heads/feature-branch-1y solo necesito feature-branch-1.

aborilov avatar Jan 01 '70 08:01 aborilov
Aceptado

Agregué un paso separado para extraer el nombre de la rama de $GITHUB_HEAD_REF/ $GITHUB_REF¹ (pr y push) y lo configuré en la salida del paso:

- name: Extract branch name
  shell: bash
  run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT
  id: extract_branch

después de eso, puedo usarlo en los siguientes pasos con steps.<step_id>.outputs.branch:

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

 


¹ $GITHUB_HEAD_REFen pull_request(pr) y $GITHUB_REFen push. Descripción:

Variable Descripción
GITHUB_HEAD_REF La referencia principal o la rama de origen de la solicitud de extracción en una ejecución de flujo de trabajo. Esta propiedad solo se establece cuando el evento que desencadena la ejecución de un flujo de trabajo es pull_requesto pull_request_target. Por ejemplo, feature-branch-1. ( fuente )
GITHUB_REF La referencia completamente formada de la rama o etiqueta que desencadenó la ejecución del flujo de trabajo. Para los flujos de trabajo activados por push, esta es la referencia de rama o etiqueta que se envió. Para los flujos de trabajo activados por pull_request, esta es la rama de combinación de solicitud de extracción. Para los flujos de trabajo activados por release, esta es la etiqueta de versión creada. Para otros desencadenadores, esta es la referencia de rama o etiqueta que desencadenó la ejecución del flujo de trabajo. Esto solo se configura si hay una rama o etiqueta disponible para el tipo de evento. La referencia proporcionada está completamente formada, lo que significa que para las ramas el formato es refs/heads/<branch_name>, para las solicitudes de extracción es refs/pull/<pr_number>/mergey para las etiquetas es refs/tags/<tag_name>. Por ejemplo, refs/heads/feature-branch-1. ( fuente )

Descripción completa de estas y todas las demás variables de entorno predeterminadas: aprenda las acciones de Gihtub ( copia archivada ).

¿ Está buscando el contexto de acción de Microsoft Github llamado github? Vea la respuesta de ysfaran y/o la respuesta de Dusan Plavak .

aborilov avatar Sep 20 '2019 21:09 aborilov

Creo GITHUB_REFque es la única variable de entorno que incluye el nombre de la rama.

Si el nombre de su rama no contiene a /(por ejemplo deploy/abc), puede extraer solo el nombre de la rama del resto de esa cadena de esta manera:

${GITHUB_REF##*/}

Ejemplo:

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

Actualización: se agregó un ejemplo de flujo de trabajo completo.

Flujo de trabajo

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##*/} .

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

Salida de muestra: rama maestra

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

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

Salida de muestra: rama no maestra

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

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


Consulte esta respuesta para obtener más información sobre la sintaxis de expansión de parámetros.

Como referencia, la página Entornos virtuales para acciones de GitHub enumera todas las variables de entorno disponibles en el entorno de ejecución.

Taylor D. Edmiston avatar Sep 20 '2019 20:09 Taylor D. Edmiston

TL;DR

Esto funciona para todos los activadores que pueda especificar en on(por ejemplo, pusho pull_request):

env:
 BRANCH_NAME: ${{ github.head_ref || github.ref_name }} 

Explicación

El truco es que github.head_refsolo se establece cuando el flujo de trabajo fue activado por a pull_requesty contiene el valor de la rama fuente del PR. github.ref_namesolo se usará si el flujo de trabajo no fue activado por a pull_requesty también solo contiene el nombre de la rama.

Documentación de GitHub

Explicación detallada de los documentos oficiales de GitHub :

github.ref_name string El nombre de referencia corto de la rama o etiqueta que desencadenó la ejecución del flujo de trabajo. Este valor coincide con el nombre de la rama o etiqueta que se muestra en GitHub. Por ejemplo, característica-rama-1.

github.head_ref string El head_ref o rama fuente de la solicitud de extracción en una ejecución de flujo de trabajo. Esta propiedad solo está disponible cuando el evento que desencadena la ejecución de un flujo de trabajo es pull_request o pull_request_target.

ysfaran avatar Feb 17 '2022 13:02 ysfaran

Tenga en cuenta que si está ejecutando su acción de GitHub en el activador de solicitud de extracción, la GITHUB_REFvariable contendrá algo así, refs/pull/421/mergesi intenta poner git pushese nombre, lo más probable es que falle.

Sin embargo, lo que puedes usar son referencias en el contexto de GitHub en tu YAML. Algo como:${{ github.head_ref }}

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

Referencias de contexto de acción de Github

Dusan Plavak avatar Jan 17 '2020 02:01 Dusan Plavak