Skip to content

Commit cbbbfe7

Browse files
committed
1 parent 2c17453 commit cbbbfe7

File tree

5 files changed

+408
-0
lines changed

5 files changed

+408
-0
lines changed

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,20 @@ You can run eclipse with debugging enabled and connect to it via remote debuggin
5555

5656
### Releasing and updating the official eclipse update site
5757

58+
From now on, we use [bintray](https://bintray.com) for hosting the eclipse update site.
59+
There is a nice [blog post by Lorenzo Bettini]()http://www.lorenzobettini.it/2016/02/publish-an-eclipse-p2-composite-repository-on-bintray/, which explains how it is done. There is also an [example repository](https://github.com/LorenzoBettini/p2composite-bintray-example] on github.
60+
61+
62+
Have a look at the `net.sourceforge.pmd.eclipse.p2updatesite` module, there you see
63+
64+
* a profile `release-composite` which enables the steps
65+
* the ant script `bintray.ant` which is used to upload and download the site
66+
* the ant script `packaging-p2composite.ant` which is used to modify the metadata of the
67+
p2 repo locally before uploading
68+
69+
70+
#### Old approach
71+
5872
# Pick a release BUILDQUALIFIER (e.g. v20130420-0001) and update versions
5973
E.g. version is: "4.0.0" and BUILDQUALIFIER is "v20130420-0001".
6074
The complete version of the plugin will be "4.0.0.v20130420-0001
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project name="Handle p2 composite metadata from Bintray" basedir=".">
3+
4+
<!--
5+
These must be set from outside
6+
<property name="bintray.user" value="" />
7+
<property name="bintray.apikey" value="" />
8+
<property name="bintray.repo" value="" />
9+
<property name="bintray.package" value="" />
10+
<property name="bintray.releases.path" value="" />
11+
<property name="bintray.composite.path" value="" />
12+
<property name="bintray.zip.path" value="" />
13+
-->
14+
15+
<property name="bintray.url" value="https://dl.bintray.com/${bintray.owner}/${bintray.repo}" />
16+
<property name="bintray.package.version" value="${unqualifiedVersion}.${buildQualifier}" />
17+
<property name="bintray.releases.target.path" value="${bintray.releases.path}/${bintray.package.version}" />
18+
19+
<property name="main.composite.url" value="${bintray.url}/${bintray.composite.path}" />
20+
<property name="target" value="target" />
21+
<property name="composite.repository.directory" value="composite-child" />
22+
<property name="main.composite.repository.directory" value="composite-main" />
23+
24+
<property name="compositeArtifacts" value="compositeArtifacts.xml" />
25+
<property name="compositeContent" value="compositeContent.xml" />
26+
27+
<property name="local.p2.repository" value="target/repository" />
28+
29+
<target name="getMajorMinorVersion">
30+
<script language="javascript">
31+
<![CDATA[
32+
33+
// getting the value
34+
buildnumber = project.getProperty("unqualifiedVersion");
35+
index = buildnumber.lastIndexOf(".");
36+
counter = buildnumber.substring(0, index);
37+
project.setProperty("majorMinorVersion",counter);
38+
39+
]]>
40+
</script>
41+
</target>
42+
43+
<!-- Take from the remote URL the possible existing metadata -->
44+
<target name="get-composite-metadata" depends="getMajorMinorVersion" >
45+
<get-metadata url="${main.composite.url}" dest="${target}/${main.composite.repository.directory}" />
46+
<get-metadata url="${main.composite.url}/${majorMinorVersion}" dest="${target}/${composite.repository.directory}" />
47+
<antcall target="preprocess-metadata" />
48+
</target>
49+
50+
<macrodef name="get-metadata" description="Retrieve the p2 composite metadata">
51+
<attribute name="url" />
52+
<attribute name="dest" />
53+
<sequential>
54+
<echo message="Creating directory @{dest}..." />
55+
<mkdir dir="@{dest}" />
56+
<get-file file="${compositeArtifacts}" url="@{url}" dest="@{dest}" />
57+
<get-file file="${compositeContent}" url="@{url}" dest="@{dest}" />
58+
</sequential>
59+
</macrodef>
60+
61+
<macrodef name="get-file" description="Use Ant Get task the file">
62+
<attribute name="file" />
63+
<attribute name="url" />
64+
<attribute name="dest" />
65+
<sequential>
66+
<!-- If the remote file does not exist then fail gracefully -->
67+
<echo message="Getting @{file} from @{url} into @{dest}..." />
68+
<get dest="@{dest}" ignoreerrors="true">
69+
<url url="@{url}/@{file}" />
70+
</get>
71+
</sequential>
72+
</macrodef>
73+
74+
<!-- p2.atomic.composite.loading must be set to false otherwise we won't be able
75+
to add a child to the composite repository without having all the children available -->
76+
<target name="preprocess-metadata" description="Preprocess p2 composite metadata">
77+
<replaceregexp byline="true">
78+
<regexp pattern="property name='p2.atomic.composite.loading' value='true'" />
79+
<substitution expression="property name='p2.atomic.composite.loading' value='false'" />
80+
<fileset dir="${target}">
81+
<include name="${composite.repository.directory}/*.xml" />
82+
<include name="${main.composite.repository.directory}/*.xml" />
83+
</fileset>
84+
</replaceregexp>
85+
</target>
86+
87+
<!-- p2.atomic.composite.loading must be set to true
88+
see https://bugs.eclipse.org/bugs/show_bug.cgi?id=356561 -->
89+
<target name="postprocess-metadata" description="Preprocess p2 composite metadata">
90+
<replaceregexp byline="true">
91+
<regexp pattern="property name='p2.atomic.composite.loading' value='false'" />
92+
<substitution expression="property name='p2.atomic.composite.loading' value='true'" />
93+
<fileset dir="${target}">
94+
<include name="${composite.repository.directory}/*.xml" />
95+
<include name="${main.composite.repository.directory}/*.xml" />
96+
</fileset>
97+
</replaceregexp>
98+
</target>
99+
100+
<target name="push-to-bintray" >
101+
<antcall target="postprocess-metadata" />
102+
<antcall target="push-p2-repo-to-bintray" />
103+
<antcall target="push-p2-repo-zipped-to-bintray" />
104+
<antcall target="push-composite-to-bintray" />
105+
<antcall target="push-main-composite-to-bintray" />
106+
</target>
107+
108+
<target name="push-p2-repo-to-bintray">
109+
<apply executable="curl" parallel="false" relative="true" addsourcefile="false">
110+
<arg value="-XPUT" />
111+
<targetfile />
112+
113+
<fileset dir="${local.p2.repository}" />
114+
115+
<compositemapper>
116+
<mergemapper to="-T" />
117+
<globmapper from="*" to="${local.p2.repository}/*" />
118+
<mergemapper to="-u${bintray.user}:${bintray.apikey}" />
119+
<globmapper from="*" to="https://api.bintray.com/content/${bintray.owner}/${bintray.repo}/${bintray.releases.target.path}/*;bt_package=${bintray.package};bt_version=${bintray.package.version};publish=1" />
120+
</compositemapper>
121+
</apply>
122+
</target>
123+
124+
<target name="push-p2-repo-zipped-to-bintray">
125+
<apply executable="curl" parallel="false" relative="true" addsourcefile="false">
126+
<arg value="-XPUT" />
127+
<targetfile />
128+
129+
<fileset dir="${target}" includes="*.zip" />
130+
131+
<compositemapper>
132+
<mergemapper to="-T" />
133+
<globmapper from="*" to="${target}/*" />
134+
<mergemapper to="-u${bintray.user}:${bintray.apikey}" />
135+
<globmapper from="*" to="https://api.bintray.com/content/${bintray.owner}/${bintray.repo}/${bintray.zip.path}/*;bt_package=${bintray.package};bt_version=${bintray.package.version};publish=1" />
136+
</compositemapper>
137+
</apply>
138+
</target>
139+
140+
<target name="push-composite-to-bintray" depends="getMajorMinorVersion" >
141+
<apply executable="curl" parallel="false" relative="true" addsourcefile="false">
142+
<arg value="-XPUT" />
143+
<targetfile />
144+
145+
<fileset dir="${target}/${composite.repository.directory}" />
146+
147+
<compositemapper>
148+
<mergemapper to="-T" />
149+
<globmapper from="*" to="${target}/${composite.repository.directory}/*" />
150+
<mergemapper to="-u${bintray.user}:${bintray.apikey}" />
151+
<globmapper from="*" to="https://api.bintray.com/content/${bintray.owner}/${bintray.repo}/${bintray.composite.path}/${majorMinorVersion}/*;publish=1" />
152+
</compositemapper>
153+
</apply>
154+
</target>
155+
156+
<target name="push-main-composite-to-bintray" >
157+
<apply executable="curl" parallel="false" relative="true" addsourcefile="false">
158+
<arg value="-XPUT" />
159+
<targetfile />
160+
161+
<fileset dir="${target}/${main.composite.repository.directory}" />
162+
163+
<compositemapper>
164+
<mergemapper to="-T" />
165+
<globmapper from="*" to="${target}/${main.composite.repository.directory}/*" />
166+
<mergemapper to="-u${bintray.user}:${bintray.apikey}" />
167+
<globmapper from="*" to="https://api.bintray.com/content/${bintray.owner}/${bintray.repo}/${bintray.composite.path}/*;publish=1" />
168+
</compositemapper>
169+
</apply>
170+
</target>
171+
172+
</project>
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?xml version="1.0"?>
2+
<project name="project">
3+
4+
<target name="getMajorMinorVersion">
5+
<script language="javascript">
6+
<![CDATA[
7+
8+
// getting the value
9+
buildnumber = project.getProperty("unqualifiedVersion");
10+
index = buildnumber.lastIndexOf(".");
11+
counter = buildnumber.substring(0, index);
12+
project.setProperty("majorMinorVersion",counter);
13+
14+
]]>
15+
</script>
16+
</target>
17+
18+
<target name="test_getMajorMinor" depends="getMajorMinorVersion">
19+
<echo message="majorMinorVersion: ${majorMinorVersion}" />
20+
</target>
21+
22+
<!--
23+
site.label The name/title/label of the created composite site
24+
unqualifiedVersion The version without any qualifier replacement
25+
buildQualifier The build qualifier
26+
child.repository.path.prefix The path prefix to access the actual p2 repo from the
27+
child repo, e.g., if child repo is in /updates/1.0 and
28+
the p2 repo is in /releases/1.0.0.something then this property
29+
should be "../../releases/"
30+
-->
31+
<target name="compute.child.repository.data" depends="getMajorMinorVersion">
32+
<property name="full.version" value="${unqualifiedVersion}.${buildQualifier}" />
33+
34+
<property name="site.composite.name" value="${site.label} ${majorMinorVersion}" />
35+
<property name="main.site.composite.name" value="${site.label} All Versions" />
36+
37+
<!-- composite.base.dir The base directory for the local composite metadata,
38+
e.g., from Maven, ${project.build.directory}
39+
-->
40+
<property name="composite.base.dir" value="target"/>
41+
42+
<property name="main.composite.repository.directory" location="${composite.base.dir}/composite-main" />
43+
<property name="composite.repository.directory" location="${composite.base.dir}/composite-child" />
44+
45+
<property name="child.repository" value="${child.repository.path.prefix}${full.version}" />
46+
</target>
47+
48+
<target name="p2.composite.add" depends="compute.child.repository.data">
49+
<add.composite.repository.internal composite.repository.location="${main.composite.repository.directory}" composite.repository.name="${main.site.composite.name}" composite.repository.child="${majorMinorVersion}" />
50+
<add.composite.repository.internal composite.repository.location="${composite.repository.directory}" composite.repository.name="${site.composite.name}" composite.repository.child="${child.repository}" />
51+
</target>
52+
53+
<!-- = = = = = = = = = = = = = = = = =
54+
macrodef: add.composite.repository.internal
55+
= = = = = = = = = = = = = = = = = -->
56+
<macrodef name="add.composite.repository.internal">
57+
<attribute name="composite.repository.location" />
58+
<attribute name="composite.repository.name" />
59+
<attribute name="composite.repository.child" />
60+
<sequential>
61+
62+
<echo message=" " />
63+
<echo message="Composite repository : @{composite.repository.location}" />
64+
<echo message="Composite name : @{composite.repository.name}" />
65+
<echo message="Adding child repository : @{composite.repository.child}" />
66+
67+
<p2.composite.repository>
68+
<repository compressed="false" location="@{composite.repository.location}" name="@{composite.repository.name}" />
69+
<add>
70+
<repository location="@{composite.repository.child}" />
71+
</add>
72+
</p2.composite.repository>
73+
74+
<echo file="@{composite.repository.location}/p2.index">version=1
75+
metadata.repository.factory.order=compositeContent.xml,\!
76+
artifact.repository.factory.order=compositeArtifacts.xml,\!
77+
</echo>
78+
79+
</sequential>
80+
</macrodef>
81+
82+
83+
</project>

0 commit comments

Comments
 (0)