Branching for upstream GitLab v17.3
Information
- New release version (
x.y
): 17.3 - As of Heptapod 17.0, the upstream GitLab minor version is also
x.y
. - New development version (
n.w
): 17.4
Preliminary for new development cycle
-
Perform the oldstable branches shift -
Make sure that HGitaly protocol files in default
branch are up to date with Gitalyg.h
and that heptapod/ci-images/heptapod-gitaly> uses Gitalyg.h
in itsdefault
branch.
Branching point
-
Omnibus: make sure that the first commit of the upstream release branch for g.h
is merged in theheptapod
branch.hg log -r "(tag('g.h.0+rc42.ce.0')~2) % heptapod"
Nowadays the Omnibus merges are handled by the semi-automated Upstream Merge process.
-
Rails: make sure that the heptapod-stable
andheptapod-oldstable
branches are fully merged inheptapod
(make MRs if needed). -
Rails, branch heptapod
: tag the chosen branching point asheptapod-x.y.0a0
. Push, skipping pipeline: we do not need a tag on the Omnibus side, and the corresponding build would be on current heads of other GitLab components (notably Gitaly), which is inappropriate and prone to fail is Heptapod is lagging behind.
Release branch
-
HGitaly: make sure that version is greater than in stable branches, release and check that RHGitaly was built successfully -
Rails: create the heptapod-x-y
branch, starting from the changeset introducing thea0
tag, by copying over and completingHEPTAPOD_CHANGELOG
from the previous release branch and settingHEPTAPOD_VERSION
tox.y.0a1,
RHGITALY_SERVER_VERSIONand
python/common.req` -
Omnibus: create the heptapod-x-y
branch, starting from the changeset introducing thea0
tag. -
Omnibus: merge the x.y.0+rc42.ce.0
upstream tag in the release branch. This sets appropriate versions for GitLab components, notably Gitaly. -
Heptapod Tests: start the heptapod-x-y
branch
Stable branch shift
Useful commands
Pull-merge in a fork of a GitLab component:
hg pull
hg --config command.update.check=abort update heptapod-stable && \
hg merge heptapod
Pull-merge in a Heptapod-only repository:
hg pull
hg --config command.update.check=abort update stable && hg merge default
CI Images
-
heptapod-gitaly
-
merge, commit -
push skipping CI (will be triggered by heptapod-base
)
-
-
heptapod-base
-
merge, check/fix assets/install_pythonlibs
-
commit, push -
pipeline ok
-
-
hgitaly-rust
-
merge, commit, push -
pipeline ok
-
-
mercurial/hg-current
-
merge, check Mercurial version in the hg_current
job -
commit, push -
pipeline ok (check resulting Mercurial version)
-
Python components
-
HGitaly
-
make sure the stable
branch is merged indefault
, make a MR if needed -
merge, commit, push skipping pipeline
-
Development, build and release tooling
-
-
merge and check the base image name in .gitlab-ci.yml
(it should be the target Heptapod version, e.g,0-21-testing
). -
merge the stable branch into the release branch
-
-
-
merge the heptapod
branch intoheptapod-stable
, do not commit yet -
if changes in lib/
orfiles/
are non-trivial compared toheptapod
(hg di -r p2()
): commit them in a topic, start a MR to get a pipeline (it won't perform package builds). Otherwise, just push as draft without topic. -
pipeline ok if there was one -
merge the bumped branch into the release branch (e.g., heptapod-0-41
,heptapod-1.0
, etc). The diff should be empty or almost. Commit, push.
-
At this point heptapod-stable
is the developement branch matching the
heptapod-x-y
branch
-
HDK: update the release-stable
orrelease-oldstable
entry inlib/gdk/config.rb
on theheptapod
branch (we have one single branch to rule all series as of this writing but that can change in face of big future structural changes). -
-
merge the bumped branch into the release branch ( 'heptapod-x-y'). The diff should be almost empty, especially if the shifted branch was fully merged in the release branch. -
check that the HEPTAPOD_SERIES
is correct inheptapod-ci.yml
(it is not if it was done in the same changeset as the merge ofheptapod
intoheptapod-stable
). -
commit in a topic, open regular MR (this is enough to chase the kind of problems that could arise) -
pipeline ok -
pull, create a tag heptapod-x.y.0a1
without topic, push. -
pipeline ok. This validates that release builds will work for the x.y
series
-
-
-
update the gdk-*.yml
files for the affected series (commit/push) -
signal other developers that they must run ./heptapod-switch-new-stable
in their workspaces.
-
Opening the new development cycle
-
Heptapod Tests, branch default: change the base image to n-w-testing
-
Omnibus, branch
heptapod
:-
change HEPTAPOD_VERSION
ton.w.0.pre
-
CI/CD: change cache key in heptapod-ci.yml
-
Tag as heptapod-n.w.0.pre-1
. Caution: do not forget the-1
suffix. -
Push skipping CI (there is indeed no tarball for heptapod-n.w.0.pre
)
-
-
Rails, branch
heptapod
:-
change HEPTAPOD_VERSION
toheptapod.n.w.0.pre
-
CI/CD change cache key in heptapod-ci-yml
-
Commit, push, open MR manually, with the Upstream merge label to trigger the Omnibus build -
Pipeline succeeds. This ensures that subsequent MRs will not be harmed by problems introduced in the opening itself. -
Rebase existing topics on the current heptapod
branch, notably theupstream-merge
topic if present. -
Remove the Upstream merge label on the present issue: there is no reason to block the process any more. -
Solve existing Upstream merge issues.
-