Release Process

For each piece of the F-Droid ecosystem, there is a specific release process. They generally follow the same patterns, but all have unique steps. The official signing keys are listed in Release Channels and Signing Keys.

fdroidclient

  1. pull in latest commits from Weblate into a local branch called weblate
  2. run ./tools/check-format-strings.py and ./tools/remove-unused-and-blank-translations.py and commit changes
  3. rebase the weblate branch on the latest commits in master of https://gitlab.com/fdroid/fdroidclient and fix any conflicts
  4. push local weblate branch to your fork create a merge request, and tag it with the localization label
  5. make sure all tests pass before merging, including all android-22 emulator tests
  6. once the weblate branch is merged, reset the git repo in https://hosted.weblate.org/projects/f-droid/f-droid/#repository
  7. set versionCode in app/build.gradle
  8. add new entry in metadata/en-US/changelogs/
  9. copy that new entry to CHANGELOG.md
  10. make a local branch for the final release, then run ./tools/trim-incomplete-translations-for-release.py to remove any incomplete translations from the final while leaving them in master
  11. add git signed tag named after the exact version name (no preceeding v)
  12. add new Build: entry to metadata file

major release

If it is a major release, there are a few more steps.

  1. temporarily remove the iw/in links: find app/src/main/res/ -type l -delete
  2. In Android Studio, go to Analyze -> Inspect Code
  3. After running on the whole project, go to Android Lint: Performance, and click on Unused Resources, then click the Remove All Unused Resources button. Only commit changes to strings.xml, not styles.xml or other files.
  4. Then it is time to create a new stable branch (e.g. stable-v1.0 or stable-v1.1) should be created first. The incomplete translations should be removed using ./tools/trim-incomplete-translations-for-release.py. This has to happen in the stable branch only, since it will remove the incomplete translations. If the incomplete translations are removed from master, then Weblate will sync with that, and remove them there as well.

fdroidserver

  1. Make sure its passing the tests on Ubuntu/trusty and OSX
  2. pull in latest commits from Weblate into a local branch called weblate
  3. rebase the weblate branch on the latest commits in master of https://gitlab.com/fdroid/fdroidserver and fix any conflicts
  4. push local weblate branch to your fork create a merge request, and tag it with the localization label
  5. make sure all tests pass before merging
  6. once the weblate branch is merged, reset the git repo in https://hosted.weblate.org/projects/f-droid/fdroidserver/#repository
  7. set version='' in setup.py
  8. add git signed tag named after the exact version name (no preceeding v), using the exact same string as version=''
  9. upload to pypi.python.org using python3 setup.py release
  10. update Debian package
  11. upload to F-Droid PPA

privileged-extension

  1. pull in latest commits from Weblate into a local branch called weblate
  2. run ./tools/check-format-strings.py and ./tools/remove-unused-and-blank-translations.py and commit changes
  3. rebase the weblate branch on the latest commits in master of https://gitlab.com/fdroid/privileged-extension and fix any conflicts
  4. push local weblate branch to your fork create a merge request, and tag it with the localization label
  5. make sure all tests pass before merging
  6. once the weblate branch is merged, reset the git repo in https://hosted.weblate.org/projects/f-droid/privileged-extension/#repository
  7. set versionCode in app/src/main/AndroidManifest.xml
  8. add new entry in metadata/en-US/changelogs/
  9. copy that new entry to CHANGELOG.md
  10. add git signed tag named after the exact version name (no preceeding v)
  11. If the OTA update ZIP should be updated, add new Build: entry to metadata file
  12. The APK should auto-update based on the signing tag. Double-check that in that metadata file

fdroid-website

  1. Review the failing checks in Weblate, and try to fix any as possible in the Weblate UI (not locally!).
  2. Commit all work in Weblate or with wlc commit.
  3. Fetch the latest commits from Weblate into a git remote called weblate.
  4. Reset your local master branch to the main repo’s master, e.g. git checkout -B master upstream/master
  5. Run ./tools/pick-complete-translations.py.
  6. Change to new merge_weblate branch and run all checker scripts (./tools/check-*.py), make sure they all pass, then commit those changes.
  7. Merge the merge_weblate branch into the local master branch and fix any conflicts.
  8. Push merge_weblate branch to your fork and create a merge request. Tag it with the localization label.
  9. Make sure all tests pass before merging.
  10. add git signed tag named after the exact version name (no preceeding v), using the exact same string as version=''
  11. git fetch weblate and check that Weblate rebased on the latest commits, otherwise, there is a merge conflict that needs to be fixed before Weblate will sync again.
  12. Run ./tools/i18n.sh md2po to make all changes available for translation, and commit to master. Only commit the changed translation files (po/*.po*), do not commit new translation files here (new languages are added via Weblate). The easiest version of this sync is only committing one or more of the gettext template files (po/*.pot), since Weblate will sync .pot to all the .po files.
  13. Push release tag and new translation commits, ideally with GPG signatures.

jekyll-fdroid

  1. Make sure all the tests are passing
  2. set s.version and s.date in jekyll-fdroid.gemspec
  3. Make signed tag matching version number (no preceeding v)
  4. Update fdroid-website to use this release by setting both revision: and the version number in specs: jekyll-fdroid (1.0.1) in Gemfile.lock

Repomaker

  1. Review and merge any merge requests from Weblate on https://gitlab.com/fdroid/repomaker/merge_requests.
  2. Pull in latest commits, including any merged Weblate commits
  3. Make sure all tests on GitLab CI pass before merging.
  4. Set VERSION ='' in repomaker/init.py.
  5. Add git signed tag named after the exact version name (no preceeding v), using the exact same string as VERSION =''.
  6. Make sure the local git repo is fully clean, so random files are not included in the release tarball, e.g. git clean -fdx.
  7. Make sure all dependencies are installed, like in a venv.
  8. Run ./pre-release.sh
  9. Build a dist tarball using ./setup.py release.
  10. Upload to pypi.python.org.
  11. Update https://gitlab.com/fdroid/fdroid-repomaker-flatpak and make sure CI passes.
  12. Push changes to official repo on GitHub: https://github.com/flathub/org.fdroid.Repomaker