Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "EMF Facet/Releng/How to Use"

(Step by step)
 
(24 intermediate revisions by 2 users not shown)
Line 2: Line 2:
  
 
EMF Facet uses the same build system as MoDisco. So, for more explanation about how the build process works, see also [[MoDisco/Releng/How_it_Works|MoDisco Releng : How it Works]].
 
EMF Facet uses the same build system as MoDisco. So, for more explanation about how the build process works, see also [[MoDisco/Releng/How_it_Works|MoDisco Releng : How it Works]].
 +
 +
== Step by step ==
 +
 +
* Install B3 using the update site http://download.eclipse.org/modeling/emft/b3/updates-3.7/
 +
* Checkout the project org.eclipse.emf.facet.releng.tools
 +
* Launch a 'runtime' Eclipse to enable 'org.eclipse.emf.facet.releng.tools' (target platform = 'Running platform')
 +
* Checkout the project: :extssh:<committerId>@dev.eclipse.org:/cvsroot/callisto
 +
* Checkout the project 'org.eclipse.indigo.build' from org.eclipse.emf.facet.releng.buckminster
 +
* Right click on the file /org.eclipse.emf.facet.releng.buckminster Juno/emffacet.rmap and press on 'Update Rmap ...'
 +
* Update orbit URL in /org.eclipse.emf.facet.releng.buckminster Juno/emffacet.rmap
 +
** Orbit's URL can be found at http://download.eclipse.org/tools/orbit/downloads/
 +
* Launch the build : https://hudson.eclipse.org/hudson/job/emffacet-nightly-0.2.0/build?delay=0sec and set the following parameter
 +
** BUILD_TYPE=S
 +
** BUILD_ALIAS=0.2.0RC2
 +
** SIGN_UPDATE_SITE=true
 +
* Wait the end of the build
 +
* Log in to build.eclipse.org:22 (SSH)
 +
* cd /opt/public/modeling/emft/facet/
 +
* ./manualPromote.sh
 +
* update the file /org.eclipse.juno.build/emft-emffacet.b3aggrcon (change the update site URL)
 +
* Open /org.eclipse.juno.build/simrel.b3aggr
 +
* Wait until all jobs are finished
 +
* Right click on the first node and press 'Validate aggregation'
 +
* Open the error log view to track the validation
 +
* Commit the file /org.eclipse.juno.build/emft-emffacet.b3aggrcon
  
 
== What is built? ==
 
== What is built? ==
<code>org.eclipse.emf.facet.all</code> is the feature that is built (defined in buckminster.cspec).
+
Two features are built:
This feature must include all other features that must be built, either directly or indirectly.
+
* org.eclipse.emf.facet.all.feature
 +
* org.eclipse.emf.facet.tests.site.feature
 +
 
 +
They are referenced as root dependencies in <code>buckminster.cspec</code>.
 +
 
 +
These features must include all other features that must be built, either directly or indirectly.
 +
 
 +
The releng project contains a Buckminster rmap, which specifies how to get the plug-ins and features that are to be built. For each plug-in or feature, the map defines its location on a version control system (CVS, SVN).
 +
 
 +
The rmap also specifies the update sites from which to retrieve the binary dependencies from the dependent projects.
 +
 
 +
=== Updating the rmap ===
 +
The rmap reflects the dependencies on the other projects. So, it must be updated at least before each milestone, to make sure that the code that is built works with the latest versions of all the dependencies.
 +
 
 +
The easiest way to update the dependencies is to copy them from the aggregation build model, which all projects must fill in with the correct reference to their update site(s) and feature(s).
 +
 
 +
This model is in a project with the release name on the Eclipse CVS:
 +
* [http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.juno.build/?root=Callisto "org.eclipse.<releaseName>.build"] on <code>dev.eclipse.org:/cvsroot/callisto</code>, where releaseName is helios or indigo or juno etc. depending on the version being built.
 +
 
 +
There is a tool that copies most of the information automatically in this plug-in:
 +
* https://dev.eclipse.org/svnroot/modeling/org.eclipse.emft.facet/trunk/releng/org.eclipse.emf.facet.releng.tools (see the [https://dev.eclipse.org/svnroot/modeling/org.eclipse.emft.facet/trunk/releng/org.eclipse.emf.facet.releng.tools/README.TXT README.TXT])
 +
 
 +
'''Warning''': don't forget to update the aggregation model project before copying information from it
  
The releng project contains a Buckminster rmap, which specifies how to get the plugins and features that are to be built. For each plugin or feature, the map defines its location on a version control system (CVS, SVN), and the version that must be used.
+
A few dependencies are not in the aggregation build model though, so they must be updated manually:
 +
* Orbit : take the latest version from : http://download.eclipse.org/tools/orbit/downloads/
 +
* SWTBot : it is not part of the simultaneous release (its update site has not changed since Helios anyway)
  
The rmap also specifies the update sites from which to retrieve the dependencies.
+
==== Finding dependencies ====
 +
If you don't know where a particular plug-in or feature is located, the easiest way to find it is to search the Eclipse download area using "find" on build.eclipse.org.
 +
For example, to look for "org.eclipse.emf.compare" :
 +
find /home/data/httpd/download.eclipse.org/modeling/emf/ -name 'org.eclipse.emf.compare_*'
  
 
== How to start a build? ==
 
== How to start a build? ==
Line 17: Line 69:
 
45 2-23/3 * * *
 
45 2-23/3 * * *
  
* Nightly builds are run every 3 hours everyday, if the [https://dev.eclipse.org/svnroot/modeling/org.eclipse.emft.facet/trunk/plugins EMF Facet SVN] changed since the last build.
+
* Nightly builds are run every 3 hours everyday, if the [https://dev.eclipse.org/svnroot/modeling/org.eclipse.emft.facet/trunk EMF Facet SVN] changed since the last build.
  
* Integration builds are started manually
+
* Integration builds are started manually, usually to prepare a milestone or release
  
 
=== Manually ===
 
=== Manually ===
Line 34: Line 86:
 
=== Automatically ===
 
=== Automatically ===
 
Successful '''N'''ightly and '''I'''ntegration builds are automatically published to download.eclipse.org. For example, a nightly build for version 0.1.0, created on April 21 2011 at 04:13 would be published to:
 
Successful '''N'''ightly and '''I'''ntegration builds are automatically published to download.eclipse.org. For example, a nightly build for version 0.1.0, created on April 21 2011 at 04:13 would be published to:
http://download.eclipse.org/facet/downloads/drops/0.1.0/N201104210413
+
* the download drops: http://download.eclipse.org/facet/downloads/drops/0.1.0/N201104210413
These builds can then be seen and downloaded from http://www.eclipse.org/modeling/emft/facet/downloads/, where additional information is available (test results, build log).
+
* the nightly update site: http://download.eclipse.org/facet/updates/nightly
 +
These builds can then be seen and downloaded from http://www.eclipse.org/modeling/emft/facet/downloads/, where additional information is available (test results, build log), or installed from the update site: http://download.eclipse.org/facet/updates/nightly/
 +
 
 +
The publication is done by a script running as a cronjob under user nbros:
 +
*/5 * * * * /opt/public/modeling/emft/facet/cronPromoteMonitor.sh
 +
 
 +
cronPromoteMonitor.sh runs cronPromote.sh which does the actual publication, and sends a mail to team members if the publication failed.
 +
 
 +
To re-run the publication of the last nightly build, log in to build.eclipse.org, and do:
 +
cd /opt/public/modeling/emft/facet/
 +
touch promoteSignalN && ./cronPromote.sh
 +
 
 +
=== With a script ===
 +
 
 +
First, if not already done, you need to retrieve all the necessary scripts and resources:
 +
* create a directory (in your home directory for example) that will contain the scripts : <code>mkdir emffacetBuildScripts</code>
 +
* get the scripts that will fetch all needed scripts: <code>svn export http://dev.eclipse.org/svnroot/modeling/org.eclipse.emft.facet/trunk/releng/org.eclipse.emf.facet.releng.buckminster/serverConfiguration/updateServerSideScripts.sh</code>
 +
* make it executable: <code>chmod +x updateServerSideScripts.sh</code>
 +
* launch it: <code>./updateServerSideScripts.sh</code>
 +
 
 +
Then, you can launch the publishing script:
 +
* run <code>./manualPromote.sh</code> and fill in the parameters
  
 
=== Manually ===
 
=== Manually ===
Line 41: Line 114:
 
* First, fetch the build archive to test (from Hudson, or using <code>wget</code> or <code>scp</code> for example):
 
* First, fetch the build archive to test (from Hudson, or using <code>wget</code> or <code>scp</code> for example):
 
  wget https://hudson.eclipse.org/hudson/job/emffacet-integration/lastSuccessfulBuild/artifact/S201103151256.zip
 
  wget https://hudson.eclipse.org/hudson/job/emffacet-integration/lastSuccessfulBuild/artifact/S201103151256.zip
 +
or, if https access doesn't work, a NFS access can be used (from build.eclipse.org). For example:
 +
cp /shared/jobs/emffacet-nightly/lastSuccessful/archive/S201103151256.zip .
 
* Then, test the build locally
 
* Then, test the build locally
 
* Then, publish it:
 
* Then, publish it:
Line 46: Line 121:
 
  wget https://hudson.eclipse.org/hudson/job/emffacet-integration/lastSuccessfulBuild/artifact/S201103151256.zip
 
  wget https://hudson.eclipse.org/hudson/job/emffacet-integration/lastSuccessfulBuild/artifact/S201103151256.zip
 
  unzip S201103151256.zip -d /home/data/httpd/download.eclipse.org/facet/downloads/drops/0.1.0/
 
  unzip S201103151256.zip -d /home/data/httpd/download.eclipse.org/facet/downloads/drops/0.1.0/
* Finally, for a milestone, update the update site with the new build:
+
Add a new update site with the new build to the composite:
rm -rf /home/data/httpd/download.eclipse.org/facet/updates/milestones/0.1/*
+
* unzip the content (the update site zip that was in the first zip) in a new folder with the release number:
unzip EMFFacet-Update-0.1.0M6.zip -d /home/data/httpd/download.eclipse.org/facet/updates/milestones/0.1
+
  unzip EMFFacet-Update-0.1.1RC3.zip -d /home/data/httpd/download.eclipse.org/facet/updates/milestones/0.1/SR1_RC3
or, if an aggregation build is currently running, add to the site without removing the existing plug-ins:
+
* update both the <code>compositeContent.xml</code> and <code>compositeArtifacts.xml</code> files of the update site (that are located in the parent of the folder to which you extracted the update site) to add a reference to your newly added update site
  unzip -o EMFFacet-Update-0.1.0M6.zip -d /home/data/httpd/download.eclipse.org/facet/updates/milestones/0.1
+
** set the value of p2.timestamp to the result of "<code>date +%s000</code>"
* For a release:
+
** increase the "size" attribute of the children element
** Create a new folder with the release number under /home/data/httpd/download.eclipse.org/facet/updates/release
+
** add a "child" element inside the "children" element with a "location" set to the name of the folder (e.g "SR1_RC3")
** update <code>compositeContent.xml</code> and <code>compositeArtifacts.xml</code> to add a reference to your newly added release
+
* You can enable download stats on the repository by running [http://dev.eclipse.org/svnroot/modeling/org.eclipse.emft.facet/trunk/releng/org.eclipse.emf.facet.releng.buckminster/serverConfiguration/addDownloadStats.sh /opt/public/modeling/emft/facet/addDownloadStats.sh] on the update site
* TODO: download stats <! --You can enable download stats on the repository by running [http://dev.eclipse.org/svnroot/modeling/org.eclipse.mdt.modisco/releng/trunk/org.eclipse.gmt.modisco.releng.buckminster/serverConfiguration/addDownloadStats.sh addDownloadStats.sh]on the update site -->
+
* Check that the new build appears on [http://www.eclipse.org/modeling/emft/facet/downloads/ http://www.eclipse.org/modeling/emft/facet/downloads/].
* Check that the new build appears on [http://www.eclipse.org/modeling/emft/facet/downloads/].
+
 
* Builds can be hidden from this page before a release by modifying <code>downloads-scripts.php</code> in <code>www/modeling/emft/facet/downloads/</code> on <code>:pserver:anonymous@dev.eclipse.org:/cvsroot/org.eclipse</code>
 
* Builds can be hidden from this page before a release by modifying <code>downloads-scripts.php</code> in <code>www/modeling/emft/facet/downloads/</code> on <code>:pserver:anonymous@dev.eclipse.org:/cvsroot/org.eclipse</code>
 
* Update the archive site with the new build:
 
* Update the archive site with the new build:
** copy the drop folder (eg. "S201103151256") into <code>/home/data/httpd/archive.eclipse.org/facet/downloads/drops/0.1.0/</code>
+
** <code>unzip S201109070430.zip -d /home/data/httpd/archive.eclipse.org/facet/downloads/drops/0.1.1/</code>
 
** update <code>/home/data/httpd/archive.eclipse.org/facet/downloads/index.html</code> with a link to the newly added update zip
 
** update <code>/home/data/httpd/archive.eclipse.org/facet/downloads/index.html</code> with a link to the newly added update zip
 
* [[#Tagging|Tag the build]]
 
* [[#Tagging|Tag the build]]
Line 64: Line 138:
 
=== Simultaneous Release ===
 
=== Simultaneous Release ===
 
If the build must be part of the simultaneous release, you must also:
 
If the build must be part of the simultaneous release, you must also:
* Use the [[Eclipse_b3/aggregator/manual|B3 Aggregator]] (or a text editor if the modification is trivial) to [[Indigo/Contributing_to_Indigo_Build|update the build model for the aggregator]] ([http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.indigo.build/?root=Callisto after checking it out from CVS]).
+
* Use the [[Eclipse_b3/aggregator/manual|B3 Aggregator]] (or a text editor if the modification is trivial) to [[Juno/Contributing_to_Juno_Build|update the build model for the aggregator]] ([http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.juno.build/?root=Callisto after checking it out from CVS]).
 +
* Open juno.b3aggr in the B3 Aggregator editor, right-click on the first root node and select '''Validate Aggregation'''. Check in the error log that there are no errors.
 +
 
 +
=== Release ===
 +
There are no "release builds". The release is a release candidate that is promoted to an actual release by following these steps:
 +
* copy the last release candidate's update site (e.g downloads/facet/updates/milestones/0.1/SR2_RC4) to a release update site (e.g downloads/facet/updates/release/0.1.2/)
 +
* fix the "p2.mirrorsURL" in the release update site's artifacts.jar, so that it matches the update site's location. For example:
 +
<property name="p2.mirrorsURL" value="http://www.eclipse.org/downloads/download.php?file=/facet/updates/release/0.1.2&amp;amp;format=xml&amp;amp;protocol=http"/>
 +
* copy the last release candidate drop (e.g downloads/facet/downloads/drops/0.1.2/S201202140309) to a release drop (e.g downloads/facet/downloads/drops/0.1.2/R201202140309).
 +
* rename the update site in the drop so that it doesn't have a RCx suffix. E.g: R201202140309/EMFFacet-Update-0.1.2.zip
 +
 
 +
The release process for the simultaneous release is a bit more involved. The process is usually documented in a document on the wiki named "<release> final daze". E.g http://wiki.eclipse.org/Indigo/Final_Daze. It consists of:
 +
* when creating the release update site, do not add the release update site to its parent composite yet: this must be done on the release day (when announced on the cross-project-issues-dev mailing list), in order to let mirroring complete before users try to download the bits
 +
* hide the drops from the download page, by modifying the PHP script for the download page:
 +
:dev.eclipse.org:/cvsroot/org.eclipse/www/modeling/emft/facet/downloads/downloads-scripts.php
 +
* uncomment the line that contains the comment "XXX hide release until release day", and set the release folder to hide
 +
* check after a few minutes that the release does not appear on http://www.eclipse.org/modeling/emft/facet/downloads/
 +
* delete all the milestone (S20*) builds from the drops, and delete all the previous milestone update sites, in order to minimize the amount of data that mirrors have to copy
 +
* ask the webmaster to update the Eclipse help infocenter with the new help plug-ins (e.g on Bug 348355 - Will soon need an Indigo Info Center)
 +
 
 +
Then on the release day — once the announce is made on the cross-project-issues-dev mailing list — do the following:
 +
* show the release drop by re-commenting the line you uncommented previously in the download page PHP script.
 +
* add the release update site to its parent composite
 +
* update the [[EMF_Facet/#Install|documentation]] to add a reference to the new release update site
  
 
== Build parameters ==
 
== Build parameters ==
Line 74: Line 171:
 
** '''S''': Stable (for Milestones and Release Candidate builds)
 
** '''S''': Stable (for Milestones and Release Candidate builds)
 
** '''R''': Release
 
** '''R''': Release
* BUILD_ALIAS : the name of the release (0.8.0, 0.9.0M1, etc.); blank for nightly and integration builds
+
* BUILD_ALIAS : the name of the release (0.8.0, 0.9.0M1, etc.); leave it blank for nightly and integration builds
* SIGN_UPDATE_SITE : whether to sign the update site (takes about an hour on the Eclipse build server); mandatory for releases
+
* SIGN_UPDATE_SITE : whether to sign the update site (can take up to an hour on the Eclipse build server); mandatory for all builds except nightlies
 
* VERSION : the version being built. Dictates in which folder the build will be placed under the download "drops" folder.
 
* VERSION : the version being built. Dictates in which folder the build will be placed under the download "drops" folder.
* PROJRELENGROOT : The path on the SVN (trunk, branch or tag) from which to take the version of the releng project that must be used for this build.
 
  
 
== Tagging ==
 
== Tagging ==
Line 83: Line 179:
 
{{warning|Tag names|Since the tag name is used as a bundle qualifier by PDE Build, it should not contain periods. For example, use '''R0_1_0''' instead of <s>v0.1.0</s>}}
 
{{warning|Tag names|Since the tag name is used as a bundle qualifier by PDE Build, it should not contain periods. For example, use '''R0_1_0''' instead of <s>v0.1.0</s>}}
  
[[Category:Releng]]
+
== Checking ==
  
== Checking bundles ==
+
=== Check bundles ===
 
Check that each bundle contains an about.html file:
 
Check that each bundle contains an about.html file:
 
  for f in $( ls *.jar ); do unzip -t $f | grep -q about.html || echo $f; done
 
  for f in $( ls *.jar ); do unzip -t $f | grep -q about.html || echo $f; done
 
or for plug-ins in your workspace:
 
or for plug-ins in your workspace:
 
  find $workspaceRoot -name 'build.properties' | while read i; do grep -q about.html "$i" || echo "$i"; done
 
  find $workspaceRoot -name 'build.properties' | while read i; do grep -q about.html "$i" || echo "$i"; done
 +
 +
=== Check licenses ===
 +
find $workspaceRoot -type f -name 'license.html' | while read i; do md5 $i; done
 +
 +
=== Check Manifest.MF ===
 +
find $workspaceRoot -name 'MANIFEST.MF' | while read i; do grep -q Bundle-Vendor "$i" || echo "$i"; done
 +
find $workspaceRoot -name 'feature.xml' | while read i; do grep -q provider-name "$i" || echo "$i"; done
 +
 +
=== Check p2.mirrorsURL ===
 +
Each milestone and release update site should have a correct "p2.mirrorsURL" defined in its artifacts.jar (see [[Equinox/p2/p2.mirrorsURL]]).
 +
 +
To quickly check this on all update sites under the current directory, execute the following command:
 +
<pre>
 +
find . -type f -name 'artifacts.jar' -or -name 'artifacts.xml' | while read i; do
 +
  echo "$i"
 +
  if [[ "$i" =~ .*/artifacts.jar ]]; then echo "  "$(unzip -p "$i"|grep "p2.mirrorsURL")
 +
  else echo "  "$(cat "$i"|grep "p2.mirrorsURL"); fi
 +
done
 +
</pre>
 +
 +
=== Check simrel reports ===
 +
for url in \
 +
    "http://build.eclipse.org/juno/simrel/reports/layoutCheck.txt" \
 +
    "http://build.eclipse.org/juno/simrel/reports/verifydiroutput/unsigned.txt" \
 +
    "http://build.eclipse.org/juno/simrel/reports/versionPatternCheck.txt" \
 +
    "http://build.eclipse.org/juno/simrel/reports/breedata.txt" \
 +
    "http://build.eclipse.org/juno/simrel/reports/pack200data.txt" \
 +
    "http://build.eclipse.org/juno/simrel/reports/nonUniqueVersions.txt"
 +
do
 +
  echo "checking $url"
 +
  curl -s -S "$url" | egrep 'modisco|facet'
 +
done
 +
 +
url="http://build.eclipse.org/juno/simrel/reports/licenseConsistency.html"
 +
echo "checking $url"
 +
curl -s -S $url > licenseConsistency
 +
n=$(cat licenseConsistency | grep -n "Features with matching" | sed 's/:.*//')
 +
cat licenseConsistency | head -n $n | egrep 'modisco|facet'
 +
 +
url="http://build.eclipse.org/juno/simrel/reports/featureNames.html"
 +
echo "checking $url"
 +
curl -s -S $url > featureNames
 +
n=$(cat featureNames | grep -n "Probably correct names" | sed 's/:.*//')
 +
cat featureNames | head -n $n | egrep 'modisco|facet'
 +
 +
url="http://build.eclipse.org/juno/simrel/reports/bundleNames.html"
 +
echo "checking $url"
 +
curl -s -S $url > bundleNames
 +
n=$(cat bundleNames | grep -n "Probably correct bundle name" | sed 's/:.*//')
 +
cat bundleNames | head -n $n | egrep 'modisco|facet'
 +
 +
url="http://build.eclipse.org/juno/simrel/reports/providerNames.html"
 +
echo "checking $url"
 +
curl -s -S $url > providerNames
 +
n=$(cat providerNames | grep -n "Probably using correct provider name" | sed 's/:.*//')
 +
cat providerNames | head -n $n | egrep 'modisco|facet'
 +
 +
url="http://build.eclipse.org/juno/simrel/reports/copyrights.html"
 +
echo "checking $url"
 +
curl -s -S $url > copyrights
 +
n=$(cat copyrights | grep -n "Features with copyrights that are probably ok" | sed 's/:.*//')
 +
cat copyrights | head -n $n | egrep 'modisco|facet'
 +
 +
url="http://build.eclipse.org/juno/simrel/reports/esdata.txt"
 +
echo "checking $url"
 +
curl -s -S $url > esdata
 +
n=$(cat esdata | grep -n "Bundles without an Eclipse-SourceReference" | sed 's/:.*//')
 +
cat esdata | tail -n +$n | egrep 'modisco|facet'
 +
 +
 +
[[Category:Releng]]

Latest revision as of 05:16, 30 May 2012

The EMF Facet project is built using Buckminster, with this releng project.

EMF Facet uses the same build system as MoDisco. So, for more explanation about how the build process works, see also MoDisco Releng : How it Works.

Step by step

  • Install B3 using the update site http://download.eclipse.org/modeling/emft/b3/updates-3.7/
  • Checkout the project org.eclipse.emf.facet.releng.tools
  • Launch a 'runtime' Eclipse to enable 'org.eclipse.emf.facet.releng.tools' (target platform = 'Running platform')
  • Checkout the project: :extssh:<committerId>@dev.eclipse.org:/cvsroot/callisto
  • Checkout the project 'org.eclipse.indigo.build' from org.eclipse.emf.facet.releng.buckminster
  • Right click on the file /org.eclipse.emf.facet.releng.buckminster Juno/emffacet.rmap and press on 'Update Rmap ...'
  • Update orbit URL in /org.eclipse.emf.facet.releng.buckminster Juno/emffacet.rmap
  • Launch the build : https://hudson.eclipse.org/hudson/job/emffacet-nightly-0.2.0/build?delay=0sec and set the following parameter
    • BUILD_TYPE=S
    • BUILD_ALIAS=0.2.0RC2
    • SIGN_UPDATE_SITE=true
  • Wait the end of the build
  • Log in to build.eclipse.org:22 (SSH)
  • cd /opt/public/modeling/emft/facet/
  • ./manualPromote.sh
  • update the file /org.eclipse.juno.build/emft-emffacet.b3aggrcon (change the update site URL)
  • Open /org.eclipse.juno.build/simrel.b3aggr
  • Wait until all jobs are finished
  • Right click on the first node and press 'Validate aggregation'
  • Open the error log view to track the validation
  • Commit the file /org.eclipse.juno.build/emft-emffacet.b3aggrcon

What is built?

Two features are built:

  • org.eclipse.emf.facet.all.feature
  • org.eclipse.emf.facet.tests.site.feature

They are referenced as root dependencies in buckminster.cspec.

These features must include all other features that must be built, either directly or indirectly.

The releng project contains a Buckminster rmap, which specifies how to get the plug-ins and features that are to be built. For each plug-in or feature, the map defines its location on a version control system (CVS, SVN).

The rmap also specifies the update sites from which to retrieve the binary dependencies from the dependent projects.

Updating the rmap

The rmap reflects the dependencies on the other projects. So, it must be updated at least before each milestone, to make sure that the code that is built works with the latest versions of all the dependencies.

The easiest way to update the dependencies is to copy them from the aggregation build model, which all projects must fill in with the correct reference to their update site(s) and feature(s).

This model is in a project with the release name on the Eclipse CVS:

There is a tool that copies most of the information automatically in this plug-in:

Warning: don't forget to update the aggregation model project before copying information from it

A few dependencies are not in the aggregation build model though, so they must be updated manually:

Finding dependencies

If you don't know where a particular plug-in or feature is located, the easiest way to find it is to search the Eclipse download area using "find" on build.eclipse.org. For example, to look for "org.eclipse.emf.compare" :

find /home/data/httpd/download.eclipse.org/modeling/emf/ -name 'org.eclipse.emf.compare_*'

How to start a build?

Automatically

45 2-23/3 * * *

  • Nightly builds are run every 3 hours everyday, if the EMF Facet SVN changed since the last build.
  • Integration builds are started manually, usually to prepare a milestone or release

Manually

Then:

  • In Hudson, click on Build Now, change the build parameters as needed (see #Build parameters), and click on Build.
  • You can then click on the job name in the Build History section in the left column, and then on Console Output, to follow build progress in real time.

How to publish a build?

Automatically

Successful Nightly and Integration builds are automatically published to download.eclipse.org. For example, a nightly build for version 0.1.0, created on April 21 2011 at 04:13 would be published to:

These builds can then be seen and downloaded from http://www.eclipse.org/modeling/emft/facet/downloads/, where additional information is available (test results, build log), or installed from the update site: http://download.eclipse.org/facet/updates/nightly/

The publication is done by a script running as a cronjob under user nbros:

*/5 * * * * /opt/public/modeling/emft/facet/cronPromoteMonitor.sh

cronPromoteMonitor.sh runs cronPromote.sh which does the actual publication, and sends a mail to team members if the publication failed.

To re-run the publication of the last nightly build, log in to build.eclipse.org, and do:

cd /opt/public/modeling/emft/facet/
touch promoteSignalN && ./cronPromote.sh

With a script

First, if not already done, you need to retrieve all the necessary scripts and resources:

Then, you can launch the publishing script:

  • run ./manualPromote.sh and fill in the parameters

Manually

Stable, Maintenance and Release builds are not automatically published. They should be first tested internally before publishing. For example, to publish the 0.1.0M6 milestone build:

  • First, fetch the build archive to test (from Hudson, or using wget or scp for example):
wget https://hudson.eclipse.org/hudson/job/emffacet-integration/lastSuccessfulBuild/artifact/S201103151256.zip

or, if https access doesn't work, a NFS access can be used (from build.eclipse.org). For example:

cp /shared/jobs/emffacet-nightly/lastSuccessful/archive/S201103151256.zip .
  • Then, test the build locally
  • Then, publish it:
ssh <commiterid>@build.eclipse.org
wget https://hudson.eclipse.org/hudson/job/emffacet-integration/lastSuccessfulBuild/artifact/S201103151256.zip
unzip S201103151256.zip -d /home/data/httpd/download.eclipse.org/facet/downloads/drops/0.1.0/

Add a new update site with the new build to the composite:

  • unzip the content (the update site zip that was in the first zip) in a new folder with the release number:
unzip EMFFacet-Update-0.1.1RC3.zip -d /home/data/httpd/download.eclipse.org/facet/updates/milestones/0.1/SR1_RC3
  • update both the compositeContent.xml and compositeArtifacts.xml files of the update site (that are located in the parent of the folder to which you extracted the update site) to add a reference to your newly added update site
    • set the value of p2.timestamp to the result of "date +%s000"
    • increase the "size" attribute of the children element
    • add a "child" element inside the "children" element with a "location" set to the name of the folder (e.g "SR1_RC3")
  • You can enable download stats on the repository by running /opt/public/modeling/emft/facet/addDownloadStats.sh on the update site
  • Check that the new build appears on http://www.eclipse.org/modeling/emft/facet/downloads/.
  • Builds can be hidden from this page before a release by modifying downloads-scripts.php in www/modeling/emft/facet/downloads/ on :pserver:anonymous@dev.eclipse.org:/cvsroot/org.eclipse
  • Update the archive site with the new build:
    • unzip S201109070430.zip -d /home/data/httpd/archive.eclipse.org/facet/downloads/drops/0.1.1/
    • update /home/data/httpd/archive.eclipse.org/facet/downloads/index.html with a link to the newly added update zip
  • Tag the build

Simultaneous Release

If the build must be part of the simultaneous release, you must also:

Release

There are no "release builds". The release is a release candidate that is promoted to an actual release by following these steps:

  • copy the last release candidate's update site (e.g downloads/facet/updates/milestones/0.1/SR2_RC4) to a release update site (e.g downloads/facet/updates/release/0.1.2/)
  • fix the "p2.mirrorsURL" in the release update site's artifacts.jar, so that it matches the update site's location. For example:
<property name="p2.mirrorsURL" value="http://www.eclipse.org/downloads/download.php?file=/facet/updates/release/0.1.2&amp;format=xml&amp;protocol=http"/>
  • copy the last release candidate drop (e.g downloads/facet/downloads/drops/0.1.2/S201202140309) to a release drop (e.g downloads/facet/downloads/drops/0.1.2/R201202140309).
  • rename the update site in the drop so that it doesn't have a RCx suffix. E.g: R201202140309/EMFFacet-Update-0.1.2.zip

The release process for the simultaneous release is a bit more involved. The process is usually documented in a document on the wiki named "<release> final daze". E.g http://wiki.eclipse.org/Indigo/Final_Daze. It consists of:

  • when creating the release update site, do not add the release update site to its parent composite yet: this must be done on the release day (when announced on the cross-project-issues-dev mailing list), in order to let mirroring complete before users try to download the bits
  • hide the drops from the download page, by modifying the PHP script for the download page:
:dev.eclipse.org:/cvsroot/org.eclipse/www/modeling/emft/facet/downloads/downloads-scripts.php
  • uncomment the line that contains the comment "XXX hide release until release day", and set the release folder to hide
  • check after a few minutes that the release does not appear on http://www.eclipse.org/modeling/emft/facet/downloads/
  • delete all the milestone (S20*) builds from the drops, and delete all the previous milestone update sites, in order to minimize the amount of data that mirrors have to copy
  • ask the webmaster to update the Eclipse help infocenter with the new help plug-ins (e.g on Bug 348355 - Will soon need an Indigo Info Center)

Then on the release day — once the announce is made on the cross-project-issues-dev mailing list — do the following:

  • show the release drop by re-commenting the line you uncommented previously in the download page PHP script.
  • add the release update site to its parent composite
  • update the documentation to add a reference to the new release update site

Build parameters

Hudson builds expect these parameters:

  • BUILDTYPE : the kind of build, represented by a code letter (see this page):
    • N: Nightly
    • I: Integration
    • M: Maintenance (NOT milestone)
    • S: Stable (for Milestones and Release Candidate builds)
    • R: Release
  • BUILD_ALIAS : the name of the release (0.8.0, 0.9.0M1, etc.); leave it blank for nightly and integration builds
  • SIGN_UPDATE_SITE : whether to sign the update site (can take up to an hour on the Eclipse build server); mandatory for all builds except nightlies
  • VERSION : the version being built. Dictates in which folder the build will be placed under the download "drops" folder.

Tagging

Releases should have a tag like R0_1_0, and milestones should have a tag like S0_1_0M7.

Warning2.png
Tag names
Since the tag name is used as a bundle qualifier by PDE Build, it should not contain periods. For example, use R0_1_0 instead of v0.1.0


Checking

Check bundles

Check that each bundle contains an about.html file:

for f in $( ls *.jar ); do unzip -t $f | grep -q about.html || echo $f; done

or for plug-ins in your workspace:

find $workspaceRoot -name 'build.properties' | while read i; do grep -q about.html "$i" || echo "$i"; done

Check licenses

find $workspaceRoot -type f -name 'license.html' | while read i; do md5 $i; done

Check Manifest.MF

find $workspaceRoot -name 'MANIFEST.MF' | while read i; do grep -q Bundle-Vendor "$i" || echo "$i"; done
find $workspaceRoot -name 'feature.xml' | while read i; do grep -q provider-name "$i" || echo "$i"; done

Check p2.mirrorsURL

Each milestone and release update site should have a correct "p2.mirrorsURL" defined in its artifacts.jar (see Equinox/p2/p2.mirrorsURL).

To quickly check this on all update sites under the current directory, execute the following command:

 find . -type f -name 'artifacts.jar' -or -name 'artifacts.xml' | while read i; do 
   echo "$i"
   if [[ "$i" =~ .*/artifacts.jar ]]; then echo "  "$(unzip -p "$i"|grep "p2.mirrorsURL")
   else echo "  "$(cat "$i"|grep "p2.mirrorsURL"); fi
 done

Check simrel reports

for url in \
   "http://build.eclipse.org/juno/simrel/reports/layoutCheck.txt" \
   "http://build.eclipse.org/juno/simrel/reports/verifydiroutput/unsigned.txt" \
   "http://build.eclipse.org/juno/simrel/reports/versionPatternCheck.txt" \
   "http://build.eclipse.org/juno/simrel/reports/breedata.txt" \
   "http://build.eclipse.org/juno/simrel/reports/pack200data.txt" \
   "http://build.eclipse.org/juno/simrel/reports/nonUniqueVersions.txt"
do
  echo "checking $url"
  curl -s -S "$url" | egrep 'modisco|facet'
done
url="http://build.eclipse.org/juno/simrel/reports/licenseConsistency.html"
echo "checking $url"
curl -s -S $url > licenseConsistency
n=$(cat licenseConsistency | grep -n "Features with matching" | sed 's/:.*//')
cat licenseConsistency | head -n $n | egrep 'modisco|facet'
url="http://build.eclipse.org/juno/simrel/reports/featureNames.html"
echo "checking $url"
curl -s -S $url > featureNames
n=$(cat featureNames | grep -n "Probably correct names" | sed 's/:.*//')
cat featureNames | head -n $n | egrep 'modisco|facet'
url="http://build.eclipse.org/juno/simrel/reports/bundleNames.html"
echo "checking $url"
curl -s -S $url > bundleNames
n=$(cat bundleNames | grep -n "Probably correct bundle name" | sed 's/:.*//')
cat bundleNames | head -n $n | egrep 'modisco|facet'
url="http://build.eclipse.org/juno/simrel/reports/providerNames.html"
echo "checking $url"
curl -s -S $url > providerNames
n=$(cat providerNames | grep -n "Probably using correct provider name" | sed 's/:.*//')
cat providerNames | head -n $n | egrep 'modisco|facet'
url="http://build.eclipse.org/juno/simrel/reports/copyrights.html"
echo "checking $url"
curl -s -S $url > copyrights
n=$(cat copyrights | grep -n "Features with copyrights that are probably ok" | sed 's/:.*//')
cat copyrights | head -n $n | egrep 'modisco|facet'
url="http://build.eclipse.org/juno/simrel/reports/esdata.txt"
echo "checking $url"
curl -s -S $url > esdata
n=$(cat esdata | grep -n "Bundles without an Eclipse-SourceReference" | sed 's/:.*//')
cat esdata | tail -n +$n | egrep 'modisco|facet'

Back to the top