fix(release): adapt pipeline for Forgejo + v0.1.0 #12
No reviewers
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
slaid098/voice_assistant!12
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/release/forgejo-pipeline"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
runs-on: windows-amd64,actions/setup-python@v5+pip install uv,shell: powershellна каждом step. Удалёнpermissions: contents: writeи jobtest(дублирует ci.yml). Добавлен шаг копированияwiki.onnxвdist/models/openwakeword/. PyInstaller:--collect-all openwakeword+--collect-all onnxruntime. Forgejo release черезInvoke-RestMethod(API/releases+/assets). CHANGELOG.md добавлен в zip.["3.12", "3.13"]убрана, только Python 3.13.uv sync --extra devбез--python ${{ matrix.python }}.requires-python = ">=3.13", classifier только3.13, URLs →git.slaid098.dev/slaid098/voice_assistant.## [0.1.0] — 2026-08-11.Почему
GitHub аккаунт удалён. Хост — Forgejo (
git.slaid098.dev) + локальный Windows-раннер (labelwindows-amd64).release.ymlбыл написан под GitHub Actions и не работал на Forgejo: 7 блокеров (permissions,setup-uv,windows-latest,shell: pwshбезdefaults, отсутствиеwiki.onnxв dist,softprops/action-gh-release, jobtest). Ни одной сборки не было — тегиv1.0.0–v1.3.2существуют без релизов.Watch out
v1.0.0–v1.3.2, local + remote) и создатьv0.1.0на master →git push origin v0.1.0→ trigger release.yml.$GITHUB_TOKEN(auto-provided в runner-контексте) должен иметь праваwrite:repo— иначе релиз не создастся, zip останется только в artifacts.--collect-all onnxruntimeдобавляет ~50 MB к бинарнику — превентивно, чтобы избежать падения в рантайме (shared libraries для vosk/openwakeword).--windowedНЕ добавлен — консоль оставлена для отладки первой сборки.Pending
v0.1.0→ push → первая сборка на Windows-раннере.v1.0.0–v1.3.2(git ops после merge, вне PR).Closes #10
Code Review Summary
PR адаптирует release/ci pipeline под Forgejo + v0.1.0. Структурно все требуемые изменения на месте (windows-amd64, setup-python@v5 + pip install uv, shell: powershell на каждом step, permissions/test job удалены, wiki.onnx copy, --collect-all openwakeword/onnxruntime, --collect-all piper отсутствует, softprops→Forgejo API, CHANGELOG в zip, Piper step отсутствует, ci.yml матрица убрана, pyproject.toml URLs→Forgejo, CHANGELOG обнулён). CI зелёный. Но есть 2 критичных бага в release.yml, которые сломают первую сборку.
Critical (must fix before merge)
release.yml:14 [cross-file]
python-version: '3.12'не соответствуетrequires-python = ">=3.13"(pyproject.toml:11).actions/setup-python@v5ставит Python 3.12, ноuv syncтребует 3.13+. uv попытается скачать Python 3.13 отдельно (wasteful, ~50 MB download на каждом релизе), а на self-hosted Windows-раннере без интернета — упадёт.Fix:
python-version: '3.13'release.yml:78 [bug] Asset upload использует
-ContentType "application/zip"с-InFile. Forgejo APIPOST /releases/{id}/assetsожидаетmultipart/form-dataс полемattachment(см. Forgejo/Gitea API spec).-InFileотправляет сырые байты файла как body — сервер не найдёт полеattachment→ 400/422. Дополнительно:shell: powershell= Windows PowerShell 5.1, где параметр-FormНЕ доступен (только PowerShell 6+).Fix: использовать
curl.exe(доступен на Windows 10+):Warnings (should fix)
README.md:19 [cross-file] Мёртвая ссылка
https://github.com/slaid098/voice_assistant/releases(GitHub аккаунт удалён). PR обновил URLs в pyproject.toml → Forgejo, но README.md пропущен. Пользователи, следующие инструкции по установке, получат 404.Fix:
https://git.slaid098.dev/slaid098/voice_assistant/releasespyproject.toml:71,117 [consistency]
target-version = "py312"(ruff) иpython_version = "3.12"(mypy) не соответствуютrequires-python = ">=3.13". ruff не применит py313-правила (UP), mypy не проверит 3.13-типы.Fix:
target-version = "py313",python_version = "3.13"release.yml:75 [quality]
Get-Content CHANGELOG.md -Rawотправляет весь CHANGELOG (включая заголовок# Changelog, описание формата) как body релиза. Обычно нужно только секция текущей версии.Fix: извлечь секцию
## [0.1.0]через regex или захардкодить release notes.release.yml:75 [bug]
ConvertTo-Json+Invoke-RestMethodв Windows PowerShell 5.1 (shell: powershell) могут отправить Cyrillic body в неправильной кодировке (PS 5.1 по умолчанию использует ANSI, не UTF-8). Release body может прийти с «кракозябрами».Fix: явно кодировать body в UTF-8:
release.yml:74 [security]
permissions:блок удалён. ForgejoGITHUB_TOKENпо умолчанию может быть read-only → 403 на создании релиза. Автор отмечает это в Watch out, но безpermissions: contents: writeили настройки repo defaults первая сборка может упасть на шаге "Create Forgejo release".Positives
--python ${{ matrix.python }}удалён## [0.1.0] — 2026-08-11, ссылка указывает на ForgejoCross-file impact: missing paired update
PR меняет
requires-pythonв pyproject.toml:11 с>=3.12на>=3.13(writer). release.yml:14 (reader) используетpython-version: '3.12'— не обновлён:actions/setup-python@v5>=3.13→uv syncне найдёт совместимый Python → fallback download или failТЗ на fix:
python-version: '3.12'→'3.13'в release.yml:14.github/workflows/release.yml:14actions/setup-python@v5устанавливает Python 3.13,uv syncиспользует его без дополнительного скачиванияv0.1.0должна пройти без скачивания PythonДополнительно: pyproject.toml:71 (
target-version = "py312") и pyproject.toml:117 (python_version = "3.12") — те же paired updates, должны бытьpy313/3.13.Также: PR меняет URLs GitHub→Forgejo в pyproject.toml:58-60 (writer), но README.md:19 (reader) оставлен с
https://github.com/...— мёртвая ссылка. Fix: 1 строка в README.md:19.Verdict: REQUEST_CHANGES
Code Review Summary
Re-review после фикса commit
3a7d0b5. Оба критичных бага из предыдущего review исправлены, все warnings адресованы, новые изменения корректны. Локально проверено: mypy strict ✅ (33 файла), ruff ✅, pytest ✅ (213 passed, coverage 78.96%).Positives
release.yml:14:python-version: '3.13'(было'3.12'). Соответствуетrequires-python = ">=3.13"в pyproject.toml.release.yml:78: upload черезcurl.exe -F "attachment=@dist/voice-assistant.zip;filename=voice-assistant.zip;type=application/zip"вместоInvoke-RestMethod -InFile. Forgejo API ожидает multipart form fieldattachment— curl.exe корректен.pyproject.toml: rufftarget-version = "py313", mypypython_version = "3.13". Единообразно сrequires-pythonи CI matrix.rg "github\.com"по README.md, pyproject.toml, .github/ — 0 совпадений. Все URL переведены наgit.slaid098.dev.release.yml:75:Get-Content CHANGELOG.md -Raw -Encoding UTF8— корректное чтение для body релиза.Generator[None]вместоGenerator[None, None, None]— валидный shorthand в Python 3.13+ (send/return default toNone). mypy strict проходит.requires-pythonобновлён до>=3.13, resolution-markers упрощены до< 3.15/>= 3.15.## [0.1.0] — 2026-08-11, соответствует первому релизу на Forgejo.wiki.onnxвdist/models/openwakeword/+--collect-all openwakeword+--collect-all onnxruntimeв PyInstaller. CHANGELOG.md добавлен в zip.Suggestions (info, not blocking)
runs-on: windows-amd64(self-hosted Forgejo runner). Если раннер временно недоступен, релиз зависнет.可以考虑 adding a timeout-minutes to the job, но не блокирующе для первого релиза.Invoke-RestMethod(REST API), asset загружается черезcurl.exe. ЕслиInvoke-RestMethodупадёт (сеть/токен), zip останется только на раннере. Можно добавитьtry/catchс логированием, но для первого релиза достаточно — ошибки будут видны в логе runner'а.Note
Fix commit
3a7d0b5— локальный (не запушен в remote, PR head SHA =9f61db6). Оркестратору нужно запушить фикс → CI прогонит на новом commit → merge.Verdict: APPROVE