Skip to content

Release process

Devesh Rai edited this page Oct 21, 2026 · 1 revision

Release process

One-time setup

  1. Signing key. Create it once and back it up somewhere safe. Every future release must be signed with it, or phones won't install the update over the old version.
    keytool -genkeypair -keystore ~/.foldman/foldman-release.jks -alias foldman \
      -keyalg RSA -keysize 4096 -validity 10000
  2. signing.properties in the repository root. It's git-ignored.
    storeFile=/Users/you/.foldman/foldman-release.jks
    storePassword=…
    keyAlias=foldman
    keyPassword=…
    Without this file, release builds fall back to the debug key.
  3. Apple Music: the MusicKit AARs in app/libs/ and a current developer token. See Apple Music and MusicKit.

Cutting a release

  1. Check the developer token has well over a month left, and renew it if not (python3 tools/make_apple_token.py). Its expiry date is baked into the APK, and in-app Apple Music stops working when it passes.
  2. Bump the version at the top of app/build.gradle.kts:
    val appVersionName = "0.1.2"
    val appVersionCode = 3   // always +1
  3. Update CHANGELOG.md, and copy it to the wiki's Changelog page.
  4. Build and check:
    ./gradlew :app:assembleRelease
    apksigner verify --print-certs app/build/outputs/apk/release/Foldman-0.1.2-release.apk
    The certificate's SHA-256 must be d917056f9383db11fd6f6d61e53820294e0cac70fae51edf998d773f28a18c99.
  5. Test on a device: install it over the previous release, play each source, fold and unfold.
  6. Commit, push and publish:
    git commit -am "…" && git push
    shasum -a 256 app/build/outputs/apk/release/Foldman-0.1.2-release.apk
    gh release create v0.1.2 app/build/outputs/apk/release/Foldman-0.1.2-release.apk \
      --title "Foldman 0.1.2" --notes-file notes.md
    Put the APK's SHA-256 and the certificate fingerprint in the notes.

Before every push

Check that nothing secret is staged:

git grep --cached -nIE "BEGIN PRIVATE KEY|storePassword=|apple.developerToken=ey"

Clone this wiki locally