Obtenga la etiqueta actual empujada en Acciones Github

13

¿Hay alguna forma de acceder a la etiqueta actual que se ha insertado en una acción de Github? En CircleCI puede acceder a este valor con la $CIRCLE_TAGvariable.

Mi flujo de trabajo yaml está siendo activado por una etiqueta como esta:

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

Y quiero usar ese número de versión como una ruta de archivo más adelante en el flujo de trabajo.

He incluido mi solución final basada en la respuesta elegida como otra respuesta a continuación: https://stackoverflow.com/a/58195087/756514

Jon B
fuente

Respuestas:

22

Que yo sepa, no hay variable de etiqueta. Sin embargo, se puede extraer de la GITHUB_REFque contiene la referencia desprotegida, por ejemplorefs/tags/v1.2.3

Prueba este flujo de trabajo. Crea una nueva variable de entorno con la versión extraída que puede usar en pasos posteriores.

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

Alternativamente, use 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 }}
peterevanos
fuente
1
Eso es perfecto, gracias, solo una pregunta: ¿a qué se refieren los 10? ¿longitud de la cuerda?
Jon B
2
Significa que está extrayendo la subcadena comenzando en la décima posición (indexación basada en 0). Entonces se salta refs/tags/y solo devuelve la última parte de la cadena.
Peterevans 01 de
Ok, una pregunta más, lo siento, quiero usar esa variable $ RELEASE_VERSION para crear una ruta de destino para una acción S3 así: DEST_PATH: "${{ secrets.AWS_S3_BUCKET }}/$RELEASE_VERSION"pero no puedo obtener la sintaxis correcta, ¿alguna idea? (esto está en un ENV para una acción de terceros que utilizo más adelante en el yaml por cierto)
Jon B
1
Consulte la documentación aquí para ver qué expresiones están permitidas. help.github.com/en/articles/…
peterevans
44
Tenga en cuenta que en lugar de usar ${GITHUB_REF:10}para filtrar el nombre de la etiqueta, usaría el parámetro de expansión ${GITHUB_REF#refs/*/}. Eso se expandiría /refs/tags/v1.0.1a v1.0.1lo esperado, pero también funcionaría con nombres de sucursales: /refs/heads/masterse expandiría a master, vea gnu.org/software/bash/manual/html_node/…
Stefan Haberl
2

Aquí hay un flujo de trabajo que muestra que la GITHUB_REFvariable de entorno contiene refs/tags/v0.0.2:

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

Lo ejecuté creando la etiqueta y luego haciendo git push origin v0.0.2 .

Aquí hay un fragmento del flujo de trabajo que ve en ese registro:

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'

Dado que ese registro eventualmente se eliminará (no sé cuánto tiempo se conservan los registros de acciones de Github, pero seguramente no es para siempre), aquí hay una captura de pantalla para evidencia.

ingrese la descripción de la imagen aquí

rmunn
fuente
1

Entonces, gracias a toda la ayuda de @peterevans, logré lograr el resultado que quería, que fue:

  • para etiquetar un commit
  • empuje la etiqueta para activar la acción github
  • La acción de github establece la etiqueta git como una variable de entorno
  • ejecutar instalar y construir
  • use la chrislennon/action-aws-cliacción para instalar aws cli usando secretos para claves
  • Ejecute el comando para sincronizar la compilación con un nuevo bucket de S3 utilizando la etiqueta env var como nombre de directorio

Aquí hay un ejemplo de lo que corrí usando la acción 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
fuente