如何给 Github Action 一个文件的内容作为输入?

jac*_*ses 1 github github-actions

我有一个工作流程,其中包含在构建和人工制品时创建版本号的操作。这个版本号被写入文件。

我怎样才能把它作为另一个动作的输入?

即:如何在另一个操作中使用此版本号作为提交消息的一部分?

Kon*_*ers 8

根据 GitHub 的这篇博客文章,接受的答案已经过时。

不过,仍然可以将其作为工作流程中的一个步骤来执行:

- name: Read VERSION file
  id: getversion
  run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT
Run Code Online (Sandbox Code Playgroud)

这将设置一个名为的输出version,您可以像使用之前一样访问该输出${{ steps.getversion.outputs.version }}

- uses: "marvinpinto/action-automatic-releases@latest"
  with:
    repo_token: "${{ secrets.GITHUB_TOKEN }}"
    automatic_release_tag: v${{ steps.getversion.outputs.version }}.${{ steps.buildnumber.outputs.build_number }}
    prerelease: false
Run Code Online (Sandbox Code Playgroud)


aar*_*ers 6

根据这里的精彩答案,实际上有一种内联方式可以实现这一点。完全不直观,除了::set-output...语法与 GitHub 操作的相同预期输出格式相匹配。

以下步骤将 VERSION 文件加载到${{ steps.getversion.outputs.version }}

      - name: Read VERSION file
        id: getversion
        run: echo "::set-output name=version::$(cat VERSION)"
Run Code Online (Sandbox Code Playgroud)

我有与 OP 相同的用例,所以我粘贴在我的整个代码下面,它做了三件事:

  1. 从文件 VERSION 中提取 4 部分版本字符串的前三部分。
  2. 使用该einaregilsson/build-number@v2操作获取连续的内部版本号。
  3. 将这两个连接成一个始终唯一的 4 部分版本字符串,成为一个新的 GitHub 版本。
name: Auto-Tag Release

on:
  push:
    branches:
      - master

jobs:
  release_new_tag:
    runs-on: ubuntu-latest
    steps:
      - name: "Checkout source code"
        uses: "actions/checkout@v1"
      - name: Generate build number
        id: buildnumber
        uses: einaregilsson/build-number@v2
        with:
          token: ${{secrets.github_token}}
      - name: Read VERSION file
        id: getversion
        run: echo "::set-output name=version::$(cat VERSION)"
      - uses: "marvinpinto/action-automatic-releases@latest"
        with:
          repo_token: "${{ secrets.GITHUB_TOKEN }}"
          automatic_release_tag: v${{ steps.getversion.outputs.version }}.${{ steps.buildnumber.outputs.build_number }}
          prerelease: false
Run Code Online (Sandbox Code Playgroud)

完全自动化的发布管理!:-)

  • 注意:顶部的分支过滤器确保我们只在向 master 提交时运行它。