Hi,

I've been looking at updating our release readme page on the wiki as
some info is missing or outdated compared to what we're currently
doing.  Added the following section on branching and rc builds, which
overlaps a little bit with other sections.  Thought it might be worth
posting here too, both for comment and to share more widely.

Neil

# Branching, builds and release candidate overview.

Two git branches are created at feature freeze for each quarterly
NetBeans release. The release branch (eg. release140) is used for
release candidate and release builds. Naming is important as it is
picked up by the build system (the last zero is a legacy of the old
version scheme). The delivery branch is used for collating fixes for
the release. All pull requests intended for the release are merged to
delivery, and delivery is merged to both the release branch and master
branches regularly. The delivery branch is transitory and should be
deleted shortly after the final release.

The release team handle all merges to delivery, and syncing to other
branches. This is mainly for scheduling reasons, as well as to keep an
overview of fixes / check for merge issues. A wrongly timed (eg.
between syncs) or unwanted (eg. spec version changes) commit merged to
delivery will likely lead to a forced reset. The release team has no
more say in what actually gets merged to a release than any other
committer.

Syncing from delivery to master and release branches is done via pull
requests. This has a number of benefits, including running CI against
both targets with every merge to delivery, easy view of all changes
between release candidates, and ensuring release hashes are unique to
the release branch.

It is useful for all committers if we can use the same day of the week
for release candidates and syncing. This has often been a Wednesday,
but is up to the member(s) of the release team managing this for any
release - publicise it!

1. Announce the feature freeze date on dev@ using [NOTICE] emails a
week and a day before branching - see / adapt example [1].
2. Change the current milestone on all remaining open pull request to
the next milestone (use bulk edit in the PR table).
3. Create the delivery and release branches from master. Announce
feature freeze and branching - see / adapt example [2].
4. Increment module spec versions on master for the next release using
`ant increment-spec-versions`. This should be the first commit in
master after branching. See PR after NB14 branch. [3]
5. Add the metadata about the release to `netbeansrelease.json` [4],
including a milestone for rc1 using the hash from the release branch
(eg. `git show`). This will be the last hash shared with any other
branch.
6. Trigger a build for the release branch in the Jenkins NetBeansTLP
job [5]. A build may have started automatically but will likely not
have picked up the latest metadata - if so, stop and restart.
7. Once the build is complete, download the source and binary zip
artefacts, and check build, fixes, etc. locally. Lock the Jenkins
build to stop it being cleaned up, and announce the release candidate
with links to the artefacts - see / adapt example [6].
8. Over the following week, review and merge any inbound fixes to delivery.
9. As soon as there is any change in delivery, open two pull requests
to sync branches - "Sync delivery to releaseXXX for XX-rcN" (see
example[7]) and "Sync delivery to master after XX-rcN" (see
example[8])
10. If there are no merged fixes and no open major / critical issues
for this release, consider whether it's time to move to a vote. The
release voting candidate *must* be built off the same git hash as the
last release candidate - edit the existing milestone in
`netbeansrelease.json`.
11. If / when ready to trigger another release candidate, check and
merge the sync PR to releaseXXX. Add a milestone based on the git hash
of the sync PR merge commit to `netbeansrelease.json`.
12. Repeat from step 6, making sure to merge the other sync PR to
master *after* verifying and announcing the release candidate. Do not
sync to master if there are problems with the release candidate build
- fix in delivery and resync / rebuild.


[1] https://lists.apache.org/thread/cjkq8t8ft0t4rot2owmyskgrchkdqjym
[2] https://lists.apache.org/thread/hnqbbz8lv37zz15vbp2r1mt7r73m95vz
[3] https://github.com/apache/netbeans/pull/4011
[4] 
https://github.com/apache/netbeans-jenkins-lib/blob/master/meta/netbeansrelease.json
[5] https://ci-builds.apache.org/job/Netbeans/job/netbeans-TLP/job/netbeans/
[6] https://lists.apache.org/thread/hydrglnm2cst3s31tkbfgktwg4rsylgb
[7] https://github.com/apache/netbeans/pull/3483
[8] https://github.com/apache/netbeans/pull/3484

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@netbeans.apache.org
For additional commands, e-mail: dev-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists



Reply via email to