]>
Commit | Line | Data |
---|---|---|
1344b6f1 | 1 | #!/bin/sh |
9e9a1e30 | 2 | # vim:noet:ts=4:sw=4 |
5d3fc0f8 | 3 | VERSION=1.89 |
1344b6f1 | 4 | |
b4818b81 | 5 | # prevent "*" from being expanded in builders var |
7ae0b732 | 6 | set -f |
b4818b81 | 7 | |
864cdeb5 | 8 | builders= |
864cdeb5 MM |
9 | with= |
10 | without= | |
11 | flags= | |
12 | command= | |
13 | command_flags= | |
16b5ec37 | 14 | gpg_opts= |
e728b34c | 15 | default_branch='HEAD' |
da6bf40b | 16 | dist= |
bcb3a8b8 | 17 | url= |
218a4c96 | 18 | no_depend=no |
12151609 | 19 | verbose=no |
da6bf40b | 20 | autotag=no |
d3516ebf | 21 | requester_override= |
5d3fc0f8 | 22 | relup=no |
bfa10c0d | 23 | |
98abd48b ER |
24 | if [ -x /usr/bin/python ]; then |
25 | send_mode="python" | |
26 | else | |
27 | echo "No python present, using mail mode" | |
28 | send_mode="mail" | |
29 | fi | |
544ca060 | 30 | |
e29fbd39 AG |
31 | if [ -n "$HOME_ETC" ]; then |
32 | USER_CFG=$HOME_ETC/.requestrc | |
544ca060 | 33 | else |
e29fbd39 | 34 | USER_CFG=$HOME/.requestrc |
e728b34c | 35 | fi |
e29fbd39 | 36 | |
e728b34c | 37 | if [ ! -f "$USER_CFG" ]; then |
e29fbd39 | 38 | echo "Creating config file $USER_CFG. You *must* edit it." |
bcb3a8b8 | 39 | cat > $USER_CFG <<EOF |
1344b6f1 | 40 | priority=2 |
e728b34c | 41 | requester=deviloper@pld-linux.org |
544ca060 | 42 | default_key=deviloper@pld-linux.org |
bfa10c0d AM |
43 | send_mode="$send_mode" |
44 | url="$url" | |
044d04b8 | 45 | mailer="/usr/lib/sendmail -t" |
16b5ec37 | 46 | gpg_opts="" |
da6bf40b | 47 | dist=th |
f5f78f5f | 48 | url="https://srcbuilder.pld-linux.org:1235/" |
1344b6f1 | 49 | |
a757e911 | 50 | # defaults: |
771f742d | 51 | f_upgrade=yes |
544ca060 MM |
52 | EOF |
53 | exit | |
54 | fi | |
55 | ||
e728b34c | 56 | if [ -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 |
62 | fi |
63 | ||
45d8ed70 ER |
64 | # internal options, not to be overriden |
65 | specs= | |
66 | df_fetch=no | |
a166aeda | 67 | upgrade_macros=no |
045b9f0b | 68 | upgrade_scripts=no |
0387e9e2 | 69 | cr=$(printf "\r") |
45d8ed70 | 70 | |
c9f4704f ER |
71 | # Set colors |
72 | c_star=$(tput setaf 2) | |
55bfbaf6 | 73 | c_red=$(tput setaf 1) |
c9f4704f ER |
74 | c_norm=$(tput op) |
75 | msg() { | |
76 | echo >&2 "${c_star}*${c_norm} $*" | |
77 | } | |
55bfbaf6 ER |
78 | red() { |
79 | echo "${c_red}$*${c_norm}" | |
80 | } | |
c9f4704f | 81 | |
45d8ed70 ER |
82 | die() { |
83 | echo >&2 "$0: $*" | |
84 | exit 1 | |
85 | } | |
86 | ||
bfa10c0d | 87 | send_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 | 105 | import sys, socket, urllib2 |
bfa10c0d AM |
106 | |
107 | try: | |
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() |
114 | except Exception, e: | |
e6aa37ec | 115 | print >> sys.stderr, "Problem while sending request via HTTP: %s: %s" % (url, e) |
bfa10c0d | 116 | sys.exit(1) |
f04b3329 | 117 | print >> sys.stdout, "Request queued via HTTP." |
bfa10c0d | 118 | ' "$url" |
bcb3a8b8 ER |
119 | ;; |
120 | esac | |
bfa10c0d AM |
121 | } |
122 | ||
8727819e ER |
123 | # htmlspecialchars: escape <, > and & |
124 | hsc() { | |
125 | local input=$1 | |
126 | echo -E "$input" | sed -e 's,&,\&,g;s,<,\<,g;s,>,\>,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 | |
132 | df_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 | |
175 | autotag() { | |
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 |
191 | get_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 |
215 | relup() { |
216 | local script=$(dirname $(rpm -E %_topdir))/rpm-build-tools/relup.sh | |
217 | $script -u -i "$@" | |
218 | } | |
219 | ||
586a5f1f | 220 | usage() { |
23e1dcfb ER |
221 | cat <<EOF |
222 | Usage: make-request.sh [OPTION] ... [SPECFILE] .... | |
223 | ||
224 | Mandatory 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 |
305 | EOF |
306 | exit 0 | |
586a5f1f AG |
307 | } |
308 | ||
da6bf40b ER |
309 | # validate distro, set $dist |
310 | set_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 | 334 | while [ $# -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 |
543 | done |
544 | ||
da6bf40b | 545 | case "$dist" in |
e728b34c | 546 | ac) |
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 | 553 | ac-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 | 559 | ac-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 | 564 | ti) |
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 | 570 | ti-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 | 576 | th) |
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 | 582 | th-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 | 587 | aidath) |
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 |
594 | esac |
595 | ||
da6bf40b | 596 | # need to do this after dist selection |
897f56ee | 597 | if [ "$skip" ]; then |
9b86ba23 ER |
598 | skip=$(skip="$skip" control_url="$control_url" python -c ' |
599 | import urllib2 | |
600 | import sys | |
601 | import StringIO | |
602 | import gzip | |
603 | import re | |
604 | import os | |
605 | import string | |
606 | from xml.dom import minidom | |
607 | ||
608 | skip = os.environ.get("skip").split(","); | |
609 | control_url = os.environ.get("control_url") | |
610 | ||
611 | print >> sys.stderr, "* Check queue_id-s against %s" % control_url | |
612 | ||
613 | try: | |
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) | |
617 | except Exception, e: | |
618 | print >> sys.stderr, "Fetch error %s: %s" % (control_url + "/queue.gz", e) | |
619 | sys.exit(1) | |
620 | ||
621 | sio = StringIO.StringIO() | |
622 | sio.write(f.read()) | |
623 | f.close() | |
624 | sio.seek(0) | |
625 | f = gzip.GzipFile(fileobj = sio) | |
626 | ||
627 | xml = re.compile("(<queue>.*?</queue>)", re.DOTALL).match(f.read()).group(1) | |
628 | d = minidom.parseString(xml) | |
629 | ||
630 | q = [] | |
631 | for c in d.documentElement.childNodes: | |
632 | if c.nodeName != "group": | |
633 | continue | |
634 | q.append(c.attributes["id"].value) | |
635 | ||
636 | err = 0 | |
637 | for 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 | |
643 | if err == 1: | |
644 | sys.exit(1) | |
645 | print 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 |
653 | fi |
654 | ||
11270534 ER |
655 | branch=${branch:-$default_branch} |
656 | ||
e728b34c | 657 | specs=`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 | 671 | done` |
1344b6f1 | 672 | |
5d3fc0f8 ER |
673 | if [ "$relup" = "yes" ]; then |
674 | msg "Auto relup enabled" | |
675 | relup ${message:+-m "$message"} $specs | |
676 | fi | |
677 | ||
41a0b4f6 ER |
678 | if [ "$autotag" = "yes" ]; then |
679 | msg "Auto autotag build enabled" | |
680 | specs=$(get_autotag $specs) | |
681 | fi | |
682 | ||
45d8ed70 ER |
683 | if [ "$df_fetch" = "yes" ]; then |
684 | df_fetch $specs | |
685 | exit 0 | |
686 | fi | |
687 | ||
a166aeda | 688 | if [ "$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 | |
693 | fi | |
694 | ||
045b9f0b KK |
695 | if [ "$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 | |
701 | fi | |
702 | ||
2f470d17 | 703 | if [[ "$requester" != *@* ]] ; then |
b3d9fd17 | 704 | requester="$requester@pld-linux.org" |
2f470d17 MK |
705 | fi |
706 | ||
14b580de | 707 | if [ -z "$builders" ] ; then |
9cc9841b | 708 | builders="$default_builders" |
a757e911 MM |
709 | fi |
710 | ||
544ca060 | 711 | if [ "$f_upgrade" = "yes" ] ; then |
9cc9841b | 712 | flags="$flags upgrade" |
a757e911 MM |
713 | fi |
714 | ||
e936beda | 715 | if [ "$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 |
720 | fi |
721 | ||
e728b34c ER |
722 | if [ -z "$build_mode" ] ; then |
723 | # missing build mode, builders go crazy when you proceed" | |
724 | die "please specify build mode" | |
725 | fi | |
726 | ||
727 | ||
280b1afd | 728 | ok= |
e728b34c ER |
729 | for s in $specs; do |
730 | ok=1 | |
280b1afd MM |
731 | done |
732 | ||
d80e53cf ER |
733 | if [ -z "$specs" -a -z "$command" ]; then |
734 | die "no packages to build or command to invoke specified" | |
280b1afd MM |
735 | fi |
736 | ||
1344b6f1 MM |
737 | id=$(uuidgen) |
738 | ||
739 | gen_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 | ||
860 | gen_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 | 884 | gen_email | send_request |