include::_partials/attributes.adoc[]

== Release the Fedora Container Base Image

=== Description

This SOP covers the steps involved in changing and releasing the Fedora
Container Base image.

Fedora releases 2 container base images, [.title-ref]#fedora# and
[.title-ref]#fedora-minimal#. These images are available on 3 registries
[.title-ref]#registry.fedoraproject.org#, [.title-ref]#quay.io# and
[.title-ref]#DockerHub# (fedora-minimal is not available in DockerHub).

==== Modify a base image (Kickstart)

Base images are built in koji using the [.title-ref]#image-factory#
application to build the container image root filesystem (rootfs).
Kickstart files are used to configure how the image is built and what is
available in the image The solution consist of 3 Kickstarts.

https://pagure.io/fedora-kickstarts/blob/main/f/fedora-container-common.ks[fedora-container-common]

https://pagure.io/fedora-kickstarts/blob/main/f/fedora-container-base.ks[fedora-container-base]

https://pagure.io/fedora-kickstarts/blob/main/f/fedora-container-base-minimal.ks[fedora-container-base-minimal]

Changes made on the rawhide branch will results in the rawhide image,
other branches (f{current}, f{old_release}) should be used to modify other releases.

==== Compose Configuration (Pungi)

The configuration used to compose the container images is available in
the pungi-fedora repository.

For rawhide the configuration is in

https://pagure.io/pungi-fedora/blob/main/f/fedora.conf

While for other releases the configuration is in a dedicated file

https://pagure.io/pungi-fedora/blob/f31/f/fedora-container.conf

==== Release on registry.fedoraproject.org and quay.io

If you want to release the base image on registry.fp.o and quay.io you
can use the following script.

https://pagure.io/releng/blob/main/f/scripts/sync-latest-container-base-image.sh[sync-latest-container-base-image.sh]

You will need to run that script from on of the releng composer machines
in the infrastructure in order to have the credentials.

If you do not have access to that machines, you can request the release
by opening a ticket on the https://pagure.io/releng/issues[releng
tracker].

The script can then be executed as follow

[source,subs="attributes+"]
....
$./sync-latest-container-base-image.sh {current}
$./sync-latest-container-base-image.sh {branched}
....

This will take care of pushing the [.title-ref]#fedora# and
[.title-ref]#fedora-minimal# images to both registries.

==== Release on DockerHub

Releasing on DockerHub is a little different since Fedora is an
"offical" image there. In order to release new images there we have to
update a Dockerfile and rootfs tarball on the following repo.

https://github.com/fedora-cloud/docker-brew-fedora[docker-brew-fedora].

For the details on how to run the script please see

https://github.com/fedora-cloud/docker-brew-fedora/blob/main/README.md[README].
