refactor(release): adopt global create_release.py from opencode-config #32
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
slaid098/voice_assistant#32
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Контекст
Issue #65 в opencode-config создаст глобальную утилиту
create_release.py(в.opencode/scripts/), которая:pyproject.tomlRUNNER_OS/RUNNER_ARCHраннера →windows-x64{name}-{os}-{arch}.zip(напримерvoice-assistant-windows-x64.zip)RELEASE_PLATFORM+ bullets секции CHANGELOGСейчас voice_assistant использует локальный
scripts/create_release.py(PR #17, #18) с хардкодомvoice-assistant.zip— без ОС в имени, без секции "Системные требования" в body. Пользователь на странице релиза не видит для какой ОС сборка.PR #31 добавил Windows 10+ в README и pyproject classifier, но это не видно на странице релиза. Стандарт (issue #65): платформа в asset filename + body, детерминированно в CI.
Задача
.github/workflows/release.yml:scripts/create_release.pyна download глобального через curl:voice-assistant.zip→ утилита сама формирует имя при upload (имя в multipartfilename=), поэтому локальный zip можно оставитьvoice-assistant.zip— утилита переименует при upload. ИЛИ переименовать здесь для консистентности. Решить в implementation.scripts/create_release.py(локальный): УДАЛИТЬ — заменён глобальным из opencode-configscripts/release_notes.py(локальный): проверить — используется ли отдельно от create_release.py:tests/test_create_release.py— оставить (тесты экстрактора), но обновить тестыtests/test_create_release.py:release_notes.pyостаётся — тесты экстрактора оставить, обновить импортыrelease_notes.pyудаляется — удалить тесты (тестируется глобальная утилита в opencode-config issue #65)README.md: убрать "Python 3.13" из секции «Требования» / «Requirements» (Python встроен в exe через PyInstaller, юзеру ставить не надо). Оставить толькоWindows 10+ (64-bit). Секция "Требования" в README — для pip-установки исходников, для exe-юзера источник правды = release body (секция "Системные требования").CHANGELOG.md: НЕ трогать (платформа не в CHANGELOG — детерминированно в CI черезRELEASE_PLATFORMenv var)pyproject.toml: classifierOperating System :: Microsoft :: Windows :: Windows 10оставить (для pip-установки, не для exe-релиза)Контракты
Что меняется
.github/workflows/release.yml— download глобальногоcreate_release.pyчерез curl, envRELEASE_PLATFORMscripts/create_release.py— УДАЛИТЬ (заменён глобальным)scripts/release_notes.py— УДАЛИТЬ или оставить (решить в implementation, зависит от использования в тестах)tests/test_create_release.py— обновить или удалить (зависит от release_notes.py)README.md— убрать Python 3.13 из «Требования»Что НЕ меняется
CHANGELOG.md— НЕ трогать (платформа не в CHANGELOG)pyproject.toml— НЕ трогать (classifier для pip, не для exe)src/— НЕ трогатьscripts/install_autorun.bat/remove_autorun.bat— НЕ трогать (ссылаются наvoice-assistant.exeвнутри zip, не на имя zip)scripts/gen_phrases.py— НЕ трогатьЗависимости
create_release.pyдолжен быть создан и слит первым. Этот issue можно реализовать только после merge PR из issue #65.Инварианты
release.ymlостаётся рабочим: downloadcreate_release.pyчерез curl → pythoncreate_release.py→ релиз создаётсяvoice-assistant-windows-x64.zip(формируется глобальной утилитой)release_notes.py— проверить что не сломали импорты в тестах)Граничные случаи
release_notes.pyиспользуется вtests/test_create_release.py(12 тестов экстрактора) — если удаляемrelease_notes.py, нужно либо удалить тесты, либо переписать их на вызов глобальной утилиты (но глобальная в opencode-config, не в voice_assistant — тестировать её здесь нельзя). Решение: удалить тесты экстрактора из voice_assistant (они будут в opencode-config issue #65).release.ymlшаг Compress-Archive создаётvoice-assistant.zip— глобальная утилита при upload берёт это имя или формирует своё? Утилита формируетvoice-assistant-windows-x64.zipдля multipartfilename=параметра, но загружает содержимое локальногоvoice-assistant.zip. Проверить что multipart upload с другимfilename=работает (Forgejo API должен принимать имя из multipart, не из пути файла).FORGEJO_URLenv var — доступна ли в release.yml? Ранее использовалсяGITHUB_SERVER_URL(Forgejo runner auto-set). Проверить какой URL использовать для curl-download:$GITHUB_SERVER_URL/slaid098/opencode-config/raw/branch/main/.opencode/scripts/create_release.pyили$FORGEJO_URL/.... В bash-окружении Forgejo runner:$GITHUB_SERVER_URL=https://git.slaid098.dev.Влияние на связанные компоненты
.github/workflows/release.yml— основной файл измененийscripts/create_release.py— УДАЛИТЬscripts/release_notes.py— УДАЛИТЬ или оставить (решить в implementation)tests/test_create_release.py— обновить или удалитьREADME.md— секция «Требования» (убрать Python)CHANGELOG.md— НЕ трогатьpyproject.toml— НЕ трогатьsrc/— НЕ трогатьВне scope
create_release.py— issue #65 в opencode-config (блокировка)Критерии приемки
release.yml— шаг "Create Forgejo release" скачиваетcreate_release.pyчерез curl из opencode-configrelease.yml— envRELEASE_PLATFORM: "Windows 10+ (64-bit)"добавленscripts/create_release.py(локальный) — УДАЛЁНscripts/release_notes.py— УДАЛЁН или оставлен (с обоснованием в PR body)tests/test_create_release.py— обновлён или удалён (с обоснованием)README.md— «Требования»: убран Python 3.13, оставлено толькоWindows 10+ (64-bit)``