Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: for the plan.

Jump to: navigation, search


< Platform-releng
Revision as of 18:45, 16 July 2016 by David (Talk | contribs) (/* Remove old, no longer needed repositories)

This page is to provide a checklist of "release engineering" tasks that must be done at various stages of development.

Note: this page is "just getting started" and will be added to incrementally, as phases are gone through and new things remembered to document. Also, as it develops the structure may change substantially, so "header links" may not stabilize for a while, and hence would be best not to use headers in links ... at least for a while, until it takes it's final form.

Before Major (June) release

lots to come, for this section

After Major (June) release

Update no-version-in-url repository composites

  • Update the 4 repo composites that have no version in URL (I-builds, M-builds, N-builds, milestones)

Update build scripts, branding, and test jobs

  • See bug 496465 for one of the latest bugs that outline what is required. The outline below is an approximate list of the largest steps. Please expand and add to this list as things are noticed missing.
  • Coordinated change: The parent pom's version needs to be incremented and all other pom's that refer to this parent need to be updated. This is true of "master" and the R4_x_maintenance branch.
- FYI: This alone requires all repositories create an R4_x_maintenance branch.
  • the "streams/repositories-${branch} files need to be updated and/or created.
  • the "bootstrap" files need to be updated and/or created to set the correct version and branch.
  • Create new p2 repositories to "seed" the comparator process. The initial contents are typically copied from the previous final released build.
  • The reference repository in the build-individual-bundles should be changed to "M-builds" in the branch stream of parent pom.
  • files such as eclipse.platform.releng/features/org.eclipse.platform-feature/rootfiles/.eclipseproduct need to be updated with correct version, in both streams.
  • splash screen should be updated in both streams.
  • product numbers should be updated in both streams.

Gerrit and Hudson changes

  • The main (production) unit tests need to be copied with new names such as "ep46I-unit-*" would become "ep47I-unit-*" and any previous "ep45M-unit-*" jobs need to change to "ep46M-unit*". Each "test job" is nearly identical, and the appropriate version and branch and "passed in" as variables, but the name itself is significant as it is used both for improved Hudson bookkeeping and used later to "retrieve" the correct results for a given build.
  • New jobs needs to be created or modified to deplore "parent pom" and "prereq sdks" from master and newly created R4_x_maintenance branch.
  • Each Hudson job "triggered" from Gerrit changes need to change from be triggered from "master" and R4_n_maintenance to be triggered from "master" and R4_n+1_maintenance. Or, better yet, the Gerrit jobs should be always set to build from "**" branch, in which case it will always build from the branch the patch was in. In cases where one job builds multiple branches, it is typically important that the "localMavenRepo" be 'cleaned' (deleted) each build.
- Plus, be aware that branches older than current (master) and "current-1" (such as R4_6_maintenance, when 4.7 is master, may need adjustments to the parent pom so the build-individual-bundle profile has the correct reference repository for that branch. Typically, for the master branch the reference repository is 'N-builds" or "I-builds" and for n-1 branch the reference repository is M-builds. Further back than that, though, the reference repo would typically be the "released" repository (such as .../updates/4.5/) or if lots of patches made for LTS a special repository created for that purpose.

Remove old, no longer needed repositories

As an example, once we start 4.7 builds, we no longer need 4.6-N-builds, 4.6-I-builds, and 4.6milestones.

Typically we would do this a "few weeks" after a release (and after starting new builds) to avoid immediate breakage of someone else's build, but after we have new builds working, removing the old ones can be a gentle reminder to update builds to get current content.

Done't forget cleanup scripts: Related to this change, there are some scripts, such as which loops through each "type" of repository and removes old builds from them on the build machine and downloads server. These typically have values for "minor" which are passed to another bash function which does the actually cleaning so several lines will need to be updated.

After any Release

  • Prepare bugzilla to guide and remind us to "Tag a Release".
  • Prepare bugzilla (and code) to update the parent pom to "next version". That is, when a "next version" is planned. For example, after "4.5.2" we do not automatically change to "4.5.3". Any long term maintenance is done is seen as "patch builds" of 4.5.2 (usually denoted 4.5.2+ in bugzilla) -- it is not a "new release stream".
  • Update any "info center" bugs with our latest collection of 'doc bundles'. As one example of one, see bug 477616.
And since I have made this error several times, the correct pattern to copy our doc bundles in a "p2 repo" plugins directory is (thanks to Markus Keller):
- *.doc.*.jar is the pattern that picks the right 5 bundles
- Not *.doc*.jar, which picks up a 6th one,, which is literally "tests", not "docs".
  • Add the N&N, acknowledgments and readme links to the download page. These are automated in the "promote script" to avoid manual edits, but will describe here in case there are issues. In short, the promote script adds three variables to the buildproperties.php file when it is renaming/promoting to an "R-build" : $NEWS_ID, $README_ID, $ACK_ID. And, from those, the index.php file has conditions based on 'isset' that will compute the full URL. For example, for any Release in the 4.5.x stream, the promote script adds the following variable=value pairs buildproperties.php:
 $NEWS_ID = "4.5";
 $ACK_ID = "4.5";
 $README_ID = "4.5";
  • Copy the release to "archives". While it would seem not to be required until it is removed from "downloads" page, it is a good idea to do it early. This is partially just so it does not have to be done later when it is removed from DL page. But more important, some adopters may like to use the "archives" URL in their own builds simply so that their build script never has to change. This, I have heard, is a common practice at Apache sites. [Note: this is automated for Equinox, so it is done by the same script that promotes Equinox releases but is not yet automated for Eclipse.]
  • There are a few places in our builds where "previous release" is specified. That should be updated to the new "previous release". (It is best to search the aggregator project for the previous release version to find the spots that need to be updated.)
The following are the files that needed modifying after the 4.5.2 release (but, things may change over time). See this commit log entry for more details of this specific case.


Build Calendar and reminders

  • Be sure build calendar is up to date (ideally, a few weeks before the milestone).
  • Send a reminder to platform-releng-dev with the following information. A good time is right after the next-to-last I-build before stabilization begins, so there is about 10 days notice.
- The build schedule. []
- Remember that "stabilization week" means "code freeze" (except for regression fixes) with a link to Eclipse/Rhythm#Milestones [].
- The "all teams, all day" test on Tuesday should be taken seriously by all Platform committers. Testing is more important than writing code during stabilization week -- we are, after all, the Platform! Our quality effects nearly every other Eclipse project.
- Sign-off day is on Thursday. Project leads or their delegate should be sure to reserve time to handle that in a timely fashion.
  • From time to time, can expand on the above with a more detailed version:
  • The rule is that on Monday we have the last day of development (and even then, no "big changes"). The goal to have a good build for the full day test pass on Tuesday. After Monday, no feature work or unrelated fixes are allowed -- only regression fixes.
  • On Tuesday no one should develop or fix anything, but literally spend the entire day testing. Ideally, this would not be only their component but also Eclipse as a whole. Ideally, project leads will have a brief list of test activities, such as new features to test, bugs to verify, etc. (but, admittedly, each component is different).
  • Wednesday is the fix-day with a focus on fixing regressions found during the test-day.
  • The last Wednesday build is the release candidate every team signs-off on Thursday. Signing-off may involve some re-testing, or at least confirming no changes have been made to your components code since the last time the component was tested well.
  • No new code changes can be made until the milestone is officially declared. That is, it is not enough that your component has signed off. There is always a chance a re-build will be required at the last minute.
  • Also, while not stabilization week specific, all Platform committers must subscribe to platform-releng-dev and eclipse-dev (as well as their own component's mailing lists). Component leads should communicate this to new committers. Please spread the word if you think there are current committers do not know this.
- The platform-releng-dev list is used to routinely communicate information about builds, timing, rebuilds, off-schedule builds, special activities that must be coordinated, etc.
- The eclipse-dev list is where we officially announce milestones, release candidates, and releases, in addition to our official plans, and other information the community needs to know.

Stabilization Week


  • For milestone stabilization week, the nightly cron jobs are disabled, twice daily I-build cron jobs enabled.
TODO: moving these to Releng HIPP.

Repo Information for Gerrit jobs

  • A maven variable, eclipse-p2-repo.url, is defined in the build-individual-bundles profile. Normally, by default, this variable points to I-builds, so that Gerrit jobs can "use the latest" of things it does not build. But, during a typical development week, we do only one I-build per week, so in those cases it is better to use an N-build repo as the prereq repository. Then, during "milestone stabilization week" and RCs weeks, when we stop doing N-builds and do frequent I-builds instead, the value should be changed back to the default of using I-builds.
- NOTE: This does not require a republish of the parent pom which should always use the I-build by default, as that is anticipated to be the most suitable for the most people for most of the time.
- On the Platform HIPP at, we use a property file to set this value, for all Hudson jobs running there on the Platform HIPP. It is manipulated by the Hudson job named A Job to set Eclipse prereq repo.
- People running outside "" that desire this level of control either have to pass the property in on the command line, or make use of a similar properties file.
- A command line example, might looks like this:
- If the property file is desired, it must be in and named as the following

And its contents would be similar to the command line (just no -D).


Create and monitor "sign-off" bug

  • Typically created after last I-build is complete, but can be created earlier.
  • Project leads are added to CC
  • Typically note is sent to platform-releng-dev, as added reminder, and so everyone can know, if interested.

Do special releng tests

Some of these may be automated eventually ... but, until then ...
  • Run b3 aggregator, at least locally, to see if any issues
  • Confirm all jars are signed
  • sanity check version numbers, names, etc. (i.e. run "repo tests" locally, until automated)
  • confirm can "update" from previous milestone

Promote the milestone

Happens after signed off ... though some initial steps can be done early if fairly confident all is well because the build remains "hidden" until the deferred steps are performed.

Initial step

  • add "testNotes.html" to buildDirectory, with sign-off bug number. [TODO: automate]
  • Initial step: run the "promote" job from appropriate directory, with appropriate changes for the I-build to promote, what labels should be. This puts artifacts "in place" but, "invisible" until deferred step. (This allows the promotion to be done "early" possible before all sign-offs, but also to allow some mirroring to occur, before being made visible.)

Deferred step

  • Deferred step: run the "deferred steps" script (which would have been created as part of the initial promotion job). This makes things visible and tags the aggregator.

After milestone promotion


  • Change cron jobs back to their normal schedule (nightly N-builds, weekly I-builds).

Gerrit jobs reference

Back to the top