Skip to main content

Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Linux Tools Project/Releng"

(Releases)
(Creating Source Tarballs)
 
(232 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{#eclipseproject:technology.linux-distros}}
+
{{Linux_Tools}}
  
= Linux Tools Release Engineering Procedures =
+
= p2 Repositories =
 +
* Nightly (what Git master targets):  http://download.eclipse.org/linuxtools/updates-nightly
 +
* Latest release is always http://download.eclipse.org/linuxtools/update
  
== Hudson builds ==
+
= Release HOWTO =
<tt>build.eclipse.org</tt> runs Hudson which runs [https://build.eclipse.org/hudson/job/cbi-linuxtools-Galileo builds of our project] every 6 hours (<tt>0 */6 * * *</tt>) if something has changed in SVN.
+
  
== Releases ==
+
== As code is being worked on ==
We have nightly builds happening from trunk. The input source code for the build is taken from what is listed in the map file in org.eclipse.linuxtools.releng/mapsWhen it comes time for a release, we will:
+
# Write [https://github.com/eclipse-linuxtools/org.eclipse.linuxtools/blob/master/RELEASE_NOTES.md N&N] items as new noteworthy stuff is committed. 
 +
# Ensure the [http://eclipse.org/projects/project-plan.php?projectid=tools.linuxtools project plan] is kept up to date with release deliverables and dates.  The next release should always be set up after the previous one completesTo add a new release, go to the [http://eclipse.org/projects/project-plan.php?projectid=tools.linuxtools project plan web page] and expand the Committer Tools section.  There, you will find Create New Release under the Releases group.  Create the release and set the release date according to the release train final release date.  The release should be major if APIs are being removed or changed.  Otherwise a minor release or bug-fix release is sufficient.  A bug-fix only release does not require a review.
  
# Create branches for each sub-project (ex. 0.4.0); the branch should be the same name across all sub-projects
+
== ASAP when a release date is known ==
## <tt>for f in autotools changelog eclipse-build gprof libhover oprofile profiling releng rpm rpmstubby systemtap valgrind; do svn cp svn+ssh://commiterId@dev.eclipse.org/svnroot/technology/org.eclipse.linuxtools/$f/trunk svn+ssh://commiterId@dev.eclipse.org/svnroot/technology/org.eclipse.linuxtools/$f/branches/ReleaseNumber -m "Branch for ReleaseNumber"; done</tt>
+
# Let project committers and contributors know the cut-off date for accepting patches from non-committers. Reminders on the dates from the table should be send to the mailing list too.
# Change the map file to build from the head of the branch
+
Proposed freeze periods:
## <tt>cd org.eclipse.linuxtools.releng/psfs</tt>
+
{| class="wikitable" border="1"
## <tt>sed -i "s|trunk|branches/0.4|g" maps/linuxtools.map</tt>
+
|-
## <tt>cd psfs</tt>
+
!Phase!!Period
## <tt>for f in `ls`; do sed -i "s|trunk|branches/0.4|g" $f; done</tt>
+
|-
# Update the .all feature to have an appropriate version
+
|Feature Complete (all new functionality is in git)||3 weeks prior to release date
# Alter the [https://build.eclipse.org/hudson/job/cbi-linuxtools-Galileo Hudson job configuration] to use the branch of the releng project
+
|-
# Continue to have automated builds with test runs ''from the branches''
+
|Code Freeze (approval by one other committer)||last 3 weeks prior to release date
# Continue to commit any work not targetted at the release to trunk
+
|-
# Commit changes specifically targetted towards the release '''only''' on the branch
+
|Strict Code Freeze (approval by the release engineer)||last 10 days prior to release date
# Commit changes targetted at '''both''' the release '''and''' trunk on both the branch and trunk
+
|}
# When all sub-project leads are satisfied that the branch is stable, they will tag the branch ''with the release version number (ex. 0.4.0)'' and update the map file on the release branch of releng to use the tag as input to the build
+
# Once all sub-projects have tagged, a release candidate build will be performed to ensure content from the tags was used
+
## This release candidate build will be of type "S" have "-buildAlias <release number optionally followed by RC or something>" <-- the quotes are important!
+
# If further fixes are necessary, multiple release candidate builds may happen
+
# Once all sub-project leads are satisfied with the results of the latest release candidate, it is promoted to the release build by:
+
## Tagging the releng project with its map file containing tags
+
## Updating the Hudson job configuration to build from the tag of the releng project
+
## Performing a build with a -buildAlias of the release number alone (ex. "-buildAlias 0.4.0")
+
# The Hudson job will then be switched back to use trunk of the releng project which takes input entirely from trunk
+
# The Hudson job that will become the build should be locked to prevent automatic deletion
+
# Ensure the resulting -Update zip is put into the downloads directory (Andrew Overholt and Alex Kurtakov are currently the only committers with access to this area)
+
# Update linuxtools/{index.php,downloads.php,new} to reflect the release
+
# Copy our update site to a versioned copy to archive it
+
# Verify the update site and all download links (including zip of update site) work
+
# Announce release on mailing list, newsgroup and blog(s)
+
  
The input to the map file -- and thus the automated builds -- looks a bit like the following picture:
+
== 3 weeks before the planned release date or RC2 milestone ==
[[Image:LinuxToolsReleng.png]]
+
# Let the project know that the date has now arrived that new contributions from non-committers cannot be accepted for this release.
 +
# Email the EMO (emo@eclipse.org) to request a release review and he/she will create a bug
 +
# If this is the December release
 +
## Go over [http://eclipse.org/projects/tools/ip_contribution_review.php?id=tools.linuxtools IP Contribution Review] to ensure patches have iplog+ where necessary (note:  I've gone over everything earlier than bug #315815 and concluded we don't need to do anything -- Andrew Overholt)
 +
## Submit IP log with the [http://www.eclipse.org/projects/ip_log.php?projectid=tools.linuxtools IP log tool].
 +
# Prepare the release review documentation and edit the online release plan for the specified release.  A lot of information can be copied over from the previous release online documentation.  In the past, this was done as a "docuware" document.  Those older documents can be found in our website repository's 'doc' sub-directory.  The release documentation should have a pointer to our N&N file: https://github.com/eclipse-linuxtools/org.eclipse.linuxtools/blob/master/RELEASE_NOTES.md.
  
=== New and Noteworthy ===
+
== 2 weeks before the planned release date or RC2 milestone ==
New and noteworthy (N&N) items should be written as soon as possible after the item has been committed. This will prevent a frantic scramble at the end of the release cycle. For example, for the 0.3.0 release, we have http://www.eclipse.org/linuxtools/new-0.3/ in CVS (<tt>:ext:youruserid@dev.eclipse.org:/cvsroot/org.eclipse</tt> and module:  <tt>www/linuxtools</tt>). Please add new items under the various headingsFeel free to add new headings as necessary. The parenthesized numbers in the pseudo-index at the top of the file indicate the number of N&N items in that section. There is a template to be used for each release at new-template. Copy this for releases and be sure all recent releases are listed in the table and list at the top.
+
# Create a ''stable-x'' branch (ex. stable-5.9) on https://github.com/eclipse-linuxtools/org.eclipse.linuxtools using the branch pull-down
 +
# On the ''stable-x'' branch
 +
## modify '''Jenkinsfile''' so the branch used is ''stable-x'' and the build output is written to '''updates-nightly-<release>''' (e.g. 8.5) and '''updates-docker-nightly-<release> (e.g. 5.5) instead of ''updates-nightly'' and ''updates-docker-nightly'' (reserved for the bleeding-edge ''master'')
 +
## modify the top-level '''pom.xml''' so the mirror-repo-name properties have values of '''update-<version>''' (e.g. update-8.5.0) and '''update-docker-<dockerversion>''' (e.g. update-docker-5.5.0) instead of ''updates-nightly'' and ''updates-docker-nightly'' (reserved for the bleeding-edge ''master'')
 +
# On master, update the version number in the pom.xml files (ex. mvn3 org.eclipse.tycho:tycho-versions-plugin:0.17.0:set-version -DnewVersion=${to-be-released-version + 1}-SNAPSHOT; commit and push the resulting changes) Note that you will have to manually change the ''containers'' and ''vagrant'' directories to change their pom versions
 +
## Check if all versions were updated correctly. Usually maven updates more files than we want. We need in this step to update the versions from the pom.xml file from the root directory and from pom.xml files located in 1st level of directories. We don't need to update the version in plugins and features in this step.
 +
# On master, update the linuxtools-eX.X target file when the new release is started to point to new I-build.
 +
# '''Ensure the repos listed in our parent pom.xml contain the dependencies of the correct versions against which we should be building/testing''' <--- this is important!
 +
# Commit any work not targetted at the release to master
 +
# Commit changes specifically targetted towards the release '''only''' on the release branch (ex. stable-0.9)
 +
# Commit changes targetted at '''both''' the release '''and''' trunk on master and then [[EGit/User_Guide#Cherry_Picking]] the commit(s) from master to the branch
  
==== N&N images ====
+
== 10 days before the planned release date or RC2 milestone and this is the December release ==
Screenshots should be cropped to show only the pertinent region of the screenUse the gimp to add drop shadows (pick the default values for radius and opacity)Save images as PNGs.
+
# After IP log has been cleared, save a copy in the website repository (the legal team usually emails a PDF or HTML snapshot to the IP log approval requestor).
 +
# Email [https://dev.eclipse.org/mailman/listinfo/toolsy-pmc our PMC] to request approval for release.  A previous request looks like [http://dev.eclipse.org/mhonarc/lists/technology-pmc/msg03256.html this].  This is only required for a major (x.0) or minor ({*.x) release. 
 +
## Include links to the HTML for the release documentation, IP log and N&N
 +
# Await PMC approval on tools-pmc mailing listFor the Tools PMC, there is no single approval.  What happens is that one or more committers will +1 the request and if no one disputes, then consider these +1s as approvals.
 +
# Once the PMC has approved the release, email the resulting release review docuware HTML, the IP log snapshot, and a link to the PMC approval email to emo@eclipse.org.  If the emo has opened a release tracker bug, you may consider the release approved if the bug has been closed and you have sent the appropriate documentationIn most cases, you will already have supplied the docuware and ip log to the bug.
 +
## The EMO may need a week to review the documents, so this step should attempt to finish at least one week to the release day. The emo team usually start the review process at Wednesdays. So it is a good idea to finish this step before the Wednesday that it at least one week from the release date. If this won't be possible, ask them about deadlines.
  
=== Accepting Patches ===
+
== A few days before the release or RC2 milestone ==
Please ensure that bugs which have patches contributed by non-committers have the "contributed" keyword set on them as well as the iplog flag set to +1The flag should be set on the patch attachment itself and not the bug.
+
# All component leads should now be satisfied that the branch is stable and all unit tests should be passing
 +
# Remove the "-SNAPSHOT" from pom.xml versions (find . -name pom.xml | xargs sed -i '/-parent/,+3 s/-SNAPSHOT//1')
 +
#* We used to use mvn3 org.eclipse.tycho:tycho-versions-plugin:set-version -DnewVersion=${to-be-released-version} but the maven command removes -SNAPSHOT from feature and plugin versions and their corresponding .qualifier references in feature.xml and MANIFEST.MF.  Regardless, you should look at the build to make sure all features/plug-ins have date stamps.
 +
# Ensure all p2.inf files found in features, point to the Linux Tools stable update site.  To do a mass change, one could do: find . -name p2.inf | xargs sed -i -e 's/updates-nightly/update/g'; find . -name p2.inf | xargs sed -i -e 's/updates-docker-nightly/update-docker/g'.  The master branch will point to updates-nightly and updates-docker-nightly by default.  A branch already used for a stable release will likely already be pointed to the correct update site and no action needs to be taken.  Look in an existing feature such as autotools/org.eclipse.linuxtools.autotools-feature for confirmation.
 +
#* In the case of a release which will be contributed to a simultaneous release, this step needs to be done in advance of the RC4 contribution build.
 +
# With the version set properly in the repository's pom.xml files, push a build in Jenkins.  Note that if the release is also targeted for a simultaneous release, then the last build submitted for RC2 must be the release build.
 +
# Verify the p2 repository
 +
#* A handy way to list the contents of a p2 repository is:  eclipse -consolelog -nosplash -application org.eclipse.equinox.p2.director -repository <url> -list
 +
#* Ensure all qualifiers are the same and are what you expect
 +
#* Using the p2 UI, ensure the IUs are categorized properly
 +
# Perform a quick smoke test to ensure the build is acceptableZero code changes should have happened since the SHA-1 that was used for the previous build.
 +
# Ensure [[Equinox/p2/p2.mirrorsURL]] has been automatically set in artifacts.xml (in artifacts.jar) and that the p2.index file exists.
 +
# If things are acceptable with the signed build, tag the Git repo:
 +
#* use a tag of the format vMajor.Minor.Micro (ex. v0.7.1)
 +
#* use the -a flag on the tag
 +
#* specify --tags on the git push command to ensure that the tag is visible to others
 +
#* do not tag until the IP Log is completed and the repository has been tested
 +
#* if you tag too early, you can tag again using -a -f to force the re-tag, however, if you re-tag, you need to send a note out to indicate this has happened
 +
#* once complete, an announcement note should be sent out to tell the list that the tag has been created and for what commit SHA-1 the tag is for.
 +
# Lock the Hudson job that was used for the release build to prevent automatic deletion (ex. build #263) and add a description (ex. "0.7.1 release")
 +
# Save the archive of the entire build somewhere before it gets over-written (it will not be stored across the next build)
 +
#* ex. wget --no-check-certificate https://ci.eclipse.org/linuxtools/job/linuxtools/job/stable-8.6/4/artifact/*zip*/archive.zip
 +
# Get source tarballs:
 +
## Go to https://github.com/eclipse-linuxtools/org.eclipse.linuxtools/releases/tag/vX.Y.Z
 +
## Download the .tar.gz file for the matching tag to the Linux Tools downloads area (need to have special access rights)
 +
## rename the tarball to linuxtools-${version}.tar.gz
 +
## move the source tarball to http://download.eclipse.org/technology/linuxtools/${version}-sources/, copying and modifying index.php from a previous release
 +
## chmod 755 the source tarball
  
== Adding a new component ==
+
== Release day ==
Like most Eclipse projects, our build process is feature-driven. A top-level dummy feature, org.eclipse.linuxtools.all, acts as a container which lists all of our sub-project's top-level features. These then cascade down into their plugins and the whole thing gets wrapped up into our update site and zips. In order for a new component to be built, it needs to fit into the hierarchy somewhere. When adding a new top-level sub-project feature (sub-features of existing features should get added to their containing feature), follow these steps:
+
# Put an archive of the entire build into the downloads directory (~/downloads/technology/linuxtools) (done via Jenkins job)
 +
## Unzip the archive.zip saved after last successful build
 +
## cd to sub-directory containing actualy repository and re-zip contents to linuxtools-RELEASE.zip in the downloads directory
 +
## Run md5sum linuxtools-RELEASE-incubation.zip >linuxtools-RELEASE.zip.md5.
 +
## move the previous linuxtools-RELEASE.zip and md5 to /home/data/httpd/archive.eclipse.org/linuxtools
 +
## chgrp technology.linux-distros linuxtools-RELEASE.zip*
 +
## chmod 755 linuxtools-RELEASE.zip*
 +
# Update the link on downloads.php to point to the correct listing of source tarballs for this release
 +
# Update the "Unit test results" link on downloads.php to point to the Hudson job that was used
 +
# Add a news item to the main wiki page
 +
# Ensure download links -- including the zip of the repository -- are correct
 +
# Re-verify the p2 repository
 +
## A handy way to list the contents of a p2 repository is:  eclipse -consolelog -nosplash -application org.eclipse.equinox.p2.director -repository <url> -list
 +
## Ensure all qualifiers are the same and are what you expect
 +
## Using the p2 UI, ensure the IUs are categorized properly
 +
# Copy our p2 repository to a versioned copy to archive it (ex. cp -rp updates-nightly-8.5.0 update-8.5.0)
 +
# Update any relevant Eclipse Marketplace pages
 +
## https://marketplace.eclipse.org/content/eclipse-docker-tooling
 +
## https://marketplace.eclipse.org/content/eclipse-vagrant-tooling
 +
# Announce release on mailing list and blog(s)
 +
# Mark release as complete in list of releases in portal
 +
# Add next version to list of releases in portal
  
=== Code-level checklist ===
+
== Day after the release ==
 +
# Relax :)
 +
# Decide whether or not older releases should be [[IT_Infrastructure_Doc#Move_files_to_archive.eclipse.org.3F|moved to archive.eclipse.org]] (take note of [[Equinox/p2/p2.mirrorsURL#Moving_a_repo_to_archive.eclipse.org |p2.mirrorsURL modification]])
 +
# Switch the Jenkins job back to use the master or stable-*** branch
 +
# Start on the next release
 +
 
 +
= Simultaneous Release Inclusion =
 +
As of Helios, Linux Tools is a part of the annual Eclipse simultaneous release.  The simultaneous release aggregator takes content from the p2 repos that are listed in our b3aggrcon files.  Builds that we would like to promote to the simultaneous release must:
 +
 
 +
* be signed
 +
* not necessarily be in category.xml
 +
* exist in the p2 repository listed in the linuxtools.b3aggrcon file with the ''exact same'' feature versions/qualifiers
 +
 
 +
Note also that categories for the main simultaneous release are different from our p2 repository categories (which are set in our [https://github.com/eclipse-linuxtools/org.eclipse.linuxtools/blob/v8.6.0/releng/org.eclipse.linuxtools.releng-site/category.xml category.xml]).
 +
 
 +
The builds ''must'' remain in the p2 repo until we change the feature versions/qualifiers in the b3aggrcon file.  This will prevent future aggregation runs from failing.  More information can be found here:
 +
 
 +
* [[Simrel/Contributing_to_Simrel_Aggregation_Build]] <-- This one contains the git location for org.eclipse.simrel.build where the linuxtools.b3aggrcon file lives in the master branch and will need to be updated to new qualifiers [and versions] when we want to include a new release in Simrel
 +
 
 +
The [https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev cross-project-issues-dev mailing list] '''must''' be monitored by project leads and release engineers.  This mailing list can help with any problems with the simultaneous release as well as with EPP packages.  David Williams leads the simultaneous release creation and Markus Knauer coordinates the EPP packages including "ours" ([http://www.eclipse.org/downloads/packages/release/indigo/rc1 Indigo]).
 +
 
 +
Note that during the "quiet week" between RC2 and the final release, our release bits must be put into their final place but not be made "visible".  Read the [[Indigo/Final_Daze|Final Daze]] document for guidelines and pointers to FAQs on how to make things invisible, etc.
 +
 
 +
= Adding a new component =
 +
Our build process is pom.xml-driven but we have a mirrored feature structure for use by p2 repos.  In order for a new component to be built, it needs to fit into the hierarchy somewhere.  When adding a new top-level sub-project feature (sub-features of existing features should get added to their containing feature), follow these steps:
 +
 
 +
== Code-level checklist ==
  
 
# Create your feature and containing plugins
 
# Create your feature and containing plugins
## Name the feature(s) org.eclipse.linuxtools.mycoolstuff and put it in SVN as org.eclipse.linuxtools.mycoolstuff-feature (replacing "mycoolstuff", obviously)
+
## Name the feature(s) org.eclipse.linuxtools.mycoolstuff and put it in Git as org.eclipse.linuxtools.mycoolstuff-feature (replacing "mycoolstuff", obviously)
 
## Name the plugin(s) org.eclipse.linuxtools.mycoolstuff.core, org.eclipse.linuxtools.mycoolstuff.ui, etc.
 
## Name the plugin(s) org.eclipse.linuxtools.mycoolstuff.core, org.eclipse.linuxtools.mycoolstuff.ui, etc.
 +
## '''Do not put _ characters in the bundle ID''' (this breaks the Maven signing plugin we're using)
 
## Ensure your packages are all in the org.eclipse.linuxtools namespace (and in the .mycoolstuff.core, .mycoolstuff.ui packages where appropriate)
 
## Ensure your packages are all in the org.eclipse.linuxtools namespace (and in the .mycoolstuff.core, .mycoolstuff.ui packages where appropriate)
 +
## Ensure your strings are externalized
 +
## Ensure your feature and plugin provider fields are set to "Eclipse Linux Tools" (no quotes)
 +
# Either copy over existing pom.xml files and manually edit them or [http://mattiasholmqvist.se/2010/02/building-with-tycho-part-1-osgi-bundles/ generate using Tycho] and manually edit
 +
# Copy over existing p2.inf file from any other feature and add p2.inf to your build.properties binary files
 
# Create your JUnit test plugins
 
# Create your JUnit test plugins
## Use JUnit 3 and not JUnit 4
 
 
## Name your test plugin the same as your functional plugin but with a ".tests" tacked onto the end
 
## Name your test plugin the same as your functional plugin but with a ".tests" tacked onto the end
## Create a test.xml for use in the automated builds (see an example [http://dev.eclipse.org/viewcvs/index.cgi/oprofile/trunk/org.eclipse.linuxtools.oprofile.ui.tests/test.xml?revision=21771&root=Technology_LINUXTOOLS&view=markup here]) *OR* add a property like the example in [https://bugs.eclipse.org/bugs/show_bug.cgi?id=276574 bug 276574] does.
+
## Ensure your test bundle's pom.xml looks like an existing test bundle's pom.xml
 +
# Enable API Tools on non-example/test/feature plugins
  
=== SVN-level checklist ===
+
== Git-level checklist ==
  
# If this is a new sub-project, create a directory to contain it, like "oprofile" or "autotools"
+
# If this is a new sub-project, create a directory to contain it, like "gcov" or "gprof"
# Ensure that the standard directory structure of "branches", "tags", and "trunk" exists under your containing directory
+
# Check all of your new stuff into Git master
# Check your features and plugins into SVN under trunk
+
# Create a tag called "initial-checkin" which is a snapshot of your initial work
+
  
=== Build-related checklist ===
+
== Build-related checklist ==
  
# Add any new top-level feature to [http://dev.eclipse.org/viewcvs/index.cgi/releng/trunk/org.eclipse.linuxtools.all/?root=Technology_LINUXTOOLS org.eclipse.linuxtools.all]
+
# Add any new top-level feature to the top-level pom.xml in your Git clone
## If you are adding a new sub-feature, ensure it is in a containing feature which itself is a part of the org.eclipse.linuxtools.all tree
+
# If your sub-project has dependencies outside the existing ones (BIRT, EMF, DTP, CDT, GEF), notify the mailing list and project leads
# If your sub-project has dependencies outside the existing ones (BIRT, EMF, DTP, CDT), notify Andrew Overholt
+
 
## Hopefully this will have been caught in the CQ (legal review)
 
## Hopefully this will have been caught in the CQ (legal review)
## Add dependency zips to [http://dev.eclipse.org/viewcvs/index.cgi/releng/trunk/org.eclipse.linuxtools.releng/build.properties/?root=Technology_LINUXTOOLS build.properties]
 
 
# Ensure your [http://wiki.eclipse.org/index.php/Execution_Environments BREEs] are correct in your plugin MANIFEST.MF files
 
# Ensure your [http://wiki.eclipse.org/index.php/Execution_Environments BREEs] are correct in your plugin MANIFEST.MF files
 
# Ensure the version on your feature ends with ".qualifier" (without the quotation marks)
 
# Ensure the version on your feature ends with ".qualifier" (without the quotation marks)
# Add your test feature to the [http://dev.eclipse.org/viewcvs/index.cgi/releng/trunk/org.eclipse.linuxtools.test-feature/?root=Technology_LINUXTOOLS org.eclipse.linuxtools.test] feature
+
# Ensure the versions in your MANIFEST.MF and feature.xml files match those in your pom.xml files
## Alternatively, add to an existing test feature that is already in the org.eclipse.linuxtools.test feature hierarchy
+
# Add new features to our p2 repo's [http://git.eclipse.org/c/linuxtools/org.eclipse.linuxtools.git/tree/releng/org.eclipse.linuxtools.releng-site/category.xml category.xml] file
# Add new features to our update site's [http://dev.eclipse.org/viewcvs/index.cgi/releng/trunk/org.eclipse.linuxtools.releng/category.xml/?root=Technology_LINUXTOOLS category.xml] file
+
# Ensure your pom.xml files have the same source plugin and feature bits as the others
# Add all new features, plugins, and fragments to our [http://dev.eclipse.org/viewcvs/index.cgi/releng/trunk/org.eclipse.linuxtools.releng/maps/?root=Technology_LINUXTOOLS map file]
+
# Run a full local build from the top-level of your git clone with '''mvn -fae clean install''' to ensure the build still works
# Modify or create a new PSF file and put it [http://dev.eclipse.org/viewcvs/index.cgi/releng/trunk/org.eclipse.linuxtools.releng/psfs/?root=Technology_LINUXTOOLS here]
+
  
== Building locally  ==
+
= Building locally  =
  
*check out releng/{trunk,branches/Galileo}/org.eclipse.linuxtools.releng using [http://dev.eclipse.org/svnroot/technology/org.eclipse.linuxtools/releng/trunk/org.eclipse.linuxtools.releng/psfs/linuxtools.psf this PSF] and Athena (the Eclipse common builder) using [http://dev.eclipse.org/svnroot/technology/org.eclipse.linuxtools/releng/trunk/org.eclipse.linuxtools.releng/psfs/athena.psf this PSF]  
+
* ensure you have a [http://maven.apache.org/download.html recent Maven 3 release] on your path
**File -&gt; Import -&gt; Team Project Set ... give it the location where you saved the above .psf
+
* clone our [https://github.com/eclipse-linuxtools/org.eclipse.linuxtools.git Git repository] (perhaps read our [http://wiki.eclipse.org/Linux_Tools_Project/Git Git instructions])
 +
* cd into your clone and run ''mvn -fae clean install''
 +
* You can add the parameter "-Dmaven.test.skip=true" for debug purposes, but remember that no contribution that breaks the unit tests will be accepted.
 +
* Some components have dependencies between then, for example Valgrind plug-ins. In that case, always build the whole Valgrind suite instead of one particular plug-in.
 +
* follow [http://community.jboss.org/wiki/RemoteDebuggingforEclipseTestPlug-inRunningbyTycho/version/4 this guide] for debugging tests being run by Tycho
  
Within the build.properties file in org.eclipse.linuxtools.releng:
+
= Adding a new test plugin to those that are run during the automated build =
 
+
*ensure the dependencyURLs are correct
+
**specifically the eclipse sdk tarball is architecture dependent, so you will need the version that corresponds to your architecture (for instance on x86, you'd simply remove "-ppc" from the filename and on x86_64 replace it with '-x86_64')
+
**if you have any/all of these locally, you can create the directory "/tmp/build/downloads" and put the dependency zips or symlinks to them in this directory. This location can be changed with the downloadsDir variable.
+
*uncomment the JAVA60_HOME and JavaSE-1.6 variables and adjust them so they point to the correct locations on your system.
+
*set the variables JAVA50_HOME and J2SE-1.5 variables to either:
+
**the values of JAVA60_HOME and JavaSE-1.6 variables respectively
+
**or if you want to build using a separate 1.5 JDK you can specify the corresponding paths for it
+
*right-click on org.eclipse.linuxtools.releng/build.xml and run it as an ant build
+
 
+
=== Building using a local checkout  ===
+
 
+
If you want to avoid checking everything out of SVN, you can build using a local source checkout. This can be useful if you have made local changes and want to verify that they will work.
+
 
+
*check out org.eclipse.linuxtools.releng and Athena as above
+
*if you do not already have them checked out, check out all of the Linux Tools projects using the ''Import Project Set'' command on [http://dev.eclipse.org/svnroot/technology/org.eclipse.linuxtools/releng/trunk/org.eclipse.linuxtools.releng/psfs/linuxtools.psf this PSF.]
+
*open the build.properties file in org.eclipse.linuxtools.releng
+
*uncomment localSourceCheckoutDir and set it to a directory on your filesystem
+
**this will be used to create the necessary directory hierarchy to perform the build
+
*once build.properties is complete as above, run the script org.eclipse.linuxtools.releng/tools/localSourceSetup.sh from a terminal
+
**this will create symbolic links to your local checkout in your workspace in the directory specified in localSourceCheckoutDir
+
*right-click on org.eclipse.linuxtools.releng/build.xml and run it as an ant build
+
 
+
<br>
+
 
+
If you have subversion-javahl installed you may encounter JVM crash when trying to fetch sources due to incompatible ABI. The easiest fix is to uninstall/remove your local javahl.
+
 
+
== Adding a new test plugin to those that are run during the automated build ==
+
 
* Create test plugin(s) (ex. org.eclipse.linuxtools.mycoolfeature.ui.tests)
 
* Create test plugin(s) (ex. org.eclipse.linuxtools.mycoolfeature.ui.tests)
** Add a test.xml like [http://dev.eclipse.org/viewcvs/index.cgi/oprofile/trunk/org.eclipse.linuxtools.oprofile.ui.tests/test.xml?revision=21771&root=Technology_LINUXTOOLS&view=markup the other suites] (this is used when the automated build is run)
+
* Copy an existing test plugin's pom.xml (this is used when the automated build is run)
** Ensure test.xml and any resources are listed in build.properties
+
* Add your test plugin to the parent pom.xml
** Check your plugin(s) into SVN
+
* Check your plugin(s) into Git
* If you are adding an entire test feature, add it to the included features in [http://dev.eclipse.org/viewcvs/index.cgi/releng/trunk/org.eclipse.linuxtools.test-feature/?root=Technology_LINUXTOOLS org.eclipse.linuxtools.test-feature]
+
* If it's just a single test plugin (or more than one), add it/them to the included plugins in [http://dev.eclipse.org/viewcvs/index.cgi/releng/trunk/org.eclipse.linuxtools.test-feature/?root=Technology_LINUXTOOLS org.eclipse.linuxtools.test-feature]
+
* Ensure the test plugin(s) do not get packed in the including feature.xml (ie. don't have "unpack=false" in the relevant plugin section of feature.xml)
+
* Add the test plugin(s) to the list of those to be run in testing.properties in org.eclipse.linuxtools.releng
+
* Add the test plugin(s)/feature(s) to the [http://dev.eclipse.org/viewcvs/index.cgi/releng/trunk/org.eclipse.linuxtools.releng/maps/?root=Technology_LINUXTOOLS map file] (be sure to update both the [http://dev.eclipse.org/viewcvs/index.cgi/releng/branches/Galileo/org.eclipse.linuxtools.releng/maps/?root=Technology_LINUXTOOLS Galileo branch] and [http://dev.eclipse.org/viewcvs/index.cgi/releng/trunk/org.eclipse.linuxtools.releng/maps/?root=Technology_LINUXTOOLS trunk])
+
* Add the test plugin(s)/feature(s) to your sub-project's [http://dev.eclipse.org/viewcvs/index.cgi/releng/trunk/org.eclipse.linuxtools.releng/psfs/?root=Technology_LINUXTOOLS PSF] (again, be sure to update both [http://dev.eclipse.org/viewcvs/index.cgi/releng/branches/Galileo/org.eclipse.linuxtools.releng/psfs/?root=Technology_LINUXTOOLS Galileo branch] and [http://dev.eclipse.org/viewcvs/index.cgi/releng/trunk/org.eclipse.linuxtools.releng/psfs/?root=Technology_LINUXTOOLS trunk])
+
 
* Verify that your tests are built/run with a local build (see instructions on this page)
 
* Verify that your tests are built/run with a local build (see instructions on this page)
  
The next time a build happens, your test plugin(s) will be built and run.  If you need a build pushed sooner than the next 6 hour mark when our scheduled builds happen, speak with Andrew Overholt.
+
The next time a build happens, your test plugin(s) will be built and run.  If you need a build pushed sooner than the next 6 hour mark when our scheduled builds happen, speak with the project leads via linuxtools-dev@eclipse.org.
 
+
== eclipse-build tarballs ==
+
* Tag (something like <tt>svn cp svn+ssh://commiterId@dev.eclipse.org/svnroot/technology/org.eclipse.linuxtools/eclipse-build/branches/0.4 svn+ssh://commiterId@dev.eclipse.org/svnroot/technology/org.eclipse.linuxtools/eclipse-build/tags/0.4 -m "Tag 0.4 final"; done</tt> if you want to use the command line)
+
* Generate with buildEclipseBuildSource.sh (ensure proper tag is used!):  <tt>./buildEclipseBuildSource.sh -eclipseBuildTag 0.4</tt>
+
* Upload:  <tt>scp</tt> to <tt>downloads/technology/linuxtools/eclipse-build</tt> and <tt>chgrp linuxtoolsadmin; chmod 775 fileYouJustUploaded; md5sum fileYouJustUploaded >> md5sums.txt</tt>.  For scp access to download.eclipse, a committer must be in special groups in the Eclipse Foundation systems.  If you require access, please check with Andrew Overholt or Alex Kurtakov and then contact the Eclipse webmaster via a [https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Community bug].
+

Latest revision as of 06:33, 18 April 2023

Linux Tools
Website
Download
Community
Mailing ListForumsIRCmattermost
Issues
OpenHelp WantedBug Day
Contribute
Browse Source

p2 Repositories

Release HOWTO

As code is being worked on

  1. Write N&N items as new noteworthy stuff is committed.
  2. Ensure the project plan is kept up to date with release deliverables and dates. The next release should always be set up after the previous one completes. To add a new release, go to the project plan web page and expand the Committer Tools section. There, you will find Create New Release under the Releases group. Create the release and set the release date according to the release train final release date. The release should be major if APIs are being removed or changed. Otherwise a minor release or bug-fix release is sufficient. A bug-fix only release does not require a review.

ASAP when a release date is known

  1. Let project committers and contributors know the cut-off date for accepting patches from non-committers. Reminders on the dates from the table should be send to the mailing list too.

Proposed freeze periods:

Phase Period
Feature Complete (all new functionality is in git) 3 weeks prior to release date
Code Freeze (approval by one other committer) last 3 weeks prior to release date
Strict Code Freeze (approval by the release engineer) last 10 days prior to release date

3 weeks before the planned release date or RC2 milestone

  1. Let the project know that the date has now arrived that new contributions from non-committers cannot be accepted for this release.
  2. Email the EMO (emo@eclipse.org) to request a release review and he/she will create a bug
  3. If this is the December release
    1. Go over IP Contribution Review to ensure patches have iplog+ where necessary (note: I've gone over everything earlier than bug #315815 and concluded we don't need to do anything -- Andrew Overholt)
    2. Submit IP log with the IP log tool.
  4. Prepare the release review documentation and edit the online release plan for the specified release. A lot of information can be copied over from the previous release online documentation. In the past, this was done as a "docuware" document. Those older documents can be found in our website repository's 'doc' sub-directory. The release documentation should have a pointer to our N&N file: https://github.com/eclipse-linuxtools/org.eclipse.linuxtools/blob/master/RELEASE_NOTES.md.

2 weeks before the planned release date or RC2 milestone

  1. Create a stable-x branch (ex. stable-5.9) on https://github.com/eclipse-linuxtools/org.eclipse.linuxtools using the branch pull-down
  2. On the stable-x branch
    1. modify Jenkinsfile so the branch used is stable-x and the build output is written to updates-nightly-<release> (e.g. 8.5) and updates-docker-nightly-<release> (e.g. 5.5) instead of updates-nightly and updates-docker-nightly (reserved for the bleeding-edge master)
    2. modify the top-level pom.xml so the mirror-repo-name properties have values of update-<version> (e.g. update-8.5.0) and update-docker-<dockerversion> (e.g. update-docker-5.5.0) instead of updates-nightly and updates-docker-nightly (reserved for the bleeding-edge master)
  3. On master, update the version number in the pom.xml files (ex. mvn3 org.eclipse.tycho:tycho-versions-plugin:0.17.0:set-version -DnewVersion=${to-be-released-version + 1}-SNAPSHOT; commit and push the resulting changes) Note that you will have to manually change the containers and vagrant directories to change their pom versions
    1. Check if all versions were updated correctly. Usually maven updates more files than we want. We need in this step to update the versions from the pom.xml file from the root directory and from pom.xml files located in 1st level of directories. We don't need to update the version in plugins and features in this step.
  4. On master, update the linuxtools-eX.X target file when the new release is started to point to new I-build.
  5. Ensure the repos listed in our parent pom.xml contain the dependencies of the correct versions against which we should be building/testing <--- this is important!
  6. Commit any work not targetted at the release to master
  7. Commit changes specifically targetted towards the release only on the release branch (ex. stable-0.9)
  8. Commit changes targetted at both the release and trunk on master and then EGit/User_Guide#Cherry_Picking the commit(s) from master to the branch

10 days before the planned release date or RC2 milestone and this is the December release

  1. After IP log has been cleared, save a copy in the website repository (the legal team usually emails a PDF or HTML snapshot to the IP log approval requestor).
  2. Email our PMC to request approval for release. A previous request looks like this. This is only required for a major (x.0) or minor ({*.x) release.
    1. Include links to the HTML for the release documentation, IP log and N&N
  3. Await PMC approval on tools-pmc mailing list. For the Tools PMC, there is no single approval. What happens is that one or more committers will +1 the request and if no one disputes, then consider these +1s as approvals.
  4. Once the PMC has approved the release, email the resulting release review docuware HTML, the IP log snapshot, and a link to the PMC approval email to emo@eclipse.org. If the emo has opened a release tracker bug, you may consider the release approved if the bug has been closed and you have sent the appropriate documentation. In most cases, you will already have supplied the docuware and ip log to the bug.
    1. The EMO may need a week to review the documents, so this step should attempt to finish at least one week to the release day. The emo team usually start the review process at Wednesdays. So it is a good idea to finish this step before the Wednesday that it at least one week from the release date. If this won't be possible, ask them about deadlines.

A few days before the release or RC2 milestone

  1. All component leads should now be satisfied that the branch is stable and all unit tests should be passing
  2. Remove the "-SNAPSHOT" from pom.xml versions (find . -name pom.xml | xargs sed -i '/-parent/,+3 s/-SNAPSHOT//1')
    • We used to use mvn3 org.eclipse.tycho:tycho-versions-plugin:set-version -DnewVersion=${to-be-released-version} but the maven command removes -SNAPSHOT from feature and plugin versions and their corresponding .qualifier references in feature.xml and MANIFEST.MF. Regardless, you should look at the build to make sure all features/plug-ins have date stamps.
  3. Ensure all p2.inf files found in features, point to the Linux Tools stable update site. To do a mass change, one could do: find . -name p2.inf | xargs sed -i -e 's/updates-nightly/update/g'; find . -name p2.inf | xargs sed -i -e 's/updates-docker-nightly/update-docker/g'. The master branch will point to updates-nightly and updates-docker-nightly by default. A branch already used for a stable release will likely already be pointed to the correct update site and no action needs to be taken. Look in an existing feature such as autotools/org.eclipse.linuxtools.autotools-feature for confirmation.
    • In the case of a release which will be contributed to a simultaneous release, this step needs to be done in advance of the RC4 contribution build.
  4. With the version set properly in the repository's pom.xml files, push a build in Jenkins. Note that if the release is also targeted for a simultaneous release, then the last build submitted for RC2 must be the release build.
  5. Verify the p2 repository
    • A handy way to list the contents of a p2 repository is: eclipse -consolelog -nosplash -application org.eclipse.equinox.p2.director -repository <url> -list
    • Ensure all qualifiers are the same and are what you expect
    • Using the p2 UI, ensure the IUs are categorized properly
  6. Perform a quick smoke test to ensure the build is acceptable. Zero code changes should have happened since the SHA-1 that was used for the previous build.
  7. Ensure Equinox/p2/p2.mirrorsURL has been automatically set in artifacts.xml (in artifacts.jar) and that the p2.index file exists.
  8. If things are acceptable with the signed build, tag the Git repo:
    • use a tag of the format vMajor.Minor.Micro (ex. v0.7.1)
    • use the -a flag on the tag
    • specify --tags on the git push command to ensure that the tag is visible to others
    • do not tag until the IP Log is completed and the repository has been tested
    • if you tag too early, you can tag again using -a -f to force the re-tag, however, if you re-tag, you need to send a note out to indicate this has happened
    • once complete, an announcement note should be sent out to tell the list that the tag has been created and for what commit SHA-1 the tag is for.
  9. Lock the Hudson job that was used for the release build to prevent automatic deletion (ex. build #263) and add a description (ex. "0.7.1 release")
  10. Save the archive of the entire build somewhere before it gets over-written (it will not be stored across the next build)
  11. Get source tarballs:
    1. Go to https://github.com/eclipse-linuxtools/org.eclipse.linuxtools/releases/tag/vX.Y.Z
    2. Download the .tar.gz file for the matching tag to the Linux Tools downloads area (need to have special access rights)
    3. rename the tarball to linuxtools-${version}.tar.gz
    4. move the source tarball to http://download.eclipse.org/technology/linuxtools/${version}-sources/, copying and modifying index.php from a previous release
    5. chmod 755 the source tarball

Release day

  1. Put an archive of the entire build into the downloads directory (~/downloads/technology/linuxtools) (done via Jenkins job)
    1. Unzip the archive.zip saved after last successful build
    2. cd to sub-directory containing actualy repository and re-zip contents to linuxtools-RELEASE.zip in the downloads directory
    3. Run md5sum linuxtools-RELEASE-incubation.zip >linuxtools-RELEASE.zip.md5.
    4. move the previous linuxtools-RELEASE.zip and md5 to /home/data/httpd/archive.eclipse.org/linuxtools
    5. chgrp technology.linux-distros linuxtools-RELEASE.zip*
    6. chmod 755 linuxtools-RELEASE.zip*
  2. Update the link on downloads.php to point to the correct listing of source tarballs for this release
  3. Update the "Unit test results" link on downloads.php to point to the Hudson job that was used
  4. Add a news item to the main wiki page
  5. Ensure download links -- including the zip of the repository -- are correct
  6. Re-verify the p2 repository
    1. A handy way to list the contents of a p2 repository is: eclipse -consolelog -nosplash -application org.eclipse.equinox.p2.director -repository <url> -list
    2. Ensure all qualifiers are the same and are what you expect
    3. Using the p2 UI, ensure the IUs are categorized properly
  7. Copy our p2 repository to a versioned copy to archive it (ex. cp -rp updates-nightly-8.5.0 update-8.5.0)
  8. Update any relevant Eclipse Marketplace pages
    1. https://marketplace.eclipse.org/content/eclipse-docker-tooling
    2. https://marketplace.eclipse.org/content/eclipse-vagrant-tooling
  9. Announce release on mailing list and blog(s)
  10. Mark release as complete in list of releases in portal
  11. Add next version to list of releases in portal

Day after the release

  1. Relax :)
  2. Decide whether or not older releases should be moved to archive.eclipse.org (take note of p2.mirrorsURL modification)
  3. Switch the Jenkins job back to use the master or stable-*** branch
  4. Start on the next release

Simultaneous Release Inclusion

As of Helios, Linux Tools is a part of the annual Eclipse simultaneous release. The simultaneous release aggregator takes content from the p2 repos that are listed in our b3aggrcon files. Builds that we would like to promote to the simultaneous release must:

  • be signed
  • not necessarily be in category.xml
  • exist in the p2 repository listed in the linuxtools.b3aggrcon file with the exact same feature versions/qualifiers

Note also that categories for the main simultaneous release are different from our p2 repository categories (which are set in our category.xml).

The builds must remain in the p2 repo until we change the feature versions/qualifiers in the b3aggrcon file. This will prevent future aggregation runs from failing. More information can be found here:

  • Simrel/Contributing_to_Simrel_Aggregation_Build <-- This one contains the git location for org.eclipse.simrel.build where the linuxtools.b3aggrcon file lives in the master branch and will need to be updated to new qualifiers [and versions] when we want to include a new release in Simrel

The cross-project-issues-dev mailing list must be monitored by project leads and release engineers. This mailing list can help with any problems with the simultaneous release as well as with EPP packages. David Williams leads the simultaneous release creation and Markus Knauer coordinates the EPP packages including "ours" (Indigo).

Note that during the "quiet week" between RC2 and the final release, our release bits must be put into their final place but not be made "visible". Read the Final Daze document for guidelines and pointers to FAQs on how to make things invisible, etc.

Adding a new component

Our build process is pom.xml-driven but we have a mirrored feature structure for use by p2 repos. In order for a new component to be built, it needs to fit into the hierarchy somewhere. When adding a new top-level sub-project feature (sub-features of existing features should get added to their containing feature), follow these steps:

Code-level checklist

  1. Create your feature and containing plugins
    1. Name the feature(s) org.eclipse.linuxtools.mycoolstuff and put it in Git as org.eclipse.linuxtools.mycoolstuff-feature (replacing "mycoolstuff", obviously)
    2. Name the plugin(s) org.eclipse.linuxtools.mycoolstuff.core, org.eclipse.linuxtools.mycoolstuff.ui, etc.
    3. Do not put _ characters in the bundle ID (this breaks the Maven signing plugin we're using)
    4. Ensure your packages are all in the org.eclipse.linuxtools namespace (and in the .mycoolstuff.core, .mycoolstuff.ui packages where appropriate)
    5. Ensure your strings are externalized
    6. Ensure your feature and plugin provider fields are set to "Eclipse Linux Tools" (no quotes)
  2. Either copy over existing pom.xml files and manually edit them or generate using Tycho and manually edit
  3. Copy over existing p2.inf file from any other feature and add p2.inf to your build.properties binary files
  4. Create your JUnit test plugins
    1. Name your test plugin the same as your functional plugin but with a ".tests" tacked onto the end
    2. Ensure your test bundle's pom.xml looks like an existing test bundle's pom.xml
  5. Enable API Tools on non-example/test/feature plugins

Git-level checklist

  1. If this is a new sub-project, create a directory to contain it, like "gcov" or "gprof"
  2. Check all of your new stuff into Git master

Build-related checklist

  1. Add any new top-level feature to the top-level pom.xml in your Git clone
  2. If your sub-project has dependencies outside the existing ones (BIRT, EMF, DTP, CDT, GEF), notify the mailing list and project leads
    1. Hopefully this will have been caught in the CQ (legal review)
  3. Ensure your BREEs are correct in your plugin MANIFEST.MF files
  4. Ensure the version on your feature ends with ".qualifier" (without the quotation marks)
  5. Ensure the versions in your MANIFEST.MF and feature.xml files match those in your pom.xml files
  6. Add new features to our p2 repo's category.xml file
  7. Ensure your pom.xml files have the same source plugin and feature bits as the others
  8. Run a full local build from the top-level of your git clone with mvn -fae clean install to ensure the build still works

Building locally

  • ensure you have a recent Maven 3 release on your path
  • clone our Git repository (perhaps read our Git instructions)
  • cd into your clone and run mvn -fae clean install
  • You can add the parameter "-Dmaven.test.skip=true" for debug purposes, but remember that no contribution that breaks the unit tests will be accepted.
  • Some components have dependencies between then, for example Valgrind plug-ins. In that case, always build the whole Valgrind suite instead of one particular plug-in.
  • follow this guide for debugging tests being run by Tycho

Adding a new test plugin to those that are run during the automated build

  • Create test plugin(s) (ex. org.eclipse.linuxtools.mycoolfeature.ui.tests)
  • Copy an existing test plugin's pom.xml (this is used when the automated build is run)
  • Add your test plugin to the parent pom.xml
  • Check your plugin(s) into Git
  • Verify that your tests are built/run with a local build (see instructions on this page)

The next time a build happens, your test plugin(s) will be built and run. If you need a build pushed sooner than the next 6 hour mark when our scheduled builds happen, speak with the project leads via linuxtools-dev@eclipse.org.

Back to the top