跳至主要内容

触发工作流的事件

您可以配置您的工作流,使其在 GitHub 上发生特定活动时、在预定的时间或在 GitHub 外部发生事件时运行。

关于触发工作流的事件

工作流触发器是导致工作流运行的事件。有关如何使用工作流触发器的更多信息,请参阅“触发工作流”。

某些事件具有多种活动类型。对于这些事件,您可以指定哪些活动类型将触发工作流运行。有关每种活动类型的含义的更多信息,请参阅“Webhook 事件和有效负载”。

注意

并非所有 Webhook 事件都会触发工作流。

branch_protection_rule

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_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_SHAGITHUB_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_SHAGITHUB_REF
check_suite- 已完成默认分支上的最后一次提交默认分支

注意

此事件由多种活动类型触发。有关每种活动类型的详细信息,请参阅“Webhook 事件和有效负载”。尽管只支持已完成活动类型,但指定活动类型将在将来添加更多活动类型时保持工作流的特定性。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用types关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。

注意

只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。

注意

为了防止递归工作流,如果检查套件是由 GitHub Actions 创建的,则此事件不会触发工作流。

当发生检查套件活动时运行您的工作流。检查套件是为特定提交创建的检查运行的集合。检查套件总结了套件中检查运行的状态和结论。有关信息,请参阅“使用 REST API 与检查交互”。有关检查套件 API 的信息,请参阅 GraphQL API 文档中的“对象”或“检查套件的 REST API 端点”。

例如,您可以完成检查套件时运行工作流。

on:
  check_suite:
    types: [completed]

create

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
create不适用创建的分支或标签上的最后一次提交创建的分支或标签

注意

一次创建超过三个标签时,不会创建事件。

当有人在工作流的存储库中创建 Git 引用(Git 分支或标签)时运行您的工作流。有关创建 Git 引用的 API 的信息,请参阅 GraphQL API 文档中的“变异”或“Git 引用的 REST API 端点”。

例如,您可以发生create事件时运行工作流。

on:
  create

delete

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
delete不适用默认分支上的最后一次提交默认分支

注意

只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。

注意

一次删除超过三个标签时,不会创建事件。

当有人删除工作流存储库中的 Git 引用(Git 分支或标签)时运行您的工作流。有关删除 Git 引用的 API 的信息,请参阅 GraphQL API 文档中的“变异”或“Git 引用的 REST API 端点”。

例如,您可以发生delete事件时运行工作流。

on:
  delete

deployment

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
deployment不适用要部署的提交要部署的分支或标签(如果使用提交 SHA 创建,则为空)

当有人在工作流的存储库中创建部署时运行您的工作流。使用提交 SHA 创建的部署可能没有 Git 引用。有关创建部署的 API 的信息,请参阅 GraphQL API 文档中的“变异”或“存储库的 REST API 端点”。

例如,您可以发生deployment事件时运行工作流。

on:
  deployment

deployment_status

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
deployment_status不适用要部署的提交要部署的分支或标签(如果为提交,则为空)

注意

当部署状态的状态设置为inactive时,不会触发工作流运行。

当第三方提供部署状态时运行您的工作流。使用提交 SHA 创建的部署可能没有 Git 引用。有关创建部署状态的 API 的信息,请参阅 GraphQL API 文档中的“变异”或“部署的 REST API 端点”。

例如,您可以发生deployment_status事件时运行工作流。

on:
  deployment_status

discussion

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_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_SHAGITHUB_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_SHAGITHUB_REF
fork不适用默认分支上的最后一次提交默认分支

注意

只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。

当有人派生存储库时运行您的工作流。有关 REST API 的信息,请参阅“派生的 REST API 端点”。

例如,您可以发生fork事件时运行工作流。

on:
  fork

gollum

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
gollum不适用默认分支上的最后一次提交默认分支

注意

只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。

当有人创建或更新 Wiki 页面时运行您的工作流。有关更多信息,请参阅“关于 Wiki”。

例如,您可以发生gollum事件时运行工作流。

on:
  gollum

issue_comment

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_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_SHAGITHUB_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_SHAGITHUB_REF
label- created
- edited
- deleted
默认分支上的最后一次提交默认分支

注意

此事件由多种活动类型触发。有关每种活动类型的详细信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用types关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。

注意

只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。

当工作流存储库中的标签被创建或修改时运行您的工作流。有关标签的更多信息,请参阅“管理标签”。有关标签 API 的信息,请参阅 GraphQL API 文档中的“对象”或“标签 REST API 端点”。

如果您希望在将标签添加到问题、拉取请求或讨论中或从中移除标签时运行工作流,请改用issuespull_requestpull_request_targetdiscussion事件的labeledunlabeled活动类型。

例如,当创建或删除标签时,您可以运行工作流。

on:
  label:
    types: [created, deleted]

merge_group

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
merge_groupchecks_requested(请求检查)合并组的 SHA 值合并组的引用

注意

  • 此事件由多种活动类型触发。虽然仅支持checks_requested活动类型,但指定活动类型将在将来添加更多活动类型时保持工作流的特定性。有关每种活动类型的详细信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用types关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
  • 如果您的存储库使用 GitHub Actions 对存储库中的拉取请求执行必需的检查,则需要更新工作流以包含merge_group事件作为附加触发器。否则,当您将拉取请求添加到合并队列时,状态检查将不会触发。由于不会报告必需的状态检查,因此合并将失败。merge_group事件与pull_requestpush事件是分开的。

当将拉取请求添加到合并队列时(这会将拉取请求添加到合并组)运行您的工作流。有关更多信息,请参阅“使用合并队列合并拉取请求”。

例如,当发生checks_requested活动时,您可以运行工作流。

on:
  pull_request:
    branches: [ "main" ]
  merge_group:
    types: [checks_requested]

milestone

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
milestone- created
- closed(已关闭)
- opened(已打开)
- edited
- deleted
默认分支上的最后一次提交默认分支

注意

此事件由多种活动类型触发。有关每种活动类型的详细信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用types关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。

注意

只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。

当工作流存储库中的里程碑被创建或修改时运行您的工作流。有关里程碑的更多信息,请参阅“关于里程碑”。有关里程碑 API 的信息,请参阅 GraphQL API 文档中的“对象”或“里程碑 REST API 端点”。

如果您希望在将问题添加到里程碑中或从中移除问题时运行工作流,请改用issues事件的milestoneddemilestoned活动类型。

例如,当里程碑被opened(打开)或deleted(删除)时,您可以运行工作流。

on:
  milestone:
    types: [opened, deleted]

page_build

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
page_build不适用默认分支上的最后一次提交不适用

注意

只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。

如果为存储库启用了 GitHub Pages,则当有人推送到用作 GitHub Pages 发布源的分支时运行您的工作流。有关 GitHub Pages 发布源的更多信息,请参阅“配置 GitHub Pages 站点的发布源”。有关 REST API 的信息,请参阅“存储库 REST API 端点”。

例如,当发生page_build事件时,您可以运行工作流。

on:
  page_build

public

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
public不适用默认分支上的最后一次提交默认分支

注意

只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。

当您的工作流存储库从私有更改为公有时运行您的工作流。有关 REST API 的信息,请参阅“存储库 REST API 端点”。

例如,当发生public事件时,您可以运行工作流。

on:
  public

pull_request

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_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事件的活动类型为openedsynchronizereopened时,工作流才会运行。要通过不同的活动类型触发工作流,请使用types关键字。有关更多信息,请参阅“GitHub Actions 的工作流语法”。
  • 如果拉取请求存在合并冲突,则工作流不会在pull_request活动上运行。必须首先解决合并冲突。相反,即使拉取请求存在合并冲突,具有pull_request_target事件的工作流也会运行。在使用pull_request_target触发器之前,您应该了解安全风险。有关更多信息,请参阅pull_request_target
  • 对于已合并的拉取请求和来自派生存储库的拉取请求,pull_requestWebhook 事件有效负载为空。
  • 对于已关闭的拉取请求,GITHUB_REF的值会根据拉取请求是否已合并而有所不同。如果拉取请求已关闭但未合并,则它将为refs/pull/PULL_REQUEST_NUMBER/merge。如果拉取请求由于已合并而关闭,则它将是其合并到的分支的完全限定ref,例如/refs/heads/main

当工作流所在仓库的拉取请求发生活动时,运行您的工作流。例如,如果未指定任何活动类型,则在打开或重新打开拉取请求或更新拉取请求的头部分支时,工作流将运行。对于与拉取请求审查、拉取请求审查评论或拉取请求评论相关的活动,请改用pull_request_reviewpull_request_review_commentissue_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工作流

您可以使用branchesbranches-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_requestclosed事件类型以及检查事件的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_requestissue_commentpull_request_review_commentpull_request_reviewpull_request_target事件发送到基础仓库。派生仓库不会发生任何拉取请求事件。

当首次贡献者向公共仓库提交拉取请求时,拥有写入权限的维护者可能需要批准在拉取请求上运行工作流。有关更多信息,请参阅“批准来自公共派生仓库的工作流运行”。

对于从派生仓库到私有仓库的拉取请求,只有在启用工作流时,工作流才会运行,请参阅“管理仓库的 GitHub Actions 设置”。

注意

由 Dependabot 拉取请求触发的工作流被视为来自派生仓库,也受这些限制。

pull_request_comment(使用issue_comment

要在创建、编辑或删除拉取请求(而不是拉取请求的差异)上的评论时运行您的工作流,请使用issue_comment事件。对于与拉取请求审查或拉取请求审查评论相关的活动,请改用pull_request_reviewpull_request_review_comment事件。

pull_request_review

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
pull_request_review- submitted
- edited
- dismissed
GITHUB_REF分支上的最新合并提交PR 合并分支refs/pull/PULL_REQUEST_NUMBER/merge

注意

多个活动类型会触发此事件。有关每个活动类型的详细信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用types关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。

当提交、编辑或驳回拉取请求审查时运行您的工作流。拉取请求审查是一组拉取请求审查评论,此外还有一个正文评论和一个状态。对于与拉取请求审查评论或拉取请求评论相关的活动,请改用pull_request_review_commentissue_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_requestissue_commentpull_request_review_commentpull_request_reviewpull_request_target事件发送到基础仓库。派生仓库不会发生任何拉取请求事件。

当首次贡献者向公共仓库提交拉取请求时,拥有写入权限的维护者可能需要批准在拉取请求上运行工作流。有关更多信息,请参阅“批准来自公共派生仓库的工作流运行”。

对于从派生仓库到私有仓库的拉取请求,只有在启用工作流时,工作流才会运行,请参阅“管理仓库的 GitHub Actions 设置”。

注意

由 Dependabot 拉取请求触发的工作流被视为来自派生仓库,也受这些限制。

pull_request_review_comment

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
pull_request_review_comment- created
- edited
- deleted
GITHUB_REF分支上的最新合并提交PR 合并分支refs/pull/PULL_REQUEST_NUMBER/merge

注意

多个活动类型会触发此事件。有关每个活动类型的详细信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流。您可以使用types关键字将工作流运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流语法”。

修改拉取请求审查评论时运行您的工作流。拉取请求审查评论是对拉取请求差异的评论。对于与拉取请求审查或拉取请求评论相关的活动,请改用pull_request_reviewissue_comment事件。有关拉取请求审查评论 API 的信息,请参阅 GraphQL API 文档中的“对象”或“拉取请求的 REST API 端点”。

例如,您可以在创建或删除拉取请求审查评论时运行工作流。

on:
  pull_request_review_comment:
    types: [created, deleted]

派生仓库中的工作流

默认情况下,工作流不会在派生仓库中运行。您必须在派生仓库的“**操作**”选项卡中启用 GitHub Actions。

除了GITHUB_TOKEN之外,当从派生仓库触发工作流时,不会将密钥传递给运行器。GITHUB_TOKEN在来自派生仓库的拉取请求中具有只读权限。有关更多信息,请参阅“自动令牌身份验证”。

派生仓库的拉取请求事件

对于从派生仓库到基础仓库的拉取请求,GitHub 会将pull_requestissue_commentpull_request_review_commentpull_request_reviewpull_request_target事件发送到基础仓库。派生仓库不会发生任何拉取请求事件。

当首次贡献者向公共仓库提交拉取请求时,拥有写入权限的维护者可能需要批准在拉取请求上运行工作流。有关更多信息,请参阅“批准来自公共派生仓库的工作流运行”。

对于从派生仓库到私有仓库的拉取请求,只有在启用工作流时,工作流才会运行,请参阅“管理仓库的 GitHub Actions 设置”。

注意

由 Dependabot 拉取请求触发的工作流被视为来自派生仓库,也受这些限制。

pull_request_target

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_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事件的活动类型为openedsynchronizereopened时,工作流才会运行。要通过不同的活动类型触发工作流,请使用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工作流程

您可以使用branchesbranches-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工作流程

您可以使用pathspaths-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_targetclosed事件类型以及检查事件的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_SHAGITHUB_REF
push不适用提示:推送到ref的提交。当您删除分支时,工作流程运行中的SHA(及其关联的ref)将恢复到仓库的默认分支。更新的ref

注意

GitHub Actions可用的Webhook负载不包括commit对象中的addedremovedmodified属性。您可以使用API检索完整的提交对象。有关信息,请参阅GraphQL API文档中的"对象"或"提交的REST API端点"。

注意

如果一次推送超过5000个分支,则不会创建事件。如果一次推送超过三个标签,则不会为标签创建事件。

当您推送提交或标签,或者当您从模板创建仓库时,运行您的工作流程。

例如,当发生push事件时,您可以运行工作流程。

on:
  push

注意

pushWebhook事件触发工作流程运行时,Actions UI的“由…推送”字段显示推送者的帐户,而不是作者或提交者。但是,如果使用带有部署密钥的SSH身份验证将更改推送到仓库,则“由…推送”字段将是添加部署密钥到仓库时验证该密钥的仓库管理员。

仅当推送到特定分支时运行您的工作流程

您可以使用branchesbranches-ignore过滤器来配置您的工作流程,以便仅在推送特定分支时运行。有关更多信息,请参阅"GitHub Actions的工作流程语法"。

例如,当有人推送到main或以releases/开头的分支时,此工作流程将运行。

on:
  push:
    branches:
      - 'main'
      - 'releases/**'

注意

如果您同时使用branches过滤器和paths过滤器,则只有当两个过滤器都满足条件时,工作流程才会运行。例如,以下工作流程只有在对JavaScript(.js)文件的更改被推送到名称以releases/开头的分支时才会运行。

on:
  push:
    branches:
      - 'releases/**'
    paths:
      - '**.js'

仅当推送特定标签时运行您的工作流程

您可以使用tagstags-ignore过滤器来配置您的工作流程,以便仅在推送特定标签时运行。有关更多信息,请参阅"GitHub Actions的工作流程语法"。

例如,当有人推送以v1.开头的标签时,此工作流程将运行。

on:
  push:
    tags:
      - v1.**

仅当推送影响特定文件时运行您的工作流程

您可以使用pathspaths-ignore过滤器来配置您的工作流程,以便在向特定文件推送时运行。有关更多信息,请参阅"GitHub Actions的工作流程语法"。

例如,当有人向JavaScript文件(.js)推送更改时,此工作流程将运行。

on:
  push:
    paths:
      - '**.js'

注意

如果您同时使用branches过滤器和paths过滤器,则只有当两个过滤器都满足条件时,工作流程才会运行。例如,以下工作流程只有在对JavaScript(.js)文件的更改被推送到名称以releases/开头的分支时才会运行。

on:
  push:
    branches:
      - 'releases/**'
    paths:
      - '**.js'

registry_package

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
registry_package- 已发布
- 已更新
已发布包的提交已发布包的分支或标签

注意

多个活动类型会触发此事件。有关每个活动类型的详细信息,请参阅"Webhook事件和负载"。默认情况下,所有活动类型都会触发在此事件上运行的工作流程。您可以使用types关键字将工作流程运行限制为特定活动类型。有关更多信息,请参阅"GitHub Actions的工作流程语法"。

注意

只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。

注意

推送多架构容器镜像时,此事件会针对每个清单发生一次,因此您可能会观察到您的工作流程多次触发。为了减轻这种情况,并且仅为包含实际镜像标签信息的事件运行您的工作流程作业,请使用条件。

jobs:
    job_name:
        if: $true

当您的仓库中发生与GitHub Packages相关的活动时,运行您的工作流程。有关更多信息,请参阅"GitHub Packages文档"。

例如,当发布新包版本时,您可以运行工作流程。

on:
  registry_package:
    types: [published]

release

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
release- 已发布
- 未发布
- created
- edited
- deleted
- 预发布
- 已发布
标记的发布中的最后一次提交发布的标签ref refs/tags/<tag_name>

注意

多个活动类型会触发此事件。有关每个活动类型的详细信息,请参阅"Webhook事件和负载"。默认情况下,所有活动类型都会触发在此事件上运行的工作流程。您可以使用types关键字将工作流程运行限制为特定活动类型。有关更多信息,请参阅"GitHub Actions的工作流程语法"。

注意

不会为草稿发布的createdediteddeleted活动类型触发工作流程。当您通过GitHub浏览器UI创建发布时,您的发布可能会自动保存为草稿。

注意

prereleased类型不会为从草稿发布发布的预发布触发,但published类型会触发。如果您希望在稳定版和预发布版发布时运行工作流程,请订阅published而不是releasedprereleased

当您的仓库中发生发布活动时,运行您的工作流程。有关发布API的信息,请参阅GraphQL API文档中的"对象"或REST API文档中的"发布和发布资源的REST API端点"。

例如,当发布已发布时,您可以运行工作流程。

on:
  release:
    types: [published]

repository_dispatch

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
repository_dispatch自定义默认分支上的最后一次提交默认分支

注意

只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。

当您想为GitHub外部发生的活动触发工作流程时,您可以使用GitHub API触发名为repository_dispatch的Webhook事件。有关更多信息,请参阅"仓库的REST API端点"。

当您发出请求以创建repository_dispatch事件时,必须指定一个event_type来描述活动类型。默认情况下,所有repository_dispatch活动类型都会触发工作流程运行。您可以使用types关键字将工作流程限制为在repository_dispatchWebhook负载中发送特定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_SHAGITHUB_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_SHAGITHUB_REF
status不适用默认分支上的最后一次提交不适用

注意

只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。

当 Git 提交的状态发生更改时运行您的工作流程。例如,提交可以标记为errorfailurependingsuccess。如果您想提供有关状态更改的更多详细信息,您可能需要使用 check_run 事件。有关提交状态 API 的信息,请参阅 GraphQL API 文档中的“对象”或“提交的 REST API 端点”。

例如,当发生status事件时,您可以运行工作流程。

on:
  status

如果您想根据新的提交状态在工作流程中运行作业,可以使用github.event.state上下文。例如,当提交状态更改时,以下工作流程会触发,但只有当新的提交状态为errorfailure时,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_SHAGITHUB_REF
watch- started默认分支上的最后一次提交默认分支

注意

多个活动类型会触发此事件。尽管只支持started活动类型,但指定活动类型会在将来添加更多活动类型时保持工作流程的特定性。有关每种活动类型的更多信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流程。您可以使用types关键字将工作流程运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流程语法”。

注意

只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。

当工作流程的存储库获得星标时运行您的工作流程。有关拉取请求 API 的信息,请参阅 GraphQL API 文档中的“更改”或“加星标的 REST API 端点”。

例如,当有人为存储库加星标时(这是 watch 事件的started活动类型),您可以运行工作流程。

on:
  watch:
    types: [started]

workflow_call

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
与调用者工作流程相同不适用与调用者工作流程相同与调用者工作流程相同

workflow_call 用于指示工作流程可以由另一个工作流程调用。当使用workflow_call事件触发工作流程时,被调用工作流程中的事件有效负载与调用工作流程的事件有效负载相同。有关更多信息,请参阅“重用工作流程”。

以下示例仅在从另一个工作流程调用时运行工作流程。

on: workflow_call

workflow_dispatch

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_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 个字符。

此示例定义了名为logLeveltagsenvironment的输入。运行工作流程时,您可以将这些输入的值传递给工作流程。然后,此工作流程使用inputs.logLevelinputs.tagsinputs.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 }}

如果您从浏览器运行此工作流程,则必须在工作流程运行之前手动输入必需输入的值。

Screenshot of a list of workflow runs. A dropdown menu, labeled "Run workflow" and expanded to show input fields, is outlined in dark orange.

您还可以从脚本运行工作流程时或使用 GitHub CLI 时传递输入。例如

gh workflow run run-tests.yml -f logLevel=warning -f tags=false -f environment=staging

有关更多信息,请参阅“手动运行工作流程”中的 GitHub CLI 信息。

workflow_run

Webhook 事件有效负载活动类型GITHUB_SHAGITHUB_REF
workflow_run- 已完成
- requested
- in_progress
默认分支上的最后一次提交默认分支

注意

多个活动类型会触发此事件。当重新运行工作流程时,不会发生requested活动类型。有关每种活动类型的更多信息,请参阅“Webhook 事件和有效负载”。默认情况下,所有活动类型都会触发在此事件上运行的工作流程。您可以使用types关键字将工作流程运行限制为特定活动类型。有关更多信息,请参阅“GitHub Actions 的工作流程语法”。

注意

只有当工作流文件位于默认分支上时,此事件才会触发工作流运行。

注意

您不能使用workflow_run将超过三个级别的工作流程链接在一起。例如,如果您尝试在初始工作流程A运行后依次触发五个工作流程(命名为BF)(即:ABCDEF),则不会运行工作流程EF

当请求或完成工作流程运行时,会发生此事件。它允许您根据另一个工作流程的执行或完成来执行工作流程。由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'

限制工作流程根据分支运行

您可以使用branchesbranches-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!'
            });