]>
Commit | Line | Data |
---|---|---|
1344b6f1 MM |
1 | #!/bin/sh |
2 | ||
864cdeb5 MM |
3 | builders= |
4 | specs= | |
5 | with= | |
6 | without= | |
7 | flags= | |
8 | command= | |
9 | command_flags= | |
16b5ec37 | 10 | gpg_opts= |
e728b34c ER |
11 | default_branch='HEAD' |
12 | distro= | |
bcb3a8b8 | 13 | url= |
bfa10c0d AM |
14 | |
15 | [ -x /usr/bin/python ] && send_mode="python" || send_mode="mail" | |
544ca060 | 16 | |
e29fbd39 AG |
17 | if [ -n "$HOME_ETC" ]; then |
18 | USER_CFG=$HOME_ETC/.requestrc | |
544ca060 | 19 | else |
e29fbd39 | 20 | USER_CFG=$HOME/.requestrc |
e728b34c | 21 | fi |
e29fbd39 | 22 | |
e728b34c | 23 | if [ ! -f "$USER_CFG" ]; then |
e29fbd39 | 24 | echo "Creating config file $USER_CFG. You *must* edit it." |
bcb3a8b8 | 25 | cat > $USER_CFG <<EOF |
1344b6f1 | 26 | priority=2 |
e728b34c | 27 | requester=deviloper@pld-linux.org |
544ca060 | 28 | default_key=deviloper@pld-linux.org |
bfa10c0d AM |
29 | send_mode="$send_mode" |
30 | url="$url" | |
1344b6f1 | 31 | mailer="/usr/sbin/sendmail -t" |
16b5ec37 | 32 | gpg_opts="" |
e728b34c | 33 | distro=th |
bcb3a8b8 | 34 | url="http://ep09.pld-linux.org:1234/" |
1344b6f1 | 35 | |
a757e911 | 36 | # defaults: |
771f742d | 37 | f_upgrade=yes |
544ca060 MM |
38 | EOF |
39 | exit | |
40 | fi | |
41 | ||
e728b34c | 42 | if [ -f "$USER_CFG" ]; then |
9cc9841b | 43 | . $USER_CFG |
e728b34c ER |
44 | fi |
45 | ||
bfa10c0d | 46 | send_request() { |
bcb3a8b8 ER |
47 | # switch to mail mode, if no url set |
48 | [ -z "$url" ] && send_mode="mail" | |
49 | ||
50 | ||
51 | case "$send_mode" in | |
52 | "mail") | |
53 | echo >&2 "* Sending using mail mode" | |
54 | cat - | $mailer | |
55 | ;; | |
56 | *) | |
57 | echo >&2 "* Sending using http mode to $url" | |
58 | cat - | python -c ' | |
bfa10c0d AM |
59 | import sys, urllib2 |
60 | ||
61 | try: | |
62 | data = sys.stdin.read() | |
63 | req = urllib2.Request(sys.argv[1], data) | |
64 | f = urllib2.urlopen(req, timeout=10) | |
65 | f.close() | |
66 | except Exception, e: | |
67 | print >> sys.stderr, "Problem while sending request: %s" % e | |
68 | sys.exit(1) | |
cd28f421 | 69 | print >> sys.stdout, "Request queued." |
bfa10c0d | 70 | ' "$url" |
bcb3a8b8 ER |
71 | ;; |
72 | esac | |
bfa10c0d AM |
73 | } |
74 | ||
11270534 ER |
75 | die() { |
76 | echo >&2 "$0: $*" | |
9cc9841b | 77 | exit 1 |
a757e911 | 78 | } |
1344b6f1 | 79 | |
586a5f1f | 80 | usage() { |
9cc9841b ER |
81 | echo "Usage: make-request.sh [OPTION] ... [SPECFILE] ...." |
82 | echo "" | |
83 | echo "Mandatory arguments to long options are mandatory for short options too." | |
84 | echo " -C --config-file /path/to/config/file" | |
85 | echo " Source additional config file (after $USER_CFG), useful when" | |
86 | echo " when sending build requests to Ac/Th from the same account" | |
87 | echo " -b 'BUILDER BUILDER ...' --builder='BUILDER BUILDER ...'" | |
88 | echo " Sends request to given builders" | |
89 | echo " --with VALUE --without VALUE" | |
90 | echo " Build package with(out) a given bcond" | |
91 | echo " --kernel VALUE" | |
92 | echo " set alt_kernel to VALUE" | |
be264f26 ER |
93 | echo " --target VALUE" |
94 | echo " set --target to VALUE" | |
11270534 ER |
95 | echo " --branch VALUE" |
96 | echo " specify default branch for specs in request" | |
9cc9841b ER |
97 | echo " -t --test-build" |
98 | echo " Performs a 'test-build'. Package will be uploaded to test/ tree" | |
99 | echo " and won't be upgraded on builders" | |
100 | echo " -r --ready-build" | |
101 | echo " Build and upgrade package and upload it to ready/ tree" | |
102 | echo " -u --upgrade" | |
103 | echo " Forces package upgrade (for use with -t)" | |
104 | echo " -n --no-upgrade" | |
105 | echo " Disables package upgrade (for use with -r)" | |
106 | echo " -ni -no-install-br" | |
107 | echo " Do not install missing BuildRequires (--nodeps)" | |
d8f1c9c0 | 108 | echo " -j Number of parallel jobs for single build" |
9cc9841b ER |
109 | echo " -f --flag" |
110 | echo " -d --distro" | |
111 | echo " Specify value for \$distro" | |
112 | echo " -cf --command-flag" | |
113 | echo " Not yet documented" | |
114 | echo " -c --command" | |
115 | echo " Executes a given command on builders" | |
116 | echo " --test-remove-pkg" | |
117 | echo " shortcut for --command poldek -evt ARGS" | |
118 | echo " --remove-pkg" | |
119 | echo " shortcut for --command poldek -ev --noask ARGS" | |
120 | echo " --upgrade-pkg" | |
c983e07f | 121 | echo " shortcut for --command poldek --up -Uv ARGS" |
9cc9841b ER |
122 | echo " --cvsup" |
123 | echo " Updates builders infrastructure (outside chroot)" | |
124 | echo " -q " | |
125 | echo " shortcut for --command rpm -q ARGS" | |
126 | echo " -g --gpg-opts \"opts\"" | |
127 | echo " Pass additional options to gpg binary" | |
128 | echo " -p --priority VALUE" | |
129 | echo " sets request priority (default 2)" | |
130 | echo " -h --help" | |
131 | echo " Displays this help message" | |
132 | exit 0; | |
586a5f1f AG |
133 | } |
134 | ||
135 | ||
1344b6f1 | 136 | while [ $# -gt 0 ] ; do |
9cc9841b ER |
137 | case "$1" in |
138 | --distro | -d ) | |
139 | distro=$2 | |
140 | shift | |
141 | ;; | |
142 | ||
143 | --config-file | -C ) | |
144 | [ -f $2 ] && . $2 || die "Config file not found" | |
145 | shift | |
146 | ;; | |
147 | ||
148 | --builder | -b ) | |
149 | builders="$builders $2" | |
150 | shift | |
151 | ;; | |
152 | ||
153 | --with ) | |
154 | with="$with $2" | |
155 | shift | |
156 | ;; | |
157 | ||
158 | --without ) | |
159 | without="$without $2" | |
160 | shift | |
161 | ;; | |
162 | ||
163 | --test-build | -t ) | |
164 | build_mode=test | |
165 | f_upgrade=no | |
166 | ;; | |
167 | ||
168 | --kernel ) | |
169 | kernel=$2 | |
170 | shift | |
171 | ;; | |
172 | ||
be264f26 ER |
173 | --target) |
174 | target=$2 | |
175 | shift | |
176 | ;; | |
177 | ||
11270534 ER |
178 | --branch) |
179 | branch=$2 | |
180 | shift | |
181 | ;; | |
182 | ||
9cc9841b ER |
183 | --priority | -p ) |
184 | priority=$2 | |
185 | shift | |
186 | ;; | |
187 | ||
188 | --ready-build | -r ) | |
189 | build_mode=ready | |
190 | ;; | |
191 | ||
192 | --upgrade | -u ) | |
193 | f_upgrade=yes | |
194 | ;; | |
195 | ||
196 | --no-upgrade | -n ) | |
197 | f_upgrade=no | |
198 | ;; | |
199 | ||
200 | --no-install-br | -ni ) | |
201 | flags="$flags no-install-br" | |
202 | ;; | |
203 | ||
d8f1c9c0 AM |
204 | -j ) |
205 | jobs="$2" | |
206 | shift | |
207 | ;; | |
208 | ||
9cc9841b ER |
209 | --flag | -f ) |
210 | flags="$flags $2" | |
211 | shift | |
212 | ;; | |
213 | ||
214 | --command-flags | -cf ) | |
215 | command_flags="$2" | |
216 | shift | |
217 | ;; | |
218 | ||
219 | --command | -c ) | |
220 | command="$2" | |
221 | f_upgrade=no | |
222 | shift | |
223 | ;; | |
224 | --test-remove-pkg) | |
225 | command="poldek -evt $2" | |
226 | f_upgrade=no | |
227 | shift | |
228 | ;; | |
229 | --remove-pkg) | |
c4c115cc | 230 | command="for a in $2; do poldek -ev --noask \$a; done" |
9cc9841b ER |
231 | f_upgrade=no |
232 | shift | |
233 | ;; | |
b098536f | 234 | --upgrade-pkg|-Uhv) |
c983e07f | 235 | command="poldek --up -Uv $2" |
9cc9841b ER |
236 | f_upgrade=no |
237 | shift | |
238 | ;; | |
239 | -q) | |
240 | command="rpm -q $2" | |
241 | f_upgrade=no | |
242 | shift | |
243 | ;; | |
244 | ||
245 | --cvsup ) | |
246 | command_flags="no-chroot" | |
247 | command="cvs up" | |
49a8a604 | 248 | f_upgrade=no |
9cc9841b ER |
249 | ;; |
250 | ||
251 | --gpg-opts | -g ) | |
252 | gpg_opts="$2" | |
253 | shift | |
254 | ;; | |
255 | ||
256 | --help | -h ) | |
257 | usage | |
258 | ;; | |
259 | ||
260 | -* ) | |
261 | die "unknown knob: $1" | |
262 | ;; | |
263 | ||
264 | *:* | * ) | |
265 | specs="$specs $1" | |
266 | ;; | |
267 | esac | |
268 | shift | |
1344b6f1 MM |
269 | done |
270 | ||
e728b34c ER |
271 | case "$distro" in |
272 | ac) | |
9cc9841b ER |
273 | builder_email="builder-ac@pld-linux.org" |
274 | default_builders="ac-*" | |
275 | default_branch="AC-branch" | |
276 | ;; | |
3e991c55 | 277 | ac-java) # fake "distro" for java available ac architectures |
e4047e17 | 278 | builder_email="builder-ac@pld-linux.org" |
9cc9841b ER |
279 | default_builders="ac-i586 ac-i686 ac-athlon ac-amd64" |
280 | default_branch="AC-branch" | |
281 | ;; | |
70d46bca | 282 | ac-xen) # fake "distro" for xen-enabled architectures |
e4047e17 ER |
283 | builder_email="builder-ac@pld-linux.org" |
284 | default_builders="ac-i686 ac-athlon ac-amd64" | |
285 | default_branch="AC-branch" | |
70d46bca | 286 | ;; |
e728b34c | 287 | ti) |
9cc9841b ER |
288 | builder_email="builderti@ep09.pld-linux.org" |
289 | default_builders="ti-*" | |
290 | ;; | |
e728b34c | 291 | th) |
9cc9841b ER |
292 | builder_email="builderth@ep09.pld-linux.org" |
293 | default_builders="th-*" | |
bcb3a8b8 | 294 | url="http://ep09.pld-linux.org:1234/" |
9cc9841b | 295 | ;; |
3e991c55 | 296 | th-java) # fake "distro" for java available th architectures |
e219518b | 297 | builder_email="builderth@ep09.pld-linux.org" |
976435cb | 298 | default_builders="th-x86_64 th-athlon th-i686" |
bcb3a8b8 | 299 | url="http://ep09.pld-linux.org:1234/" |
e219518b | 300 | ;; |
32384897 | 301 | aidath) |
302 | builder_email="builderaidath@ep09.pld-linux.org" | |
303 | default_builders="aidath-*" | |
304 | ;; | |
14b580de ER |
305 | *) |
306 | die "distro \`$distro' not known" | |
307 | ;; | |
e728b34c ER |
308 | esac |
309 | ||
11270534 ER |
310 | branch=${branch:-$default_branch} |
311 | ||
e728b34c | 312 | specs=`for s in $specs; do |
9cc9841b ER |
313 | case "$s" in |
314 | *.spec:*) # spec with branch | |
315 | echo $s | |
316 | ;; | |
317 | *.spec) # spec without branch | |
11270534 | 318 | echo $s:$branch |
9cc9841b ER |
319 | ;; |
320 | *:*) # package name with branch | |
321 | echo $s | sed -e 's/:/.spec:/' | |
322 | ;; | |
323 | *) # just package name | |
11270534 | 324 | echo $s.spec:$branch |
9cc9841b ER |
325 | ;; |
326 | esac | |
878677a8 | 327 | done` |
1344b6f1 | 328 | |
2f470d17 | 329 | if [[ "$requester" != *@* ]] ; then |
9cc9841b | 330 | requester="$requester@pld-linux.org" |
2f470d17 MK |
331 | fi |
332 | ||
14b580de | 333 | if [ -z "$builders" ] ; then |
9cc9841b | 334 | builders="$default_builders" |
a757e911 MM |
335 | fi |
336 | ||
544ca060 | 337 | if [ "$f_upgrade" = "yes" ] ; then |
9cc9841b | 338 | flags="$flags upgrade" |
a757e911 MM |
339 | fi |
340 | ||
e936beda | 341 | if [ "$build_mode" = "test" ] ; then |
9cc9841b ER |
342 | if [ "$f_upgrade" = "yes" ] ; then |
343 | die "--upgrade and --test-build are mutually exclusive" | |
344 | fi | |
345 | flags="$flags test-build" | |
e936beda MM |
346 | fi |
347 | ||
e728b34c ER |
348 | if [ -z "$build_mode" ] ; then |
349 | # missing build mode, builders go crazy when you proceed" | |
350 | die "please specify build mode" | |
351 | fi | |
352 | ||
353 | ||
280b1afd | 354 | ok= |
e728b34c ER |
355 | for s in $specs; do |
356 | ok=1 | |
280b1afd MM |
357 | done |
358 | ||
359 | if [ "$ok" = "" ] ; then | |
9cc9841b ER |
360 | if [ "$command" = "" ] ; then |
361 | die "no specs passed" | |
362 | fi | |
c4aa0539 | 363 | else |
9cc9841b ER |
364 | if [ "$command" != "" ] ; then |
365 | die "cannot pass specs and --command" | |
366 | fi | |
280b1afd MM |
367 | fi |
368 | ||
1344b6f1 MM |
369 | id=$(uuidgen) |
370 | ||
371 | gen_req() { | |
9cc9841b ER |
372 | echo "<group id='$id' no='0' flags='$flags'>" |
373 | echo " <time>$(date +%s)</time>" | |
374 | echo " <priority>$priority</priority>" | |
d8f1c9c0 AM |
375 | if [ -n "$jobs" ]; then |
376 | echo " <maxjobs>$jobs</maxjobs>" | |
377 | fi | |
9cc9841b ER |
378 | echo |
379 | ||
380 | if [ "$command" != "" ] ; then | |
381 | bid=$(uuidgen) | |
a32d5b77 | 382 | echo >&2 "* Command: $command" |
9cc9841b | 383 | echo " <batch id='$bid' depends-on=''>" |
037ca246 | 384 | echo " <command flags='$command_flags'>$(echo "$command" | sed -e 's,&,\&,g;s,<,\<,g;s,>,\>,g')</command>" |
9cc9841b | 385 | echo " <info></info>" |
14b580de ER |
386 | for b in $builders; do |
387 | echo >&2 "* Builder: $b" | |
9cc9841b ER |
388 | echo " <builder>$b</builder>" |
389 | done | |
390 | echo " </batch>" | |
391 | else | |
392 | ||
393 | echo >&2 "* Using priority $priority" | |
d8f1c9c0 AM |
394 | if [ -n "$jobs" ]; then |
395 | echo >&2 "* Using jobs $jobs" | |
396 | fi | |
9cc9841b ER |
397 | echo >&2 "* Using email $builder_email" |
398 | echo >&2 "* Build mode: $build_mode" | |
e728b34c ER |
399 | if [ "$f_upgrade" = "yes" ] ; then |
400 | echo >&2 "* Upgrade mode: $f_upgrade" | |
401 | fi | |
9cc9841b | 402 | echo >&2 "* Queue-ID: $id" |
e728b34c | 403 | |
9cc9841b ER |
404 | # first id: |
405 | fid= | |
e728b34c | 406 | i=1 |
4d222cff ER |
407 | |
408 | for b in $builders; do | |
409 | echo >&2 "* Builder: $b" | |
410 | done | |
9cc9841b ER |
411 | for s in $specs; do |
412 | bid=$(uuidgen) | |
413 | echo " <batch id='$bid' depends-on='$fid'>" | |
414 | [ "$fid" = "" ] && fid="$bid" | |
415 | name=$(echo "$s" | sed -e 's|:.*||') | |
416 | branch=$(echo "$s" | sed -e 's|.*:||') | |
be264f26 | 417 | echo >&2 "* Adding #$i $name:$branch${kernel:+ alt_kernel=$kernel}${target:+ target=$target}" |
9cc9841b ER |
418 | echo " <spec>$name</spec>" |
419 | echo " <branch>$branch</branch>" | |
420 | echo " ${kernel:+<kernel>$kernel</kernel>}" | |
be264f26 | 421 | echo " ${target:+<target>$target</target>}" |
9cc9841b ER |
422 | echo " <info></info>" |
423 | echo | |
424 | for b in $with; do | |
425 | echo " <with>$b</with>" | |
426 | done | |
427 | for b in $without; do | |
428 | echo " <without>$b</without>" | |
429 | done | |
430 | echo | |
431 | for b in $builders; do | |
432 | echo " <builder>$b</builder>" | |
433 | done | |
434 | echo " </batch>" | |
e728b34c | 435 | i=$((i+1)) |
9cc9841b | 436 | done |
c4aa0539 | 437 | |
9cc9841b | 438 | fi |
e728b34c | 439 | |
9cc9841b | 440 | echo "</group>" |
1344b6f1 MM |
441 | } |
442 | ||
443 | gen_email () { | |
e728b34c ER |
444 | # make request first, so the STDERR/STDOUT streams won't be mixed |
445 | local req=$(gen_req) | |
446 | ||
1344b6f1 | 447 | cat <<EOF |
2f470d17 | 448 | From: $requester |
1344b6f1 MM |
449 | To: $builder_email |
450 | Subject: build request | |
451 | Message-Id: <$id@$(hostname)> | |
452 | X-New-PLD-Builder: request | |
2d28916b | 453 | X-Requester-Version: \$Id$ |
1344b6f1 | 454 | |
e728b34c | 455 | $(echo "$req" | gpg --clearsign --default-key $default_key $gpg_opts) |
1344b6f1 MM |
456 | EOF |
457 | } | |
458 | ||
bfa10c0d | 459 | gen_email | send_request |