]> git.pld-linux.org Git - projects/pld-builder.new.git/blame - client/make-request.sh
- use colon for easier copy paste the path
[projects/pld-builder.new.git] / client / make-request.sh
CommitLineData
1344b6f1
MM
1#!/bin/sh
2
864cdeb5
MM
3builders=
4specs=
5with=
6without=
7flags=
8command=
9command_flags=
16b5ec37 10gpg_opts=
e728b34c
ER
11default_branch='HEAD'
12distro=
bcb3a8b8 13url=
bfa10c0d
AM
14
15[ -x /usr/bin/python ] && send_mode="python" || send_mode="mail"
544ca060 16
e29fbd39
AG
17if [ -n "$HOME_ETC" ]; then
18 USER_CFG=$HOME_ETC/.requestrc
544ca060 19else
e29fbd39 20 USER_CFG=$HOME/.requestrc
e728b34c 21fi
e29fbd39 22
e728b34c 23if [ ! -f "$USER_CFG" ]; then
e29fbd39 24 echo "Creating config file $USER_CFG. You *must* edit it."
bcb3a8b8 25 cat > $USER_CFG <<EOF
1344b6f1 26priority=2
e728b34c 27requester=deviloper@pld-linux.org
544ca060 28default_key=deviloper@pld-linux.org
bfa10c0d
AM
29send_mode="$send_mode"
30url="$url"
1344b6f1 31mailer="/usr/sbin/sendmail -t"
16b5ec37 32gpg_opts=""
e728b34c 33distro=th
bcb3a8b8 34url="http://ep09.pld-linux.org:1234/"
1344b6f1 35
a757e911 36# defaults:
771f742d 37f_upgrade=yes
544ca060
MM
38EOF
39exit
40fi
41
e728b34c 42if [ -f "$USER_CFG" ]; then
9cc9841b 43 . $USER_CFG
e728b34c
ER
44fi
45
bfa10c0d 46send_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
59import sys, urllib2
60
61try:
62 data = sys.stdin.read()
63 req = urllib2.Request(sys.argv[1], data)
64 f = urllib2.urlopen(req, timeout=10)
65 f.close()
66except Exception, e:
67 print >> sys.stderr, "Problem while sending request: %s" % e
68 sys.exit(1)
cd28f421 69print >> sys.stdout, "Request queued."
bfa10c0d 70' "$url"
bcb3a8b8
ER
71 ;;
72 esac
bfa10c0d
AM
73}
74
11270534
ER
75die() {
76 echo >&2 "$0: $*"
9cc9841b 77 exit 1
a757e911 78}
1344b6f1 79
586a5f1f 80usage() {
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 136while [ $# -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
269done
270
e728b34c
ER
271case "$distro" in
272ac)
9cc9841b
ER
273 builder_email="builder-ac@pld-linux.org"
274 default_builders="ac-*"
275 default_branch="AC-branch"
276 ;;
3e991c55 277ac-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 282ac-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 287ti)
9cc9841b
ER
288 builder_email="builderti@ep09.pld-linux.org"
289 default_builders="ti-*"
290 ;;
e728b34c 291th)
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 296th-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 301aidath)
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
308esac
309
11270534
ER
310branch=${branch:-$default_branch}
311
e728b34c 312specs=`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 327done`
1344b6f1 328
2f470d17 329if [[ "$requester" != *@* ]] ; then
9cc9841b 330 requester="$requester@pld-linux.org"
2f470d17
MK
331fi
332
14b580de 333if [ -z "$builders" ] ; then
9cc9841b 334 builders="$default_builders"
a757e911
MM
335fi
336
544ca060 337if [ "$f_upgrade" = "yes" ] ; then
9cc9841b 338 flags="$flags upgrade"
a757e911
MM
339fi
340
e936beda 341if [ "$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
346fi
347
e728b34c
ER
348if [ -z "$build_mode" ] ; then
349 # missing build mode, builders go crazy when you proceed"
350 die "please specify build mode"
351fi
352
353
280b1afd 354ok=
e728b34c
ER
355for s in $specs; do
356 ok=1
280b1afd
MM
357done
358
359if [ "$ok" = "" ] ; then
9cc9841b
ER
360 if [ "$command" = "" ] ; then
361 die "no specs passed"
362 fi
c4aa0539 363else
9cc9841b
ER
364 if [ "$command" != "" ] ; then
365 die "cannot pass specs and --command"
366 fi
280b1afd
MM
367fi
368
1344b6f1
MM
369id=$(uuidgen)
370
371gen_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,&,\&amp;,g;s,<,\&lt;,g;s,>,\&gt;,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
443gen_email () {
e728b34c
ER
444 # make request first, so the STDERR/STDOUT streams won't be mixed
445 local req=$(gen_req)
446
1344b6f1 447cat <<EOF
2f470d17 448From: $requester
1344b6f1
MM
449To: $builder_email
450Subject: build request
451Message-Id: <$id@$(hostname)>
452X-New-PLD-Builder: request
2d28916b 453X-Requester-Version: \$Id$
1344b6f1 454
e728b34c 455$(echo "$req" | gpg --clearsign --default-key $default_key $gpg_opts)
1344b6f1
MM
456EOF
457}
458
bfa10c0d 459gen_email | send_request
This page took 0.102557 seconds and 4 git commands to generate.