Repository navigation
LxBox v1.8.2
L×Box v1.8.2
Final fix дублирования версии. v1.8.0 показывал v1.7.0 (hardcoded const забыли bump'ать) → v1.8.1 добавил CI guard → v1.8.2 убирает дубль вообще. Tag теперь единственный источник правды.
Кому актуально: всем, кто на v1.8.x. Это infrastructure release — user-facing behaviour не меняется (after install версия в About показывается корректно как и в v1.8.1), но release-flow стал чище: больше нет bump-коммитов в репо при выпуске релиза.
Quick links:
🔧 Refactor ·
🛠 Release flow ·
🔬 Verified ·
🇷🇺 На русском
🔧 Refactor
Tag = single source of truth для версии
§065 spec. До этого версия дублировалась в:
app/pubspec.yamlversion: X.Y.Z+Napp/lib/screens/about_screen.dartstatic const _version = 'X.Y.Z'- git tag
vX.Y.Z
Три места → три ошибки. v1.8.0 ▼: забыл (2), UI показал v1.7.0. v1.8.1 ▼: CI consistency check валидировал, но bump всё равно ручной в 2 файлах.
Новая модель:
pubspec.yamlнавсегдаversion: 0.0.0-dev+0(placeholder, не правится)- CI перед build'ом sed'ит pubspec из
${tag#v}+git rev-list --count HEAD - Local
scripts/build-local-apk.shтоже derive'ит + revert черезtrap EXIT - About screen + UpdateChecker →
VersionInfo.I.version(loaded изPackageInfo.fromPlatform()вmain()передrunApp)
Файлы:
app/lib/services/version_info.dartNEWapp/lib/main.dart—await VersionInfo.I.init()передrunAppapp/lib/screens/about_screen.dart—_versionconst удалён;versionStringalias удалёнapp/lib/screens/home_screen.dart+app_settings_screen.dart+services/debug/handlers/action.dart— 6 occurrence'овAboutScreen.versionString→VersionInfo.I.versionapp/pubspec.yaml→ placeholder.github/workflows/ci.yml— добавлен «Inject release version» step (sed pubspec из meta.outputs.version + commits count); удалён «Version consistency check» (нечего сверять)scripts/build-local-apk.sh— sed pubspec из git describe + revert trap
🛠 Release flow
До v1.8.2
1. bump pubspec.yaml → 1.8.1+34 → 1.8.2+35
2. bump about_screen.dart → '1.8.1' → '1.8.2'
3. CHANGELOG / RELEASE_NOTES / docs/releases/vX.Y.Z.md / DEV_REPORT chronicle
4. commit «chore(release): bump 1.8.2» (5+ файлов)
5. merge develop→main
6. tag v1.8.2 + push tag
После v1.8.2
1. CHANGELOG / RELEASE_NOTES / docs/releases/vX.Y.Z.md / DEV_REPORT chronicle
2. commit «docs(release): v1.8.2 notes» (3 файла, никаких code/pubspec bump)
3. merge develop→main
4. tag v1.8.2 + push tag
Два шага меньше, ноль шанса забыть bump.
CI deltа:
- Version consistency check (sed-grep pubspec ↔ about_screen ↔ tag, fail mismatch)
+ Inject release version (sed pubspec from ${tag#v}+${git rev-list --count HEAD})Local build (scripts/build-local-apk.sh):
- Если на tagged commit'е →
versionName = X.Y.Z - Если между тегами →
versionName = X.Y.Z-dev.N(N commits since last tag) versionCode = git rev-list --count HEAD(same formula что CI)trap "git checkout -- app/pubspec.yaml" EXITдля revert после build
🔬 Verified
После tagged release v1.8.2:
- CI собрал APK с
versionName=1.8.2,versionCode=N(= commits count HEAD) adb install -rповерх v1.8.1 → successdumpsys package | grep version→ корректно- App → Settings → About →
v1.8.2 - UpdateChecker → silent (current == latest)
- Debug API
/state.app_version→1.8.2+N - Backup
source_app_version→1.8.2+N
Все surfaces consistent.
🇷🇺 LxBox v1.8.2 на русском
Что изменилось в инфраструктуре (для пользователя ничего видимого):
- Версия приложения теперь берётся только из git тега, никаких параллельных источников
- В коде убрана hardcoded константа
_version = '1.8.1'— больше не нужно её править при релизе - В
pubspec.yamlнавсегда стоит placeholder0.0.0-dev+0, CI/local build переписывает её перед сборкой - Бамп-коммитов в репо при релизе больше нет — только docs
Для разработчика:
- При
flutter runв About покажетсяv0.0.0-dev— это явный signal «это dev session, не release build». Если нужна правильная версия —scripts/build-local-apk.sh(он derive'ит изgit describe) - При release: edit CHANGELOG/RELEASE_NOTES/docs → commit → merge →
git tag vX.Y.Z→git push origin vX.Y.Z→ всё. CI остальное сделает.
В фоне есть один потенциальный quirk — на 0.0.0-dev UpdateChecker предложит «обновитесь до vX.Y.Z». Это технически корректно (0.0.0 < anything), но для dev сессий может быть слегка раздражающим. Пока не fix'ил; если будет проблема — добавим guard «if version contains '-dev' skip update check».
🔗 Refs
- Previous: v1.8.1
- Spec: §065 — Version from git tag
- Release process: docs/RELEASE_PROCESS.md §2.2
- CHANGELOG:
## [1.8.2] - CI workflow: .github/workflows/ci.yml
- Local build: scripts/build-local-apk.sh