Skip to content

winget: авто-возврат MinimumOSVersion, который Komac теряет при каждом релизе - #12

Merged
Oksion merged 1 commit into
mainfrom
oksion/winget-auto-restore-fields
Jul 29, 2026
Merged

winget: авто-возврат MinimumOSVersion, который Komac теряет при каждом релизе#12
Oksion merged 1 commit into
mainfrom
oksion/winget-auto-restore-fields

Conversation

@Oksion

@Oksion Oksion commented Jul 29, 2026

Copy link
Copy Markdown
Owner

Проблема

Komac (внутри winget-releaser) пересобирает installer-манифест из portable-exe заново и молча теряет поля, которые из бинаря не выводятся. MinimumOSVersion: 10.0.0.0 уезжал так дважды — в 0.7.0 и 0.8.0, — и без него валидатор winget-pkgs режет PR («Inconsistencies detected … Missing property MinimumOSVersion»). До сих пор поле возвращали в публичный PR руками на каждом релизе.

Решение

Шаг Restore hand-written manifest fields в winget.yml (после winget-releaser) + скрипт .github/scripts/winget-restore-fields.ps1:

  • находит ветку PR в форке по детерминированному префиксу Oksion.XiControl-<версия>- — не через Search API, который лагает первые минуты после создания PR;
  • дописывает MinimumOSVersion: 10.0.0.0 на место по порядку эталона (после Platform, перед InstallerType) и коммитит в ветку форка — открытый PR подхватывает коммит сам, валидация перезапускается;
  • идемпотентен: поле уже на месте (или Komac починили) → выходит без изменений, шаг можно перезапускать;
  • запускается и локально: ./winget-restore-fields.ps1 -Tag vX.Y.Z.

Токен — тот же WINGET_TOKEN, что у winget-releaser (права на форк у него уже есть). В воркфлоу добавлен actions/checkout — раньше он был не нужен, теперь нужен ради скрипта.

Проверка

Скрипт проверен боем на живом релизе: именно им пропатчен winget-pkgs#409366 (0.8.0) — нашёл ветку Oksion.XiControl-0.8.0-761E…, вернул поле вторым коммитом, PR обновился. Полный прогон шага в CI случится на следующем релизе; упасть молча он не может — при ненайденной ветке или изменившемся формате манифеста шаг красный.

Контрольная точка в скилле release остаётся: сверка с эталоном reference/winget/ ловит поля, которых скрипт ещё не знает. CLAUDE.md (раздел «Релизы и CI») дополнен.

🤖 Generated with Claude Code

MinimumOSVersion уезжал из installer-манифеста и в 0.7.0, и в 0.8.0 — Komac
пересобирает манифест из portable-exe и молча теряет поля, которые из бинаря
не выводятся; валидатор winget-pkgs без них режет PR. До сих пор поле
возвращали руками на каждом релизе.

Новый шаг в winget.yml после winget-releaser гоняет
.github/scripts/winget-restore-fields.ps1:
- находит ветку PR в форке по детерминированному префиксу
  Oksion.XiControl-<версия>- (не через Search API — тот лагает первые минуты)
- дописывает MinimumOSVersion перед InstallerType и коммитит в ветку форка,
  открытый PR подхватывает коммит сам
- идемпотентен: поле на месте → выходит без изменений; можно гонять локально
  (-Tag vX.Y.Z) — так и пропатчен PR #409366 для 0.8.0 (скрипт проверен боем)

Контрольная точка в скилле release остаётся: сверка с эталоном
reference/winget/ ловит поля, которых скрипт ещё не знает.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Oksion
Oksion merged commit 3b373be into main Jul 29, 2026
5 checks passed
@Oksion
Oksion deleted the oksion/winget-auto-restore-fields branch July 29, 2026 09:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant