How to Create New Branches
This is a short document how to create a new maintenance branch for a released product.
FIXME: a more up to date information has meanwhile appeared in https://github.com/yast/helper_scripts/blob/master/github/maintenance_branch/README.md We must merge the info and keep it in one place.
OBS/IBS Setup
First we need to create a new development projects in the internal and external build services.
- Create a new subproject at https://build.suse.de/project/subprojects/Devel:YaST
- Create a new subproject at https://build.opensuse.org/project/subprojects/YaST
- Add all YaST developers to the new projects, do not forget to add the
yast-team
user (used by Jenkins for automatic submissions)
Then we need to synchronize the OBS and IBS packages. This is done automatically
by the yast-obs-sync-*
jobs in the internal Jenkins.
The jobs are defined in the sync-jobs.yaml file.
The Old Docker Setup
This older Docker setup is used for the older products, from SLE-12-SP2 to SLE-15-SP1 (included). For the newer products see the instructions below.
Define the new Docker Images
- Create a new
Dockerfile.*
in the respective Git repository (use the previous image as a template). - Use the new OBS repositories (created above)
- Adapt also the
.travis.yml
file to build the new image at Travis.
Git Repositories
- https://github.com/yast/docker-yast-cpp
- https://github.com/yast/docker-yast-ruby
- https://github.com/yast/docker-libstorage-ng
- https://github.com/libyui/docker-devel
Build the new Docker Images
:information_source: You need access permissions to the yastdevel
and libyui
organizations at the Docker Hub.
- Update the Docker Hub configuration to build the new defined images
Images
- https://cloud.docker.com/u/yastdevel/repository/docker/yastdevel/cpp/builds/edit
- https://cloud.docker.com/u/yastdevel/repository/docker/yastdevel/ruby/builds/edit
- https://cloud.docker.com/u/yastdevel/repository/docker/yastdevel/libstorage-ng/builds/edit
- https://cloud.docker.com/u/libyui/repository/docker/libyui/devel/builds/edit
The New Docker Setup
Since SLE-15-SP2 we use the new Docker images built directly in the OBS.
You need to create the images
and the containers
build targets in OBS and configure them
to properly build the expected result in the project config:
%if "%_repository" == "images"
Type: kiwi
Repotype: none
Patterntype: none
%endif
%if "%_repository" == "containers"
Type: docker
Repotype: none
Patterntype: none
%endif
The Base Image
We need to create the base image for the new branch. Either reuse the TW image or check the OBS templates for the respective Leap release version:
- https://build.opensuse.org/package/show/YaST:Head/opensuse-tumbleweed-image:docker
- https://build.opensuse.org/image_templates
Note: We should build the base image locally, the official Leap images might be dropped or disabled at some point, SLE has much longer lifetime...
Git Repositories
Create the respective branch also in these repositories containing the Docker images:
- https://github.com/yast/ci-cpp-container
- https://github.com/yast/ci-ruby-container
- https://github.com/yast/ci-libstorage-ng-container
Make sure the Rakefile
properly defines the submit target.
Jenkins Jobs
The changes in the Git repositories above should be automatically submitted by the Jenkins jobs to OBS. When adding a new branch we need to add a new job for it.
See the yast-ci-* jobs at https://ci.opensuse.org/view/Yast/, defined in the yast-jobs.yaml file.
Creating the Branches
For creating the branch and adapting the Rakefile
and Dockerfile
files use the
create_maintenance_branch script.
Run it in the Git checkout of the respective package.
Some packages might need a special adaptation for a new release, check the affected packages below.
To get the list of the packages packages which needs to be branched you might query the IBS like this:
(osc -A https://api.suse.de ls SUSE:SLE-15:GA; osc -A https://api.suse.de ls SUSE:SLE-15-SP1:GA) \
| grep yast | sort -u
Note: you need to list all previous service packs including the original GA release, the SP repositories only contain the updated packages, the unchanged packages are inherited from the previous releases.
Enabling Branch Protection
The newly added branches should be protected by GitHub (to avoid force pushes, accidental branch removal and enforce code reviews). To do this globally use the protect_branches.rb helper script.
Jenkins Setup
- The sync job from IBS to OBS has to be added at https://gitlab.suse.de/yast/infra.
- See the Jenkins Job Builder (JJB) documentation
- Make sure you have the JJB packages installed, run
zypper install python3-jenkins-job-builder
to install it - Testing before deploying:
jenkins-jobs --conf jenkins/ci.suse.de.ini test jenkins/ci.suse.de/ '*SP5*'
- Deploying:
jenkins-jobs --conf jenkins/ci.suse.de.ini update jenkins/ci.suse.de/ '*SP5*'
Modifying Specific Packages
Some packages might contain a release specific data. Ideally we should avoid that but here are listed some exceptions which need a special care:
- The
skelcd-control-leanos
package contains the SP release version in the<full_system_media_name>
tag in the control.leanos.xml file. Also check whether the<full_system_download_url>
value is correct.
Translations
For new branches where translations are required the SUSE Localization Team has to be informed. Also when branching cause that master is no longer in sync with the last SLE SP, Jenkins job syncing translations needs to be modified at https://gitlab.suse.de/yast/infra/-/merge_requests/74/diffs#432aa131b22a799c7a568113cf2ce645b0930a75_29_31 (internal link only).