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