blob: 7212f84168075881098899d7b0a8f4ff1a5fd262 [file] [log] [blame]
david_williamse39ca402008-02-07 05:58:31 +00001<?xml version="1.0" encoding="UTF-8"?>
2<project
3 name="signJarsInArchive"
4 default="signJarsInArchive"
5 basedir=".">
6
7 <!-- = = = standard properties pattern = = = -->
8 <!--
9 Note to be cross-platform, "environment variables" are only appropriate for
david_williamsb0f0e6c2008-02-10 06:22:40 +000010 some variables, such as ones we create and set, since properties are case sensitive, even if
david_williamse39ca402008-02-07 05:58:31 +000011 the environment variables on your operating system are not, e.g. it will
12 be ${env.Path} not ${env.PATH} on Windows -->
13 <property
14 environment="env" />
15
16 <!--
17 Let users override standard properties, if desired.
18 If directory, file, or some properties do not exist,
19 then standard properties will be used.
20 -->
21 <property
22 file="${env.LOCAL_BUILD_PROPERTIES_DIR}/${ant.project.name}.properties" />
23
24 <!-- = = = end standard properties pattern = = = -->
david_williams130f38a2008-02-09 21:17:29 +000025
26 <!-- Our specific directory in the signing area -->
david_williamse39ca402008-02-07 05:58:31 +000027 <property
28 name="stagingDirectory"
david_williams81846f92008-06-23 02:13:58 +000029 value="/opt/public/download-staging.priv/webtools/${archiveName}" />
david_williams7e3c2722008-02-09 22:12:31 +000030 <property
31 name="signingHistory"
32 value="${buildDirectory}/signing-${archiveName}.log" />
33
david_williams130f38a2008-02-09 21:17:29 +000034
35 <!-- Fail fast if variables are not provided as expected -->
david_williamse39ca402008-02-07 05:58:31 +000036 <fail
37 unless="buildDirectory"
38 message="buildDirectory must be specified by caller" />
39 <fail
40 unless="archiveName"
41 message="archiveName must be specified by caller" />
42 <fail
43 unless="buildLabel"
44 message="buildLabel must be specified by caller" />
45 <fail
46 unless="buildId"
47 message="buildId must be specified by caller" />
david_williams130f38a2008-02-09 21:17:29 +000048
david_williamsb0f0e6c2008-02-10 06:22:40 +000049
50 <!--
51 ======= Primary task ========
52 -->
53
54 <!--
55 == signJarsInArchive ==
56 -->
david_williams130f38a2008-02-09 21:17:29 +000057 <target
58 name="signJarsInArchive"
59 depends="check.sign"
60 if="doSign">
david_williams22b02ab2008-06-23 03:15:35 +000061
david_williams130f38a2008-02-09 21:17:29 +000062 <property
david_williams130f38a2008-02-09 21:17:29 +000063 name="outputFile"
david_williams875ac772008-02-09 21:38:05 +000064 value="${stagingDirectory}/${archiveName}" />
david_williamsb0f0e6c2008-02-10 06:22:40 +000065
david_williamse631c2d2008-02-10 02:36:35 +000066 <!--copy zip file to staging directory-->
david_williams22b02ab2008-06-23 03:15:35 +000067 <!-- but first make positive that staging area is completely clean, incase used before. In future, might want to fail if it's not? -->
68
david_williams130f38a2008-02-09 21:17:29 +000069 <echo
david_williamsb0f0e6c2008-02-10 06:22:40 +000070 message="deleting any possible files in staging area " />
david_williamse631c2d2008-02-10 02:36:35 +000071 <!-- this first output creates or replaces signingHistory file, all subsequent ones should append -->
david_williams22b02ab2008-06-23 03:15:35 +000072 <exec
73 executable="ssh"
74 output="${signingHistory}">
75 <arg
76 line="david_williams@build.eclipse.org mkdir -P ${stagingDirectory}/*" />
77 </exec>
david_williamse631c2d2008-02-10 02:36:35 +000078 <exec
79 executable="ssh"
david_williams22b02ab2008-06-23 03:15:35 +000080 output="${signingHistory}"
81 append="true">
david_williamse631c2d2008-02-10 02:36:35 +000082 <arg
83 line="david_williams@build.eclipse.org /bin/rm -rf ${stagingDirectory}/*" />
84 </exec>
85
86
87 <echo
88 message="copying zip file to staging directory" />
david_williams130f38a2008-02-09 21:17:29 +000089 <exec
90 executable="scp"
david_williamse631c2d2008-02-10 02:36:35 +000091 output="${signingHistory}"
92 append="true">
david_williams130f38a2008-02-09 21:17:29 +000093 <arg
david_williamsb0f0e6c2008-02-10 06:22:40 +000094 line="${buildDirectory}/${buildLabel}/${archiveName} david_williams@build.eclipse.org:${stagingDirectory}" />
david_williams130f38a2008-02-09 21:17:29 +000095 </exec>
david_williamsb0f0e6c2008-02-10 06:22:40 +000096
97 <!-- make sure it has correct permissions -->
david_williams130f38a2008-02-09 21:17:29 +000098 <exec
99 executable="ssh"
david_williams7e3c2722008-02-09 22:12:31 +0000100 output="${signingHistory}"
david_williams130f38a2008-02-09 21:17:29 +0000101 append="true">
102 <arg
103 line="david_williams@build.eclipse.org /bin/chmod ugo+rw ${outputFile} " />
104 </exec>
david_williams08384802008-02-09 22:06:18 +0000105
106
107 <!-- establish Original Attributes -->
david_williamse631c2d2008-02-10 02:36:35 +0000108 <!-- this first count is just to confirm there is only one file there ...
109 in future, we may want to fail here, if not -->
110 <exec
111 executable="ssh"
112 outputProperty="originalNFiles">
113 <arg
david_williams61c83102008-02-10 02:42:37 +0000114 line="david_williams@build.eclipse.org ls -l ${stagingDirectory} | wc -l" />
david_williamse631c2d2008-02-10 02:36:35 +0000115 </exec>
116 <echo
117 message="original Number of Files: ${originalNFiles}" />
david_williamsb0f0e6c2008-02-10 06:22:40 +0000118
119
david_williams08384802008-02-09 22:06:18 +0000120 <exec
121 executable="ssh"
122 outputProperty="originalAttributes">
123 <arg
124 line="david_williams@build.eclipse.org ls -l ${outputFile}" />
125 </exec>
126 <echo
127 message="original: ${originalAttributes}" />
128
129
david_williams130f38a2008-02-09 21:17:29 +0000130
131 <!--invoke sign script and wait-->
132 <echo
133 message="invoke sign script and wait" />
134 <exec
135 executable="ssh"
david_williams7e3c2722008-02-09 22:12:31 +0000136 output="${signingHistory}"
david_williams130f38a2008-02-09 21:17:29 +0000137 append="true">
138 <arg
139 line="david_williams@build.eclipse.org /usr/bin/sign ${outputFile} nomail" />
140 </exec>
141
142 <!--Wait for signed build to be available -->
143 <antcall
david_williams21c8beb2008-02-10 05:15:22 +0000144 target="waitForChangedAttributes"/>
david_williams130f38a2008-02-09 21:17:29 +0000145
146 <!--copy zip back to build machine -->
147 <echo
148 message="copy zip back to build machine" />
149 <exec
150 executable="scp"
david_williams7e3c2722008-02-09 22:12:31 +0000151 output="${signingHistory}"
david_williams130f38a2008-02-09 21:17:29 +0000152 append="true">
153 <arg
154 line="david_williams@build.eclipse.org:${outputFile} ${buildDirectory}/${buildLabel}" />
155 </exec>
156
157 <!--delete files on build.eclipse.org-->
158 <echo
159 message="delete temp files on build.eclipse.org" />
160 <exec
161 executable="ssh"
david_williams7e3c2722008-02-09 22:12:31 +0000162 output="${signingHistory}"
david_williams130f38a2008-02-09 21:17:29 +0000163 append="true">
164 <arg
david_williams875ac772008-02-09 21:38:05 +0000165 line="david_williams@build.eclipse.org /bin/rm -rf ${outputFile}" />
david_williams130f38a2008-02-09 21:17:29 +0000166 </exec>
167 </target>
168
169
david_williamsb0f0e6c2008-02-10 06:22:40 +0000170 <!--
171 ======= Utility tasks ========
172 -->
173
174 <!--
175 == compareAttributes ==
176 The compareAttributes task and the waitForChangedAttributes task call each other repeatedly,
177 until attributes are cheanged.
178 TODO: we might have to adjust "outer" timeouts, if this takes a lot longer,
179 and we might want to have our own time or loop checks here.
180 -->
david_williamse39ca402008-02-07 05:58:31 +0000181 <target
david_williams1429bca2008-02-09 22:27:48 +0000182 name="compareAttributes">
david_williams130f38a2008-02-09 21:17:29 +0000183 <!--poll file for change in attributes-->
david_williamse39ca402008-02-07 05:58:31 +0000184 <exec
david_williamse39ca402008-02-07 05:58:31 +0000185 executable="ssh"
david_williamse631c2d2008-02-10 02:36:35 +0000186 outputProperty="polledNFiles">
187 <arg
david_williams61c83102008-02-10 02:42:37 +0000188 line="david_williams@build.eclipse.org ls -l ${stagingDirectory} | wc -l" />
david_williamse631c2d2008-02-10 02:36:35 +0000189 </exec>
190 <echo
191 message="Polled Number of Files: ${polledNFiles}" />
192 <exec
193 executable="ssh"
david_williams1429bca2008-02-09 22:27:48 +0000194 outputProperty="polledAttributes">
david_williamse39ca402008-02-07 05:58:31 +0000195 <arg
david_williamse631c2d2008-02-10 02:36:35 +0000196 line="david_williams@build.eclipse.org ls -l ${outputFile}" />
david_williamse39ca402008-02-07 05:58:31 +0000197 </exec>
198 <echo
david_williams2018d682008-02-09 21:45:31 +0000199 message="original: ${originalAttributes}" />
david_williams4849c482008-02-10 05:09:32 +0000200 <echo
david_williamsb0f0e6c2008-02-10 06:22:40 +0000201 message="polled: ${polledAttributes}" />
202
203 <!--
204 We compare number of files, and attributes, for added safety. May not be necessary.
205 There should only be 1 files there, for the "count of lines" from ls -l command is 2,
206 one for "total bytes".
207
208 Once there signing process starts, there will be a directory and file make in the
209 staging area ... where the work is done ... and then that renamed to original name,
210 hence replacing it, and it will have a new "owner" and a new file size.
211 -->
david_williamse39ca402008-02-07 05:58:31 +0000212 <condition
david_williams1429bca2008-02-09 22:27:48 +0000213 property="attributesChanged">
david_williamse631c2d2008-02-10 02:36:35 +0000214 <and>
david_williamsd4609382008-02-10 04:56:36 +0000215 <equals
216 arg1="2"
217 arg2="${polledNFiles}"
218 trim="true" />
219 <not>
220 <equals
221 arg1="${originalAttributes}"
222 arg2="${polledAttributes}"
223 trim="true" />
224 </not>
david_williamse631c2d2008-02-10 02:36:35 +0000225 </and>
david_williamse39ca402008-02-07 05:58:31 +0000226 </condition>
david_williams4849c482008-02-10 05:09:32 +0000227
david_williamse39ca402008-02-07 05:58:31 +0000228 <antcall
david_williams21c8beb2008-02-10 05:15:22 +0000229 target="waitForChangedAttributes"/>
david_williamse39ca402008-02-07 05:58:31 +0000230 </target>
david_williamse631c2d2008-02-10 02:36:35 +0000231
david_williamsb0f0e6c2008-02-10 06:22:40 +0000232
233 <!--
234 == waitForChangedAttributes ==
235 Wait and then compare attributes of file to see if changed.
236 -->
david_williamse39ca402008-02-07 05:58:31 +0000237 <target
david_williams1429bca2008-02-09 22:27:48 +0000238 name="waitForChangedAttributes"
239 unless="attributesChanged">
david_williamsb0f0e6c2008-02-10 06:22:40 +0000240 <!-- increase, say to 120 or so, after testing -->
241 <sleep
242 seconds="60" />
david_williamse39ca402008-02-07 05:58:31 +0000243 <antcall
david_williams6fd6ba12008-02-10 04:37:30 +0000244 target="compareAttributes"
245 inheritAll="false">
david_williamse6be8c02008-02-09 21:54:44 +0000246 <param
david_williams1429bca2008-02-09 22:27:48 +0000247 name="originalAttributes"
248 value="${originalAttributes}" />
david_williams68a136b2008-02-10 04:44:39 +0000249 <param
250 name="stagingDirectory"
251 value="${stagingDirectory}"/>
252 <param
253 name="outputFile"
david_williams21c8beb2008-02-10 05:15:22 +0000254 value="${outputFile}"/>
david_williamse6be8c02008-02-09 21:54:44 +0000255 </antcall>
david_williamse39ca402008-02-07 05:58:31 +0000256 </target>
david_williamsb0f0e6c2008-02-10 06:22:40 +0000257
258 <!--
259 == check.sign ==
260 The property 'sign' is the critical attribute that determines if signing will be done.
261 If false, or absent, signing is not done.
262 We do not only rely on absence, so the "master properties" can set to false, and individual
263 components remain set to 'true' (for example, to have quick local builds, without changing
david_williams6d094142008-02-10 18:12:20 +0000264 component properties - currently used "SKIP_JAR_SIGNING" instead, but that
david_williamsd82102c2008-02-10 17:26:21 +0000265 doesn't feel quite right, so may change in future. SKIP_JAR_SIGNING can be
266 set as env variable or ant variable.
david_williamsb0f0e6c2008-02-10 06:22:40 +0000267 -->
david_williams130f38a2008-02-09 21:17:29 +0000268 <target
david_williams39601d12008-02-09 00:06:57 +0000269 name="check.sign">
270 <echo
271 message="sign: ${sign}" />
david_williams70934842008-02-10 08:22:16 +0000272 <echo
david_williamsfb048be2008-02-23 07:15:21 +0000273 message="env skip jar signing: ${env.SKIP_JAR_SIGNING}" />
274 <echo
275 message="skip jar signing: ${SKIP_JAR_SIGNING}" />
david_williams39601d12008-02-09 00:06:57 +0000276 <condition
277 property="doSign">
david_williams2171a5b2008-02-10 08:15:08 +0000278 <and>
279 <equals
280 arg1="${sign}"
281 arg2="true"
282 trim="true"
283 casesensitive="false" />
284 <not>
285 <equals
david_williams70934842008-02-10 08:22:16 +0000286 arg1="${env.SKIP_JAR_SIGNING}"
287 arg2="true"
david_williams2171a5b2008-02-10 08:15:08 +0000288 trim="true"
289 casesensitive="false" />
290 </not>
david_williamsd82102c2008-02-10 17:26:21 +0000291 <not>
292 <equals
293 arg1="${SKIP_JAR_SIGNING}"
294 arg2="true"
295 trim="true"
296 casesensitive="false" />
297 </not>
david_williams2171a5b2008-02-10 08:15:08 +0000298 </and>
david_williams39601d12008-02-09 00:06:57 +0000299 </condition>
300 </target>
david_williamse39ca402008-02-07 05:58:31 +0000301</project>