如何从 GitHub API 触发“workflow_dispatch”?

问题描述 投票:0回答:4

GitHub REST API 文档来看,我们似乎能够创建

repository_dispatch
事件,但不能创建
workflow_dispatch
事件。在 GitHub GraphQL API 中,我找不到如何调度事件。

是否可以使用 API 触发

workflow_dispatch
事件?

github github-actions github-api
4个回答
17
投票

是的,可以,手动通过 Github API或使用 GH CLI

手动(通过存储库上的
Actions
选项卡。)

这是有关它的官方文档

基本上,一旦您在选项卡上选择工作流程,如果工作流程实现具有 workflow_dispatch 触发器,则选项

Run workflow
将出现在窗口的右侧部分,如下所示:

使用 Github API

在Github官方文档上,有一个服务可以创建工作流调度事件

这是一个卷曲示例:

curl \
  -X POST \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/octocat/hello-world/actions/workflows/42/dispatches \
  -d '{"ref":"main"}'

请注意,您也可以通过此 API 发送工作流程

inputs

您还可以在本文中找到更多关于此的参考资料

还有另一个 Github API 服务来触发repository_dispatch 事件

GH CLI

您还可以使用

GH CLI 工具
通过以下命令触发 workflow_dispatch 事件:

gh workflow run [<workflow-id> | <workflow-name>] [flags]

为给定工作流创建workflow_dispatch事件。

此命令将触发 GitHub Actions 运行给定的工作流程文件。给定的工作流文件必须支持工作流调度“on”触发器才能以这种方式运行。

参考.

奖金

如果您希望通过终端命令行触发这些

workflow_dispatch
事件(和
repository_dispatch
事件),您可以使用 Python 中的自动化。可以在这个类中找到实现。


8
投票

您还可以通过

GH CLI工具
触发workflow_dispatch
gh workflow run
文档

例如:

gh workflow run <WORKFLOW_ID> -f param_1=foo

  • 您可以通过
    gh workflow list
    获取工作流程ID。

或者您也可以使用工作流程文件名而不是工作流程 ID。

例如:

gh workflow run staging.yml -f param_1=foo


4
投票

工作流程ID也可以是工作流程文件名

  curl \
    -X POST \
  -H "Accept: application/vnd.github.v3+json" \
    https://api.github.com/repos/<USER>/<REPO>/actions/workflows/build.yaml/dispatches \
    -d '{"ref":"main"}'

https://docs.github.com/en/rest/actions/workflows?apiVersion=2022-11-28#create-a-workflow-dispatch-event


1
投票

这是触发 GitHub 工作流程的 python 代码示例。

您可以通过

gh workflow list
获取工作流ID,参见:https://stackoverflow.com/a/71972073/1661491

github_token
是经典的个人令牌,请参阅:https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token

workflow_ref
是分支或标签。

import requests
import json

parameter_dict = ...
github_token = ...
workflow_ref = ...
workflow_id = ...
org = ...
repo_name = ..

inputs_str = json.dumps(parameter_dict)

response = requests.post( 
 f"https://api.github.com/repos/{org}/{repo_name}/actions/workflows/{workflow_id}/dispatches",
  headers={"Authorization": f"Bearer {github_token}"},
  data=f'{{"ref": "{workflow_ref}", "inputs": {inputs_str}}}'
)

if response.status_code >= 400:
  raise ValueError(f"Failed to trigger workflow: {response.status_code} {response.text}")
© www.soinside.com 2019 - 2024. All rights reserved.