如果您有名称相同的检查和状态,并且选择该名称作为必需状态检查,则检查和状态都是必需的。 有关详细信息,请参阅“检查”。
在启用必需状态检查后,您的分支在合并之前可能需要使用基础分支更新。 这可确保您的分支已经使用基本分支的最新代码做过测试。 如果您的分支过期,则需要将基本分支合并到您的分支。 有关详细信息,请参阅“关于受保护分支”。
注意:也可以使用 Git 变基以基础分支更新分支。 有关详细信息,请参阅“关于 Git 变基”。
在通过所有必需状态检查之前,无法向受保护分支推送本地更改。 反而会收到类似如下的错误消息。
remote: error: GH006: Protected branch update failed for refs/heads/main.
remote: error: Required status check "ci-build" is failing
注意:最新且通过所需状态检查的拉取请求可以在本地合并,并推送到受保护的分支。 此操作无需对合并提交本身运行状态检查。
头部提交与测试合并提交之间的冲突
有时,测试合并提交与头部提交的状态检查结果存在冲突。 如果测试合并提交具有状态,则测试合并提交必须通过。 否则,必须传递头部提交的状态后才可合并该分支。 有关测试合并提交的详细信息,请参阅“拉取”。
处理已跳过但需要检查
注意:如果因路径筛选、分支筛选或提交消息而跳过某工作流,则与该工作流关联的检查将保持为“挂起”状态。 要求这些检查成功的拉取请求将被阻止合并。
如果由于某条件而跳过工作流中的作业,该作业状态将报告为“成功”。 有关详细信息,请参阅跳过工作流运行和使用条件控制作业执行。
示例
以下示例显示了要求 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@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: npm ci
- run: npm run build --if-present
- run: npm test
由于路径筛选,仅更改存储库根目录中文件的拉取请求不会触发此工作流,并且将被阻止合并。 您将在拉取请求上看到以下状态:
您可以通过创建具有相同名称的通用工作流程来解决此问题,该工作流程在任何情况下都将返回 true,类似于下面的工作流程:
name: ci
on:
pull_request:
paths-ignore:
- 'scripts/**'
- 'middleware/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: 'echo "No build required"'
现在,只要有人发送不会更改第一个工作流中 paths
下列出的文件的拉取请求,检查将始终通过。
注意:
- 请确保两个工作流文件中
name
键和所需的作业名称相同。 有关详细信息,请参阅“GitHub Actions 的工作流语法”。 - 上面的示例使用 GitHub Actions 但此解决方法也适用于与 GitHub 集成的其他 CI/CD 提供程序。
要求从意外源进行状态检查
受保护的分支也可能要求从特定的 GitHub App 进行状态检查。 如果看到类似于以下内容的消息,则应验证合并框中列出的检查项是否由预期的应用设置。
Required status check "build" was not set by the expected GitHub App.