Create Fedora IoT Release Candidates

To complete these steps you will need a valid Fedora account, with appropriate permissions in Koji, the Fedora buildsystem.

Review the current compose tag used for Fedora IoT and what is currently tagged and included.

koji list-tagged f[release_version]-iot

Untag any builds currently included:

koji untag-build --all f[release_version]-iot [build1 build2 ...]

Review the upstream Fedora ticket requesting the Release Candidates for a listing of all Fedora release Blockers and Freeze Exceptions that are needed for the compose. * An example ticket for Fedora 40 Beta Candidate Request. * An example ticket for Fedora 40 Final Candidate Request.

Add any builds specified by the Fedora QE team.

koji tag-build f[release_version]-iot [build1 build2 ...]

Compare the tagged builds with the Fedora compose tag (f40-compose):

koji list-tagged f[release_version]-compose

Log into the Fedora IoT compose host and run the compose for the pending release. Once the compose is complete, review the results for any outstanding deliverables.

Once the release has been declared Go!

Beta

When the release is signed off on Thursday after the Go/No-Go meeting. Open a ticket with Release Engineering to sign the deliverables. A request example from Fedora 39.

Once the release is signed, from the compose host create the directory and run the script to copy the release so it can be sync’d to the Fedora mirrors.

For the Beta release, note the destintation is the test directory:

mkdir /pub/alt/iot/test/[release_version]
./sync-release.sh

Final

The final release requires an additional compose moving the development release to stable.

Update the signing key

Open a pull request to update the signing key for the specified release. Example from Fedora 41 GA.

Update Pungi configuration

Create a local fork of the Fedora IoT Pungi repository to make changes to the configuration files used to build Fedora IoT.

Update the the URL used for the compose, moving from latest to the compose declared Gold in the Go/NoGo meeting. This example uses the Fedora 41 GA compose:

sed -i 's|branched/latest-Fedora-41/|41/Fedora-41-20241024.0/|g' fedora-iot.conf

Next update the branch from devel to stable:

sed -i 's|fedora/devel/|fedora/stable/|g' fedora-iot.conf

Update the sync-bootc-base-containers.sh script, moving the development release to stable.

sed -i 's|current_stable="40"|current_stable="41"|g' sync-bootc-base-containers.sh
sed -i 's|current_devel="41"|#current_devel="41"|g' sync-bootc-base-containers.sh

Review changes and open a pull request for peer review.

Update the ostree repository

Update the Fedora IoT ostree repository for the final compose. Update the branch from devel to stable and the release URL from branched to the release directory. The examples below were used for Fedora 41 GA.

sed -i 's|s/devel/%(arch)s/|s/stable/%(arch)s/|g' config.ini
sed -i 's|fedora/devel/|fedora/stable/|g' *.yaml
sed -i 's|fedora/linux/development/41|fedora/linux/releases/41|g' config.ini

Review changes and open a pull request for peer review.

Update Automated compose

Ensure the cron job used to automate the compose for stable-iot is updated to point to the correct branch for the new stable release and delete the cronjob used for the development release, devel-iot.

Release compose

After the changes have been merged, complete the GA compose. Once completed, open a ticket with Release Engineering to sign the deliverables. A request example from Fedora 39.

Sync the Release

Once the release is signed, from the compose host create the directory and run the script to copy the release so it can be sync’d to the Fedora mirrors.

mkdir /pub/alt/iot/[release_version]
./sync-release.sh