Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: eb4d5eb6b58f58d2facbaf9860c21571fc1f592f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
== Requirements to manage a build ==  
* be a Papyrus committer (of course)
* have a non-restricted shell access to build.eclipse.org (log a bug to Community/Server to obtain SSH access: see [http://bugs.eclipse.org/bugs/show_bug.cgi?id=366699 bug 366699]). To know if your shell is restricted, try to execute linux commands and see if you get disconnected.
* have write rights on dev.eclipse.org:/cvsroot/callisto (log a bug to Community/CVS to get it, see [http://bugs.eclipse.org/bugs/show_bug.cgi?id=366727 bug 366727])
**use extssh and not pserver for this connection
* have rights to launch this job : https://hudson.eclipse.org/hudson/job/juno.runAggregator/ (should come with the previous rights)
* have write access to /home/data/httpd/download.eclipse.org/modeling/mdt/papyrus (should come with the Papyrus committer rights)
* you must subscribe to the [https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev cross-project-issues-dev] mailing list, on which discussions relevant to the releng activities take place

=== configure password-less ssh access ===
To run scripts that access the build.eclipse.org server without having to type the ssh password for each operation, you can use ssh-keygen to create a key and put your '''public''' key "~/.ssh/id_rsa.pub" in "~/.ssh/authorized_keys" ([http://linuxproblem.org/art_9.html see this documentation]).

== Releng Project ==
The papyrus releng project is called : '''org.eclipse.mdt.papyrus.releng.buckminster'''

[[Image:releng.png]]

It contains sub-folders corresponding to each build:
* papyrus-trunk-nightly
* papyrus-trunk-nightly-tests
* papyrus-trunk-nightly-3.8-tests
* papyrus-trunk-extra-nightly
* papyrus-trunk-extra-nightly-tests

And each folder contains the configuration for that build:
*'''build.xml:''' the main ant build script : installs Buckminster, imports the dependencies and the Papyrus projects from SVN, builds the workspace, creates the update site and runs the tests
*'''build-before.sh:''' does a bit of cleanup and initializes variables for the build
*'''build-after.sh:''' packages the result in a zip, and triggers the publishing of this zip
*'''buckminster.cspec :''' describes the top-level dependencies of the build
*'''build.cquery :''' describes the root request for the Buckminster import, properties for the import (for example, it indicates that the Papyrus source plug-ins should not be materialized during the import, as they are generated by Buckminster during the build), and references the Buckminster rmap
*'''build.mspec :''' description for the Buckminster '''materialization''' (i.e. import) of artifacts (plug-ins and features), when building on *.eclipse.org
*'''local.mspec :''' description for the Buckminster materialization when building locally
*'''build.rmap :''' should be updated for each release. An [https://dev.eclipse.org/svnroot/modeling/org.eclipse.emft.facet/trunk/releng/org.eclipse.emf.facet.releng.tools EMF-Facet plug-in] allows to update it easily using the b3 file. The '''<!-- updateFrom -->''' tags are used by this script. 
*'''build.properties :''' properties for the build (when building on *.eclipse.org)
*'''local.properties :''' properties for the build (when building locally)

And these scripts are common to all the builds:
*'''resources'''
**'''workspace.template.zip''' : defines an empty workspace with settings suitable for the Papyrus build (disables the missing PDE API baseline errors)
*'''serverConfig :''' (after each modification, the scripts in this directory must be copied into "/opt/public/modeling/mdt/papyrus" where they run : commit the script and run /opt/public/modeling/mdt/papyrus/updateServerSideScripts.sh)
**'''addDownloadStats.sh :''' script that enables download statistics on an update site
**'''addDownloadStats-main.xsl :''' XSL transformation that enables download statistics on a "main" update site (it contains the list of significant plug-ins for the stats)
**'''addDownloadStats-extra.xsl :''' XSL transformation that enables download statistics on a "extra" update site (it contains the list of significant plug-ins for the stats)
* '''addToComposite.sh''' : script to add a child update site to a composite update site definition (calls addToComposite.xsl)
* '''addToComposite.xsl''' : XSL transformation to add a child update site to a composite update site definition
* '''backupHudsonJobs.sh''' : retrieves the configuration files for all the Papyrus Hudson jobs, and copies them into the hudsonJobs folder (configure a [http://linuxproblem.org/art_9.html password-less ssh login] to avoid having to type your password 10 times in a row). Run this script every time you make changes to the Hudson job configurations, in order to keep a versioned backup of these changes.
**'''cronPromoteMonitor.sh :''' a script that runs as a cron on build.eclipse.org to publish the latest nightlies (main, extra and tests). It runs cronPromote.sh and sends a mail if this script failed.
**'''cronPromote.sh :''' the script that does the actual work for cronPromoteMonitor.sh
**'''promoteFunctions.sh :''' helper functions for the publishing scripts
**'''manualPromote.sh :''' this is an interactive script that can be started by a Papyrus committer to publish a build into the Papyrus downloads and update site
**'''release_0.8.sh :''' used for publishing 0.8 releases
**'''updateServerSideScripts.sh''' : run this script from /opt/public/modeling/mdt/papyrus/updateServerSideScripts.sh to update the scripts on the server after committing your changes
*'''xsl :'''
**'''psf :''' to build the psf from a Buckminster ''bill of materials''. The BOM is produced by Buckminster when importing all the dependencies, and contains a list of these dependencies.
***'''bom2repository.xsl :''' transforms a Buckminster BOM into a list of dependent repositories
***'''build.xml :''' used for testing the generation of the PSFs
***'''papyrus_bom.xml:''' used for testing the generation of the PSFs
***'''repository2subclipse.xsl:''' creates a Subclipse PSF from a repository.xml 
***'''repository2subversive.xsl:''' creates a Subversive PSF from a repository.xml 
**'''content2html.xsl''': creates an index.html with a user-viewable list of all installable Papyrus plug-ins and features
**'''content2xml.xsl''': creates an index.html with a machine-readable list of all installable Papyrus plug-ins and features



== Build process ==

Taking the example of the job papyrus-trunk-nightly:
* When the Hudson job papyrus-trunk-nightly starts, Hudson begins by doing a checkout of the required folders (which are specified in the [[#Hudson_job.27s_SVN_configuration|Hudson job's configuration]]) from the SVN : the "plugins", "features" and "releng" folders are retrieved, and placed under a directory named "sourceTree" in the Hudson workspace.
* Then the first bash script (from the releng project that was just retrieved from the SVN) is executed : "sourceTree/releng/org.eclipse.mdt.papyrus.releng.buckminster/papyrus-trunk-nightly/build-before.sh". This script does a bit of clean-up and initializes variables for the build.
* Then the main build script is executed: "sourceTree/releng/org.eclipse.mdt.papyrus.releng.buckminster/papyrus-trunk-nightly/build.xml":
** it reads the property file '''build.properties''', which defines settings for the build
** it cleans the workspace, target platform and previous build result (depending on the user options specified on Hudson)
** it installs the p2 director, which is used for installing Buckminster
** then it installs Buckminster using the p2 director
** then it materializes the workspace and target platform (using the buckminster '''import''' command). While doing this, it also saves the description of what was materialized into a file named '''papyrus_bom.xml''' (this is called the "bill of materials" in Buckminster's jargon).
** then it builds the workspace using the Buckminster '''build''' command
** then it creates the update site, using the Buckminster '''perform''' command with the '''site.p2''' action on the component "org.eclipse.papyrus.build.feature", which is the feature that contains all the Papyrus features that must be installable from the produced update site
** then it creates an index.html file in the update site, using a XSLT transformation on the update site's content.xml. This index is useful for when users try to display the update site in their web browser : they will then see the plug-ins and features contained by the update site, with an explanation on how they're supposed to be installed
** then it generates PSF files (one for Subclipse and one for Subversive), using XSLT transformations on the '''papyrus_bom.xml''' that was created by Buckminster during the '''import''' step
* Then the second bash script is executed : "sourceTree/releng/org.eclipse.mdt.papyrus.releng.buckminster/papyrus-trunk-nightly/build-after.sh". This script creates the result zip (that contains the zipped update site), and triggers the publication of the result by touching a file that acts as a signal for the cronPromote script that does the publication from build.eclipse.org.

The test builds do one more step: they run the tests using the Buckminster '''test''' command, using an Eclipse launch configuration that references the tests to run.

== Features ==
The feature '''org.eclipse.papyrus.build.feature''' is not visible on the Papyrus Update Site. It is only useful for the Buckminster build. It contains the main Papyrus features : 
* org.eclipse.papyrus.sdk.feature (binaries)
* org.eclipse.papyrus.sdk.source.feature (sources + binaries)

The feature '''org.eclipse.papyrus.sdk.feature''' allows to provide the Papyrus binaries on the Update Site. This feature aggregates all the main Papyrus features.

[[Image:binaryFeature.jpeg]]

The feature '''org.eclipse.papyrus.sdk.sources.feature''' allows to provide the Papyrus binaries and the sources on the Update Site. This feature should aggregate the same features as '''org.eclipse.papyrus.sdk.feature''', but each feature is called '''xxx.source.feature''' instead of '''xxx.feature'''. You should have warnings in this file, because the '''xxx.source.feature''' don't exist in your workspace; they will be created during the build. This feature contains '''org.eclipse.papyrus.sdk.feature''' too.

[[Image:sourceFeature.png]]

== Automatic publishing to the downloads server ==
Nightly builds are published automatically to download.eclipse.org.

This part is a bit tricky, as the build server (https://hudson.eclipse.org) and the download server download.eclipse.org are two separate servers, with different access rights. The download server can be accessed by all committers, but the Hudson jobs are launched by a Hudson user that does not have write access to the download server. Thus, publishing results is done in two parts:
*the Hudson task gathers all results and sends a signal to the download server (basically, writing a signal file on the download server, with information on what to publish and where). 
*A cron task runs every 5 minutes on build.eclipse.org (currently setup under user "vlorenzo"), and launches the script cronPromoteMonitor.sh located in ''/opt/public/modeling/mdt/papyrus/'' on build.eclipse.org. This script compares the timestamp of the signal file to a reference file. When the signal file is more recent than the reference file, it proceeds to cleaning the download area (leaving for example only the last 5 nightly builds for each version of the plug-ins), and then getting the results provided by the hudson job to copy them in the right places in the download area.

=== configuration of the cron script ===
The publishing script is started every five minutes ("*/5") to see if there are new builds to publish and publish them.

Type this command to edit your crontab on build.eclipse.org:
 crontab -e
Then put this single line in the file to start the publishing script every five minutes:
 */5 * * * * /opt/public/modeling/mdt/papyrus/cronPromoteMonitor.sh

== Build chaining ==

The publication of papyrus-trunk-nightly triggers the build of papyrus-trunk-extra-nightly, papyrus-trunk-nightly-tests and papyrus-trunk-nightly-3.8-tests, by using the [http://wiki.hudson-ci.org/display/HUDSON/Remote+access+API Hudson Remote Access API], passing it the build id and version as parameters, so that the cronPromote can publish the results of papyrus-trunk-extra-nightly and papyrus-trunk-nightly-tests to the same folder as for the first build.

[[Image:buildChaining.png]]

== Build dependencies ==
The Hudson jobs papyrus-trunk-nightly-tests, papyrus-trunk-nightly-3.8-tests and papyrus-trunk-extra-nightly depend on the [https://hudson.eclipse.org/hudson/job/papyrus-trunk-nightly/ws/updateSite/ update site] created by the Hudson job papyrus-trunk-nightly.

The dependency appears in the rmap:
<pre>
<rm:provider componentTypes="eclipse.feature,osgi.bundle" mutable="false" readerType="p2" source="false">
  <rm:uri format="{0}">
    <bc:propertyRef key="papyrus.update.site"/>
  </rm:uri>
</rm:provider>
</pre>

And the variable "papyrus.update.site" is defined in the Hudson job configuration:

[[Image:hudsonUpdateSiteDependency.png]]

== 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_*'

== Publishing a build in the aggregator ==
The Eclipse simultaneous release train is built with the B3 aggregator. To be part of the aggregation, you must add your contribution to the aggregation model.

First, you need to install the B3 aggregator. Theoretically, you can edit the model with any text editor, but it is better to edit it with the B3 editor, which will check that your model is valid. 

It is suggested that you [http://wiki.eclipse.org/Eclipse_b3/aggregator/manual#Eclipse_SDK_installation install] the B3 aggregator in a separate Eclipse, dedicated to releng activities. For the Indigo and Juno simultaneous releases, you will need two different B3 installations : 
* one which uses the Helios version of B3 for building Indigo : http://download.eclipse.org/modeling/emft/b3/updates-3.6/
* and one that uses the Indigo version of B3 for building Juno : http://download.eclipse.org/modeling/emft/b3/updates-3.7/

It is important to use the right version for each, because you will break the build if you commit changes that depend on the wrong version.

* checkout the project org.eclipse.<releaseName>.build from the Eclipse CVS ":pserver:<committerID>@dev.eclipse.org:/cvsroot/callisto"
* open "mdt-papyrus.b3aggrcon"
* change the location on this line to point to the build you want to publish in the aggregator:
 <repositories location="http://download.eclipse.org/modeling/mdt/papyrus/updates/milestones/0.9/M4" description="Papyrus">
* validate the build model : 
** open "simrel.b3aggr"
** right-click on the root and choose '''Validate Aggregation'''
** open the error log and see if everything went OK
* commit your changes
* optionally start an [https://hudson.eclipse.org/hudson/view/Repository%20Aggregation/job/juno.runAggregator/ aggregation build] (the build should start automatically after you commit changes)

=== contact information ===

The people responsible for the build should be listed as contacts in the build model:

[[Image:b3Contacts.png]]

== What do you select in your build.properties files ? ==
The licence.html file should be selected for both binary and source builds.
The source folder ("src/") should not be selected for the binary nor the source build.

== optimizing the rmap ==
The Buckminster import is very slow (more than one hour and a half) when it does the SVN checkout itself. To optimize it, we let Hudson do the checkout, and we then tell Buckminster to use the locally checked out files.

So, instead of this configuration in the rmap:
 <rm:provider componentTypes="osgi.bundle" readerType="svn">
   <rm:uri format="{0}/modeling/org.eclipse.mdt.papyrus/trunk/plugins/core/{1}">
     <bc:propertyRef key="svn.repository"/>
     <bc:propertyRef key="buckminster.component"/>
   </rm:uri>
 </rm:provider>

We now use the "local" reader:
 <rm:provider componentTypes="osgi.bundle" readerType="local">
   <rm:uri format="{0}/modeling/org.eclipse.mdt.papyrus/trunk/plugins/core/{1}">
     <bc:propertyRef key="local.repository"/>
     <bc:propertyRef key="buckminster.component"/>
   </rm:uri>
 </rm:provider>

== Creating a composite update site ==

A composite update site contains child update sites that appear as if their contents were in the composite update site. It is a way to aggregate update sites without having to physically move all the plug-ins in the same "plugins" directory (and the features in the "features" directory).

To create a composite update site, add two files named compositeArtifacts.xml and compositeContent.xml at the root of the composite update site.
Here is an example of the content of these files, for a composite update site that contains two children named "main" and "extra".

"p2.timestamp" is the Unix date in milliseconds, which must be udpated everytime you change the compositeArtifacts.xml or compositeContent.xml files.
To obtain the right value, use the command:
 date +%s000


compositeArtifacts.xml:
 <?xml version="1.0" encoding="UTF-8"?>
 <repository name="Papyrus" type="org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository" version="1.0.0">
   <properties size="1">
     <property name="p2.timestamp" value="1327488131000"/>
   </properties>
   <children size="2">
     <child location="main"/>
     <child location="extra"/>
   </children>
 </repository>

compositeContent.xml:
 <?xml version="1.0" encoding="UTF-8"?>
 <repository name="Papyrus" type="org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository" version="1.0.0">
   <properties size="1">
     <property name="p2.timestamp" value="1327488131000"/>
   </properties>
   <children size="2">
     <child location="main"/>
     <child location="extra"/>
   </children>
 </repository>

The update site directory looks like this:
 compositeArtifacts.xml
 compositeContent.xml
 main
   artifacts.jar
   content.jar
   features
   plugins
 extra
   artifacts.jar
   content.jar
   features
   plugins

You can also make a composite child point to a different location. This is useful for moving update sites to archive.eclipse.org transparently (see [https://bugs.eclipse.org/bugs/show_bug.cgi?id=349141 bug 349141]).

For example:
 <child location="http://archive.eclipse.org/modeling/mdt/papyrus/updates/releases/indigo/0.8.0"/> 

see also [http://wiki.eclipse.org/Equinox/p2/Composite_Repositories_(new)]

== Papyrus update sites ==
The Papyrus update sites are under:
 http://download.eclipse.org/modeling/mdt/papyrus/updates/...
corresponding to this directory mounted on build.eclipse.org:
 /home/data/httpd/download.eclipse.org/modeling/mdt/papyrus/updates/...

The Papyrus update sites follow this layout:
 releases (folder)
   helios (composite update site)
   indigo (composite update site)
     0.8.0 (update site)
     0.8.1 (update site)
   juno (composite update site)
     0.9.0 (composite update site)
       main (update site)
       extra (update site)
 milestones
   0.8 (composite update site)
     SR2_RC1 (update site)
     SR2_RC2 (update site)
   0.9 (composite update site)
     M4 (composite update site)
     M5 (composite update site)
       main (update site)
       extra (update site)
 nightly
   indigo (composite update site)
   juno (composite update site)
     main (update site)
     extra (update site)

== Papyrus downloads ==
The Papyrus download page is:
http://www.eclipse.org/modeling/mdt/papyrus/downloads/index.php

This page is generated from downloads-common.php and downloads-scripts.php that are defined in the folder "/www/modeling/mdt/papyrus/downloads/" on CVS "dev.eclipse.org:/org.eclipse".

== Download statistics ==
The statistics are enabled on repositories that are published with manualPromote.sh. This script calls addDownloadStats.sh, and it uses:
* addDownloadStats-main.xsl for statistics on the main update site
* addDownloadStats-extra.xsl for statistics on the extra update site

These XSL transformations add the property "p2.statsURI" to the update site metadata, and add a "download.stats" property on a few bundles that are significant for the project's statistics.

The statistics can then be seen on the Eclipse portal (see the documentation below)

See:
* http://wiki.eclipse.org/Project_Download_Stats
* http://wiki.eclipse.org/Equinox_p2_download_stats

== Archiving old builds ==
The download.eclipse.org server only has so much space. So, the webmaster set a 2 GiB quota per project.

To stay under this limit, old builds should be either deleted or moved to archive.eclipse.org.

This must be done in accordance to the Papyrus retention policy.
TODO: Papyrus should define a retention policy, and link to it in the portal.

See : 
* http://wiki.eclipse.org/IT_Infrastructure_Doc#Move_files_to_archive.eclipse.org.3F

== Promoting a RC to a release ==
On the day of the release, the last release candidate build should be renamed. 
You should rename your release candidate build in "/modeling/mdt/papyrus/downloads/drops/x.y.z/" For example:
* S201106151305 becomes R201106151305
* Papyrus-Update-0.9.0RC4.zip becomes Papyrus-Update-0.9.0.zip

There is nothing to rename in the update site, but you should copy the contents of the release candidate update site to the release update site.

For example, copy the contents of:
 /modeling/mdt/papyrus/updates/milestones/0.9/RC4
into
 /modeling/mdt/papyrus/updates/releases/juno/0.9.0

See:
* http://wiki.eclipse.org/Indigo/Final_Daze

== Hudson job's SVN configuration ==

[[Image:hudsonSvnConfig.png|frame|Hudson SVN Config]]

== Interpreting build errors ==
The error can sometimes be found at the end of the log, but is often burried deep within megabytes of output (especially when Buckminster is run with the DEBUG log level). So, to find an error, you can search for patterns:
* '''"ERROR"''' for Buckminster import errors
* '''"Error: file "''' for compilation errors

=== import errors ===
 ERROR   [0009] : No suitable provider for component org.eclipse.xyz:osgi.bundle was found in resourceMap [...]
It means that the import phase done by Buckminster failed because Buckminster could not find plug-in "org.eclipse.xyz" in the rmap. 
If this is one of your plug-ins, you can fix this error by:
* adding it to the rmap if it was not already matched by a pattern (regular expression) there
* making sure that the plug-in has the right name and is in the right location on SVN
* making sure that the plug-in is contained (indirectly) by the build feature
If this is a plug-in from another project you depend on, you can fix this error by:
* making sure you have defined in your rmap the update site from which this plug-in must be found
* making sure that the locator pattern points Buckminster to the right update site for this plug-in
* making sure that you depend on the right version of the plug-in (in the referencing project's MANIFEST.MF)

Notice the "&#91;0009&#93;" tag before the error message: it refers to more information at the end of the build log. Search for this number, and you will find something like:
 INFO:  TAG-ID 0009 = Query for org.eclipse.mdt.papyrus.releng.buckminster:buckminster, path:
 org.eclipse.mdt.papyrus.releng.buckminster:buckminster$0.9.0.qualifier -> 
 org.eclipse.xxx:osgi.bundle$0.9.0.qualifier -> 
 org.eclipse.yyy:osgi.bundle$0.9.0.qualifier -> 
 org.eclipse.zzz:osgi.bundle$0.9.0.qualifier 

It gives you the dependency chain leading to the plug-in that cannot be resolved. 

=== compilation errors ===
 Error: file /opt/public/jobs/<jobName>/workspace/buildroot/buckminster.workspace/plugins/<pluginName>/src/<javaClassPath>, line xyz: <javaErrorMessage>
This is a Java compilation error.
* Make sure that the code compiles in your workspace
* Make sure that your development environment contains the same plug-ins with the same versions as the Buckminster build (see buildroot/result/targetPlatform in the Hudson workspace)

=== Test launching error ===
 java.lang.IllegalArgumentException: Export has failed because no test session is available
When you see this error message, it means the tests failed to start. This is most often because one of the test plug-ins could not be resolved. To get more information about this problem, you can look in the Hudson workspace:
 /buildroot/result/junit-workspace/.metadata/.log
If you see messages like:
 Bundle org.eclipse.papyrus.xyz was not resolved.
Then look at the messages that follow, and you should see:
 Missing required bundle xyz
or
 Missing imported package xyz

Which indicates the dependency that was not resolved. Then you can search again for references to "xyz" in this log to determine why the dependency was not resolved. Continue to iterate like this until you get down to the root of the problem.

Once you have found the root dependency that is not resolved, then you can:
* If the dependency is already specified in one of your plug-ins, then you maybe need to modify constraints (required version for example) so that it can be resolved
* If the dependency is not already specified in one of your plug-ins, then you can either:
** Add it to one of your plug-ins if it makes sense
** If it does not make sense to specify the dependency on one of your plug-ins, because the dependency is incidental (inherited from a project you depend on for example), then you can add it to the '''buckminster.cspec''' of the test build

Sometimes, the error message says that the tests failed to launch, and to "see the log", but it doesn't indicate which log. The log for a launch failure is located in:
 buildroot/result/workspace/.metadata/.plugins/org.eclipse.pde.core/<launchName>

=== The Hudson build's workspace ===
You can see the contents of the Hudson build's workspace on Hudson. For example:
 https://hudson.eclipse.org/hudson/job/papyrus-trunk-nightly/ws/

At the end of the build, the Hudson workspace contains these files:
* buildroot : the working directory for the Buckminster build
** result
*** output : Buckminster puts what it buildt in this directory
*** targetPlatform : the target platform that was materialized by Buckminster during the import phase, and that was used during the build. All the 
** tools
*** buckminster : the installation of Buckminster that was used for building
*** director : the p2 director that was used to install Buckminster
* sourceTree : the Papyrus sources that were checked out from SVN by Hudson
* tmp/N201201260428 : the temporary folder that was used to create the result zip
* updateSite : a copy of the update site that was produced by Buckminster. The other Papyrus builds (for extra and tests) use this update site
* Papyrus-Main.zip : this is the result of the build, packaged in a zip ready to be published by the cron publishing script

== Eclipse simultaneous release plan ==
The page for each project's simultaneous release is usually:
 http://wiki.eclipse.org/<release_name>/Simultaneous_Release_Plan
For example:
 * http://wiki.eclipse.org/Indigo/Simultaneous_Release_Plan
 * http://wiki.eclipse.org/Juno/Simultaneous_Release_Plan

It contains the date each milestone is expected to be available, depending on whether the project has a +0, +1, +2 or +3 offset. Each project determines its offset depending on its dependencies : if it depends on +2 projects, then it should be +3. And if it depends on +3 projects, then it is still +3, because there is no +4 offset. In this case, communication between the projects is essential, to make sure that each build depends on the right version of its dependencies.

Each project in the simultaneous release should also respect:
* API Freeze at M6 : no API changes should occur after M6
* UI freeze at M6 : no major UI changes should occur after M6, in order to give Babel translators enough time to translate everything before the release
* Feature Freeze at M7 : no new features should be developped after M7 (only bug fixes, documentation and releng changes should be committed for the release candidates)

=== Final Daze ===

As the time for the big release in june each year approaches, each project in the simultaneous release must keep informed about the plan for the release, and perform some actions at the right time to ensure the release goes smoothly (such as cleaning up, archiving, publishing the documentation, putting the release bits in the right place for mirroring, etc.).

This is documented in a page conventionally named:
 http://wiki.eclipse.org/<release_name>/Final_Daze
for example:
* http://wiki.eclipse.org/Indigo/Final_Daze

It is also very important to read the [https://dev.eclipse.org/mailman/listinfo/cross-project-issues-dev cross-project-issues-dev] mailing list regularly, to stay informed about everything concerning the simultaneous release.

== Entering the simultaneous release train ==
You should indicate that your project follows the Eclipse Train. Go to the Eclipse portal [https://dev.eclipse.org/portal]. In Eclipse Projects, click on '''view''' : 

[[Image:clickOnView.jpeg]]

click on '''maintain'''

[[Image:clickOnMaintain.jpeg]]

click on edit for '''simultaneousrelease'''

[[Image:clickOnSimultaneousRelease.jpeg]]

add 1 to your new release

[[Image:eclipseTrain.jpeg]]

== Simultaneous release metadata ==
You must respect the rules for being part of the simultaneous release, and fill in metadata on the portal. Most of this metadata is to document your compliance with the rules. If you don't comply with some rules, you should explain why, either with an in-place explanation if appropriate, or by linking to a web page with more information.
* go to https://dev.eclipse.org/portal/myfoundation/portal/portal.php
* in the "Simultaneous Release Tracker" portlet, click on "track" on the right of "modeling.mdt.papyrus"
* fill in the required information :

[[Image:simultaneousReleaseTracker.png]]

Back to the top