On this page
Release Process
The release process values simplicity and automation in order to provide better predictability and low cost for maintainers.
Process Description#
Release artifacts are orchestrated by GoReleaser, which is configured in .goreleaser.yaml
There is a Workflow created specifically for releases. This workflow is triggered manually by a project maintainer when a new release is ready to be published.
Cutting A Release#
Trigger the release workflow, providing the desired tag:
gh workflow run release.yml -f tag=v0.1.0The workflow performs automated preflight validation before releasing:
- Tag format: must match
vMAJOR.MINOR.PATCH - Semver ordering: must be greater than the latest existing tag
- CI verification: confirms all required checks passed on
main - Unreleased commits: ensures there are changes to release
- Tag creation: creates an annotated tag automatically (no manual tagging needed)
If preflight passes, GoReleaser builds all three provider binaries, generates per-provider archives, signs checksums with cosign (Sigstore keyless), and produces SPDX SBOMs via syft.
Once the workflow completes, the release is available on the releases page
Release Artifacts#
Each release produces the following artifacts:
| Artifact | Description |
|---|---|
complyctl-provider-openscap_linux_x86_64.tar.gz | OpenSCAP provider binary |
complyctl-provider-ampel_linux_x86_64.tar.gz | Ampel provider binary |
complyctl-provider-opa_linux_x86_64.tar.gz | OPA/Conftest provider binary |
checksums.txt | SHA256 checksums for all archives |
checksums.txt.sigstore.json | Cosign keyless signature bundle |
*.sbom.json | SPDX JSON SBOMs (one per archive + source) |
Re-running A Failed Release#
If the release job fails after the preflight creates the tag (e.g., due to transient infrastructure issues), simply re-run the same command:
gh workflow run release.yml -f tag=v0.1.0The preflight detects that the tag already exists at HEAD and safely skips the validation steps that would otherwise block the re-run.
Tests#
Tests relevant for releases are incorporated in CI tests for every PR.
Cadence#
Releases are discussed and agreed upon by project maintainers. The release cadence follows the project needs and may be aligned with complyctl releases when coordinated updates are required.
Fedora Packages#
After the repository split, complyctl and complytime-providers are independent Fedora packages with separate release cycles.
Note: There are not yet packages for complytime-providers in Fedora. The Fedora package will be introduced after a few upstream releases stabilize the release process. The RPM spec and Packit configuration are already in place to support this when the time comes.
The complytime-providers repository produces three sub-packages:
complytime-providers-openscap– OpenSCAP scanning providercomplytime-providers-ampel– Ampel scanning providercomplytime-providers-opa– OPA/Conftest scanning provider
Automated Process (packit)#
Once the Fedora package is approved, the process will be automated by Packit according to .packit.yaml configuration file and should only demand a PR review from a Fedora package maintainer.
Once a new GitHub Release is created, Packit will automatically:
- Propose PRs to dist-git for the configured branches (rawhide, f44, f43)
- After PR merge, trigger Koji builds
- Submit Bodhi updates for released Fedora versions
Preparation (only Necessary For Manual Process)#
To update a Fedora package, it is ultimately necessary to be a member of Fedora Packager group. Here is the main documentation on how to become a Fedora Packager:
However, if you are not yet a Fedora Packager, it is still possible to propose a PR. In this case, a package maintainer will review it and help on the process.
Requirements#
Install The Required Tools#
sudo dnf install fedora-packager fedora-review- Ensure your system user is included in the
mockgroup. This is useful when testing the package changes.
sudo usermod -a -G mock $USERToken For Authenticated Commands#
Make sure you have a valid kerberos token. It will be necessary for commands that require authentication:
fkinit -u <your_fas_id>Fork The Repository#
Create a fork from https://src.fedoraproject.org/rpms/complytime-providers
fedpkg clone --anonymous forks/<your fedora id>/rpms/complytime-providers
cd complytime-providersUpdate The Spec File And Sources#
Usually it is only necessary to update the Version: line and include a %changelog entry.
rpmdev-bumpspec command can be used to automate this process. e.g.:
rpmdev-bumpspec -n 0.2.0 -c "Bump to upstream version v0.2.0" complytime-providers.specEnsure the sources are downloaded locally:
fedpkg sourcesTo ensure the scratch build doesn’t fail due to an “Invalid Source”, ensure the new sources are uploaded to the
lookaside_cache:
fedpkg new-sourcesPackage Tests#
Check if the changes work as expected before proceeding to the next step:
fedpkg diff
fedpkg lint
fedpkg mockbuildNOTE: Alternatively one can test the package build in Koji with
fedpkg scratch-build --srpm.
Propose The Updates#
After confirming that everything is fine, create a new branch to use in the Pull Request. e.g.:
git checkout -b release-0.2.0_rawhide
git status
git add -u
git commit -s
git push -u origin release-0.2.0_rawhideContinue the steps via src.fedoraproject.org web UI.
Repeat this process for all other relevant branches.
fedpkg switch-branch f44Create The New Builds#
Once the PRs are merged, it is time to create the new builds.
fedpkg switch-branch rawhide
fedpkg build- Follow the builds status in the following links:
Submit Fedora Updates#
After the build is done, an update must be submitted to Bodhi.
Updates for rawhide builds are submitted automatically, but updates for any branched version needs to be submitted manually.
fedpkg updateOr via web interface on Bodhi.
The new updates enter in testing state and are moved to stable after 7 days, or sooner if it receives 3 positive “karmas”.
After moving to stable state, the update is signed and awaits to be pushed to the repositories by the Release Engineering Team.
Check the package update status in the following links:
Troubleshooting#
If tests fail due to external issues, they can be restarted once the external issues are solved. For example, if some tests in a Bodhi update failed due to infrastructure issues, they could be restarted by the following command:
bodhi updates trigger-tests <UPDATE_ID>