Releasing

Checklist for shipping a public Scanly release.

Version bump

  1. Update versionCode and versionName in app/build.gradle.kts.
  2. Add entry to ../../CHANGELOG.md (Keep a Changelog format).
  3. Update ../../VERSION.md with metadata and upgrade notes.
  4. Update ../releases.md current release table.
  5. Update ../../README.md if user-facing behavior or screenshots changed.
  6. Update ../reference/implementation-snapshot.md if technical snapshot changed.

Pre-release verification

./gradlew.bat assembleDebug
./gradlew.bat testDebugUnitTest
./gradlew.bat lintDebug

Run ./gradlew.bat assembleGithubRelease assemblePlayStoreRelease to verify both minified production paths. Without configured release credentials, Gradle outputs unsigned artifacts; Android Studio's signed-build wizard supplies the selected key.

Device testing

  • Verify on at least one physical device
  • Test Room migration if schema changed (install over previous version)
  • Verify capture, edit, export, and clear-all-data flows
  • Check theme modes and orientation handling

Build both signed releases

Android Studio's Build → Generate Signed Bundle / APK screen exposes two production variants:

VariantGeneratePublish to
githubReleaseAPKGitHub Releases
playStoreReleaseAndroid App Bundle (AAB)Google Play Console

Use the same version name, version code, application ID, and release signing key for both variants. CLI APK builds are available with:

./gradlew.bat assembleGithubRelease assemblePlayStoreRelease

GitHub release

  1. Tag: v{versionName} (e.g. v1.0.9)
  2. Publish the concise Markdown release notes from docs/release-notes/v{versionName}.md; keep the detailed history in the CHANGELOG
  3. Attach signed APK if distributing via GitHub releases

The githubRelease app reads https://api.github.com/repos/c1ph3rj/Scanly/releases/latest, compares the release tag with its installed version, and opens the release page when the user updates.

The GitHub release body is also rendered inside the app's update dialog. Keep it concise, use simple headings and flat bullet lists, and omit a duplicate top-level release-title heading.

Google Play release

  1. Generate the playStoreRelease AAB.
  2. Upload it to the intended Play Console track.
  3. Verify the in-app update flow using an install delivered by Google Play.

The playStoreRelease app uses the Play In-App Update API. It may use the matching GitHub release for richer notes, but Google Play remains authoritative for availability and installation.

Versioning policy

FieldRule
versionNameSemantic-style MAJOR.MINOR.PATCH for users
versionCodeMonotonically increasing integer required by Google Play

Bump both together on every public release.

Documentation sync

After release, confirm these reflect the new version:

View source on GitHub · Markdown