Maintainers' Guide¶
This document outlines the processes, versioning workflows, and checklists for project maintainers of Flatpak Automatic.
GPG Signing¶
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-sign
Alternatively, you can provide the key ID directly:
make rpm-sign GPG_KEY_ID=YOUR_KEY_ID
RPM GPG Configuration¶
You should have the following in your ~/.rpmmacros:
%_gpg_name YOUR_KEY_ID
%_gpg_path /home/youruser/.gnupg
%__gpg /usr/bin/gpg
DNF Repository Management¶
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_ID
This 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>/.
Hosting on GitHub¶
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.
Versioning & Release Workflow¶
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: tbump will automatically trigger the before_commit hook, run update-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
CI Deployment Behavior¶
- 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.
Release Checklist¶
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.
Troubleshooting for Maintainers¶
GPG Signing Failures¶
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).
Repository Sync Issues¶
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.
Metadata Generation Errors¶
- If
createrepo_corapt-ftparchivefails, ensure all build-time dependencies are installed on the build machine. - For DEB repos, ensure
dpkg-devandapt-utilsare available.