在 Github 个操作中获取当前推送的标签

Get the current pushed tag in Github Actions

有没有办法访问在 Github 操作中推送的当前标签?在 CircleCI 中,您可以使用 $CIRCLE_TAG 变量访问此值。

我的工作流 yaml 被如下标签触发:

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

我想在稍后的工作流程中将该版本号用作文件路径。

据我所知没有标记变量。但是,它可以从 GITHUB_REF 中提取,其中包含已签出的引用,例如refs/tags/v1.2.3

试试这个工作流程。它使用您可以在后续步骤中使用的提取版本创建一个新环境变量。

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

或者,使用 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 }}

这里的工作流程 运行 显示 GITHUB_REF 环境变量包含 refs/tags/v0.0.2:

我 运行 通过创建标签,然后执行 git push origin v0.0.2

这是您在该日志中看到的工作流片段:

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'

由于日志已被删除,这里截图为证:

感谢@peterevans 的所有帮助,我设法实现了我想要的结果:

  • 标记提交
  • 推送标签以触发 github 操作
  • git集线器操作将 git 标记设置为环境变量
  • 运行 安装和构建
  • 使用 chrislennon/action-aws-cli 操作使用密匙密钥安装 aws cli
  • 运行 使用标签环境变量作为目录名称将构建同步到新 S3 存储桶的命令

这是我 运行 使用 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/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

对我有用的:

run: echo "GIT_TAG=`echo $(git describe --tags --abbrev=0)`" >> $GITHUB_ENV

GitHub Contexts 提供 github.ref_name。你可以这样使用它:${{github.ref_name}}.

下面是工件文件名中的这种用法示例,可能与您询问的文件路径用法类似:

- name: Create tag artifact
  uses: actions/upload-artifact@v2
  with:
    name: ${{github.ref_name}}
    path: Release

你可以使用shell扩展:

echo "${GITHUB_REF##*/}"