Overview
Copr uses a structured release workflow that includes:- Pre-release: Tag packages, build in @copr/copr, upgrade dev instances, test
- Build for production: Submit to Fedora/EPEL and infra repos
- Release window: Upgrade production infrastructure
- Post-release: Documentation, announcements, Bodhi updates
Read through this entire guide before starting a release. You may want to adjust the order of some steps.
Pre-Release
The goal is to do as much work as possible before the release while focusing only on important tasks.Tag Untagged Packages
Ensure you’re on an up-to-date main branch:.PATCH versions:
Build Packages
Build updated packages into the@copr/copr project:
Upgrade Development Machines
Verify.repo files point to @copr/copr.
On batcave01.iad2.fedoraproject.org:
If there’s a new copr-rpmbuild version, terminate resalloc VMs so they’re recreated with the new version.
Call for QA
Move MODIFIED+ bugzillas to ON_QA. Ask the team to test and verify bugs.Run Tests
Execute sanity tests from a Podman container:Build Packages for Production
Ensure you’re a co-maintainer of these Fedora packages:- copr-backend
- copr-cli
- copr-dist-git
- copr-frontend
- copr-keygen
- copr-messaging
- copr-mocks
- copr-rpmbuild
- copr-selinux
- python-copr
- python-copr-common
.tito/releasers.conf has up-to-date branch list.
Release each package:
Submit Packages to Staging Infra Tags
Tag packages for staging:python-copr and copr-cli (used on backend).
Prepare Release Notes
Review resolved bugs and write release notes. See previous release notes for formatting. Create a pull request with release notes.Schedule and Announce Outage
See Announcing Outages. Create infrastructure ticket and announce planned maintenance:- Update status.fedoraproject.org
- Email [email protected]
- Coordinate with Fedora Infrastructure team
Release Window
If pre-release preparation was thorough, the release window should take less than 10 minutes.
Announce Ongoing Outage
Update status.fedoraproject.org to “Ongoing outage.”Move Packages to Production Infra Tags
Move packages to production:Upgrade Production Machines
On batcave01.iad2.fedoraproject.org:Playbooks handle database upgrades automatically.
Test Production
Run post-release Beaker test:Post-Release
At this point, all Copr services should be up and running.Generate Documentation
Update Copr project documentation:- https://readthedocs.org/projects/copr-backend/
- https://readthedocs.org/projects/copr-keygen/
- https://readthedocs.org/projects/copr-messaging/
- https://readthedocs.org/projects/python-copr/
Announce End of Release
Update status.fedoraproject.org to “Resolved.” Email [email protected] with:- Summary of changes
- Link to release notes
- Any known issues
Release Packages to PyPI
Ensure~/.pypirc is configured correctly:
- copr-common
- python-copr
- copr-cli
- copr-messaging
If you don’t have PyPI access, ask @msuchy, @praiskup, or @frostyx.
Submit Bodhi Updates
Create updates in Bodhi for every package built in Koji. Group packages into batches:Use filtered %changelog entries from the RPM packages for update notes.
Final Steps
Check MODIFIED bugs not yet ON_QA and move them if fixed in this release. Close all ON_QA, VERIFIED, and RELEASE_PENDING bugs to CLOSED/CURRENTRELEASE with comment:New Copr has been released.Update this document if you found issues or improvements during the release.
Release Checklist
Use this checklist to track progress:Pre-Release
- Tag all packages with untagged commits
- Build packages in @copr/copr
- Upgrade dev instances
- Run sanity tests
- Build packages for Fedora/EPEL
- Create Bodhi overrides for dependencies
- Wait for overrides to be available in buildroot
- Submit packages to staging infra tags
- Prepare release notes
- Schedule and announce outage
Release Window
- Announce ongoing outage
- Move packages to production infra tags
- Wait for packages to be available
- Upgrade production backend
- Upgrade production keygen
- Upgrade production frontend
- Upgrade production distgit
- Verify installed versions
- Run post-release tests
Post-Release
- Generate documentation
- Trigger ReadTheDocs builds
- Announce end of release
- Release packages to PyPI
- Submit Bodhi updates
- Close resolved bugs
- Update release documentation
Common Issues
Build Failures in Koji
Problem: Package fails to build due to missing dependency. Solution: Create Bodhi override for the dependency and wait for it to be available in the buildroot.Playbook Fails During Upgrade
Problem: Ansible playbook fails midway through upgrade. Solution: Debug the specific task, fix the issue, and rerun the playbook. Playbooks are generally idempotent.Database Migration Fails
Problem: Alembic migration fails on frontend. Solution:- Check
/var/log/httpd/error_logfor details - Manually run migration:
cd /usr/share/copr/coprs_frontend && alembic upgrade head - Fix issues and rerun playbook
Packages Not Available in Infra Repo
Problem:koji-infratag-available times out.
Solution: Check repo manually and investigate Koji issues. The Koji race might have broken the repo - submit the held-back package to fix.
Copr Packages
Copr consists of these packages:| Package | Purpose | Release Target |
|---|---|---|
| python-copr | Python client library | Fedora, EPEL, PyPI |
| python-copr-common | Shared code | Fedora, EPEL, PyPI |
| copr-cli | Command-line client | Fedora, EPEL, PyPI |
| copr-frontend | Web application | Fedora, EPEL, Infra |
| copr-backend | Build dispatcher | Fedora, EPEL, Infra |
| copr-dist-git | DistGit service | Fedora, EPEL, Infra |
| copr-keygen | GPG signing service | Fedora, EPEL, Infra |
| copr-rpmbuild | Builder agent | Fedora, EPEL, Infra |
| copr-messaging | Message bus library | Fedora, EPEL, PyPI |
| copr-selinux | SELinux policies | Fedora, EPEL, Infra |
| copr-mocks | Mock configs | Fedora, EPEL, Infra |
Additional Resources
Deployment
Learn how to deploy Copr in different environments
Maintenance
Backup, monitoring, and operations guide
Fedora Infra Ansible
Fedora Infrastructure Ansible playbooks
Release Notes
Read previous Copr release notes