Skip to content

LxBox v1.8.2

Choose a tag to compare

@github-actions github-actions released this 12 May 01:21
· 3271 commits to main since this release

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. До этого версия дублировалась в:

  1. app/pubspec.yaml version: X.Y.Z+N
  2. app/lib/screens/about_screen.dart static const _version = 'X.Y.Z'
  3. 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.dart NEW
  • app/lib/main.dart — await VersionInfo.I.init() перед runApp
  • app/lib/screens/about_screen.dart — _version const удалён; versionString alias удалён
  • app/lib/screens/home_screen.dart + app_settings_screen.dart + services/debug/handlers/action.dart — 6 occurrence'ов AboutScreen.versionString → VersionInfo.I.version
  • app/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 → success
  • dumpsys 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 навсегда стоит placeholder 0.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