Get the current pushed tag in Github Actions

前端 未结 4 445
别跟我提以往
别跟我提以往 2021-01-31 08:12

Is there a way to access the current tag that has been pushed in a Github Action? In CircleCI you can access this value with the $CIRCLE_TAG variable.

My Wor

相关标签:
4条回答
  • 2021-01-31 09:00

    As far as I know there is no tag variable. However, it can be extracted from GITHUB_REF which contains the checked out ref, e.g. refs/tags/v1.2.3

    Try this workflow. It creates a new environment variable with the extracted version that you can use in later steps.

    on:
      push:
        tags:
          - 'v*.*.*'
    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
          - name: Set env
            run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
          - name: Test
            run: |
              echo $RELEASE_VERSION
              echo ${{ env.RELEASE_VERSION }}
    

    Alternatively, use set-output:

    on:
      push:
        tags:
          - 'v*.*.*'
    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
          - name: Set output
            id: vars
            run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}
          - name: Check output
            env:
              RELEASE_VERSION: ${{ steps.vars.outputs.tag }}
            run: |
              echo $RELEASE_VERSION
              echo ${{ steps.vars.outputs.tag }}
    
    0 讨论(0)
  • 2021-01-31 09:06

    What worked for me:

    run: echo "GIT_TAG=`echo $(git describe --tags --abbrev=0)`" >> $GITHUB_ENV
    
    0 讨论(0)
  • 2021-01-31 09:15

    Here's a workflow run showing that the GITHUB_REF environment variable contains refs/tags/v0.0.2:

    I ran that by creating the tag, then doing git push origin v0.0.2.

    Here's a snippet of the workflow you see in that 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'
    

    Since the log has been deleted, here's a screenshot for evidence:

    0 讨论(0)
  • 2021-01-31 09:16

    So thanks to all the help from @peterevans I managed to achieve the result I wanted which was:

    • to tag a commit
    • push the tag to trigger the github action
    • github action sets the git tag as an env var
    • run install & build
    • use chrislennon/action-aws-cli action to install aws cli using secrets for keys
    • run command to sync the build to a new S3 bucket using the tag env var as the dir name

    Here is an example of the what I ran using Chris Lennon's action:

    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/action-aws-cli@v1.1
          - 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
    
    0 讨论(0)
提交回复
热议问题