我想手动触发 GitHub Actions 工作流程。通过文档我发现我可以通过存储库调度事件来做到这一点。
问题是,当我在
/dispatches
端点访问 API 时,出现以下错误:
{
"message": "Not Found",
"documentation_url": "https://developer.github.com/v3/repos/#create-a-repository-dispatch-event"
}
我对存储库有写权限。我为自己生成了一个访问令牌。
调度功能是默认启用的还是我需要以某种方式“启用”它,以便
/dispatches
端点变得可用?要么我看起来不够好,要么文档中没有描述这一点。
我不知道这是否有什么不同,但该存储库由组织拥有,而不是个人用户拥有。
事实证明这个问题非常基本。我在实际令牌之前发送带有
Authorization
前缀的 Bearer
标头,而我应该用 token
前缀发送它。
不用说,返回的错误消息非常具有误导性。
我遇到了同样的错误 - 按照文档的要求设置了所有标头,令牌具有正确的权限...但仍然有 404
文档说“您可以用文件名替换workflow_id”。但这没有用。
我结束了对
{{baseUrl}}/repos/{{owner}}/{{repo}}/actions/workflows
的发布请求,并从那里获取了 id。
从那时起,对
{{baseUrl}}/repos/{{owner}}/{{repo}}/actions/workflows/{{workflowId}}/dispatches
的调用就起作用了
弗朗索瓦·罗兰提到:
文档说“您可以用文件名替换workflow_id”。但这没有用。
如果您使用相对于存储库根目录的完整 URL 编码路径,则可以使用文件的名称。例如,我的存储库中的工作流程位于
.github/workflows/maven.yml
,因此我的触发器 URI 看起来像 https://api.github.com/repos/${{ github.repository_owner }}/other_repo_name/actions/workflows/.github%2Fworkflows%2Fmaven.yml/dispatches
。
我还发现列出目标存储库中的所有工作流程以查看它们的路径很有帮助。这也有助于确认我正在使用的令牌具有能够查看它们的必要权限。如果没有,则会返回 404。
我在一个存储库上有一个工作流程,触发了具有相同所有者的不同存储库上的工作流程。目标存储库需要有一个
workflow_dispatch
触发器才能像这样触发它,否则您会收到对上述调度请求的 422 响应(假设您的令牌首先有权查看其他存储库):
on:
workflow_dispatch: