[bug] CI game/desktop собирают выбранную ветку вместо inputs.tag и публикуют результат в чужой релиз #40

Closed
opened 2026-10-29 16:22:11 +00:00 by chexit · 1 comment
Owner

🤖 Filed by Codex, AI-агент Владимира (chexit).

Проверено на f443f0a. Источники: game.yml и desktop.yml. Не связано только с последним шейдерным патчем: найдено при проверке того, как доставляется новый форк.

Оба ручных workflow принимают обязательный inputs.tag и описаны как сборка игры для этого тега. Но во всех трёх jobs стоит:

- uses: actions/checkout@v4

без with.ref. inputs.tag появляется только в финальном шаге загрузки артефакта в релиз. Для обычного запуска workflow из main с tag=build-15 checkout берёт SHA запуска workflow, а не коммит build-15. Затем именно из этого дерева читаются HORIZON_COMMIT, патчи и исходники мода.

Последствие

Релиз build-15 может содержать старый отдельный airdef.hmod и новый архив игры/мода из main. Получаются несовпадающие исходники и API под одним номером релиза. С последними изменениями движка это особенно неприятно: название релиза перестаёт описывать реально собранные патчи. Выбор нужного тега вручную в другом поле UI может обойти проблему, но workflow не гарантирует её и не проверяет.

Проверка

Статический проход по обоим YAML: ни один checkout не использует inputs.tag; получение релиза идёт по releases/tags/$TAG с TAG=${{ inputs.tag }}. Сборки и публикации для проверки не запускались.

Исправление и приёмка

Во всех Linux/macOS/Windows jobs checkout должен явно брать запрошенный тег, например ref: refs/tags/${{ inputs.tag }} (с проверкой существования тега). Проверить git rev-parse HEAD против SHA этого тега до тяжёлой сборки. Добавить в архив/лог build metadata с SHA мода и upstream/отпечатком патчей форка.

Регрессионный сценарий: main на коммите B, старый тег на A; workflow запускается из main с inputs.tag=A. Сборка обязана использовать исходники A либо завершиться явной ошибкой до публикации. Проверить все три OS jobs.

🤖 Filed by Codex, AI-агент Владимира (chexit). Проверено на `f443f0a`. Источники: [game.yml](https://gitea.maoniao.team/chexit/airdef/src/commit/f443f0a94a71eb2d446792f1829146f9563aaf5d/.gitea/workflows/game.yml) и [desktop.yml](https://gitea.maoniao.team/chexit/airdef/src/commit/f443f0a94a71eb2d446792f1829146f9563aaf5d/.gitea/workflows/desktop.yml). Не связано только с последним шейдерным патчем: найдено при проверке того, как доставляется новый форк. Оба ручных workflow принимают обязательный `inputs.tag` и описаны как сборка игры **для этого тега**. Но во всех трёх jobs стоит: ```yaml - uses: actions/checkout@v4 ``` без `with.ref`. `inputs.tag` появляется только в финальном шаге загрузки артефакта в релиз. Для обычного запуска workflow из main с `tag=build-15` checkout берёт SHA запуска workflow, а не коммит build-15. Затем именно из этого дерева читаются `HORIZON_COMMIT`, патчи и исходники мода. ### Последствие Релиз build-15 может содержать старый отдельный airdef.hmod и новый архив игры/мода из main. Получаются несовпадающие исходники и API под одним номером релиза. С последними изменениями движка это особенно неприятно: название релиза перестаёт описывать реально собранные патчи. Выбор нужного тега вручную в другом поле UI может обойти проблему, но workflow не гарантирует её и не проверяет. ### Проверка Статический проход по обоим YAML: ни один checkout не использует `inputs.tag`; получение релиза идёт по `releases/tags/$TAG` с `TAG=${{ inputs.tag }}`. Сборки и публикации для проверки **не запускались**. ### Исправление и приёмка Во всех Linux/macOS/Windows jobs checkout должен явно брать запрошенный тег, например `ref: refs/tags/${{ inputs.tag }}` (с проверкой существования тега). Проверить `git rev-parse HEAD` против SHA этого тега до тяжёлой сборки. Добавить в архив/лог build metadata с SHA мода и upstream/отпечатком патчей форка. Регрессионный сценарий: main на коммите B, старый тег на A; workflow запускается из main с inputs.tag=A. Сборка обязана использовать исходники A либо завершиться явной ошибкой **до публикации**. Проверить все три OS jobs.
chexit added the area:toolingtype:bugpriority:P2 labels 2026-10-29 16:22:11 +00:00
Author
Owner

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/a8551b5 (запушено в main).

🤖 Agent: сделано в https://gitea.maoniao.team/chexit/airdef/commit/a8551b5 (запушено в main).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chexit/airdef#40