]> git.pld-linux.org Git - projects/pld-builder.new.git/blame - client/make-request.sh
Replace rebuild-th-kernel.sh with rebuild-kernel-packages.py
[projects/pld-builder.new.git] / client / make-request.sh
CommitLineData
1344b6f1 1#!/bin/sh
9e9a1e30 2# vim:noet:ts=4:sw=4
5d3fc0f8 3VERSION=1.89
1344b6f1 4
b4818b81 5# prevent "*" from being expanded in builders var
7ae0b732 6set -f
b4818b81 7
864cdeb5 8builders=
864cdeb5
MM
9with=
10without=
11flags=
12command=
13command_flags=
16b5ec37 14gpg_opts=
e728b34c 15default_branch='HEAD'
da6bf40b 16dist=
bcb3a8b8 17url=
218a4c96 18no_depend=no
12151609 19verbose=no
da6bf40b 20autotag=no
d3516ebf 21requester_override=
5d3fc0f8 22relup=no
bfa10c0d 23
98abd48b
ER
24if [ -x /usr/bin/python ]; then
25 send_mode="python"
26else
27 echo "No python present, using mail mode"
28 send_mode="mail"
29fi
544ca060 30
e29fbd39
AG
31if [ -n "$HOME_ETC" ]; then
32 USER_CFG=$HOME_ETC/.requestrc
544ca060 33else
e29fbd39 34 USER_CFG=$HOME/.requestrc
e728b34c 35fi
e29fbd39 36
e728b34c 37if [ ! -f "$USER_CFG" ]; then
e29fbd39 38 echo "Creating config file $USER_CFG. You *must* edit it."
bcb3a8b8 39 cat > $USER_CFG <<EOF
1344b6f1 40priority=2
e728b34c 41requester=deviloper@pld-linux.org
544ca060 42default_key=deviloper@pld-linux.org
bfa10c0d
AM
43send_mode="$send_mode"
44url="$url"
044d04b8 45mailer="/usr/lib/sendmail -t"
16b5ec37 46gpg_opts=""
da6bf40b 47dist=th
f5f78f5f 48url="https://srcbuilder.pld-linux.org:1235/"
1344b6f1 49
a757e911 50# defaults:
771f742d 51f_upgrade=yes
544ca060
MM
52EOF
53exit
54fi
55
e728b34c 56if [ -f "$USER_CFG" ]; then
9cc9841b 57 . $USER_CFG
da6bf40b
ER
58 # legacy fallback
59 if [ "${distro:+set}" = "set" ]; then
60 dist=$distro
61 fi
e728b34c
ER
62fi
63
45d8ed70
ER
64# internal options, not to be overriden
65specs=
66df_fetch=no
a166aeda 67upgrade_macros=no
045b9f0b 68upgrade_scripts=no
0387e9e2 69cr=$(printf "\r")
45d8ed70 70
c9f4704f
ER
71# Set colors
72c_star=$(tput setaf 2)
55bfbaf6 73c_red=$(tput setaf 1)
c9f4704f
ER
74c_norm=$(tput op)
75msg() {
76 echo >&2 "${c_star}*${c_norm} $*"
77}
55bfbaf6
ER
78red() {
79 echo "${c_red}$*${c_norm}"
80}
c9f4704f 81
45d8ed70
ER
82die() {
83 echo >&2 "$0: $*"
84 exit 1
85}
86
bfa10c0d 87send_request() {
bcb3a8b8
ER
88 # switch to mail mode, if no url set
89 [ -z "$url" ] && send_mode="mail"
90
9e9a1e30
ER
91 if [ -n "$wait" ]; then
92 msg "Waiting $wait seconds before sending request"
93 sleep $wait
94 msg "Wait has ended, proceeding!"
95 fi
96
bcb3a8b8
ER
97 case "$send_mode" in
98 "mail")
c9f4704f 99 msg "Sending using mail mode"
bcb3a8b8
ER
100 cat - | $mailer
101 ;;
102 *)
9e9a1e30 103 msg "Sending using HTTP mode to $url"
bcb3a8b8 104 cat - | python -c '
e3a591a1 105import sys, socket, urllib2
bfa10c0d
AM
106
107try:
108 data = sys.stdin.read()
e6aa37ec 109 url = sys.argv[1]
04803313 110 socket.setdefaulttimeout(30)
e6aa37ec 111 req = urllib2.Request(url, data)
e3a591a1 112 f = urllib2.urlopen(req)
bfa10c0d
AM
113 f.close()
114except Exception, e:
e6aa37ec 115 print >> sys.stderr, "Problem while sending request via HTTP: %s: %s" % (url, e)
bfa10c0d 116 sys.exit(1)
f04b3329 117print >> sys.stdout, "Request queued via HTTP."
bfa10c0d 118' "$url"
bcb3a8b8
ER
119 ;;
120 esac
bfa10c0d
AM
121}
122
8727819e
ER
123# htmlspecialchars: escape <, > and &
124hsc() {
125 local input=$1
126 echo -E "$input" | sed -e 's,&,\&amp;,g;s,<,\&lt;,g;s,>,\&gt;,g'
127}
128
45d8ed70
ER
129# simple df_fetcher, based on packages/fetchsrc_request
130# TODO: tcp (smtp) mode
131# TODO: adjust for ~/.requestrc config
132df_fetch() {
133 local specs="$@"
134
135 # Sending by
044d04b8 136 local MAILER='/usr/lib/sendmail'
45d8ed70
ER
137 # MAILER='/usr/bin/msmtp'
138 # Sending via
139 local VIA="SENDMAIL"
140 #VIA="localhost"
141 local VIA_ARGS=""
142 #VIA_ARGS="some additional flags"
143 # e.g. for msmtp:
144 # VIA_ARGS='-a gmail'
145 #
146 # DISTFILES EMAIL
850c180f 147 local DMAIL="distfiles@cvs.pld-linux.org"
45d8ed70
ER
148
149 local HOST=$(hostname -f)
150 local LOGIN=${requester%@*}
151
9e9a1e30 152 local SPEC BRANCH
45d8ed70 153 for spec in $specs; do
9e9a1e30
ER
154 SPEC=$(echo "$spec" | sed -e 's|:.*||')
155 SPEC=${SPEC%.spec}
156 BRANCH=$(echo "$spec" | sed -e 's|.*:||')
45d8ed70
ER
157 echo >&2 "Distfiles Request: $SPEC:$BRANCH via $MAILER ${VIA_ARGS:+ ($VIA_ARGS)}"
158 cat <<-EOF | "$MAILER" -t -i $VIA_ARGS
159 To: $DMAIL
160 From: $LOGIN <$LOGIN@$HOST>
161 Subject: fetchsrc_request notify
45d8ed70
ER
162 X-distfiles-request: yes
163 X-Login: $LOGIN
1768b4b0 164 X-Package: $SPEC
45d8ed70
ER
165 X-Branch: $BRANCH
166 X-Flags: force-reply
167
168 .
169 EOF
170 done
a757e911 171}
1344b6f1 172
41a0b4f6
ER
173# autotag from rpm-build-macros
174# displays latest used tag for a specfile
175autotag() {
176 local out s
177 for s in "$@"; do
178 # strip branches
179 s=${s%:*}
180 # ensure package ends with .spec
181 s=${s%.spec}.spec
057cd5df
ER
182 git fetch --tags
183 out=$(git for-each-ref --count=1 --sort=-authordate refs/tags/auto/$dist \
d235cd88 184 --format='%(refname:short)')
41a0b4f6
ER
185 echo "$s:$out"
186 done
187}
188
189# get autotag for specs
057cd5df 190# WARNING: This may checkout some files from VCS
41a0b4f6
ER
191get_autotag() {
192 local pkg spec rpmdir
193
194 rpmdir=$(rpm -E %_topdir)
41a0b4f6 195 for pkg in "$@"; do
a2cad6fc 196 cd $rpmdir
41a0b4f6
ER
197 # strip branches
198 pkg=${pkg%:*}
199 # strip .spec extension
200 pkg=${pkg%.spec}
201 # checkout only if missing
202 if [ ! -e $pkg/$pkg.spec ]; then
203 $rpmdir/builder -g $pkg -ns -r HEAD 1>&2
204 fi
205 if [ ! -e $pkg/$pkg.spec ]; then
206 # just print it out, to fallback to base pkg name
207 echo "$pkg"
208 else
b8eb9953
KK
209 cd $pkg
210 autotag $pkg.spec
41a0b4f6
ER
211 fi
212 done
213}
214
5d3fc0f8
ER
215relup() {
216 local script=$(dirname $(rpm -E %_topdir))/rpm-build-tools/relup.sh
217 $script -u -i "$@"
218}
219
586a5f1f 220usage() {
23e1dcfb
ER
221 cat <<EOF
222Usage: make-request.sh [OPTION] ... [SPECFILE] ....
223
224Mandatory arguments to long options are mandatory for short options too.
225
7b78b948 226 --config-file /path/to/config/file
bb30a063
ER
227 Source additional config file (after $USER_CFG), useful when
228 when sending build requests to Ac/Th from the same account
41a0b4f6
ER
229 -a
230 Try to use latest auto-tag for the spec when building
231 WARNING: This will checkout new files to your packages dir
bb30a063 232 -b 'BUILDER BUILDER ...', --builder='BUILDER BUILDER ...'
41a0b4f6 233 Sends request to given builders (in 'version-arch' format)
bb30a063
ER
234 --with VALUE, --without VALUE
235 Build package with(out) a given bcond
23e1dcfb 236 --kernel VALUE
bb30a063 237 set alt_kernel to VALUE
23e1dcfb 238 --target VALUE
bb30a063 239 set --target to VALUE
0387e9e2
ER
240 -D "NAME VALUE"|--define "NAME VALUE"
241 define macro named NAME with value VALUE
23e1dcfb 242 -s BUILD_ID, --skip BUILD_ID[,BUILD_ID][,BUILD_ID]
b4c22f73 243 mark build ids on src builder to be skipped (instructs srcbuilder to create 'skipme' file)
23e1dcfb 244 --branch VALUE
bb30a063
ER
245 specify default branch for specs in request
246 -t, --test-build
0e59dd68
AM
247 Performs a 'test-build'. Package will be uploaded to hidden .test-builds/
248 ftp tree and won't be upgraded on builders.
bb30a063 249 -r, --ready-build
0e59dd68
AM
250 Preforms a 'ready' build. Package will be built and uploaded to test/ ftp tree
251 (and later moved by release manager staff to ready/ and main ftp tree)
bb30a063
ER
252 -u, --upgrade
253 Forces package upgrade (for use with -c or -q, not -t)
5d3fc0f8
ER
254 --relup
255 Bump package release, see also --relup
256 -m, --message
257 Set commit message for relup
bb30a063
ER
258 -n, --no-upgrade
259 Disables package upgrade (for use with -r)
218a4c96 260 -ni, --no-install-br
bb30a063 261 Do not install missing BuildRequires (--nodeps)
218a4c96
ER
262 -nd, --no-depend
263 Do not add dependency of build jobs, each job in batch runs itself
bb30a063
ER
264 -j, --jobs
265 Number of parallel jobs for single build
266 -f, --flag
da6bf40b
ER
267 -d, --dist DISTRIBUTION_ID
268 Specify value for \$dist
bb30a063
ER
269 -df, --distfiles-fetch[-request] PACKAGE
270 Send distfiles request to fetch sources for PACKAGE
271 -cf, --command-flag
272 Not yet documented
273 -c, --command
7b78b948
ER
274 Executes a given command on builders (prepended to build jobs if build jobs included)
275 -C, --post-command
276 Executes a given command on builders (appended to build jobs if build jobs included)
bb30a063
ER
277 --test-remove-pkg
278 shortcut for --command poldek -evt ARGS
279 --remove-pkg
280 shortcut for --command poldek -ev --noask ARGS
281 --upgrade-pkg
282 shortcut for --command poldek --up -Uv ARGS
a72a1c1c 283 --pull
bb30a063 284 Updates builders infrastructure (outside chroot)
a166aeda
ER
285 --update-macros
286 Updates rpm-build-macros on src builder
f255298f
KK
287 --update-scripts
288 Updates ~/rpm/rpm-build-tools on builder
15a56d00
ER
289 --requester username
290 Override the requester
23e1dcfb 291 -q
bb30a063
ER
292 shortcut for --command rpm -q ARGS
293 -g, --gpg-opts "opts"
294 Pass additional options to gpg binary
295 -p, --priority VALUE
296 sets request priority (default 2)
9e9a1e30 297 -w SECONDS
5d3fc0f8
ER
298 Wait SECONDS before sending actual request. Note: gpg passphrase is still asked immediately.
299 This may be useful if you just commited package and want to send it
300 for test build after distfiles has fetched the file.
bb30a063
ER
301 -h, --help
302 Displays this help message
15a56d00
ER
303 -v
304 Verbose. Print some more debug on screen
23e1dcfb
ER
305EOF
306 exit 0
586a5f1f
AG
307}
308
da6bf40b
ER
309# validate distro, set $dist
310set_dist() {
4f727d37
ER
311 case "$1" in
312 ac)
313 ;;
314 ac-java|ac-xen)
315 ;;
316 ti)
317 ;;
318 ti-dev)
319 ;;
320 th)
321 ;;
322 th-java)
323 ;;
324 aidath)
325 ;;
326 *)
da6bf40b 327 die "dist \`$1' not known"
4f727d37
ER
328 ;;
329 esac
330
da6bf40b 331 dist=$1
4f727d37 332}
586a5f1f 333
8727819e 334while [ $# -gt 0 ]; do
9cc9841b 335 case "$1" in
da6bf40b
ER
336 -d | --dist | --distro)
337 set_dist $2
9cc9841b
ER
338 shift
339 ;;
340
7b78b948
ER
341 --config-file)
342 [ -f "$2" ] && . $2 || die "Config file not found"
9cc9841b
ER
343 shift
344 ;;
345
bb30a063 346 --builder | -b)
2ae16ef4
ER
347 for b in $2; do
348 builders="$builders ${b%:*}"
349 done
9cc9841b
ER
350 shift
351 ;;
352
41a0b4f6
ER
353 -a)
354 autotag=yes
355 ;;
356
5d3fc0f8
ER
357 -m)
358 shift
359 message=$1
360 ;;
361
362 --relup)
363 relup=yes
364 ;;
365
bb30a063 366 --with)
aa64c8df 367 with="$with $(echo "$2" | tr ',' ' ')"
9cc9841b
ER
368 shift
369 ;;
370
bb30a063 371 --without)
d4a37eec 372 without="$without $(echo "$2" | tr ',' ' ')"
9cc9841b
ER
373 shift
374 ;;
375
bb30a063 376 --test-build | -t)
9cc9841b
ER
377 build_mode=test
378 f_upgrade=no
379 ;;
380
bb30a063 381 --kernel)
9cc9841b
ER
382 kernel=$2
383 shift
384 ;;
385
be264f26
ER
386 --target)
387 target=$2
388 shift
389 ;;
390
0387e9e2
ER
391 -D|--define)
392 value=${2#* }
393 name=${2%% *}
394 define="$define$cr$name=$value"
395 shift
396 ;;
397
db286098 398 -s|--skip)
897f56ee 399 skip="$2"
db286098
ER
400 shift
401 ;;
402
11270534
ER
403 --branch)
404 branch=$2
405 shift
406 ;;
407
bb30a063 408 --priority | -p)
9cc9841b
ER
409 priority=$2
410 shift
411 ;;
412
bb30a063 413 --ready-build | -r)
9cc9841b
ER
414 build_mode=ready
415 ;;
416
bb30a063 417 --upgrade | -u)
9cc9841b
ER
418 f_upgrade=yes
419 ;;
420
bb30a063 421 --no-upgrade | -n)
9cc9841b
ER
422 f_upgrade=no
423 ;;
424
218a4c96
ER
425 --no-depend | -nd)
426 no_depend=yes
427 ;;
428
bb30a063 429 --no-install-br | -ni)
9cc9841b
ER
430 flags="$flags no-install-br"
431 ;;
432
bb30a063 433 -j | --jobs)
d8f1c9c0
AM
434 jobs="$2"
435 shift
436 ;;
437
c75bde7b
AM
438 -j*)
439 jobs="${1#-j}"
440 ;;
441
9e9a1e30
ER
442 -w)
443 wait="$2"
444 shift
445 ;;
446
12151609
ER
447 -v)
448 verbose=yes
449 ;;
450
bb30a063 451 --flag | -f)
9cc9841b
ER
452 flags="$flags $2"
453 shift
454 ;;
455
bb30a063 456 --command-flags | -cf)
9cc9841b
ER
457 command_flags="$2"
458 shift
459 ;;
460
bb30a063 461 --command | -c)
9cc9841b 462 command="$2"
30ddd991 463 if [ "$command" = - ]; then
3f77765b
ER
464 echo >&2 "Reading command from STDIN"
465 echo >&2 "---"
466 command=$(cat)
467 echo >&2 "---"
468 fi
7b78b948
ER
469 shift
470 ;;
471 --post-command | -C)
472 post_command="$2"
473 if [ "$post_command" = - ]; then
474 echo >&2 "Reading post_command from STDIN"
475 echo >&2 "---"
476 post_command=$(cat)
477 echo >&2 "---"
478 fi
9cc9841b
ER
479 shift
480 ;;
481 --test-remove-pkg)
482 command="poldek -evt $2"
483 f_upgrade=no
484 shift
485 ;;
486 --remove-pkg)
c4c115cc 487 command="for a in $2; do poldek -ev --noask \$a; done"
9cc9841b
ER
488 f_upgrade=no
489 shift
490 ;;
b098536f 491 --upgrade-pkg|-Uhv)
218a4c96 492 command="poldek --up; poldek -uv $2"
9cc9841b
ER
493 f_upgrade=no
494 shift
495 ;;
496 -q)
497 command="rpm -q $2"
498 f_upgrade=no
499 shift
500 ;;
501
a72a1c1c 502 --pull)
9cc9841b 503 command_flags="no-chroot"
a72a1c1c 504 command="git pull"
49a8a604 505 f_upgrade=no
9cc9841b
ER
506 ;;
507
a166aeda
ER
508 --update-macros)
509 upgrade_macros="yes"
510 ;;
511
9e9a1e30
ER
512 --update-scripts)
513 upgrade_scripts='yes'
514 ;;
f255298f 515
45d8ed70
ER
516 -df | --distfiles-fetch | --distfiles-fetch-request)
517 df_fetch=yes
518 ;;
519
bb30a063 520 --gpg-opts | -g)
1bf4c407
TP
521 gpg_opts="$2"
522 shift
523 ;;
9cc9841b 524
bb30a063 525 --help | -h)
9cc9841b
ER
526 usage
527 ;;
528
fab41d9b
JK
529 --requester)
530 requester_override="$2"
531 shift
532 ;;
533
bb30a063 534 -*)
9cc9841b
ER
535 die "unknown knob: $1"
536 ;;
537
bb30a063 538 *:* | *)
9cc9841b
ER
539 specs="$specs $1"
540 ;;
541 esac
542 shift
1344b6f1
MM
543done
544
da6bf40b 545case "$dist" in
e728b34c 546ac)
850c180f 547 default_branch="AC-branch"
9cc9841b
ER
548 builder_email="builder-ac@pld-linux.org"
549 default_builders="ac-*"
8503c5d2 550 url="http://ep09.pld-linux.org:1289/"
a3387055 551 control_url="http://ep09.pld-linux.org/~buildsrc"
9cc9841b 552 ;;
da6bf40b 553ac-java) # fake "dist" for java available ac architectures
e4047e17 554 builder_email="builder-ac@pld-linux.org"
9cc9841b
ER
555 default_builders="ac-i586 ac-i686 ac-athlon ac-amd64"
556 default_branch="AC-branch"
8503c5d2 557 url="http://ep09.pld-linux.org:1289/"
9cc9841b 558 ;;
da6bf40b 559ac-xen) # fake "dist" for xen-enabled architectures
e4047e17
ER
560 builder_email="builder-ac@pld-linux.org"
561 default_builders="ac-i686 ac-athlon ac-amd64"
562 default_branch="AC-branch"
70d46bca 563 ;;
e728b34c 564ti)
9cc9841b
ER
565 builder_email="builderti@ep09.pld-linux.org"
566 default_builders="ti-*"
5ed6b10a
AM
567 url="http://ep09.pld-linux.org:1231/"
568 control_url="http://ep09.pld-linux.org/~builderti"
9cc9841b 569 ;;
3274da14 570ti-dev)
571 builder_email="buildertidev@ep09.pld-linux.org"
572 default_builders="ti-dev-*"
573 url="http://ep09.pld-linux.org:1232/"
574 control_url="http://ep09.pld-linux.org/~buildertidev"
575 ;;
e728b34c 576th)
f0cfd110 577 builder_email="builderth@pld-linux.org"
9cc9841b 578 default_builders="th-*"
f5f78f5f 579 url="https://srcbuilder.pld-linux.org:1235/"
c87a0ffa 580 control_url="https://srcbuilder.pld-linux.org/th/"
9cc9841b 581 ;;
da6bf40b 582th-java) # fake "dist" for java available th architectures
f0cfd110 583 builder_email="builderth@pld-linux.org"
976435cb 584 default_builders="th-x86_64 th-athlon th-i686"
f5f78f5f 585 url="https://srcbuilder.pld-linux.org:1235/"
e219518b 586 ;;
32384897 587aidath)
588 builder_email="builderaidath@ep09.pld-linux.org"
589 default_builders="aidath-*"
590 ;;
14b580de 591*)
da6bf40b 592 die "dist \`$dist' not known"
14b580de 593 ;;
e728b34c
ER
594esac
595
da6bf40b 596# need to do this after dist selection
897f56ee 597if [ "$skip" ]; then
9b86ba23
ER
598 skip=$(skip="$skip" control_url="$control_url" python -c '
599import urllib2
600import sys
601import StringIO
602import gzip
603import re
604import os
605import string
606from xml.dom import minidom
607
608skip = os.environ.get("skip").split(",");
609control_url = os.environ.get("control_url")
610
611print >> sys.stderr, "* Check queue_id-s against %s" % control_url
612
613try:
614 headers = { "Cache-Control": "no-cache", "Pragma": "no-cache" }
615 req = urllib2.Request(url=control_url + "/queue.gz", headers=headers)
616 f = urllib2.urlopen(req)
617except Exception, e:
618 print >> sys.stderr, "Fetch error %s: %s" % (control_url + "/queue.gz", e)
619 sys.exit(1)
620
621sio = StringIO.StringIO()
622sio.write(f.read())
623f.close()
624sio.seek(0)
625f = gzip.GzipFile(fileobj = sio)
626
627xml = re.compile("(<queue>.*?</queue>)", re.DOTALL).match(f.read()).group(1)
628d = minidom.parseString(xml)
629
630q = []
631for c in d.documentElement.childNodes:
632 if c.nodeName != "group":
633 continue
634 q.append(c.attributes["id"].value)
635
636err = 0
637for s in skip:
638 if s not in q:
639 print >> sys.stderr, "- Check %s: ERROR: Not valid queue-id" % s
640 err = 1
641 else:
642 print >> sys.stderr, "- Check %s: OK" % s
643if err == 1:
644 sys.exit(1)
645print string.join(skip, ",")
646') || exit $?
897f56ee
ER
647 f_upgrade=no
648 build_mode=test
649 priority=-1
650 command="skip:$skip"
651 command_flags="no-chroot"
da6bf40b 652 builders="$dist-src"
897f56ee
ER
653fi
654
11270534
ER
655branch=${branch:-$default_branch}
656
e728b34c 657specs=`for s in $specs; do
9cc9841b 658 case "$s" in
218a4c96 659 ^)
da6bf40b 660 # skip marker - pass it along
218a4c96
ER
661 echo $s
662 ;;
9cc9841b 663 *:*) # package name with branch
e4d71c86
KK
664 _specfile=$(basename ${s%:*})
665 echo ${_specfile%.spec}.spec:${s##*:}
9cc9841b
ER
666 ;;
667 *) # just package name
d1ae5775 668 echo $(basename ${s%.spec}).spec:$branch
9cc9841b
ER
669 ;;
670 esac
878677a8 671done`
1344b6f1 672
5d3fc0f8
ER
673if [ "$relup" = "yes" ]; then
674 msg "Auto relup enabled"
675 relup ${message:+-m "$message"} $specs
676fi
677
41a0b4f6
ER
678if [ "$autotag" = "yes" ]; then
679 msg "Auto autotag build enabled"
680 specs=$(get_autotag $specs)
681fi
682
45d8ed70
ER
683if [ "$df_fetch" = "yes" ]; then
684 df_fetch $specs
685 exit 0
686fi
687
a166aeda 688if [ "$upgrade_macros" = "yes" ]; then
218a4c96 689 command="poldek --up; poldek -uv rpm-build-macros"
da6bf40b 690 builders="$dist-src"
a166aeda
ER
691 f_upgrade=no
692 build_mode=test
693fi
694
045b9f0b
KK
695if [ "$upgrade_scripts" = "yes" ]; then
696 command="cd ~/rpm/rpm-build-tools && git pull"
697 command_flags=as-builder
698 builders="$dist-src"
699 f_upgrade=no
700 build_mode=test
701fi
702
2f470d17 703if [[ "$requester" != *@* ]] ; then
b3d9fd17 704 requester="$requester@pld-linux.org"
2f470d17
MK
705fi
706
14b580de 707if [ -z "$builders" ] ; then
9cc9841b 708 builders="$default_builders"
a757e911
MM
709fi
710
544ca060 711if [ "$f_upgrade" = "yes" ] ; then
9cc9841b 712 flags="$flags upgrade"
a757e911
MM
713fi
714
e936beda 715if [ "$build_mode" = "test" ] ; then
9cc9841b
ER
716 if [ "$f_upgrade" = "yes" ] ; then
717 die "--upgrade and --test-build are mutually exclusive"
718 fi
719 flags="$flags test-build"
e936beda
MM
720fi
721
e728b34c
ER
722if [ -z "$build_mode" ] ; then
723 # missing build mode, builders go crazy when you proceed"
724 die "please specify build mode"
725fi
726
727
280b1afd 728ok=
e728b34c
ER
729for s in $specs; do
730 ok=1
280b1afd
MM
731done
732
d80e53cf
ER
733if [ -z "$specs" -a -z "$command" ]; then
734 die "no packages to build or command to invoke specified"
280b1afd
MM
735fi
736
1344b6f1
MM
737id=$(uuidgen)
738
739gen_req() {
9cc9841b
ER
740 echo "<group id='$id' no='0' flags='$flags'>"
741 echo " <time>$(date +%s)</time>"
c9f4704f 742 msg "Using priority $priority"
9cc9841b 743 echo " <priority>$priority</priority>"
d8f1c9c0 744 if [ -n "$jobs" ]; then
c9f4704f 745 msg "Using jobs $jobs"
d8f1c9c0
AM
746 echo " <maxjobs>$jobs</maxjobs>"
747 fi
fe7aaa44 748 if [ -z "$url" ]; then
c9f4704f 749 msg "Using email $builder_email"
fe7aaa44 750 else
c9f4704f 751 msg "Using URL $url"
fe7aaa44 752 fi
2aa9d23d
ER
753
754 if [ "$build_mode" = "ready" ]; then
755 msg "Build mode: $(tput setaf 2)$build_mode$c_norm"
756 else
757 msg "Build mode: $(tput setaf 3)$build_mode$c_norm"
758 fi
759
fab41d9b
JK
760 if [ -n "$requester_override" ] ; then
761 echo " <requester>$requester_override</requester>"
762 fi
763
c9f4704f 764 msg "Queue-ID: $id"
9cc9841b
ER
765 echo
766
d80e53cf
ER
767 # job to depend on
768 local depend=
0387e9e2 769 local b i=1 val
d80e53cf
ER
770 local name branch builders_xml
771
772 for b in $builders; do
55bfbaf6 773 msg "Builder: $(red $b)"
d80e53cf
ER
774 builders_xml="$builders_xml <builder>$b</builder>"
775 done
776
777 if [ "$command" ]; then
9cc9841b 778 bid=$(uuidgen)
e6aa37ec 779 echo -E >&2 "* Command: $command"
9cc9841b 780 echo " <batch id='$bid' depends-on=''>"
30ddd991 781 echo " <command flags='$command_flags'>"
8727819e 782 hsc "$command"
30ddd991 783 echo "</command>"
9cc9841b 784 echo " <info></info>"
d80e53cf 785 echo "$builders_xml"
9cc9841b 786 echo " </batch>"
d80e53cf
ER
787 depend=$bid
788 fi
9cc9841b 789
4156e476
ER
790 if [ "$f_upgrade" = "yes" ] ; then
791 msg "Upgrade mode: $f_upgrade"
792 fi
e728b34c 793
4156e476
ER
794 for s in $specs; do
795 # skip marker
796 if [ "$s" = "^" ]; then
797 depend=
798 continue
799 fi
800 if [ "$no_depend" = yes ]; then
801 depend=
802 fi
803 bid=$(uuidgen)
804 echo " <batch id='$bid' depends-on='$depend'>"
c4aa0539 805
4156e476
ER
806 name=$(echo "$s" | sed -e 's|:.*||')
807 branch=$(echo "$s" | sed -e 's|.*:||')
808 msg "Adding #$i $name:$branch${kernel:+ alt_kernel=$kernel}${target:+ target=$target}${depend:+ depends on $depend}"
809 echo " <spec>$name</spec>"
810 echo " <branch>$branch</branch>"
811 echo " ${kernel:+<kernel>$kernel</kernel>}"
812 echo " ${target:+<target>$target</target>}"
0387e9e2
ER
813
814 oIFS=$IFS; IFS=$cr
815 for b in $define; do
816 [ -z "$b" ] && continue
817 value=${b#*=}
818 b=${b%%=*}
819 echo " <define name='$(hsc $b)'>$(hsc "$value")</define>"
4e66252a 820 msg "- define $b=$value"
0387e9e2
ER
821 done
822 IFS=$oIFS
823
4156e476
ER
824 echo " <info></info>"
825 echo
826 for b in $with; do
827 echo " <with>$b</with>"
828 done
829 for b in $without; do
830 echo " <without>$b</without>"
218a4c96 831 done
4156e476
ER
832 echo
833 echo "$builders_xml"
834 echo " </batch>"
835 i=$((i+1))
836
837 # let next job depend on previous
838 depend=$bid
839 done
e728b34c 840
7b78b948
ER
841 if [ "$post_command" ]; then
842 bid=$(uuidgen)
ffcfade9
ER
843 if [ "$no_depend" = yes ]; then
844 depend=
845 fi
7b78b948
ER
846 echo -E >&2 "* Post-Command: $post_command"
847 echo " <batch id='$bid' depends-on='$depend'>"
848 echo " <command flags='$command_flags'>"
8727819e 849 hsc "$post_command"
7b78b948
ER
850 echo "</command>"
851 echo " <info></info>"
852 echo "$builders_xml"
853 echo " </batch>"
854 depend=$bid
855 fi
856
9cc9841b 857 echo "</group>"
1344b6f1
MM
858}
859
860gen_email () {
e728b34c 861 # make request first, so the STDERR/STDOUT streams won't be mixed
6d0cc702
ER
862 local tmp req
863 tmp=$(mktemp)
864 gen_req > $tmp
e728b34c 865
12151609 866 if [ "$verbose" = "yes" ]; then
6d0cc702 867 cat $tmp >&2
12151609 868 fi
6d0cc702
ER
869
870 cat <<-EOF
871 From: $requester
872 To: $builder_email
873 Subject: build request
874 Message-Id: <$id@$(hostname)>
875 X-New-PLD-Builder: request
532bf50e 876 X-Requester-Version: $VERSION
6d0cc702
ER
877
878 EOF
879
880 gpg --clearsign --default-key $default_key $gpg_opts --output=- $tmp
881 rm -f $tmp
1344b6f1
MM
882}
883
bfa10c0d 884gen_email | send_request
This page took 0.349905 seconds and 4 git commands to generate.