Files
comaps/docs/RELEASE_MANAGEMENT.md
2025-11-19 18:44:49 +01:00

6.3 KiB

Release Management

Prepare release

A few days before the release

  • start map generation
  • raise release notes PR and ask for translations

Shortly before the release day

  • merge a "[planet] Update map data to xxxxxx" PR with new countries.txt
  • merge a meta-php PR with new maps data version
  • make sure new maps files are on all CDN nodes
  • smoke test map data for World and some regions
  • merge (translated) release notes PR

Build a release for Android

Shortly before the release day

  • update GP metadata (descriptions, screenshots..) some days before the release

On release day

  • create a release branch release/2025.xx.yy

    • add a "[fdroid] Release version 2025.xx.yy-zz" commit
    • with a change to android/app/src/fdroid/play/version.yaml
    • take the version number from tools/unix/version.sh +1
    • e.g. with an added version bump commit it should match script's output
  • tag the new release and push the tag to codeberg

    • the tag format is "v2025.08.13-4" (not the old "2025.08.13-4-android"!)
    • F-Droid will pickup the new tag (happens once a day)
  • regenerate symbols

  • regenerate drules

  • update the world*.mwm

  • build Google release bundle (./gradlew bundleGoogleRelease) - check the keys are Google upload / test (yes, they're the same at test keys)! upload to GP and submit for a review

  • build Codeberg release (./gradlew -Parm32 -Parm64 assembleWebRelease, e.g. no x86) - check the keys are prod Codeberg / main!

  • create a Codeberg release from the tag, upload the build, add relnotes

  • Upload the release to Google and submit for review

  • announce the release in TG channel, upload the build

Build a release for iOS

Shortly before the release day

  • Add short iOS release notes to releases document
    • They should consist of the most important things in general, that will be new in this version
    • Those will be used for the App Store
    • They will be translated in a pull request together with the short Android release notes
  • Add long iOS release notes to releases document
    • They should consist only of iOS-specific things, that will be new in this version
    • Include credits to the persons, who added those new things
  • Add release with version number in App Store Connect
    • The version number should be the planned release date in yyyy.MM.dd format (like 2025.08.30)
  • Update metadata in App Store Connect
    • Only include languages for which the App Store metadata has been completely translated

On release day

  • Wait for the Android release to be prepared
  • Pull the latest version form the repository
    • The same last commit like for the Android release should be used
  • Edit versions and build number of the CoMaps and CoMapsWidgetExtension targets in Xcode
    • Use the same versions and build number of the Android release
  • Select the build target Any iOS Device in Xcode
  • Clean the build folder in Xcode
    • This can be done via Product / Clean Build Folder... in the menubar
  • Manually regenerate the styles
    • ./tools/unix/generate_styles.sh
  • Create the application archive in Xcode
    • This can be done via Product / Archive in the menubar
  • Upload application to the App Store via the Xcode organizer
    • Choose the freshly created application archive, press Distribute App, select App Store Connect and follow the steps until the app is successfully uploaded
  • Adjust the version in App Store Connect, if necessary
    • It should be the same version used in Xcode and for the Android release
  • Add the short release notes in App Store Connect
    • The translations can be found in a translation pull request specific for that version
    • For the languages, which are fully translated for the App Store, but are missing translated release notes, use the English release notes
  • Add the build to the release in App Store Connect
    • It might take a few minutes for the uploaded build to actually show up
  • Submit the release to review
    • Don't forget the actual submission step after clicking on Add for Review
  • Submit the same build to TestFlight review
  • Wait for Apple approving the release and TestFlight build

After Apple's release approval

  • Also release the build on TestFlight
  • Notify everybody in the Zulip topic for that release about the App Store availability

Shortly after the release

Distribute to the French National library

  • Build a google apk (with google flavord /web keys and only arm32/64 arches) for French National library
  • Upload it to their sftp

Update json for TagInfo

  • Run script to generate file
    • python tools/python/generate_taginfo.py
  • Raise PR to add updated file
    • data/taginfo.json

Announcements

  • Create a banner
  • Upload banner to website news
  • Announce the release to Telegram
  • Create a post in social media
    • Reddit
    • Mastodon
    • etc.

Tools to upload metadata and screenshots on stores

Apple App Store

Upload metadata and screenshots to the App Store

Use Forgejo Actions.

Check metadata

Use Forgejo Actions.

Local check:

./tools/python/check_store_metadata.py ios

Downloading screenshots from the App Store

Get xcode/keys/appstore.json - App Store API Key.

Get screenshots/ - a repository with screenshots.

Download metadata:

cd xcode
./fastlane download_metadata

Download screenshots:

cd xcode
./fastlane download_screenshots

Google Play

Upload metadata and screenshots to Google Play

Use Forgejo Actions.

Checking metadata

Use Forgejo Actions.

Checking locally:

./tools/python/check_store_metadata.py android

Downloading metadata and screenshots from Google Play

Get android/google-play.json - Google Play API Key.

Get screenshots/ - a repository with screenshots.

Download metadata:

./tools/android/download_googleplay_metadata.sh