您如何使用私有存储库中存在的复合操作?

How do you use a composite action that exists in a private repository?

我们对第三方服务进行了大量的健康检查。我们希望他们定期 运行 因为当他们崩溃时,它会影响我们的应用程序,就像我们代码中的错误一样。知道“是他们而不是我们”可以显着减少故障排除时间。

我们已通过 github 操作和预定 运行 设置此健康检查,但我们希望每个第三方服务都有一个健康检查。这样,失败时的松弛消息将非常具体地说明发生了什么。但这将创建大量重复的 yml 内容。

我发现了一个叫做 github composite actions 的东西,它似乎是为了解决这个问题,但我找不到关于复合动作是否可以存在于私有存储库中的信息。

The documentation of the uses key 在提到存储库时只提到 public 个存储库。有没有办法在私有仓库中做一个复合动作并使用它?

我尝试制作他们的 hello world 示例,运行 它,并且 运行 正确。然后我将动作回购设为私有,使用动作构建的回购失败说:

Unable to resolve action `user/repo@v1`, repository not found

您必须首先使用个人访问令牌签出包含您的操作的存储库,然后使用签出位置的相对路径:

- name: Check out main repository
  uses: actions/checkout@v2

- name: Get composite run steps repository
  uses: actions/checkout@v2
  with:
    repository: myorg/myaction
    # Select revision
    ref: v1.0.0
    # Personal access token to check out private repository
    token: ${{ secrets.PAT_TOKEN }}
    # Indicate where to check action out to
    path: .github/myaction

- name: Run action from private repo
  uses: ./.github/myaction

这假设 myaction 是一个在其根目录中具有 action.yml 的存储库。如果不是这种情况,最后的 uses 步骤必须进行调整以使用正确的路径。

请注意,如果您使用 dependabot to update your actions,私人操作参考将不会更新。

在未来的某个时候,内部存储库中的操作将得到原生支持,请参阅 GitHub 路线图中的 this issue,但是截至 2021 年 10 月,该问题已更新为标志“github enterprise”意味着它只适用于 GitHub Enterprise 用户。