Obter a tag atual enviada em Ações do Github

13

Existe uma maneira de acessar a tag atual que foi enviada por push em uma ação do Github? No CircleCI, você pode acessar esse valor com a $CIRCLE_TAGvariável

Meu yaml do fluxo de trabalho está sendo acionado por uma tag assim:

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

E eu quero usar esse número de versão como um caminho de arquivo posteriormente no fluxo de trabalho.

Incluí minha solução final com base na resposta escolhida como outra resposta abaixo: https://stackoverflow.com/a/58195087/756514

Jon B
fonte

Respostas:

22

Tanto quanto eu sei, não há variável de tag. No entanto, pode ser extraído do GITHUB_REFqual contém a referência retirada, por exemplorefs/tags/v1.2.3

Experimente este fluxo de trabalho. Ele cria uma nova variável de ambiente com a versão extraída que você pode usar nas etapas 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 }}

Como alternativa, 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 }}
peterevans
fonte
11
Isso é perfeito, obrigado, apenas uma pergunta a que se refere: 10? comprimento da corda?
Jon B
2
Isso significa que está extraindo a substring começando na 10ª posição (indexação baseada em 0). Então, ele pula refs/tags/e retorna a última parte da string.
Peterevans 01/10/19
Ok, mais uma pergunta, desculpe, eu quero usar essa variável $ RELEASE_VERSION para criar um caminho de destino para uma ação S3 como esta: DEST_PATH: "${{ secrets.AWS_S3_BUCKET }}/$RELEASE_VERSION"mas não é possível obter a sintaxe correta, tem alguma idéia? (isto é, em um ENV para a 3ª acção do partido que eu uso mais tarde no yaml por sinal)
Jon B
11
Consulte a documentação aqui para quais expressões são permitidas. help.github.com/en/articles/…
peterevans 1/10/19
4
Observe que, em vez de usar ${GITHUB_REF:10}para filtrar o nome da tag, eu usaria a expansão de parâmetro ${GITHUB_REF#refs/*/}. Isso seria expandido /refs/tags/v1.0.1para v1.0.1o esperado, mas também funcionaria com nomes de filiais: /refs/heads/masterseria expandido para master, consulte gnu.org/software/bash/manual/html_node/…
Stefan Haberl
2

Aqui está uma execução do fluxo de trabalho mostrando que a GITHUB_REFvariável de ambiente contém refs/tags/v0.0.2:

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

Eu executei isso criando a tag e depois fazendo git push origin v0.0.2.

Aqui está um trecho do fluxo de trabalho que você vê nesse log:

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'

Como esse log será eventualmente excluído (não sei quanto tempo os logs de ações do Github são retidos, mas certamente não é para sempre), aqui está uma captura de tela para obter evidências.

insira a descrição da imagem aqui

rmunn
fonte
1

Então, graças a toda a ajuda de @peterevans, consegui alcançar o resultado que queria:

  • marcar uma confirmação
  • pressione a tag para acionar a ação do github
  • A ação github define a tag git como uma var env
  • executar instalação e compilação
  • use chrislennon/action-aws-cliaction para instalar o aws cli usando segredos para chaves
  • comando run para sincronizar a construção com um novo bucket S3 usando a tag env var como o nome do diretório

Aqui está um exemplo do que eu executei usando a ação 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
fonte