Flatcar Release Automation #492
Replies: 2 comments 1 reply
-
Mostly agreed. For the Flatcar release team, I think the biggest pain of all above is Simply speaking, we should get away from so many Google docs and spreadsheets. Downside is, however, then some newcomers who are not familar with the tools could experience more difficulties than Google docs. |
Beta Was this translation helpful? Give feedback.
-
Release notes proposal (capturing the team's thoughts):
|
Beta Was this translation helpful? Give feedback.
-
Summary
This discussion is a collection of ideas that we could implement in order to improve and bringing more automation to the release process of Flatcar Container Linux.
Motivation
The process for releasing a new Flatcar Container Linux is complex and currently, most parts of it are manually driven. The manual nature of the task makes it prone to errors and is also very time-consuming.
The process followed is documented in the release document for the release manager to follow and coordinate.
The process can be divided into 3 stages which makes it easier to measure:
The aim of this discussion is to go through these steps, and try to find out ways to automate the process. In the beginning, it would be good to start with creating standalone scripts, and later utilizing these scripts to build a complete automated pipeline.
The benefits of automating would be:
Detailed Scoping
Triggering the Jenkins Builds
In preparation for starting the Jenkins builds, we perform a couple of steps, like creating the release branches, tagging the release, creating manifest and starting the Jenkins build.
Scope of Improvement/Tasks
It should be trivial to gather the steps into a single script, with the dropping a couple of questions to the Release Manager (RM), primarily VERSION, BRANCH, and if a new SDK is to be created. As the process is divided into steps, this information could be stored in a central file to access. Jenkins (Flatcar CI) provides an API to trigger remote builds so this can also be used to use the information asked earlier to trigger the builds.
Creating the Release Notes
Release notes creation is the biggest pain point of the whole release process and is also very time-consuming.
GH Template
The
coreos-overlay-diff.py
in theflatcar-build-scripts
could be continued to be used for finding the list PRs that were made between the two release tags. The given script would be called from the primary script, and a call could be made to get the metadata of the PR via Github API.The reason to make the call is to determine if the PR is to be added to the Release Notes or not. Fields would be added to the Github PR template to simplify the process.
If the field is empty, or not present, the PR would be skipped. During the parsing process, it would be a good idea to pull the names of the contributors involved in the release.
The primary script should have the ability to determine the last release and pick the metadata from the central file to create the whole Release Notes, and put it in front of the RM for review. This could be done in the markdown format and later can be converted to other formats required using
pandoc
.Another idea could be to create a Github (GH) repo containing the Go/No-Go documents, which again in markdown and the process is triggered again once when the Release Team decides on "Go"
Automated GH PRs
A bunch of PRs are created by Github Actions, which creates noise in the coreos-overlay-diff.py. Add a flag to the script that would only show the latest PR for specific repositories.
Generating CHANGELOG Links
Over the lifecycle of FCL, the Release Team has updated a bunch of packages and in the Release Notes updates section, we link the release version URL. Usually, these are just a change of the version/tag number, so it would be good to generalize them to common ones. The initial list could be created using the already released ones.
CVE Generation
Publishing & Updating the Release Artifacts
Once the Go/No-Go meeting is done, the RM starts the process to release the artifacts. The whole process takes around an hour to complete and is mostly manual. As the process deals with release version numbers, there is a high chance of typo and given the repetitive steps, the process can surely be automated.
Scope of Improvement/Tasks
Copy artifacts to the origin server
As we are collecting the information from the RM, we could use a tool like Fabric2 to automate the process, with intervention in between, like before doing the actual sync the RM needs to confirm.
Publish AMIs and GCP images
Again use the Jenkins API to trigger build and use the information from the central metadata file.
Publish Azure SKUs, Publish AWS Marketplace Images, Publish GCP Marketplace offer
The process here could also be automated, the release documents suggest methods to automate it. Implementing these could be the time-consuming and could be prioritized after the other steps are automated.
Update the SDK release metadata for new major Alpha releases with SDK builds
This could again be quickly automated by simple script. To create the PR, the script can make use of the
gh
tool or API.Change current symlink on the origin server
With the help of Fabric2 again, the symlink could be updated.
Update the website and CF templates
The final steps in the release process, could be automated with script and
gh
tool or API.After the release process is done, the script could also spit out a report to the RM.
TODOS
Beta Was this translation helpful? Give feedback.
All reactions