Prepare for mvn release:prepare release:perform operation
[controller.git] / README.OPENDAYLIGHT
1 DIRECTORY ORGANIZATION
2 ======================
3 - third-party: contains all the third-party artifacts than needed
4 repackaging or needed code modifications.
5 - third-party/commons: contains all the parent POM files for the
6 projects under the third-party directory. Only one is expected, which
7 is the one located under third-party/commons/third-party, but there is
8 a directory just in case we need to host more with different
9 variations.
10 - opendaylight: contains all the artifacts that constitute the
11 controller project.
12 - opendaylight/distribution: contains all the distributions that can
13 be generated by packaging the several artifact. In practice for now
14 there are two:
15       - "opendaylight", which is the full distribution of the controller
16 The idea of the distribution directory is that more distribution can
17 be added at will, maybe just composing subsets of the whole controller
18 artifact set.
19
20 HOW TO BUILD
21 ============
22 In order to build it's required to have JDK 1.7+ and Maven 3+, to get
23 a build going it's needed to:
24 1) Choose the distribution, from within opendaylight/distribution
25 2) Go in the directory and run
26    "mvn clean install"
27 3) On succesfull completion go in the target directory to pick the zip
28 file of the distribution or controller can be executed right from
29 there going into the distribution directory.
30
31 HOW TO RELEASE ARTIFACTS
32 ========================
33 Artifacts can be released in a bulk fashion or one by one depending on
34 the need. Bulk release works well when in the need of establishing a
35 baseline, for example on an upcoming major release. Single artifact
36 release is useful for example for API bundles which are supposed to be
37 used by others, this in fact seal the contract for that given version
38 and others can rest assured won't change because the maven repository
39 will not allow a the same artifact with the same version to be
40 re-deployed.
41
42 HOW TO BULK RELEASE ARTIFACTS
43 -----------------------------
44 Bulk release of the artifacts MUST be done only and exclusively by
45 using the pom.xml present in the same directory of this
46 README.OPENDAYLIGHT file. The pom.xml is just a pointer to the main
47 distribution directory or in general to the one containing all the
48 modules needs release.
49 To perform the release from the top level just run:
50
51 mvn -B release:prepare release:perform -Dgoals=deploy
52
53 Well this is not supposed to be executed by a human but by an apposite
54 Jenkins job because no committer or contributor has the necessary
55 privileges to escape the code review process needed by the release
56 process, but this is the logic behind.
57
58 HOW TO RELEASE ONE ARTIFACT
59 ---------------------------
60 1) Make sure the artifact doesn't depend on SNAPSHOT  artifacts, as a
61 corollary it means that also the parent pom must be a released
62 artifact which then will not be present in the repo, so for this kind
63 of artifacts it's mandatory to provide a repository section to let it
64 download the parent from Opendaylight maven repository
65 2) Make sure all the dependencies are also non-SNAPSHOT
66 3) Via apposite Jenkins job make sure that the goals:
67
68 mvn -B release:prepare release:perform -Dgoals=deploy
69
70 is called.
71
72 [NOTE WELL]
73 The pom.xml in the root level is simply a pointer to the main
74 distribution but is needed to overcome some of the limitations in the
75 release process.
76
77 Thanks!!

©2013 OpenDaylight, A Linux Foundation Collaborative Project. All Rights Reserved.
OpenDaylight is a registered trademark of The OpenDaylight Project, Inc.
Linux Foundation and OpenDaylight are registered trademarks of the Linux Foundation.
Linux is a registered trademark of Linus Torvalds.