GitHub Actions - 在 Golang 代码中设置自定义操作的两个输出名称

GitHub Actions - Set two output names from custom action in Golang code

我在Golang中写了一个自定义动作,它有一个函数可以生成两个输出名称。

创建输出名称供以后在工作流中使用,因此我可以在一个作业(“计算版本”)中调用操作,捕获输出名称,然后在不同的作业(“构建”)中使用它

创建输出名称的动作中的 Go 函数是:

func SetTag(value string){
    fmt.Printf(`::set-output name=repo_tag::%s`, value)
    fmt.Printf(`::set-output name=ecr_tag::%s`, "v" + value)

}

使用上述输出的工作流程如下:

  Version:
    name: Calculate Version
    runs-on: ubuntu-latest
    outputs:
      repo_version_env: ${{ steps.version.outputs.repo_tag }}
      ecr_version_env: ${{ steps.version.outputs.ecr_tag }}

    steps:
    - name: Check out code
      uses: actions/checkout@v2
    - name: Calculate version
      id: version
      uses: my_custom_action/version@v1
  Build:
    name: Build Image
    runs-on: ubuntu-latest
    steps:
    - name: Build
      run: |
        echo ${{ needs.Version.outputs.ecr_version_env }}
        echo ${{ needs.Version.outputs.repo_version_env }}

当我 运行 工作流时,echo 命令在动作构建输出中给我以下内容:

1  echo 
2  echo v1.4.1::set-output name=ecr_tag::1.4.1

而不是:

1  echo v1.4.1
2  echo 1.4.1

我做错了什么?

如果有更好的方法来使用从操作输出的变量,在工作流中的不同作业之间,我也很乐意听到。

非常感谢。

对于我在这里测试的内容,问题是 go 函数将像这样打印数据:

::set-output name=repo_tag::1.4.1::set-output name=ecr_tag::v1.4.1%

问题似乎与你没有断线有关。

它应该通过将 Go 函数更新为:

来工作
func SetTag(value string){
    fmt.Printf(`::set-output name=repo_tag::%s`, value)
    fmt.Print("\n")
    fmt.Printf(`::set-output name=ecr_tag::%s`, "v" + value)
    fmt.Print("\n")
}

请注意,第二个 fmt.Print("\n") 将删除终端上的 % 符号。

如果你想查看我做的测试:

输出结果如你所愿: