blob: e1ff41b9d7fb59bac0f8bb6ceb558352aff26897 [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
david_williamse8df75a2008-06-23 03:30:07 +000076 line="david_williams@build.eclipse.org mkdir -p ${stagingDirectory}/*" />
david_williams22b02ab2008-06-23 03:15:35 +000077 </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}"
david_williams9e1c90f2009-02-10 03:14:32 +000092 failonerror="true"
david_williamse631c2d2008-02-10 02:36:35 +000093 append="true">
david_williams130f38a2008-02-09 21:17:29 +000094 <arg
david_williamsb0f0e6c2008-02-10 06:22:40 +000095 line="${buildDirectory}/${buildLabel}/${archiveName} david_williams@build.eclipse.org:${stagingDirectory}" />
david_williams130f38a2008-02-09 21:17:29 +000096 </exec>
david_williamsb0f0e6c2008-02-10 06:22:40 +000097
98 <!-- make sure it has correct permissions -->
david_williams130f38a2008-02-09 21:17:29 +000099 <exec
100 executable="ssh"
david_williams7e3c2722008-02-09 22:12:31 +0000101 output="${signingHistory}"
david_williams130f38a2008-02-09 21:17:29 +0000102 append="true">
103 <arg
104 line="david_williams@build.eclipse.org /bin/chmod ugo+rw ${outputFile} " />
105 </exec>
david_williams08384802008-02-09 22:06:18 +0000106
107
108 <!-- establish Original Attributes -->
david_williamse631c2d2008-02-10 02:36:35 +0000109 <!-- this first count is just to confirm there is only one file there ...
110 in future, we may want to fail here, if not -->
111 <exec
112 executable="ssh"
david_williams9e1c90f2009-02-10 03:14:32 +0000113 failonerror="true"
david_williamse631c2d2008-02-10 02:36:35 +0000114 outputProperty="originalNFiles">
115 <arg
david_williams61c83102008-02-10 02:42:37 +0000116 line="david_williams@build.eclipse.org ls -l ${stagingDirectory} | wc -l" />
david_williamse631c2d2008-02-10 02:36:35 +0000117 </exec>
118 <echo
119 message="original Number of Files: ${originalNFiles}" />
david_williamsb0f0e6c2008-02-10 06:22:40 +0000120
121
david_williams08384802008-02-09 22:06:18 +0000122 <exec
123 executable="ssh"
david_williams9e1c90f2009-02-10 03:14:32 +0000124 failonerror="true"
david_williams08384802008-02-09 22:06:18 +0000125 outputProperty="originalAttributes">
126 <arg
127 line="david_williams@build.eclipse.org ls -l ${outputFile}" />
128 </exec>
129 <echo
130 message="original: ${originalAttributes}" />
131
132
david_williams130f38a2008-02-09 21:17:29 +0000133
134 <!--invoke sign script and wait-->
135 <echo
136 message="invoke sign script and wait" />
137 <exec
138 executable="ssh"
david_williams7e3c2722008-02-09 22:12:31 +0000139 output="${signingHistory}"
david_williams130f38a2008-02-09 21:17:29 +0000140 append="true">
141 <arg
142 line="david_williams@build.eclipse.org /usr/bin/sign ${outputFile} nomail" />
143 </exec>
144
145 <!--Wait for signed build to be available -->
146 <antcall
david_williams21c8beb2008-02-10 05:15:22 +0000147 target="waitForChangedAttributes"/>
david_williams130f38a2008-02-09 21:17:29 +0000148
149 <!--copy zip back to build machine -->
150 <echo
151 message="copy zip back to build machine" />
152 <exec
153 executable="scp"
david_williams7e3c2722008-02-09 22:12:31 +0000154 output="${signingHistory}"
david_williams130f38a2008-02-09 21:17:29 +0000155 append="true">
156 <arg
157 line="david_williams@build.eclipse.org:${outputFile} ${buildDirectory}/${buildLabel}" />
158 </exec>
159
160 <!--delete files on build.eclipse.org-->
161 <echo
162 message="delete temp files on build.eclipse.org" />
163 <exec
164 executable="ssh"
david_williams7e3c2722008-02-09 22:12:31 +0000165 output="${signingHistory}"
david_williams130f38a2008-02-09 21:17:29 +0000166 append="true">
167 <arg
david_williams875ac772008-02-09 21:38:05 +0000168 line="david_williams@build.eclipse.org /bin/rm -rf ${outputFile}" />
david_williams130f38a2008-02-09 21:17:29 +0000169 </exec>
david_williams717c2fc2008-06-23 03:57:58 +0000170
171 <echo
172 message="delete signing directory we created on build.eclipse.org" />
173 <exec
174 executable="ssh"
175 output="${signingHistory}"
176 append="true">
177 <arg
178 line="david_williams@build.eclipse.org /bin/rm -rf ${stagingDirectory}" />
179 </exec>
180
david_williams130f38a2008-02-09 21:17:29 +0000181 </target>
182
183
david_williamsb0f0e6c2008-02-10 06:22:40 +0000184 <!--
185 ======= Utility tasks ========
186 -->
187
188 <!--
189 == compareAttributes ==
190 The compareAttributes task and the waitForChangedAttributes task call each other repeatedly,
191 until attributes are cheanged.
192 TODO: we might have to adjust "outer" timeouts, if this takes a lot longer,
193 and we might want to have our own time or loop checks here.
194 -->
david_williamse39ca402008-02-07 05:58:31 +0000195 <target
david_williams1429bca2008-02-09 22:27:48 +0000196 name="compareAttributes">
david_williams130f38a2008-02-09 21:17:29 +0000197 <!--poll file for change in attributes-->
david_williamse39ca402008-02-07 05:58:31 +0000198 <exec
david_williamse39ca402008-02-07 05:58:31 +0000199 executable="ssh"
david_williamse631c2d2008-02-10 02:36:35 +0000200 outputProperty="polledNFiles">
201 <arg
david_williams61c83102008-02-10 02:42:37 +0000202 line="david_williams@build.eclipse.org ls -l ${stagingDirectory} | wc -l" />
david_williamse631c2d2008-02-10 02:36:35 +0000203 </exec>
204 <echo
205 message="Polled Number of Files: ${polledNFiles}" />
206 <exec
207 executable="ssh"
david_williams1429bca2008-02-09 22:27:48 +0000208 outputProperty="polledAttributes">
david_williamse39ca402008-02-07 05:58:31 +0000209 <arg
david_williamse631c2d2008-02-10 02:36:35 +0000210 line="david_williams@build.eclipse.org ls -l ${outputFile}" />
david_williamse39ca402008-02-07 05:58:31 +0000211 </exec>
212 <echo
david_williams2018d682008-02-09 21:45:31 +0000213 message="original: ${originalAttributes}" />
david_williams4849c482008-02-10 05:09:32 +0000214 <echo
david_williamsb0f0e6c2008-02-10 06:22:40 +0000215 message="polled: ${polledAttributes}" />
216
217 <!--
218 We compare number of files, and attributes, for added safety. May not be necessary.
219 There should only be 1 files there, for the "count of lines" from ls -l command is 2,
220 one for "total bytes".
221
222 Once there signing process starts, there will be a directory and file make in the
223 staging area ... where the work is done ... and then that renamed to original name,
224 hence replacing it, and it will have a new "owner" and a new file size.
225 -->
david_williamse39ca402008-02-07 05:58:31 +0000226 <condition
david_williams1429bca2008-02-09 22:27:48 +0000227 property="attributesChanged">
david_williamse631c2d2008-02-10 02:36:35 +0000228 <and>
david_williamsd4609382008-02-10 04:56:36 +0000229 <equals
230 arg1="2"
231 arg2="${polledNFiles}"
232 trim="true" />
233 <not>
234 <equals
235 arg1="${originalAttributes}"
236 arg2="${polledAttributes}"
237 trim="true" />
238 </not>
david_williamse631c2d2008-02-10 02:36:35 +0000239 </and>
david_williamse39ca402008-02-07 05:58:31 +0000240 </condition>
david_williams4849c482008-02-10 05:09:32 +0000241
david_williamse39ca402008-02-07 05:58:31 +0000242 <antcall
david_williams21c8beb2008-02-10 05:15:22 +0000243 target="waitForChangedAttributes"/>
david_williamse39ca402008-02-07 05:58:31 +0000244 </target>
david_williamse631c2d2008-02-10 02:36:35 +0000245
david_williamsb0f0e6c2008-02-10 06:22:40 +0000246
247 <!--
248 == waitForChangedAttributes ==
249 Wait and then compare attributes of file to see if changed.
250 -->
david_williamse39ca402008-02-07 05:58:31 +0000251 <target
david_williams1429bca2008-02-09 22:27:48 +0000252 name="waitForChangedAttributes"
253 unless="attributesChanged">
david_williamsb0f0e6c2008-02-10 06:22:40 +0000254 <!-- increase, say to 120 or so, after testing -->
255 <sleep
david_williamsf157fb32008-07-29 17:23:59 +0000256 seconds="180" />
david_williamse39ca402008-02-07 05:58:31 +0000257 <antcall
david_williams6fd6ba12008-02-10 04:37:30 +0000258 target="compareAttributes"
259 inheritAll="false">
david_williamse6be8c02008-02-09 21:54:44 +0000260 <param
david_williams1429bca2008-02-09 22:27:48 +0000261 name="originalAttributes"
262 value="${originalAttributes}" />
david_williams68a136b2008-02-10 04:44:39 +0000263 <param
264 name="stagingDirectory"
265 value="${stagingDirectory}"/>
266 <param
267 name="outputFile"
david_williams21c8beb2008-02-10 05:15:22 +0000268 value="${outputFile}"/>
david_williamse6be8c02008-02-09 21:54:44 +0000269 </antcall>
david_williamse39ca402008-02-07 05:58:31 +0000270 </target>
david_williamsb0f0e6c2008-02-10 06:22:40 +0000271
272 <!--
273 == check.sign ==
274 The property 'sign' is the critical attribute that determines if signing will be done.
275 If false, or absent, signing is not done.
276 We do not only rely on absence, so the "master properties" can set to false, and individual
277 components remain set to 'true' (for example, to have quick local builds, without changing
david_williams6d094142008-02-10 18:12:20 +0000278 component properties - currently used "SKIP_JAR_SIGNING" instead, but that
david_williamsd82102c2008-02-10 17:26:21 +0000279 doesn't feel quite right, so may change in future. SKIP_JAR_SIGNING can be
280 set as env variable or ant variable.
david_williamsb0f0e6c2008-02-10 06:22:40 +0000281 -->
david_williams130f38a2008-02-09 21:17:29 +0000282 <target
david_williams39601d12008-02-09 00:06:57 +0000283 name="check.sign">
284 <echo
285 message="sign: ${sign}" />
david_williams70934842008-02-10 08:22:16 +0000286 <echo
david_williamsfb048be2008-02-23 07:15:21 +0000287 message="env skip jar signing: ${env.SKIP_JAR_SIGNING}" />
288 <echo
289 message="skip jar signing: ${SKIP_JAR_SIGNING}" />
david_williams39601d12008-02-09 00:06:57 +0000290 <condition
291 property="doSign">
david_williams2171a5b2008-02-10 08:15:08 +0000292 <and>
293 <equals
294 arg1="${sign}"
295 arg2="true"
296 trim="true"
297 casesensitive="false" />
298 <not>
299 <equals
david_williams70934842008-02-10 08:22:16 +0000300 arg1="${env.SKIP_JAR_SIGNING}"
301 arg2="true"
david_williams2171a5b2008-02-10 08:15:08 +0000302 trim="true"
303 casesensitive="false" />
304 </not>
david_williamsd82102c2008-02-10 17:26:21 +0000305 <not>
306 <equals
307 arg1="${SKIP_JAR_SIGNING}"
308 arg2="true"
309 trim="true"
310 casesensitive="false" />
311 </not>
david_williams2171a5b2008-02-10 08:15:08 +0000312 </and>
david_williams39601d12008-02-09 00:06:57 +0000313 </condition>
314 </target>
david_williamse39ca402008-02-07 05:58:31 +0000315</project>