Release process overview¶
This section describes where the release process is implemented, how to change it, and how to publish new releases. Note that the high-level overview of the release process is present in the qualification plan. Make sure to read the overview before diving into this section.
Release tooling¶
Ferrocene is developed using a custom tool, publish-release, which is
responsible for all of the release steps. The tool is written in Rust and
developed in the ferrocene/publish-release
repository, and it’s executed on
GitHub Actions in the ferrocene/ferrocene
repository.
When GitHub Actions invokes the release tool, the calculate-release-job-matrix.py script is used to determine which commit(s) to instruct the release process to release. The script does little when starting a manual release, but it’s fully responsible for determining which scheduled releases to run.
Publishing a manual release¶
Our release tooling also allows to manually start the release process. This can
be useful to start releases that are not on a schedule, to restart a scheduled
release that failed, or for testing (in the dev
environment). Only starting
the release is manual, all the actual steps are fully automated.
To manually start a release, go to the release workflow page and click the
“Run workflow” button. You need to input the git reference you want to release
(it can be a branch name, a short commit hash, or a full commit hash), and the
environment to release in. Note that anyone can publish a release in the
dev
environment, while approval from a release manager is required for the
prod
environment.
Note
The git reference needs to be a merge commit authored by bors.
This is because the Release workflow does not actually build anything, but just copies the release artifacts to the appropriate storage location.
It’s also possible to override some of the startup checks the release process
performs, and to treat the git reference as verbatim instead of trying to
resolve it. The latter option is useful if you need to release a commit which
is not present in the ferrocene/ferrocene
repository.
Once you click the green “Run workflow” button a new job will be queued.
If the release targets the prod environment an approval from a release manager will be required. The release manager will need to approve the release in the GitHub UI before the release can proceed. Once it’s done, the release process will start automatically.
If there is a service outage preventing you from manually starting a release follow the instructions in Releasing during outages.
Channel names¶
The release channel is determined automatically by the tooling, based on both
the src/ci/channel
file (managed by upstream) and the
ferrocene/ci/channel
file (managed by Ferrocene):
Release channel |
|
|
---|---|---|
nightly |
nightly |
rolling |
pre-rolling |
beta |
rolling |
rolling |
stable |
rolling |
beta-${version} |
stable |
beta |
stable-${version} |
stable |
stable |
We rely on this approach of combining the two files to determine the channel
(rather than storing the actual channel in ferrocene/ci/channel
) to reduce
the maintenance efforts.
This way, as long as we set ferrocene/ci/channel
to “rolling” on the main
branch, we don’t need to make any change ourselves to promote a branch from
“nightly” to “pre-rolling” to “rolling”, as upstream does that for us when they
change src/ci/channel
.