关于触发工作流的事件
工作流触发器是导致工作流运行的事件。有关如何使用工作流触发器的更多信息,请参阅“触发工作流”。
某些事件有多种活动类型。对于这些事件,你可以指定将触发工作流运行的活动类型。有关每种活动类型含义的详细信息,请参阅“Webhook 事件和有效负载”。
注意:并非所有 Webhook 事件都会触发工作流。
branch_protection_rule
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
branch_protection_rule | - created - edited - deleted | 默认分支上的最新提交 | 默认分支 |
注意:有多种活动类型会触发此事件。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。你可以使用 types
关键字将工作流运行限制为特定活动类型。有关详细信息,请参阅“GitHub Actions 的工作流语法”。
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
当工作流存储库中的分支保护规则发生更改时,运行你的工作流。有关分支保护规则的详细信息,请参阅“关于受保护分支”。有关分支保护规则 API 的信息,请参阅 GraphQL API 文档中的“对象”或“分支及其设置的 REST API 端点”。
例如,你可以在分支保护规则已 created
或 deleted
时运行工作流
on:
branch_protection_rule:
types: [created, deleted]
check_run
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
check_run | - created - rerequested - completed - requested_action | 默认分支上的最新提交 | 默认分支 |
注意:多个活动类型会触发此事件。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。你可以使用 types
关键字将工作流运行限制为特定活动类型。有关详细信息,请参阅“GitHub Actions 的工作流语法”。
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
当与检查运行相关的活动发生时运行你的工作流。检查运行是检查套件中的一部分的单个测试。有关信息,请参阅“使用 REST API 与检查进行交互”。有关检查运行 API 的信息,请参阅 GraphQL API 文档中的“对象”或“检查运行的 REST API 端点”。
例如,当检查运行已 rerequested
或 completed
时,你可以运行工作流。
on:
check_run:
types: [rerequested, completed]
check_suite
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
check_suite | - completed | 默认分支上的最新提交 | 默认分支 |
注意:多个活动类型会触发此事件。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。虽然仅支持 completed
活动类型,但如果将来添加更多活动类型,指定活动类型将保持你的工作流的特定性。默认情况下,所有活动类型都会触发在此事件上运行的工作流。你可以使用 types
关键字将工作流运行限制为特定活动类型。有关详细信息,请参阅“GitHub Actions 的工作流语法”。
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
注意:为了防止递归工作流,如果检查套件是由 GitHub Actions 创建的,则此事件不会触发工作流。
当检查套件活动发生时运行你的工作流。检查套件是为特定提交创建的检查运行的集合。检查套件总结了套件中检查运行的状态和结论。有关信息,请参阅“使用 REST API 与检查进行交互”。有关检查套件 API 的信息,请参阅 GraphQL API 文档中的“对象”或“检查套件的 REST API 端点”。
例如,当检查套件已 completed
时,你可以运行工作流。
on:
check_suite:
types: [completed]
create
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
create | 不适用 | 在创建的分支或标签上进行最后一次提交 | 创建分支或标签 |
注意:一次创建三个以上的标签时,不会创建事件。
当有人在工作流存储库中创建 Git 引用(Git 分支或标签)时,运行工作流。有关创建 Git 引用的 API 信息,请参阅 GraphQL API 文档中的“Mutations”或“Git 引用的 REST API 端点”。
例如,当发生create
事件时,可以运行工作流。
on:
create
delete
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
delete | 不适用 | 默认分支上的最新提交 | 默认分支 |
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
注意:一次删除三个以上的标签时,不会创建事件。
当有人在工作流存储库中删除 Git 引用(Git 分支或标签)时,运行工作流。有关删除 Git 引用的 API 信息,请参阅 GraphQL API 文档中的“Mutations”或“Git 引用的 REST API 端点”。
例如,当发生delete
事件时,可以运行工作流。
on:
delete
deployment
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
deployment | 不适用 | 要部署的提交 | 要部署的分支或标签(如果使用提交 SHA 创建,则为空) |
当有人在工作流存储库中创建部署时,运行工作流。使用提交 SHA 创建的部署可能没有 Git 引用。有关创建部署的 API 信息,请参阅 GraphQL API 文档中的“Mutations”或“存储库的 REST API 端点”。
例如,当发生deployment
事件时,可以运行工作流。
on:
deployment
deployment_status
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
deployment_status | 不适用 | 要部署的提交 | 要部署的分支或标签(如果是提交,则为空) |
注意:当部署状态设置为inactive
时,不会触发工作流运行。
当第三方提供部署状态时,运行工作流。使用提交 SHA 创建的部署可能没有 Git 引用。有关创建部署状态的 API 信息,请参阅 GraphQL API 文档中的“Mutations”或“部署的 REST API 端点”。
例如,当发生deployment_status
事件时,可以运行工作流。
on:
deployment_status
讨论
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
discussion | - created - edited - deleted - 已转移 - 已固定 - 已取消固定 - 已标记 - 已取消标记 - 已锁定 - 已解锁 - 类别已更改 - 已回答 - 未回答 | 默认分支上的最新提交 | 默认分支 |
注意:有多种活动类型会触发此事件。有关每种活动类型的详细信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。你可以使用 types
关键字将工作流运行限制为特定活动类型。有关详细信息,请参阅“GitHub Actions 的工作流语法”。
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
注意:GitHub 讨论的 Webhook 事件目前处于测试阶段,可能会发生更改。
当工作流存储库中的讨论被创建或修改时,运行你的工作流。对于与讨论中的评论相关的活动,请使用 discussion_comment
事件。有关讨论的详细信息,请参阅“关于讨论”。有关 GraphQL API 的信息,请参阅“对象”。
例如,当讨论已 创建
、编辑
或 回答
时,你可以运行工作流。
on:
discussion:
types: [created, edited, answered]
讨论评论
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
discussion_comment | - created - edited - deleted | 默认分支上的最新提交 | 默认分支 |
注意:有多种活动类型会触发此事件。有关每种活动类型的详细信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。你可以使用 types
关键字将工作流运行限制为特定活动类型。有关详细信息,请参阅“GitHub Actions 的工作流语法”。
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
注意:GitHub 讨论的 Webhook 事件目前处于测试阶段,可能会发生更改。
当工作流存储库中的讨论中的评论被创建或修改时,运行你的工作流。对于与讨论相关的活动(而不是讨论中的评论),请使用 discussion
事件。有关讨论的详细信息,请参阅“关于讨论”。有关 GraphQL API 的信息,请参阅“对象”。
例如,当讨论评论已 创建
或 删除
时,你可以运行工作流。
on:
discussion_comment:
types: [created, deleted]
fork
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
fork | 不适用 | 默认分支上的最新提交 | 默认分支 |
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
当有人分叉存储库时运行你的工作流。有关 REST API 的信息,请参阅“分叉的 REST API 端点”。
例如,当发生fork
事件时,你可以运行工作流。
on:
fork
gollum
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
gollum | 不适用 | 默认分支上的最新提交 | 默认分支 |
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
当有人创建或更新 Wiki 页面时运行你的工作流。有关更多信息,请参阅“关于 Wiki”。
例如,当发生gollum
事件时,你可以运行工作流。
on:
gollum
issue_comment
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
issue_comment | - created - edited - deleted | 默认分支上的最新提交 | 默认分支 |
注意:有多种活动类型会触发此事件。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。你可以使用types
关键字将工作流运行限制为特定的活动类型。有关更多信息,请参阅“适用于 GitHub Actions 的工作流语法”。
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
当创建、编辑或删除问题或拉取请求评论时运行你的工作流。有关问题评论 API 的信息,请参阅 GraphQL API 文档中的“对象”或 REST API 文档中的“Webhook 事件和有效负载”。
例如,当问题或拉取请求评论已创建
或删除
时,你可以运行工作流。
on:
issue_comment:
types: [created, deleted]
仅针对问题或仅针对拉取请求的issue_comment
issue_comment
事件针对问题和拉取请求上的评论而发生。你可以在条件中使用github.event.issue.pull_request
属性,根据触发对象是问题还是拉取请求采取不同的操作。
例如,此工作流仅当issue_comment
事件源自拉取请求时才会运行pr_commented
作业。仅当issue_comment
事件源自问题时,它才会运行issue_commented
作业。
on: issue_comment
jobs:
pr_commented:
# This job only runs for pull request comments
name: PR comment
if: ${{ github.event.issue.pull_request }}
runs-on: ubuntu-latest
steps:
- run: |
echo A comment on PR $NUMBER
env:
NUMBER: ${{ github.event.issue.number }}
issue_commented:
# This job only runs for issue comments
name: Issue comment
if: ${{ !github.event.issue.pull_request }}
runs-on: ubuntu-latest
steps:
- run: |
echo A comment on issue $NUMBER
env:
NUMBER: ${{ github.event.issue.number }}
问题
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
issues | - 已打开 - edited - deleted - 已转移 - 已固定 - 已取消固定 - 已关闭 - 已重新打开 - 已分配 - 已取消分配 - 已标记 - 已取消标记 - 已锁定 - 已解锁 - 已添加里程碑 - 已删除里程碑 | 默认分支上的最新提交 | 默认分支 |
注意:有多种活动类型会触发此事件。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。你可以使用 types
关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
当工作流存储库中的问题被创建或修改时,运行你的工作流。对于与问题中的评论相关的活动,请使用 issue_comment
事件。有关问题的更多信息,请参阅“关于问题”。有关问题 API 的信息,请参阅 GraphQL API 文档中的“对象”或“问题的 REST API 端点”。
例如,当问题 已打开
、已编辑
或 已添加里程碑
时,你可以运行工作流。
on:
issues:
types: [opened, edited, milestoned]
标签
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
label | - created - edited - deleted | 默认分支上的最新提交 | 默认分支 |
注意:有多种活动类型会触发此事件。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。你可以使用 types
关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
在工作流存储库中的标签创建或修改时运行工作流。有关标签的更多信息,请参阅“管理标签”。有关标签 API 的信息,请参阅 GraphQL API 文档中的“对象”或“标签的 REST API 端点”。
如果要在标签添加到或从问题、请求合并或讨论中删除时运行工作流,请使用 issues
、pull_request
、pull_request_target
或 discussion
事件的 labeled
或 unlabeled
活动类型。
例如,您可以在标签已 created
或 deleted
时运行工作流。
on:
label:
types: [created, deleted]
merge_group
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
merge_group | checks_requested | 合并组的 SHA | 合并组的引用 |
备注:
- 有多种活动类型会触发此事件。虽然仅支持
checks_requested
活动类型,但指定活动类型将使您的工作流保持特定性,以防将来添加更多活动类型。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用types
关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。 - 如果您的存储库使用 GitHub Actions 对存储库中的请求合并执行必需的检查,则需要更新工作流以将
merge_group
事件作为附加触发器包括在内。否则,当您将请求合并添加到合并队列时,不会触发状态检查。合并将失败,因为不会报告必需的状态检查。merge_group
事件与pull_request
和push
事件是分开的。
在将请求合并添加到合并队列时运行工作流,这会将请求合并添加到合并组。有关更多信息,请参阅“使用合并队列合并请求合并”。
例如,您可以在 checks_requested
活动发生时运行工作流。
on:
pull_request:
branches: [ "main" ]
merge_group:
types: [checks_requested]
milestone
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
milestone | - created - 已关闭 - 已打开 - edited - deleted | 默认分支上的最新提交 | 默认分支 |
注意:有多种活动类型会触发此事件。有关每种活动类型的详细信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。你可以使用 types
关键字将工作流运行限制为特定活动类型。有关详细信息,请参阅“GitHub Actions 的工作流语法”。
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
在工作流存储库中的里程碑创建或修改时运行工作流。有关里程碑的详细信息,请参阅“关于里程碑”。有关里程碑 API 的详细信息,请参阅 GraphQL API 文档中的“对象”或“里程碑的 REST API 端点”。
如果你想在问题添加到里程碑或从里程碑中移除时运行工作流,请改用 issues
事件的 milestoned
或 demilestoned
活动类型。
例如,可以在里程碑 opened
或 deleted
时运行工作流。
on:
milestone:
types: [opened, deleted]
page_build
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
page_build | 不适用 | 默认分支上的最新提交 | 不适用 |
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
如果为存储库启用了 GitHub Pages,则在有人推送至作为 GitHub Pages 发布源的分支时运行工作流。有关 GitHub Pages 发布源的详细信息,请参阅“为你的 GitHub Pages 网站配置发布源”。有关 REST API 的详细信息,请参阅“存储库的 REST API 端点”。
例如,可以在 page_build
事件发生时运行工作流。
on:
page_build
project
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
project | - created - 已关闭 - 已重新打开 - edited - deleted | 默认分支上的最新提交 | 默认分支 |
注意:有多种活动类型会触发此事件。edited
活动类型是指编辑项目(经典版),而不是项目(经典版)上的列或卡片。有关每种活动类型的详细信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。你可以使用 types
关键字将工作流运行限制为特定活动类型。有关详细信息,请参阅“GitHub Actions 的工作流语法”。
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
注意:此事件仅适用于工作流存储库拥有的项目,不适用于组织拥有的项目、用户拥有的项目或其他存储库拥有的项目。
注意:此事件仅适用于项目(经典版)。
当项目(经典)创建或修改时运行工作流。对于项目(经典)中的卡片或列相关的活动,请改用 project_card
或 project_column
事件。有关项目(经典)的更多信息,请参阅“关于项目(经典)”。有关项目(经典)API 的信息,请参阅 GraphQL API 文档中的“对象”或“项目(经典)的 REST API 端点”。
例如,当项目已创建
或删除
时,您可以运行工作流。
on:
project:
types: [created, deleted]
project_card
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
project_card | - created - 移动 - 转换为问题 - edited - deleted | 默认分支上的最新提交 | 默认分支 |
注意:有多种活动类型会触发此事件。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用 types
关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
注意:此事件仅适用于工作流存储库拥有的项目,不适用于组织拥有的项目、用户拥有的项目或其他存储库拥有的项目。
注意:此事件仅适用于项目(经典版)。
当项目(经典)上的卡片创建或修改时运行工作流。对于项目(经典)或项目(经典)中列相关的活动,请改用 project
或 project_column
事件。有关项目(经典)的更多信息,请参阅“关于项目(经典)”。有关项目卡片 API 的信息,请参阅 GraphQL API 文档中的“对象”或“项目(经典)卡片的 REST API 端点”。
例如,当项目卡片已创建
或删除
时,您可以运行工作流。
on:
project_card:
types: [created, deleted]
project_column
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
project_column | - created - 更新 - 移动 - deleted | 默认分支上的最新提交 | 默认分支 |
注意:有多种活动类型会触发此事件。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用 types
关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
注意:此事件仅适用于工作流存储库拥有的项目,不适用于组织拥有的项目、用户拥有的项目或其他存储库拥有的项目。
注意:此事件仅适用于项目(经典版)。
当项目(经典)上的列创建或修改时运行工作流。对于项目(经典)或项目(经典)中卡片相关的活动,请改用 project
或 project_card
事件。有关项目(经典)的更多信息,请参阅“关于项目(经典)”。有关项目列 API 的信息,请参阅 GraphQL API 文档中的“对象”或“项目(经典)的 REST API 端点”。
例如,当项目列已创建
或删除
时,您可以运行工作流。
on:
project_column:
types: [created, deleted]
public
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
public | 不适用 | 默认分支上的最新提交 | 默认分支 |
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
当工作流存储库从私有变为公有时,运行工作流。有关 REST API 的信息,请参阅“存储库的 REST API 端点”。
例如,当public
事件发生时,您可以运行工作流。
on:
public
pull_request
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
pull_request | - 已分配 - 已取消分配 - 已标记 - 已取消标记 - 已打开 - edited - 已关闭 - 已重新打开 - synchronize - converted_to_draft - 已锁定 - 已解锁 - enqueued - dequeued - 已添加里程碑 - 已删除里程碑 - ready_for_review - review_requested - review_request_removed - auto_merge_enabled - auto_merge_disabled | GITHUB_REF 分支上的上次合并提交 | PR 合并分支 refs/pull/PULL_REQUEST_NUMBER/merge |
备注:
-
有多种活动类型会触发此事件。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,仅当
pull_request
事件的活动类型为opened
、synchronize
或reopened
时,工作流才会运行。要通过不同的活动类型触发工作流,请使用types
关键字。有关更多信息,请参阅“GitHub Actions 的工作流语法”。 -
如果拉取请求存在合并冲突,工作流将不会在
pull_request
活动上运行。必须首先解决合并冲突。相反,即使拉取请求存在合并冲突,具有
pull_request_target
事件的工作流也会运行。在使用pull_request_target
触发器之前,您应该了解安全风险。有关更多信息,请参阅pull_request_target
。 -
对于合并的拉取请求和来自分叉存储库的拉取请求,
pull_request
webhook 事件有效负载为空。 -
对于已关闭的拉取请求,
GITHUB_REF
的值会根据拉取请求是否已合并而有所不同。如果拉取请求已关闭但未合并,则它将为refs/pull/PULL_REQUEST_NUMBER/merge
。如果拉取请求因合并而关闭,则它将是其合并到的分支的完全限定ref
,例如/refs/heads/main
。
当工作流存储库中的拉取请求上的活动发生时,运行工作流。例如,如果没有指定活动类型,则当拉取请求打开或重新打开或拉取请求的头部分支更新时,工作流将运行。对于与拉取请求审查、拉取请求审查注释或拉取请求注释相关的活动,请改用pull_request_review
、pull_request_review_comment
或issue_comment
事件。有关拉取请求 API 的信息,请参阅 GraphQL API 文档中的“对象”或“拉取请求的 REST API 端点”。
请注意,此事件的 GITHUB_SHA
是请求合并分支的最后一次合并提交。如果您想获取请求合并分支的最后一个提交的提交 ID,请改用 github.event.pull_request.head.sha
。
例如,您可以在请求合并时运行工作流。
on:
pull_request:
types: [opened, reopened]
您可以使用事件上下文进一步控制工作流中的作业何时运行。例如,此工作流将在请求合并时运行,但 specific_review_requested
作业仅在请求 octo-team
审查时运行。
on:
pull_request:
types: [review_requested]
jobs:
specific_review_requested:
runs-on: ubuntu-latest
if: ${{ github.event.requested_team.name == 'octo-team'}}
steps:
- run: echo 'A review from octo-team was requested'
根据合并请求的头部或基础分支运行 pull_request
工作流
您可以使用 branches
或 branches-ignore
过滤器配置工作流,使其仅针对目标特定分支的合并请求运行。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
例如,此工作流将在有人打开目标分支名称以 releases/
开头的合并请求时运行
on:
pull_request:
types:
- opened
branches:
- 'releases/**'
注意:如果您同时使用 branches
过滤器和 paths
过滤器,则仅当两个过滤器都满足时,工作流才会运行。例如,以下工作流仅在目标分支名称以 releases/
开头且包含对 JavaScript (.js
) 文件的更改的合并请求打开时运行
on:
pull_request:
types:
- opened
branches:
- 'releases/**'
paths:
- '**.js'
要根据合并请求的头部分支名称(而不是合并请求的基础分支名称)运行作业,请在条件中使用 github.head_ref
上下文。例如,此工作流将在每次打开合并请求时运行,但 run_if
作业仅在合并请求的头部是名称以 releases/
开头的分支时执行
on:
pull_request:
types:
- opened
jobs:
run_if:
if: startsWith(github.head_ref, 'releases/')
runs-on: ubuntu-latest
steps:
- run: echo "The head of this PR starts with 'releases/'"
根据合并请求中更改的文件运行 pull_request
工作流
您还可以配置工作流,使其在合并请求更改特定文件时运行。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
例如,当一个拉取请求包含对 JavaScript 文件 (.js
) 的更改时,此工作流将运行
on:
pull_request:
paths:
- '**.js'
注意:如果您同时使用 branches
过滤器和 paths
过滤器,则仅当两个过滤器都满足时,工作流才会运行。例如,以下工作流仅在目标分支名称以 releases/
开头且包含对 JavaScript (.js
) 文件的更改的合并请求打开时运行
on:
pull_request:
types:
- opened
branches:
- 'releases/**'
paths:
- '**.js'
当拉取请求合并时运行 pull_request
工作流
当拉取请求合并时,拉取请求会自动关闭。要当拉取请求合并时运行工作流,请使用 pull_request
closed
事件类型以及检查事件的 merged
值的条件。例如,以下工作流将在每次拉取请求关闭时运行。if_merged
作业仅当拉取请求也已合并时才运行。
on:
pull_request:
types:
- closed
jobs:
if_merged:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- run: |
echo The PR was merged
在已分叉存储库中的工作流
默认情况下,工作流不会在已分叉存储库中运行。你必须在已分叉存储库的“操作”选项卡中启用 GitHub Actions。
除了 GITHUB_TOKEN
之外,当工作流从已分叉存储库触发时,不会将密钥传递给运行程序。GITHUB_TOKEN
在来自已分叉存储库的拉取请求中具有只读权限。有关更多信息,请参阅“自动令牌验证”。
已分叉存储库的拉取请求事件
对于从已分叉存储库到基础存储库的拉取请求,GitHub 会将 pull_request
、issue_comment
、pull_request_review_comment
、pull_request_review
和 pull_request_target
事件发送到基础存储库。已分叉存储库上不会发生拉取请求事件。
当首次提交者向公共存储库提交拉取请求时,具有写访问权限的维护者可能需要批准在拉取请求上运行工作流。有关更多信息,请参阅“批准来自公共分叉的工作流运行”。
对于从已分叉存储库到私有存储库的拉取请求,仅当启用工作流时才会运行工作流,请参阅“管理存储库的 GitHub Actions 设置”。
注意:由 Dependabot 拉取请求触发的工作流被视为来自已分叉存储库,并且也受这些限制。
pull_request_comment
(使用 issue_comment
)
要当对拉取请求(不在拉取请求的 diff 中)的评论被创建、编辑或删除时运行工作流,请使用 issue_comment
事件。对于与拉取请求审查或拉取请求审查评论相关的活动,请使用 pull_request_review
或 pull_request_review_comment
事件。
pull_request_review
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
pull_request_review | - submitted - edited - dismissed | GITHUB_REF 分支上的上次合并提交 | PR 合并分支 refs/pull/PULL_REQUEST_NUMBER/merge |
注意:有多种活动类型会触发此事件。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。你可以使用 types
关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
当提交、编辑或驳回 Pull Request 审核时,运行工作流。Pull Request 审核是 Pull Request 审核评论的组,此外还有正文评论和状态。对于与 Pull Request 审核评论或 Pull Request 评论相关的活动,请改用 pull_request_review_comment
或 issue_comment
事件。有关 Pull Request 审核 API 的信息,请参阅 GraphQL API 文档中的“对象”或“用于 Pull Request 的 REST API 终结点”。
例如,当 Pull Request 审核被 编辑
或 驳回
时,你可以运行工作流。
on:
pull_request_review:
types: [edited, dismissed]
在 Pull Request 获准时运行工作流
要在 Pull Request 获准时运行工作流,你可以使用 pull_request_review
事件的 submitted
类型触发工作流,然后使用 github.event.review.state
属性检查审核状态。例如,此工作流将在每次提交 Pull Request 审核时运行,但 approved
作业仅在提交的审核为批准审核时运行
on:
pull_request_review:
types: [submitted]
jobs:
approved:
if: github.event.review.state == 'APPROVED'
runs-on: ubuntu-latest
steps:
- run: echo "This PR was approved"
在已分叉存储库中的工作流
默认情况下,工作流不会在已分叉存储库中运行。你必须在已分叉存储库的“操作”选项卡中启用 GitHub Actions。
除了 GITHUB_TOKEN
之外,当工作流从已分叉存储库触发时,不会将密钥传递给运行程序。GITHUB_TOKEN
在来自已分叉存储库的拉取请求中具有只读权限。有关更多信息,请参阅“自动令牌验证”。
已分叉存储库的拉取请求事件
对于从已分叉存储库到基础存储库的拉取请求,GitHub 会将 pull_request
、issue_comment
、pull_request_review_comment
、pull_request_review
和 pull_request_target
事件发送到基础存储库。已分叉存储库上不会发生拉取请求事件。
当首次提交者向公共存储库提交拉取请求时,具有写访问权限的维护者可能需要批准在拉取请求上运行工作流。有关更多信息,请参阅“批准来自公共分叉的工作流运行”。
对于从已分叉存储库到私有存储库的拉取请求,仅当启用工作流时才会运行工作流,请参阅“管理存储库的 GitHub Actions 设置”。
注意:由 Dependabot 拉取请求触发的工作流被视为来自已分叉存储库,并且也受这些限制。
pull_request_review_comment
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
pull_request_review_comment | - created - edited - deleted | GITHUB_REF 分支上的上次合并提交 | PR 合并分支 refs/pull/PULL_REQUEST_NUMBER/merge |
注意:有多种活动类型会触发此事件。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。你可以使用 types
关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
在拉取请求审查评论被修改时运行工作流。拉取请求审查评论是对拉取请求差异的评论。对于与拉取请求审查或拉取请求评论相关的活动,请改用pull_request_review
或issue_comment
事件。有关拉取请求审查评论 API 的信息,请参阅 GraphQL API 文档中的“对象”或“拉取请求的 REST API 端点”。
例如,您可以在拉取请求审查评论被创建
或删除
时运行工作流。
on:
pull_request_review_comment:
types: [created, deleted]
在已分叉存储库中的工作流
默认情况下,工作流不会在已分叉存储库中运行。你必须在已分叉存储库的“操作”选项卡中启用 GitHub Actions。
除了 GITHUB_TOKEN
之外,当工作流从已分叉存储库触发时,不会将密钥传递给运行程序。GITHUB_TOKEN
在来自已分叉存储库的拉取请求中具有只读权限。有关更多信息,请参阅“自动令牌验证”。
已分叉存储库的拉取请求事件
对于从已分叉存储库到基础存储库的拉取请求,GitHub 会将 pull_request
、issue_comment
、pull_request_review_comment
、pull_request_review
和 pull_request_target
事件发送到基础存储库。已分叉存储库上不会发生拉取请求事件。
当首次提交者向公共存储库提交拉取请求时,具有写访问权限的维护者可能需要批准在拉取请求上运行工作流。有关更多信息,请参阅“批准来自公共分叉的工作流运行”。
对于从已分叉存储库到私有存储库的拉取请求,仅当启用工作流时才会运行工作流,请参阅“管理存储库的 GitHub Actions 设置”。
注意:由 Dependabot 拉取请求触发的工作流被视为来自已分叉存储库,并且也受这些限制。
pull_request_target
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
pull_request | - 已分配 - 已取消分配 - 已标记 - 已取消标记 - 已打开 - edited - 已关闭 - 已重新打开 - synchronize - converted_to_draft - ready_for_review - 已锁定 - 已解锁 - review_requested - review_request_removed - auto_merge_enabled - auto_merge_disabled | PR 基本分支上的最新提交 | PR 基本分支 |
注意:有多种活动类型会触发此事件。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,仅当pull_request_target
事件的活动类型为opened
、synchronize
或reopened
时,工作流才会运行。要按不同的活动类型触发工作流,请使用types
关键字。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
在工作流存储库中拉取请求上的活动发生时运行工作流。例如,如果未指定活动类型,则在打开或重新打开拉取请求或更新拉取请求的头部分支时,工作流会运行。
此事件在拉取请求基准的上下文中运行,而不是在合并提交的上下文中运行,就像pull_request
事件所做的那样。这可以防止从拉取请求的头部执行不安全的代码,该代码可能会更改存储库或窃取工作流中使用的任何机密。此事件允许工作流执行诸如给拉取请求贴标签或评论之类的操作。如果您需要从拉取请求构建或运行代码,请避免使用此事件。
为了确保存储库安全,名称与特定模式相匹配的分支(例如,看起来类似于 SHA 的分支)可能不会使用pull_request_target
事件触发工作流。
警告:对于由 pull_request_target
事件触发的 workflow,除非指定了 permissions
键,否则 GITHUB_TOKEN
将被授予读写存储库权限,并且 workflow 可以访问机密,即使它是由 fork 触发的。虽然 workflow 在 pull request 的基础上下文中运行,但你应该确保不会使用此事件检出、构建或运行来自 pull request 的不受信任的代码。此外,任何缓存都与基础分支共享相同的范围。为了帮助防止缓存中毒,如果缓存内容可能被更改,则不应保存缓存。有关更多信息,请参阅 GitHub 安全实验室网站上的“保护 GitHub Actions 和 workflow 的安全:防止 pwn 请求”。
例如,当 pull request 已被 assigned
、opened
、synchronize
或 reopened
时,你可以运行 workflow。
on:
pull_request_target:
types: [assigned, opened, synchronize, reopened]
根据 pull request 的 head 或 base 分支运行 pull_request_target
workflow
您可以使用 branches
或 branches-ignore
过滤器配置工作流,使其仅针对目标特定分支的合并请求运行。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
例如,此工作流将在有人打开目标分支名称以 releases/
开头的合并请求时运行
on:
pull_request_target:
types:
- opened
branches:
- 'releases/**'
注意:如果您同时使用 branches
过滤器和 paths
过滤器,则仅当两个过滤器都满足时,工作流才会运行。例如,以下工作流仅在目标分支名称以 releases/
开头且包含对 JavaScript (.js
) 文件的更改的合并请求打开时运行
on:
pull_request_target:
types:
- opened
branches:
- 'releases/**'
paths:
- '**.js'
要根据合并请求的头部分支名称(而不是合并请求的基础分支名称)运行作业,请在条件中使用 github.head_ref
上下文。例如,此工作流将在每次打开合并请求时运行,但 run_if
作业仅在合并请求的头部是名称以 releases/
开头的分支时执行
on:
pull_request_target:
types:
- opened
jobs:
run_if:
if: startsWith(github.head_ref, 'releases/')
runs-on: ubuntu-latest
steps:
- run: echo "The head of this PR starts with 'releases/'"
根据 pull request 中更改的文件运行 pull_request_target
workflow
你可以使用 paths
或 paths-ignore
过滤器来配置 workflow,以便在 pull request 更改特定文件时运行。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
例如,当一个拉取请求包含对 JavaScript 文件 (.js
) 的更改时,此工作流将运行
on:
pull_request_target:
paths:
- '**.js'
注意:如果您同时使用 branches
过滤器和 paths
过滤器,则仅当两个过滤器都满足时,工作流才会运行。例如,以下工作流仅在目标分支名称以 releases/
开头且包含对 JavaScript (.js
) 文件的更改的合并请求打开时运行
on:
pull_request_target:
types:
- opened
branches:
- 'releases/**'
paths:
- '**.js'
在 pull request 合并时运行 pull_request_target
workflow
当 pull request 合并时,pull request 会自动关闭。要在一个 pull request 合并时运行 workflow,请使用 pull_request_target
closed
事件类型以及一个条件来检查事件的 merged
值。例如,以下 workflow 将在每次 pull request 关闭时运行。if_merged
作业仅在 pull request 也已合并时运行。
on:
pull_request_target:
types:
- closed
jobs:
if_merged:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- run: |
echo The PR was merged
push
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
push | 不适用 | 当你删除一个分支时,workflow 运行中的 SHA(及其关联的 refs)将还原到存储库的默认分支。 | 更新的 ref |
注意:GitHub Actions 可用的 webhook 负载不包括 commit
对象中的 added
、removed
和 modified
属性。你可以使用 API 检索完整的提交对象。有关信息,请参阅 GraphQL API 文档中的“对象”或“提交的 REST API 端点”。
注意:如果一次推送超过 5000 个分支,则不会创建事件。如果一次推送超过三个标签,则不会为标签创建事件。
在您推送提交或标签时或从模板创建存储库时运行您的工作流。
例如,您可以在发生push
事件时运行工作流。
on:
push
注意:当push
webhook 事件触发工作流运行时,Actions UI 的“pushed by”字段显示推送者的帐户,而不是作者或提交者。但是,如果使用带有部署密钥的 SSH 身份验证将更改推送到存储库,则“pushed by”字段将是验证部署密钥的存储库管理员,该密钥已添加到存储库中。
仅在推送特定分支时运行您的工作流
您可以使用branches
或branches-ignore
过滤器配置您的工作流,以便仅在推送特定分支时运行。有关详细信息,请参阅“GitHub Actions 的工作流语法”。
例如,当有人推送至main
或以releases/
开头的分支时,此工作流将运行。
on:
push:
branches:
- 'main'
- 'releases/**'
注意:如果您同时使用branches
过滤器和paths
过滤器,则只有在满足这两个过滤器时,工作流才会运行。例如,以下工作流仅在对名称以releases/
开头的分支进行推送,其中包括对 JavaScript (.js
) 文件的更改时才运行
on:
push:
branches:
- 'releases/**'
paths:
- '**.js'
仅在推送特定标签时运行您的工作流
您可以使用tags
或tags-ignore
过滤器配置您的工作流,以便仅在推送特定标签时运行。有关详细信息,请参阅“GitHub Actions 的工作流语法”。
例如,当有人推送以v1.
开头的标签时,此工作流将运行。
on:
push:
tags:
- v1.**
仅在推送影响特定文件时运行工作流
您可以使用 paths
或 paths-ignore
筛选器配置工作流,以便在推送至特定文件时运行。有关详细信息,请参阅“GitHub Actions 的工作流语法”。
例如,当有人将更改推送到 JavaScript 文件 (.js
) 时,此工作流将运行
on:
push:
paths:
- '**.js'
注意:如果您同时使用branches
过滤器和paths
过滤器,则只有在满足这两个过滤器时,工作流才会运行。例如,以下工作流仅在对名称以releases/
开头的分支进行推送,其中包括对 JavaScript (.js
) 文件的更改时才运行
on:
push:
branches:
- 'releases/**'
paths:
- '**.js'
registry_package
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
registry_package | - published - 更新 | 已发布包的提交 | 已发布包的分支或标签 |
注意:有多种活动类型会触发此事件。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用 types
关键字将工作流运行限制为特定活动类型。有关详细信息,请参阅“GitHub Actions 的工作流语法”。
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
注意:在推送多架构容器映像时,此事件会针对每个清单发生一次,因此您可能会观察到您的工作流触发多次。为了缓解此问题,并且仅针对包含实际映像标签信息的事件运行工作流作业,请使用条件
jobs:
job_name:
if: ${{ github.event.registry_package.package_version.container_metadata.tag.name != '' }}
当与 GitHub Packages 相关的活动在您的存储库中发生时,运行您的工作流。有关详细信息,请参阅“GitHub Packages 文档”。
例如,您可以在发布新包版本时运行工作流。
on:
registry_package:
types: [published]
release
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
release | - published - unpublished - created - edited - deleted - prereleased - released | 标记的版本中的最后提交 | 版本的标签引用 refs/tags/<tag_name> |
注意:有多种活动类型会触发此事件。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用 types
关键字将工作流运行限制为特定活动类型。有关详细信息,请参阅“GitHub Actions 的工作流语法”。
注意:对于草稿版本,工作流不会针对 created
、edited
或 deleted
活动类型触发。当您通过 GitHub 浏览器 UI 创建版本时,您的版本可能会自动保存为草稿。
注意:prereleased
类型不会针对从草稿版本发布的预发行版触发,但 published
类型会触发。如果您希望在发布稳定版本和预发行版时运行工作流,请订阅 published
,而不是 released
和 prereleased
。
当存储库中的版本活动发生时,运行您的工作流。有关版本 API 的信息,请参阅 GraphQL API 文档中的“对象”或 REST API 文档中的“版本和版本资产的 REST API 端点”。
例如,当版本已 published
时,您可以运行工作流。
on:
release:
types: [published]
repository_dispatch
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
repository_dispatch | 自定义 | 默认分支上的最新提交 | 默认分支 |
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
当您希望为 GitHub 外部发生的活动触发工作流时,可以使用 GitHub API 触发名为 repository_dispatch
的 Webhook 事件。有关更多信息,请参阅“存储库的 REST API 端点”。
当您发出创建 repository_dispatch
事件的请求时,您必须指定一个 event_type
来描述活动类型。默认情况下,所有 repository_dispatch
活动类型都会触发工作流运行。您可以使用 types
关键字来限制您的工作流,仅在 repository_dispatch
Webhook 有效负载中发送特定 event_type
值时运行。
on:
repository_dispatch:
types: [test_result]
注意:event_type
值限制为 100 个字符。
您通过 client_payload
参数发送的任何数据都将在工作流的 github.event
上下文中提供。例如,如果您在创建存储库分发事件时发送此请求正文
{
"event_type": "test_result",
"client_payload": {
"passed": false,
"message": "Error: timeout"
}
}
那么您可以像这样在工作流中访问有效负载
on:
repository_dispatch:
types: [test_result]
jobs:
run_if_failure:
if: ${{ !github.event.client_payload.passed }}
runs-on: ubuntu-latest
steps:
- env:
MESSAGE: ${{ github.event.client_payload.message }}
run: echo $MESSAGE
备注:
client_payload
中的顶级属性的最大数量为 10。- 有效负载最多可包含 65,535 个字符。
schedule
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
不适用 | 不适用 | 默认分支上的最新提交 | 默认分支 |
备注
-
在 GitHub Actions 工作流运行负载较高的期间,
schedule
事件可能会延迟。负载较高的时段包括每小时的开始。如果负载足够高,某些排队的作业可能会被丢弃。为了减少延迟的可能性,请安排您的工作流在每小时的不同时间运行。 -
此事件仅当工作流文件位于默认分支上时才会触发工作流运行。
-
计划的工作流仅在默认分支上运行。
-
在公共存储库中,如果 60 天内没有存储库活动,计划的工作流将自动禁用。有关重新启用已禁用工作流的信息,请参阅“禁用和启用工作流”。
-
当提交到工作流的 cron 计划的最后一位用户从组织中移除时,计划的工作流将被禁用。如果具有存储库
写入
权限的用户提交了更改 cron 计划的提交,则计划的工作流将被重新激活。请注意,在这种情况下,工作流不会因工作流文件中的任何更改而重新激活;您必须更改cron
值并提交此更改。示例
on: schedule: - cron: "15 4,5 * * *" # <=== Change this value
schedule
事件允许您在计划的时间触发工作流。
您可以使用 POSIX cron 语法 计划工作流在特定的 UTC 时间运行。计划的工作流在默认或基本分支上的最新提交上运行。计划的工作流最短运行间隔为 5 分钟一次。
此示例每天在 UTC 时间 5:30 和 17:30 触发工作流
on:
schedule:
# * is a special character in YAML so you have to quote this string
- cron: '30 5,17 * * *'
单个工作流可以由多个schedule
事件触发。您可以通过github.event.schedule
上下文访问触发工作流的计划事件。此示例触发工作流在每个星期一至星期四的 UTC 时间 5:30 运行,但在星期一和星期三跳过Not on Monday or Wednesday
步骤。
on:
schedule:
- cron: '30 5 * * 1,3'
- cron: '30 5 * * 2,4'
jobs:
test_schedule:
runs-on: ubuntu-latest
steps:
- name: Not on Monday or Wednesday
if: github.event.schedule != '30 5 * * 1,3'
run: echo "This step will be skipped on Monday and Wednesday"
- name: Every time
run: echo "This step will always run"
Cron 语法有五个用空格分隔的字段,每个字段表示一个时间单位。
┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23)
│ │ ┌───────────── day of the month (1 - 31)
│ │ │ ┌───────────── month (1 - 12 or JAN-DEC)
│ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT)
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
* * * * *
您可以在五个字段中的任何一个中使用这些运算符
运算符 | 说明 | 示例 |
---|---|---|
* | 任何值 | 15 * * * * 在每天的每个小时的第 15 分钟运行。 |
, | 值列表分隔符 | 2,10 4,5 * * * 在每天的第 4 和第 5 小时的第 2 分钟和第 10 分钟运行。 |
- | 值范围 | 30 4-6 * * * 在第 4、第 5 和第 6 小时的第 30 分钟运行。 |
/ | 步长值 | 20/15 * * * * 从第 20 分钟开始每 15 分钟运行一次,直至第 59 分钟(第 20、35 和 50 分钟)。 |
注意:GitHub Actions 不支持非标准语法 @yearly
、@monthly
、@weekly
、@daily
、@hourly
和 @reboot
。
你可以使用 crontab guru 帮助生成 cron 语法并确认其运行时间。为了帮助你入门,这里还有一份 crontab guru 示例 列表。
计划工作流的通知将发送给最近修改工作流文件中 cron 语法的用户。有关更多信息,请参阅“工作流运行通知”。
status
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
status | 不适用 | 默认分支上的最新提交 | 不适用 |
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
在 Git 提交的状态发生更改时运行你的工作流。例如,提交可以标记为 error
、failure
、pending
或 success
。如果你想提供有关状态更改的更多详细信息,则可能需要使用 check_run
事件。有关提交状态 API 的信息,请参阅 GraphQL API 文档中的“对象”或“提交的 REST API 端点”。
例如,你可以在 status
事件发生时运行工作流。
on:
status
如果你想根据新的提交状态在工作流中运行作业,则可以使用 github.event.state
上下文。例如,以下工作流在提交状态更改时触发,但 if_error_or_failure
作业仅在新的提交状态为 error
或 failure
时运行。
on:
status
jobs:
if_error_or_failure:
runs-on: ubuntu-latest
if: >-
github.event.state == 'error' ||
github.event.state == 'failure'
steps:
- env:
DESCRIPTION: ${{ github.event.description }}
run: |
echo The status is error or failed: $DESCRIPTION
watch
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
watch | - started | 默认分支上的最新提交 | 默认分支 |
注意:有多种活动类型会触发此事件。虽然仅支持started
活动类型,但指定活动类型将使你的工作流保持特定性,以防将来添加更多活动类型。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。你可以使用types
关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
当工作流存储库被加星时运行你的工作流。有关拉取请求 API 的信息,请参阅 GraphQL API 文档中的“突变”或“用于加星的 REST API 端点”。
例如,当有人加星存储库时,你可以运行工作流,这是监视事件的started
活动类型。
on:
watch:
types: [started]
workflow_call
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
与调用者工作流相同 | 不适用 | 与调用者工作流相同 | 与调用者工作流相同 |
workflow_call
用于指示工作流可以被另一个工作流调用。当使用workflow_call
事件触发工作流时,被调用工作流中的事件有效负载与调用工作流中的事件有效负载相同。有关更多信息,请参阅“重用工作流”。
以下示例仅在从另一个工作流调用工作流时运行工作流
on: workflow_call
workflow_dispatch
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
workflow_dispatch | 不适用 | GITHUB_REF 分支或标签上的最后提交 | 收到分派的标签或分支 |
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
若要启用手动触发工作流,你需要配置workflow_dispatch
事件。你可以使用 GitHub API、GitHub CLI 或 GitHub 浏览器界面手动触发工作流运行。有关更多信息,请参阅“手动运行工作流”。
on: workflow_dispatch
提供输入
你可以直接在工作流中为事件配置自定义输入属性、默认输入值和必需输入。触发事件时,你可以提供ref
和任何inputs
。当工作流运行时,你可以在inputs
上下文中访问输入值。有关更多信息,请参阅“上下文”。
备注:
- 工作流还将在
github.event.inputs
上下文中接收输入。inputs
上下文和github.event.inputs
上下文中的信息是相同的,但inputs
上下文将布尔值保留为布尔值,而不是将其转换为字符串。choice
类型解析为字符串,并且是单个可选择的选项。 inputs
的顶级属性的最大数量为 10。inputs
的最大有效负载为 65,535 个字符。
此示例定义了名为 logLevel
、tags
和 environment
的输入。在运行工作流时,您将这些输入的值传递给工作流。然后,此工作流使用 inputs.logLevel
、inputs.tags
和 inputs.environment
上下文属性将这些值打印到日志中。
on:
workflow_dispatch:
inputs:
logLevel:
description: 'Log level'
required: true
default: 'warning'
type: choice
options:
- info
- warning
- debug
tags:
description: 'Test scenario tags'
required: false
type: boolean
environment:
description: 'Environment to run tests against'
type: environment
required: true
jobs:
log-the-inputs:
runs-on: ubuntu-latest
steps:
- run: |
echo "Log level: $LEVEL"
echo "Tags: $TAGS"
echo "Environment: $ENVIRONMENT"
env:
LEVEL: ${{ inputs.logLevel }}
TAGS: ${{ inputs.tags }}
ENVIRONMENT: ${{ inputs.environment }}
如果您从浏览器运行此工作流,则必须在工作流运行前手动输入必需的输入的值。
您还可以在从脚本或使用 GitHub CLI 运行工作流时传递输入。例如
gh workflow run run-tests.yml -f logLevel=warning -f tags=false -f environment=staging
有关更多信息,请参阅“手动运行工作流”中的 GitHub CLI 信息。
workflow_run
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
workflow_run | - completed - requested - in_progress | 默认分支上的最新提交 | 默认分支 |
注意:有多种活动类型会触发此事件。当重新运行工作流时,不会发生 requested
活动类型。有关每种活动类型的信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用 types
关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
注意:仅当工作流文件位于默认分支上时,此事件才会触发工作流运行。
注意:您不能使用 workflow_run
将三级以上的工作流链接在一起。例如,如果您尝试触发五个工作流(名为 B
到 F
)在初始工作流 A
运行后按顺序运行(即:A
→ B
→ C
→ D
→ E
→ F
),则不会运行工作流 E
和 F
。
此事件在请求或完成工作流运行时发生。它允许您根据另一个工作流的执行或完成来执行工作流。由 workflow_run
事件启动的工作流能够访问密钥和写入令牌,即使之前的那个工作流不能。这在以下情况下很有用:之前的那个工作流故意没有特权,但您需要在后面的工作流中执行特权操作。
在此示例中,工作流配置为在单独的“运行测试”工作流完成后运行。
on:
workflow_run:
workflows: [Run Tests]
types:
- completed
如果您为 workflow_run
事件指定多个 workflows
,则只需要运行其中一个工作流。例如,具有以下触发器的工作流将在“暂存”工作流或“实验室”工作流完成后运行。
on:
workflow_run:
workflows: [Staging, Lab]
types:
- completed
根据另一个工作流的结论运行工作流
无论前一个工作流的结论如何,都会触发工作流运行。如果您想根据触发工作流的结果运行作业或步骤,可以使用条件和 github.event.workflow_run.conclusion
属性。例如,此工作流将在名为“构建”的工作流完成时运行,但 on-success
作业仅在“构建”工作流成功时运行,而 on-failure
作业仅在“构建”工作流失败时运行
on:
workflow_run:
workflows: [Build]
types: [completed]
jobs:
on-success:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- run: echo 'The triggering workflow passed'
on-failure:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
steps:
- run: echo 'The triggering workflow failed'
根据分支限制工作流的运行
您可以使用 branches
或 branches-ignore
过滤器指定触发工作流必须在哪些分支上运行才能触发您的工作流。有关详细信息,请参阅“GitHub Actions 的工作流语法”。例如,具有以下触发器的工作流仅在名为 Build
的工作流在名为 canary
的分支上运行时运行。
on:
workflow_run:
workflows: [Build]
types: [requested]
branches: [canary]
使用触发工作流中的数据
您可以访问与触发您工作流的工作流相对应的workflow_run
事件有效负载。例如,如果您的触发工作流生成工件,则使用 workflow_run
事件触发的工作流可以访问这些工件。
以下工作流将数据作为工件上传。(在此简化的示例中,数据是请求提取的编号。)
name: Upload data
on:
pull_request:
jobs:
upload:
runs-on: ubuntu-latest
steps:
- name: Save PR number
env:
PR_NUMBER: ${{ github.event.number }}
run: |
mkdir -p ./pr
echo $PR_NUMBER > ./pr/pr_number
- uses: actions/upload-artifact@v4
with:
name: pr_number
path: pr/
当上述工作流的运行完成后,它将触发以下工作流的运行。以下工作流使用 github.event.workflow_run
上下文和 GitHub REST API 下载上述工作流上传的工件,解压缩下载的工件,并对作为工件上传的请求提取进行注释。
name: Use the data
on:
workflow_run:
workflows: [Upload data]
types:
- completed
jobs:
download:
runs-on: ubuntu-latest
steps:
- name: 'Download artifact'
uses: actions/github-script@v6
with:
script: |
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: context.payload.workflow_run.id,
});
let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => {
return artifact.name == "pr_number"
})[0];
let download = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: matchArtifact.id,
archive_format: 'zip',
});
let fs = require('fs');
fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/pr_number.zip`, Buffer.from(download.data));
- name: 'Unzip artifact'
run: unzip pr_number.zip
- name: 'Comment on PR'
uses: actions/github-script@v6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
let fs = require('fs');
let issue_number = Number(fs.readFileSync('./pr_number'));
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue_number,
body: 'Thank you for the PR!'
});