如果您有名称相同的检查和状态,并且选择该名称作为必需状态检查,则检查和状态都是必需的。 有关详细信息,请参阅“检查的 REST API 终结点”。
Note
根据要求,必须在过去 7 天内在所选存储库中成功完成状态检查。
在启用必需状态检查后,您的分支在合并之前可能需要使用基础分支更新。 这可确保您的分支已经使用基本分支的最新代码做过测试。 如果您的分支过期,则需要将基本分支合并到您的分支。 有关详细信息,请参阅“关于受保护分支”。
Note
也可以使用 Git 变基以基础分支更新分支。 有关详细信息,请参阅“关于 Git 变基”。
在通过所有必需状态检查之前,无法向受保护分支推送本地更改。 反而会收到类似如下的错误消息。
remote: error: GH006: Protected branch update failed for refs/heads/main.
remote: error: Required status check "ci-build" is failing
Note
最新且通过所需状态检查的拉取请求可以在本地合并,并推送到受保护的分支。 此操作无需对合并提交本身运行状态检查。
所需的检查需要通过最新的提交 SHA 才能成功
为了合并拉取请求,所有所需的检查都必须通过最新的提交 SHA 。 这样可以确保在合并之前验证最近更改并满足所需的标准。 使用先前的提交 SHA 触发的检查将不会用作所需检查的一部分。
头部提交与测试合并提交之间的冲突
有时,测试合并提交与头部提交的状态检查结果存在冲突。 如果测试合并提交具有状态,则测试合并提交必须通过。 否则,必须传递头部提交的状态后才可合并该分支。
如果测试合并提交和头提交之间存在冲突,则测试合并提交的检查将显示在拉取请求状态复选框中。 这在拉取请求状态框中由以 Showing checks for the merge commit
开头的行指示。 有关测试合并提交的详细信息,请参阅“用于拉取请求的 REST API 终结点”。
处理已跳过但需要检查
Warning
如果因路径筛选、分支筛选或提交消息而跳过某工作流,则与该工作流关联的检查将保持为“挂起”状态。 要求这些检查成功的拉取请求将被阻止合并。
如果需要工作流,则不应使用路径或分支筛选来跳过工作流运行。 有关详细信息,请参阅“跳过工作流程运行”和“必需工作流”。
但是,如果由于某条件而跳过工作流内的作业,该作业状态将报告为“成功”。 有关详细信息,请参阅“使用条件控制作业执行”。
如果作业失败,则将跳过依赖于已失败的作业的任何作业,并且不报告失败。 可能无法阻止需要该检查的拉取请求。 要对依赖于其他作业的作业使用必需的检查,则除 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 App 进行状态检查。 如果看到类似于以下内容的消息,则应验证合并框中列出的检查项是否由预期的应用设置。
Required status check "build" was not set by the expected GitHub App.