Repository navigation
CI: пропущенная джоба — не «выполняется», а обязательная джоба — обязательна - #60
Merged
Merged
Conversation
Проверка различала только success и failure, а остальные шесть значений conclusion и None сваливала в "ещё выполняется". Джоба, пропущенная по своему `if:` (skipped), это не "ещё не закончилось": шаблон контрольной пропускает personalize, когда вариант уже сгенерирован, и has_pending перекрывал успешный grade - оценка не выставлялась никому. То же самое ловили cancelled и timed_out: прогон без вердикта залипал в PENDING навсегда. Теперь исходы разложены по трём классам. success засчитывается; failure, timed_out, cancelled, stale и action_required дают "x", который перезаписывается при повторной проверке; skipped и neutral не учитываются вовсе - они не говорят ничего о работе студента. Ожиданием остаётся ровно conclusion == None. Галочка по-прежнему требует успеха от всех учтённых джоб (логическое И), а если учитывать оказалось нечего - все проверки пропущены - оценка не выставляется. Джоба, перечисленная в ci.workflows, исключение: её пропуск считается ошибкой, раз конфиг требует от неё успеха. Так три репозитория ЛР5 ОС-2026 (run-autograding-tests=skipped, cpplint=failure) выходят из вечного ожидания в "x". Имя из ci.workflows, которому не нашлось проверки, пишется в лог и не учитывается: конфиги перечисляют имена джоб разных поколений шаблона (в itmo-ml-2026 указаны run-autograding-tests и "Test python scripts", а репозитории производят только вторую). Но если ни одно имя из конфига не совпало ни с одной проверкой коммита, это CI_JOBS_NOT_FOUND, а не "x": устаревший конфиг не должен стоить группе оценок. Сообщение об ожидании называет джобу, которую ждём, а молчаливый фолбэк "джобы не заданы, дефолтные имена не совпали - берём все проверки" пишет предупреждение в лог: в репозиторий могут попасть проверки, которых нет в .github/workflows (CodeQL default setup, pages build and deployment, приложения организации). Проверено на ~100 репозиториях всех курсов: 19 расхождений со старым поведением, все ожидаемые - контрольная СПиВР получает "v", ЛР5 ОС-2026 "x", репозитории с единственной пропущенной джобой отвечают "нет активных проверок" вместо "выполняется". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Предыдущий коммит трактовал отсутствующее имя из конфига как устаревшее и пропускал его, оценивая работу по оставшимся джобам. Это неверно: конфиг перечисляет джобы, которые ОБЯЗАНЫ пройти, и джоба, не давшая результата, успеха не дала. Так ЛР3 ОС-2026 требует три джобы, а образ windows-раннера сменил "build (MSVC, Visual Studio 17 2022)" на "build (MSVC, Visual Studio 18 2026)" - фильтр молча выбрасывал отсутствующее имя, и репозиторий получал "v" по двум джобам из трёх, причём сборка MSVC не проверялась вовсе. Теперь недостающая обязательная джоба снимает галочку. В таблицу не идёт ни "v", ни "x": по данным GitHub не различить, устарело ли имя в конфиге или джоба не запускалась в репозитории студента, поэтому проверка отвечает CI_JOBS_NOT_FOUND с перечислением недостающих джоб. Пока другие проверки коммита ещё выполняются, недостающая джоба считается не появившейся, а не отсутствующей. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Конфиг требовал run-autograding-tests и "Test python scripts", а шаблон курса производит только вторую. Пока отсутствующее имя молча выбрасывалось фильтром, работы оценивались по одной обязательной джобе из двух; теперь недостающая джоба снимает галочку, и лаба отвечала бы CI_JOBS_NOT_FOUND всем студентам. Проверено на репозиториях курса: check runs называются ровно "Test python scripts". В suai-mlb-2026 присутствуют обе джобы, поэтому его конфиг не тронут. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Имя джобы несёт в себе версию образа раннера: одна и та же сборка называется "build (MSVC, Visual Studio 17 2022)" на старом образе и "build (MSVC, Visual Studio 18 2026)" на новом. В ЛР3 ОС-2026 в группе одновременно живут оба поколения - четыре репозитория с новым именем, два со старым, - поэтому любое фиксированное имя в конфиге отвечает CI_JOBS_NOT_FOUND одной из половин, а перечисление обоих имён потребовало бы обе джобы от каждого репозитория. Имя из ci.workflows с метасимволами (*, ?, [...]) сопоставляется через fnmatch, без них - точным сравнением, как раньше. Строгость сохранена: шаблон обязан совпасть хотя бы с одной проверкой коммита, и все совпавшие с ним проверки должны быть успешны; пропуск совпавшей джобы, как и для литерального имени, считается ошибкой. ЛР3 ОС-2026 переведена на "build (MSVC, Visual Studio *)". Проверено на шести репозиториях курса: полностью зелёные получают "v" по всем трём обязательным джобам в обоих поколениях имён, репозитории с упавшей сборкой - "x". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Зачем
Проверка CI различала только
successиfailure, а остальные шесть значенийconclusionвместе сNoneсваливала в «ещё выполняется». Пропущенная по своемуif:джоба (skipped) — это не «ещё не закончилось»: шаблон контрольной пропускаетpersonalize, когда вариант уже сгенерирован, иhas_pendingперекрывал успешныйgrade. В результате контрольная СПиВР не выставлялась никому — та же поломка, что чинилась конфигом в 96ad351 для НН и в ed1e25e для СПиВР.Попутно вскрылась обратная, более опасная поломка: джоба, перечисленная в
ci.workflows, но отсутствующая среди проверок, молча выбрасывалась фильтром, и работа оценивалась по оставшимся. ЛР3 ОС-2026 требует три джобы, а образ windows-раннера сменилbuild (MSVC, Visual Studio 17 2022)наbuild (MSVC, Visual Studio 18 2026)— репозитории получалиvпо двум обязательным джобам из трёх, сборка MSVC не участвовала в решении вовсе. В ЛР1 ML-2026 то же самое сrun-autograding-tests, которой в репозиториях курса нет.Что сделано
1. Классификация исходов CI
conclusionsuccessfailure,timed_out,cancelled,stale,action_requiredx(перезаписывается при повторной проверке)skipped,neutralNoneГалочка требует успеха от всех учтённых джоб (логическое И). Если учитывать нечего — все проверки пропущены — оценка не выставляется.
2. Каждая джоба из
ci.workflowsобязательнаskipped) — ошибка: конфиг требует от неё успеха.CI_JOBS_NOT_FOUNDс перечислением недостающих джоб. В таблицу не идёт ниv, ниx: по данным GitHub не различить устаревшее имя в конфиге и джобу, не запускавшуюся у студента.3. Шаблоны в именах джоб
Имя джобы несёт версию образа раннера, и в одной группе живут оба поколения (в ЛР3 ОС-2026 — четыре репозитория с новым именем, два со старым). Фиксированное имя отвечает
CI_JOBS_NOT_FOUNDодной из половин, перечисление обоих имён потребовало бы обе джобы от каждого. Поэтому имя изci.workflowsс метасимволами (*,?,[...]) сопоставляется черезfnmatch:Строгость сохранена: шаблон обязан совпасть хотя бы с одной проверкой, и все совпавшие с ним проверки должны быть успешны.
4. Диагностика: сообщение об ожидании называет джобу, которую ждём; фолбэк «джобы не заданы, дефолтные имена не совпали — берём все проверки» пишет предупреждение в лог (в репозиторий могут попасть проверки, которых нет в
.github/workflows: CodeQL default setup,pages build and deployment, приложения организации).5. Конфигурации курсов: ЛР3 ОС-2026 переведена на шаблон MSVC-сборки; из ЛР1 ML-2026 убрана
run-autograding-tests, которой нет в репозиториях курса (suai-mlb-2026не тронут — там обе джобы реально есть).Проверка
Прогон старой и новой логики по ~100 репозиториям всех курсов на реальных check runs из GitHub API:
v(1/1)run-autograding-tests=skipped+cpplint=failure)x(0/2)vпо 2 джобам из 3, MSVC не проверяласьv/xпо всем 3 в обоих поколениях имёнv/xпо 1 обязательной джобе из 2v/xпо фактической джобе курсаЛожных
vне осталось. Тесты: 862 проходят (добавлено 35, включаяskipped/cancelled/neutral, отсутствующие обязательные джобы и шаблоны имён — таких случаев в наборе не было вовсе).🤖 Generated with Claude Code