如果您有一个检查和一个状态具有相同的名称,并且您选择该名称作为必备状态检查,则检查和状态都是必备的。有关更多信息,请参阅“检查的 REST API 端点”。
注意
要成为必备状态检查,状态检查必须在过去七天内在选定的存储库中成功完成。
启用必备状态检查后,您的分支可能需要与基准分支保持最新,然后才能合并。这可确保您的分支已使用基准分支中的最新代码进行测试。如果您的分支已过时,则需要将基准分支合并到您的分支中。有关更多信息,请参阅“关于受保护分支”。
注意
您还可以使用 Git rebase 将您的分支更新到基准分支的最新状态。有关更多信息,请参阅“关于 Git rebase”。
在所有必备状态检查通过之前,您将无法将本地更改推送到受保护分支。相反,您将收到类似于以下内容的错误消息。
remote: error: GH006: Protected branch update failed for refs/heads/main.
remote: error: Required status check "ci-build" is failing
注意
最新的拉取请求并通过必备状态检查的拉取请求可以在本地合并并推送到受保护分支。这可以在不运行合并提交本身的状态检查的情况下完成。
必备检查需要针对最新的提交 SHA 成功
为了合并拉取请求,所有必需的检查都必须针对最新的提交 SHA 通过。这确保了在合并之前验证最新的更改并满足所需标准。使用以前的提交 SHA 触发的检查不会作为必需检查的一部分使用。
头提交与测试合并提交之间的冲突
有时,测试合并提交和头提交的状态检查结果会发生冲突。如果测试合并提交具有状态,则测试合并提交必须通过。否则,在合并分支之前,头提交的状态必须通过。
如果测试合并提交和头提交之间存在冲突,则拉取请求状态检查框中会显示测试合并提交的检查。拉取请求状态框中以Showing checks for the merge commit
开头的行指示了这一点。有关测试合并提交的更多信息,请参阅“拉取请求的 REST API 端点”。
处理跳过的但必需的检查
警告
如果由于路径过滤、分支过滤或提交消息跳过工作流,则与该工作流关联的检查将保持“Pending”状态。需要这些检查才能成功的拉取请求将被阻止合并。
但是,如果工作流中的作业由于条件而被跳过,则它将将其状态报告为“成功”。有关更多信息,请参阅“使用条件控制作业执行”。
当作业失败时,任何依赖于失败作业的作业都会被跳过,并且不会报告失败。需要该检查的拉取请求可能不会被阻止。要在依赖于其他作业的作业上使用必需的检查,请除了needs
之外,还使用always()
条件表达式,请参阅“在工作流中使用作业”。
示例
以下示例显示了一个工作流,该工作流需要build
作业的“成功”完成状态,但如果拉取请求未更改scripts
目录中的任何文件,则该工作流将被跳过。
name: ci
on:
pull_request:
paths:
- 'scripts/**'
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [12.x, 14.x, 16.x]
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: npm ci
- run: npm run build --if-present
- run: npm test
由于路径过滤,仅更改存储库根目录中文件的拉取请求不会触发此工作流,并且会被阻止合并。在拉取请求中,您会看到“正在等待报告状态”。
使用 GitHub Actions 和合并队列的状态检查
当拉取请求添加到合并队列时,您**必须**使用merge_group
事件来触发您的 GitHub Actions 工作流。
注意
如果您的存储库使用 GitHub Actions 对存储库中的拉取请求执行必需的检查,则需要更新工作流以包含merge_group
事件作为附加触发器。否则,当您将拉取请求添加到合并队列时,不会触发状态检查。由于不会报告必需的状态检查,因此合并将失败。merge_group
事件与pull_request
和push
事件是分开的。
报告目标分支保护所需的检查的工作流如下所示
on:
pull_request:
merge_group:
有关merge_group
事件的更多信息,请参阅“触发工作流的事件”。
来自意外来源的必需状态检查
受保护的分支也可能需要来自特定 GitHub 应用的状态检查。如果您看到类似以下内容的消息,则应验证合并框中列出的检查是否由预期应用设置。
Required status check "build" was not set by the expected GitHub App.