关于触发工作流的事件
工作流触发器是导致工作流运行的事件。有关如何使用工作流触发器的更多信息,请参阅“触发工作流”。
某些事件具有多种活动类型。对于这些事件,您可以指定哪些活动类型将触发工作流运行。有关每种活动类型的含义的更多信息,请参阅“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 端点”。
例如,您可以创建
或删除
分支保护规则时运行工作流。
on:
branch_protection_rule:
types: [created, deleted]
check_run
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
check_run | - created - 重新请求 - 已完成 - 请求的操作 | 默认分支上的最后一次提交 | 默认分支 |
注意
此事件由多种活动类型触发。有关每种活动类型的详细信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用types
关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
注意
只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。
当发生与检查运行相关的活动时运行您的工作流。检查运行是检查套件中一部分的单个测试。有关信息,请参阅“使用 REST API 与检查交互”。有关检查运行 API 的信息,请参阅 GraphQL API 文档中的“对象”或“检查运行的 REST API 端点”。
例如,您可以重新请求
或完成
检查运行时运行工作流。
on:
check_run:
types: [rerequested, completed]
check_suite
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
check_suite | - 已完成 | 默认分支上的最后一次提交 | 默认分支 |
注意
此事件由多种活动类型触发。有关每种活动类型的详细信息,请参阅“Webhook 事件和有效负载”。尽管只支持已完成
活动类型,但指定活动类型将在将来添加更多活动类型时保持工作流的特定性。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用types
关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
注意
只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。
注意
为了防止递归工作流,如果检查套件是由 GitHub Actions 创建的,则此事件不会触发工作流。
当发生检查套件活动时运行您的工作流。检查套件是为特定提交创建的检查运行的集合。检查套件总结了套件中检查运行的状态和结论。有关信息,请参阅“使用 REST API 与检查交互”。有关检查套件 API 的信息,请参阅 GraphQL API 文档中的“对象”或“检查套件的 REST API 端点”。
例如,您可以完成
检查套件时运行工作流。
on:
check_suite:
types: [completed]
create
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
create | 不适用 | 创建的分支或标签上的最后一次提交 | 创建的分支或标签 |
注意
一次创建超过三个标签时,不会创建事件。
当有人在工作流的存储库中创建 Git 引用(Git 分支或标签)时运行您的工作流。有关创建 Git 引用的 API 的信息,请参阅 GraphQL API 文档中的“变异”或“Git 引用的 REST API 端点”。
例如,您可以发生create
事件时运行工作流。
on:
create
delete
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
delete | 不适用 | 默认分支上的最后一次提交 | 默认分支 |
注意
只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。
注意
一次删除超过三个标签时,不会创建事件。
当有人删除工作流存储库中的 Git 引用(Git 分支或标签)时运行您的工作流。有关删除 Git 引用的 API 的信息,请参阅 GraphQL API 文档中的“变异”或“Git 引用的 REST API 端点”。
例如,您可以发生delete
事件时运行工作流。
on:
delete
deployment
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
deployment | 不适用 | 要部署的提交 | 要部署的分支或标签(如果使用提交 SHA 创建,则为空) |
当有人在工作流的存储库中创建部署时运行您的工作流。使用提交 SHA 创建的部署可能没有 Git 引用。有关创建部署的 API 的信息,请参阅 GraphQL API 文档中的“变异”或“存储库的 REST API 端点”。
例如,您可以发生deployment
事件时运行工作流。
on:
deployment
deployment_status
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
deployment_status | 不适用 | 要部署的提交 | 要部署的分支或标签(如果为提交,则为空) |
注意
当部署状态的状态设置为inactive
时,不会触发工作流运行。
当第三方提供部署状态时运行您的工作流。使用提交 SHA 创建的部署可能没有 Git 引用。有关创建部署状态的 API 的信息,请参阅 GraphQL API 文档中的“变异”或“部署的 REST API 端点”。
例如,您可以发生deployment_status
事件时运行工作流。
on:
deployment_status
discussion
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
discussion | - created - edited - deleted - 已转移 - 已固定 - 已取消固定 - 已添加标签 - 已删除标签 - 已锁定 - 已解锁 - 类别已更改 - 已解答 - 未解答 | 默认分支上的最后一次提交 | 默认分支 |
注意
此事件由多种活动类型触发。有关每种活动类型的详细信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用types
关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
注意
只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。
注意
GitHub Discussions 的 Webhook 事件目前处于公开预览阶段,可能会发生更改。
当工作流的存储库中创建或修改讨论时运行您的工作流。对于与讨论评论相关的活动,请使用discussion_comment
事件。有关讨论的更多信息,请参阅“关于讨论”。有关 GraphQL API 的信息,请参阅“对象”。
例如,您可以创建、编辑或解答讨论时运行工作流。
on:
discussion:
types: [created, edited, answered]
discussion_comment
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
discussion_comment | - created - edited - deleted | 默认分支上的最后一次提交 | 默认分支 |
注意
此事件由多种活动类型触发。有关每种活动类型的详细信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用types
关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
注意
只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。
注意
GitHub Discussions 的 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 }}
issues
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
issues | - opened (已打开)- edited - deleted - 已转移 - 已固定 - 已取消固定 - closed (已关闭)- reopened (已重新打开)- assigned (已分配)- unassigned (已取消分配)- 已添加标签 - 已删除标签 - 已锁定 - 已解锁 - milestoned (已设置里程碑)- demilestoned (已移除里程碑) | 默认分支上的最后一次提交 | 默认分支 |
注意
此事件由多种活动类型触发。有关每种活动类型的详细信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用types
关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
注意
只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。
当工作流存储库中的问题被创建或修改时运行您的工作流。对于与问题中评论相关的活动,请使用issue_comment
事件。有关问题的更多信息,请参阅“关于问题”。有关问题 API 的信息,请参阅 GraphQL API 文档中的“对象”或“问题 REST API 端点”。
例如,当问题被opened
(打开)、edited
(编辑)或milestoned
(设置里程碑)时,您可以运行工作流。
on:
issues:
types: [opened, edited, milestoned]
label
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
活动类型。
例如,当创建或删除标签时,您可以运行工作流。
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 - closed (已关闭)- opened (已打开)- 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
public
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
public | 不适用 | 默认分支上的最后一次提交 | 默认分支 |
注意
只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。
当您的工作流存储库从私有更改为公有时运行您的工作流。有关 REST API 的信息,请参阅“存储库 REST API 端点”。
例如,当发生public
事件时,您可以运行工作流。
on:
public
pull_request
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
pull_request | - assigned (已分配)- unassigned (已取消分配)- 已添加标签 - 已删除标签 - opened (已打开)- edited - closed (已关闭)- reopened (已重新打开)- synchronize (同步)- converted_to_draft (转换为草稿)- 已锁定 - 已解锁 - enqueued (已入队)- dequeued (已出队)- milestoned (已设置里程碑)- demilestoned (已移除里程碑)- 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
)
要在创建、编辑或删除拉取请求(而不是拉取请求的差异)上的评论时运行您的工作流,请使用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_review_comment
或issue_comment
事件。有关拉取请求审查 API 的信息,请参阅 GraphQL API 文档中的“对象”或“拉取请求的 REST API 端点”。
例如,您可以在编辑或驳回拉取请求审查时运行工作流。
on:
pull_request_review:
types: [edited, dismissed]
在批准拉取请求时运行工作流
要在批准拉取请求时运行您的工作流,您可以使用pull_request_review
事件的submitted
类型触发您的工作流,然后使用github.event.review.state
属性检查审查状态。例如,此工作流将在提交拉取请求审查时运行,但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 | - assigned (已分配)- unassigned (已取消分配)- 已添加标签 - 已删除标签 - opened (已打开)- edited - closed (已关闭)- reopened (已重新打开)- 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
事件触发的ワークフロー,除非指定了permissions
键,否则GITHUB_TOKEN
将被授予读/写仓库权限,并且即使是从fork触发,工作流程也可以访问密钥。尽管工作流程在拉取请求的基础分支上下文中运行,但您应确保不要检出、构建或运行来自拉取请求的不可信代码。此外,任何缓存都与基础分支共享相同的范围。为了帮助防止缓存中毒,如果可能存在缓存内容被更改的情况,则不应保存缓存。有关更多信息,请参阅GitHub安全实验室网站上的"保持GitHub Actions和工作流程安全:防止pwn请求"。
例如,当拉取请求被分配
、打开
、同步
或重新打开
时,您可以运行工作流程。
on:
pull_request_target:
types: [assigned, opened, synchronize, reopened]
基于拉取请求的头部或基础分支运行您的pull_request_target
工作流程
您可以使用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_target
工作流程
您可以使用paths
或paths-ignore
过滤器来配置您的工作流程,以便在拉取请求更改特定文件时运行。有关更多信息,请参阅"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_target
工作流程
当拉取请求合并时,拉取请求会自动关闭。要在拉取请求合并时运行工作流程,请使用pull_request_target
的closed
事件类型以及检查事件的merged
值的条件。例如,以下工作流程将在拉取请求关闭时运行。if_merged
作业只有在拉取请求也合并的情况下才会运行。
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 | 不适用 | 提示:推送到ref的提交。当您删除分支时,工作流程运行中的SHA(及其关联的ref)将恢复到仓库的默认分支。 | 更新的ref |
注意
GitHub Actions可用的Webhook负载不包括commit
对象中的added
、removed
和modified
属性。您可以使用API检索完整的提交对象。有关信息,请参阅GraphQL API文档中的"对象"或"提交的REST API端点"。
注意
如果一次推送超过5000个分支,则不会创建事件。如果一次推送超过三个标签,则不会为标签创建事件。
当您推送提交或标签,或者当您从模板创建仓库时,运行您的工作流程。
例如,当发生push
事件时,您可以运行工作流程。
on:
push
注意
当push
Webhook事件触发工作流程运行时,Actions UI的“由…推送”字段显示推送者的帐户,而不是作者或提交者。但是,如果使用带有部署密钥的SSH身份验证将更改推送到仓库,则“由…推送”字段将是添加部署密钥到仓库时验证该密钥的仓库管理员。
仅当推送到特定分支时运行您的工作流程
您可以使用branches
或branches-ignore
过滤器来配置您的工作流程,以便仅在推送特定分支时运行。有关更多信息,请参阅"GitHub Actions的工作流程语法"。
例如,当有人推送到main
或以releases/
开头的分支时,此工作流程将运行。
on:
push:
branches:
- 'main'
- 'releases/**'
注意
如果您同时使用branches
过滤器和paths
过滤器,则只有当两个过滤器都满足条件时,工作流程才会运行。例如,以下工作流程只有在对JavaScript(.js
)文件的更改被推送到名称以releases/
开头的分支时才会运行。
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
过滤器,则只有当两个过滤器都满足条件时,工作流程才会运行。例如,以下工作流程只有在对JavaScript(.js
)文件的更改被推送到名称以releases/
开头的分支时才会运行。
on:
push:
branches:
- 'releases/**'
paths:
- '**.js'
registry_package
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
registry_package | - 已发布 - 已更新 | 已发布包的提交 | 已发布包的分支或标签 |
注意
多个活动类型会触发此事件。有关每个活动类型的详细信息,请参阅"Webhook事件和负载"。默认情况下,所有活动类型都会触发在此事件上运行的工作流程。您可以使用types
关键字将工作流程运行限制为特定活动类型。有关更多信息,请参阅"GitHub Actions的工作流程语法"。
注意
只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。
注意
推送多架构容器镜像时,此事件会针对每个清单发生一次,因此您可能会观察到您的工作流程多次触发。为了减轻这种情况,并且仅为包含实际镜像标签信息的事件运行您的工作流程作业,请使用条件。
jobs:
job_name:
if: $true
当您的仓库中发生与GitHub Packages相关的活动时,运行您的工作流程。有关更多信息,请参阅"GitHub Packages文档"。
例如,当发布新包版本时,您可以运行工作流程。
on:
registry_package:
types: [published]
release
Webhook 事件有效负载 | 活动类型 | GITHUB_SHA | GITHUB_REF |
---|---|---|---|
release | - 已发布 - 未发布 - created - edited - deleted - 预发布 - 已发布 | 标记的发布中的最后一次提交 | 发布的标签ref 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端点"。
例如,当发布已发布时,您可以运行工作流程。
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计划提交的用户从组织中删除时,计划的工作流程将被禁用。如果具有对仓库的
write
权限的用户进行更改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
上下文。例如,当提交状态更改时,以下工作流程会触发,但只有当新的提交状态为error
或failure
时,if_error_or_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 端点”。
例如,当有人为存储库加星标时(这是 watch 事件的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
上下文中的输入值。有关更多信息,请参阅“访问有关工作流程运行的上下文信息”。
注意
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 | - 已完成 - requested - in_progress | 默认分支上的最后一次提交 | 默认分支 |
注意
多个活动类型会触发此事件。当重新运行工作流程时,不会发生requested
活动类型。有关每种活动类型的更多信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流程。您可以使用types
关键字将工作流程运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流程语法”。
注意
只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。
注意
您不能使用workflow_run
将超过三个级别的工作流程链接在一起。例如,如果您尝试在初始工作流程A
运行后依次触发五个工作流程(命名为B
到F
)(即: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!'
});