This document outlines the processes, versioning workflows, and checklists for project maintainers of Flatpak Automatic.
To sign the built RPMs, you need a GPG key. If you have configured your
~/.rpmmacros (as shown below), you can simply run:
make rpm-signAlternatively, you can provide the key ID directly:
make rpm-sign GPG_KEY_ID=YOUR_KEY_IDYou should have the following in your ~/.rpmmacros:
%_gpg_name YOUR_KEY_ID
%_gpg_path /home/youruser/.gnupg
%__gpg /usr/bin/gpg
The project uses createrepo_c to maintain a DNF repository with support for
versioned channels (e.g., v0.1/stable, latest/testing).
To update the repository metadata:
make rpm-repo CHANNEL=testing GPG_KEY_ID=YOUR_KEY_IDThis will:
- Organize RPMs into
repo/rpms/v<MAJOR>.<MINOR>/<CHANNEL>/. - Organize DEBs into
repo/debs/v<MAJOR>.<MINOR>/<CHANNEL>/. - Run
createrepo_c --updateon the RPM directory. - Run
dpkg-scanpackagesandapt-ftparchiveon the DEB directory. - Generate signed metadata if a GPG key is provided.
- Automatically export the public GPG key as
repo/gpg.key. - Sync the content to
repo/rpms/latest/<CHANNEL>/andrepo/debs/latest/<CHANNEL>/.
To host this as a repository on GitHub:
- The
repostructure is staged intopublic/and deployed to the root of thegh-pagesbranch alongside theindex.htmllanding page by the CI workflow. - The
repo/containsrpms/anddebs/subdirectories for each package type. - The GPG public key is available as
gpg.keyat the root of thegh-pagesbranch. - Users can then add the repository by creating a
.repoor.listfile pointing to the raw GitHub Pages URL.
This project uses tbump as the single source of truth for versioning and
automated changelog generation. Do not manually edit version strings or
CHANGELOG.md.
When you are ready to cut a new release, follow these steps to generate the "Release PR":
-
Check out a release branch:
git checkout -b release/vX.Y.Z
-
Run tbump in no-push mode:
tbump X.Y.Z --no-push
Note:
tbumpwill automatically trigger thebefore_commithooks to regenerate the status screenshot (scripts/maintainer/generate-screenshot.py), runupdate-package-metadata.py, generate the changelog, and bundle everything into a single release commit and local tag.💡 Tip for Release Candidates: You can safely use standard SemVer tags like
1.6.0-rc1. The build scripts will automatically translate the hyphen to a tilde (1.6.0~rc1) for RPM/Debian metadata to ensure proper package sorting. -
Push the branch and open a PR:
git push -u origin release/vX.Y.Z gh pr create --title "chore(release): vX.Y.Z" --body "Automated release PR."
-
Merge and Push Tag: Once the PR is merged into
main, manually push the generated tag to trigger the GitHub Actions deployment:git push origin vX.Y.Z
- Push to
main: Does not trigger a deployment. Use this for ongoing development. - Push a
v*tag: Triggers therelease.ymlworkflow.- Builds and signs the RPMs/DEBs.
- Organizes the DNF/APT repository structure.
- Deploys the result to the
gh-pagesbranch. - Creates a GitHub Release with the packages as assets.
ℹ️ Note on Channels: Tags containing
rc,beta,alpha, ortest(e.g.,v0.1.0-rc1) are automatically deployed to the testing channel. All other tags are deployed to stable.
Before running tbump and cutting a new release, ensure the following:
- All feature and fix PRs targeted for this release are merged into
main. - All merged commits adhere to Conventional Commits standards (vital for the changelog).
- CI pipeline (
lint,smoke-test) is currently passing onmain. - Ensure your local
mainbranch is fully synced withorigin/main.
If make rpm-sign fails:
- Ensure your GPG agent is running and has the private key loaded.
- Verify
%_gpg_namein~/.rpmmacrosmatches your key ID. - Check if
rpmsignis installed (sudo dnf install rpm-sign).
If the GitHub Pages repository shows outdated packages:
- Verify the
release.ymlGitHub Action completed successfully for the latest tag. - Ensure the
gh-pagesbranch contains the expectedrpms/anddebs/structures. - Check for metadata signature mismatches; the GPG key must be consistent across releases.
- If
createrepo_corapt-ftparchivefails, ensure all build-time dependencies are installed on the build machine. - For DEB repos, ensure
dpkg-devandapt-utilsare available.