Если у вас есть проверка и состояние с одинаковыми именами и вы выбираете это имя в качестве обязательной проверки состояния, обязательными будут и проверка, и состояние. Дополнительные сведения см. в разделе Проверки.
После включения обязательных проверок состояния личную ветвь может потребоваться синхронизировать с базовой перед слиянием. Это гарантирует, что ваша ветвь была протестирована с использованием последнего кода из базовой ветви. Если ваша ветвь устарела, необходимо выполнить слияние базовой ветви с ней. Дополнительные сведения см. в разделе Сведения о защищенных ветвях.
Примечание. Синхронизировать личную ветвь с базовой можно также путем перемещения изменений из одной ветви в другую в 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/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: 'echo "No build required"'
Теперь проверки будут проходить успешно при каждой отправке запроса на вытягивание, который не изменяет файлы, перечисленные в разделе paths
в первом рабочем процессе.
Примечания.
- Убедитесь в том, что ключ
name
и обязательное имя задания в обоих файлах рабочего процесса одинаковы. Дополнительные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions. - В приведенном выше примере используется GitHub Actions, но это обходное решение также применимо к другим поставщикам CI/CD, которые интегрируются с GitHub.
Обязательный проверки состояния из непредвиденных источников
Кроме того, для защищенная ветвь может потребоваться проверка состояния из определенного GitHub App. Если отображается сообщение наподобие приведенного ниже, убедитесь в том, что проверка, указанная в поле слияния, была задана соответствующим приложением.
Required status check "build" was not set by the expected GitHub App.