在Github Actions中获取当前的推送标签


13

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

我的工作流程Yaml由类似这样的标签触发:

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

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

我将基于所选答案的最终解决方案作为下面的另一个答案包括在内:https : //stackoverflow.com/a/58195087/756514

Answers:


22

据我所知,没有标签变量。但是,可以从中提取GITHUB_REF包含检出参考的文件,例如refs/tags/v1.2.3

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

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

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

1
太好了,谢谢,只是一个问题:10代表什么?字符串长度?
乔恩·B

2
这意味着它将提取从第10个位置开始的子字符串(基于0的索引)。因此它跳过refs/tags/并只返回字符串的最后一部分。
彼得斯堡人,

好的,还有一个问题,抱歉,我想使用该$ RELEASE_VERSION变量为S3操作创建目标路径,如下所示:DEST_PATH: "${{ secrets.AWS_S3_BUCKET }}/$RELEASE_VERSION"但是语法不正确,有什么主意吗?(这是ENV进行的第三次行动,我稍后会在Yaml中使用)
Jon B

1
有关允许使用哪些表达式的信息,请参见此处的文档。help.github.com/en/articles/…–彼得
斯堡人

4
请注意,${GITHUB_REF:10}我将使用参数expand 代替使用过滤标签的名称${GITHUB_REF#refs/*/}。这将扩大/refs/tags/v1.0.1v1.0.1符合市场预期,但将还与分支名称的工作:/refs/heads/master将扩大到mastergnu.org/software/bash/manual/html_node/...
斯特凡Haberl

2

这是一个工作流程运行,显示 GITHUB_REF环境变量包含refs/tags/v0.0.2

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

我通过创建标签然后执行来运行它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'

由于该日志最终将被删除(我不知道Github Actions日志会保留多长时间,但肯定不会永远保留),因此以下是屏幕快照以作为证据。

在此处输入图片说明


1

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

  • 标记提交
  • 推送标签以触发github动作
  • github动作将git标记设置为env var
  • 运行安装和构建
  • 使用chrislennon/action-aws-cli动作使用密钥机密安装aws cli
  • 运行命令以使用标签env var作为目录名称将构建同步到新的S3存储桶

这是我使用克里斯·列侬的动作所运行的示例:

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.