# Fedora CoreOS Config[](https://github.com/coreos/fedora-coreos-pipeline/blob/main/next-devel/README.md)Base manifest configuration for[Fedora CoreOS](https://coreos.fedoraproject.org/).Use https://github.com/coreos/coreos-assembler to build it.Discussions inhttps://discussion.fedoraproject.org/c/server/coreos. Bugtracking and feature requests athttps://github.com/coreos/fedora-coreos-tracker.## About this repoThere is one branch for each stream. The default branch is[`testing-devel`](https://github.com/coreos/fedora-coreos-config/commits/testing-devel),on which all development happens. See[the design](https://github.com/coreos/fedora-coreos-tracker/blob/main/Design.md#release-streams)and [tooling](https://github.com/coreos/fedora-coreos-tracker/blob/main/stream-tooling.md)docs for more information about streams.All file changes in `testing-devel` are propagated to otherbranches (to `next-devel`, `branched`, and `rawhide` through[config-bot](https://github.com/coreos/fedora-coreos-releng-automation/tree/main/config-bot),and to `testing` and eventually `stable` through usualpromotion), with the following exceptions:- `manifest.yaml`: contains the stream's name, yum reposused during composes, and the `releasever`.- lockfiles (`manifest-lock.*` files): on `testing-devel`and `next-devel`, lockfiles are pushed by[the `bump-lockfile` job](https://github.com/coreos/fedora-coreos-pipeline/blob/main/jobs/bump-lockfile.Jenkinsfile).Production streams receive them as part of usualpromotion. Overrides (`manifest-lock.overrides.*`) aremanaged independently with the help of some GitHub Actions(see sections below).## LayoutWe intend for Fedora CoreOS to be used directly for a wide varietyof use cases. However, we also want to support "custom" derivativessuch as Fedora Silverblue, etc. Hence the configuration in thisrepository is split up into reusable "layers" and components onthe rpm-ostree side.To derive from this repository, the recommendation is to add itas a git submodule. Then create your own `manifest.yaml` which does`include: fedora-coreos-config/ignition-and-ostree.yaml` for example.You will also want to create an `overlay.d` and symlink in componentsin this repository's `overlay.d`.## Overriding packagesBy default, all packages for FCOS come from the stableFedora repos. However, it is sometimes necessary to eitherhold back some packages, or pull in fixes ahead of Bodhi. Toadd such overrides, one needs to add the packages to`manifest-lock.overrides.yaml` (there are also arch-specificvariants of these files for the rare occasions the overrideshould only apply to a specific arch). There is a[tool](ci/overrides.py) to help with this, and for simplecases, an [automated workflow](https://github.com/coreos/fedora-coreos-config/actions/workflows/add-override.yml)that runs the tool and submits a PR.Note that comments are not preserved in these files. Thelockfile supports arbitrary keys under the `metadata` key tocarry information. Some keys are semantically meaningful tohumans or other tools.### Fast-trackingExample:```yamlpackages:selinux-policy:evra: 34.10-1.fc34.noarchmetadata:type: fast-trackbodhi: https://bodhi.fedoraproject.org/updates/FEDORA-2021-f014ca8326reason: https://github.com/coreos/fedora-coreos-tracker/issues/850selinux-policy-targeted:evra: 34.10-1.fc34.noarchmetadata:type: fast-track# you don't have to repeat the other keys for related packages```Whenever possible, it is important that the package besubmitted as an update to Bodhi so that we don't have tocarry the override for a long time.Fast-tracked packages will automatically be removed by the`remove-graduated-overrides` GitHub Action in this repo oncethey reach the stable Fedora repos (or newer versions). Theyare detected by the `type: fast-track` key.### PinningExample:```packages:dracut:evr: 053-5.fc34metadata:type: pinreason: https://github.com/coreos/fedora-coreos-tracker/issues/842dracut-network:evr: 053-5.fc34metadata:type: pinreason: https://github.com/coreos/fedora-coreos-tracker/issues/842```All pinned packages *must* have a `reason` key containingmore information about why the pin is necessary.Once an override PR is merged,[`coreos-koji-tagger`](https://github.com/coreos/fedora-coreos-releng-automation/tree/main/coreos-koji-tagger)will automatically tag overridden packages into the pool.## Adding packages to the OSSince `testing-devel` is directly promoted to `testing`, itmust always be in a known state. The way we enforce this isby requiring all packages to have a corresponding entry inthe lockfile.Therefore, to add new packages to the OS, one must also addthe corresponding entries in the lockfiles:- for packages which should follow Bodhi updates, place themin `manifest-lock.$basearch.json`- for packages which should remain pinned, place themin `manifest-lock.overrides.$basearch.yaml`There will be better tooling to come to enable this, thoughone easy way to do this is for now:- add packages to the correct YAML manifest- run `cosa fetch --update-lockfile` (this will only update the lockfile forthe current architecture, most likely `x86_64`)- copy the new lines to the lockfiles for other architectures (i.e. `aarch64`)- commit only the new package entries (skip the timestamped changes to avoidmerge conflicts with the lockfile updates made by the bot)## Moving to a new major version (N) of Fedora[Create a rebase checklist](https://github.com/coreos/fedora-coreos-tracker/issues/new?labels=kind/enhancement&template=rebase.md&title=Rebase+onto+Fedora+N) in fedora-coreos-tracker.## CoreOS CIPull requests submitted to this repo are tested by[CoreOS CI](https://github.com/coreos/coreos-ci). You can see the pipelineexecuted in `.cci.jenkinsfile`. For more information, including interacting withCI, see the [CoreOS CI documentation](https://github.com/coreos/coreos-ci/blob/main/README-upstream-ci.md).## Tests layoutTests should follow the following format:```bash#!/bin/bash## kola:## exclusive: false## platforms: aws gcp## # See all options in https://coreos.github.io/coreos-assembler/kola/external-tests/#kolajson## Short summary of what the test does, why we need it, etc.## Recommended: Link to corresponding issue or PR## Explain the reasons behind all the kola options:# - distros: fcos# - This test only runs on FCOS due to ...# - platforms: qemu# - This test should ...# - etc.set -euxo pipefail. $KOLA_EXT_DATA/commonlib.shfoo_bar() <-- Other function definitionsif ... <-- Actual test code<-- Errors must be raised with `fatal()`<-- Does not need to end with a call to `ok()````