#!/bin/sh
+# vim:noet:ts=4:sw=4
+VERSION=1.89
# prevent "*" from being expanded in builders var
set -f
no_depend=no
verbose=no
autotag=no
+requester_override=
+relup=no
if [ -x /usr/bin/python ]; then
send_mode="python"
echo "Creating config file $USER_CFG. You *must* edit it."
cat > $USER_CFG <<EOF
priority=2
-requester=deviloper@pld-linux.org
-default_key=deviloper@pld-linux.org
+requester=deviloper@tld-linux.org
+default_key=deviloper@tld-linux.org
send_mode="$send_mode"
url="$url"
-mailer="/usr/sbin/sendmail -t"
+mailer="/usr/lib/sendmail -t"
gpg_opts=""
-dist=th
-url="http://src.th.pld-linux.org:1234/"
+dist=ti
+url="https://kraz.tld-linux.org:1241/"
# defaults:
f_upgrade=yes
specs=
df_fetch=no
upgrade_macros=no
+upgrade_scripts=no
+cr=$(printf "\r")
# Set colors
c_star=$(tput setaf 2)
# switch to mail mode, if no url set
[ -z "$url" ] && send_mode="mail"
+ if [ -n "$wait" ]; then
+ msg "Waiting $wait seconds before sending request"
+ sleep $wait
+ msg "Wait has ended, proceeding!"
+ fi
+
case "$send_mode" in
"mail")
msg "Sending using mail mode"
cat - | $mailer
;;
*)
- msg "Sending using http mode to $url"
+ msg "Sending using HTTP mode to $url"
cat - | python -c '
-import sys, socket, urllib2
+import sys, socket, urllib2, ssl
+
+try:
+ _create_unverified_https_context = ssl._create_unverified_context
+except AttributeError:
+ pass
+else:
+ ssl._create_default_https_context = _create_unverified_https_context
try:
data = sys.stdin.read()
url = sys.argv[1]
- socket.setdefaulttimeout(10)
+ socket.setdefaulttimeout(30)
req = urllib2.Request(url, data)
f = urllib2.urlopen(req)
f.close()
esac
}
+# htmlspecialchars: escape <, > and &
+hsc() {
+ local input=$1
+ echo -E "$input" | sed -e 's,&,\&,g;s,<,\<,g;s,>,\>,g'
+}
+
# simple df_fetcher, based on packages/fetchsrc_request
# TODO: tcp (smtp) mode
# TODO: adjust for ~/.requestrc config
local specs="$@"
# Sending by
- local MAILER='/usr/sbin/sendmail'
+ local MAILER='/usr/lib/sendmail'
# MAILER='/usr/bin/msmtp'
# Sending via
local VIA="SENDMAIL"
# VIA_ARGS='-a gmail'
#
# DISTFILES EMAIL
- local DMAIL="distfiles@pld-linux.org"
+ local DMAIL="df@tld-linux.org"
local HOST=$(hostname -f)
local LOGIN=${requester%@*}
+ local SPEC BRANCH
for spec in $specs; do
- local SPEC=$(echo "$spec" | sed -e 's|:.*||')
- local BRANCH=$(echo "$spec" | sed -e 's|.*:||')
+ SPEC=$(echo "$spec" | sed -e 's|:.*||')
+ SPEC=${SPEC%.spec}
+ BRANCH=$(echo "$spec" | sed -e 's|.*:||')
echo >&2 "Distfiles Request: $SPEC:$BRANCH via $MAILER ${VIA_ARGS:+ ($VIA_ARGS)}"
cat <<-EOF | "$MAILER" -t -i $VIA_ARGS
To: $DMAIL
From: $LOGIN <$LOGIN@$HOST>
Subject: fetchsrc_request notify
- X-CVS-Module: SPECS
X-distfiles-request: yes
X-Login: $LOGIN
- X-Spec: $SPEC
+ X-Package: $SPEC
X-Branch: $BRANCH
X-Flags: force-reply
s=${s%:*}
# ensure package ends with .spec
s=${s%.spec}.spec
- out=$(cvs status -v $s | awk "!/Sticky/&&/auto-$dist-/{if (!a++) print \$1}")
+ git fetch --tags
+ out=$(git for-each-ref --count=1 --sort=-authordate refs/tags/auto/$dist \
+ --format='%(refname:short)')
echo "$s:$out"
done
}
# get autotag for specs
-# WARNING: This may checkout some files from CVS
+# WARNING: This may checkout some files from VCS
get_autotag() {
local pkg spec rpmdir
rpmdir=$(rpm -E %_topdir)
- cd $rpmdir
for pkg in "$@"; do
+ cd $rpmdir
# strip branches
pkg=${pkg%:*}
# strip .spec extension
# just print it out, to fallback to base pkg name
echo "$pkg"
else
- autotag $pkg/$pkg.spec
+ cd $pkg
+ autotag $pkg.spec
fi
done
}
+relup() {
+ local script=$(dirname $(rpm -E %_topdir))/rpm-build-tools/relup.sh
+ $script -u -i "$@"
+}
+
usage() {
cat <<EOF
Usage: make-request.sh [OPTION] ... [SPECFILE] ....
set alt_kernel to VALUE
--target VALUE
set --target to VALUE
+ -D "NAME VALUE"|--define "NAME VALUE"
+ define macro named NAME with value VALUE
-s BUILD_ID, --skip BUILD_ID[,BUILD_ID][,BUILD_ID]
- mark build ids on src builder to be skipped
+ mark build ids on src builder to be skipped (instructs srcbuilder to create 'skipme' file)
--branch VALUE
specify default branch for specs in request
-t, --test-build
(and later moved by release manager staff to ready/ and main ftp tree)
-u, --upgrade
Forces package upgrade (for use with -c or -q, not -t)
+ --relup
+ Bump package release, see also --relup
+ -m, --message
+ Set commit message for relup
-n, --no-upgrade
Disables package upgrade (for use with -r)
-ni, --no-install-br
Updates builders infrastructure (outside chroot)
--update-macros
Updates rpm-build-macros on src builder
+ --update-scripts
+ Updates ~/rpm/rpm-build-tools on builder
+ --requester username
+ Override the requester
-q
shortcut for --command rpm -q ARGS
-g, --gpg-opts "opts"
Pass additional options to gpg binary
-p, --priority VALUE
sets request priority (default 2)
+ -w SECONDS
+ Wait SECONDS before sending actual request. Note: gpg passphrase is still asked immediately.
+ This may be useful if you just commited package and want to send it
+ for test build after distfiles has fetched the file.
-h, --help
Displays this help message
+ -v
+ Verbose. Print some more debug on screen
EOF
exit 0
}
# validate distro, set $dist
set_dist() {
case "$1" in
- ac)
- ;;
- ac-java|ac-xen)
- ;;
ti)
;;
ti-dev)
;;
- th)
- ;;
- th-java)
- ;;
- aidath)
- ;;
*)
die "dist \`$1' not known"
;;
dist=$1
}
-while [ $# -gt 0 ] ; do
+while [ $# -gt 0 ]; do
case "$1" in
-d | --dist | --distro)
set_dist $2
autotag=yes
;;
+ -m)
+ shift
+ message=$1
+ ;;
+
+ --relup)
+ relup=yes
+ ;;
+
--with)
with="$with $(echo "$2" | tr ',' ' ')"
shift
shift
;;
+ -D|--define)
+ value=${2#* }
+ name=${2%% *}
+ define="$define$cr$name=$value"
+ shift
+ ;;
+
-s|--skip)
skip="$2"
shift
jobs="${1#-j}"
;;
+ -w)
+ wait="$2"
+ shift
+ ;;
+
-v)
verbose=yes
;;
upgrade_macros="yes"
;;
+ --update-scripts)
+ upgrade_scripts='yes'
+ ;;
+
-df | --distfiles-fetch | --distfiles-fetch-request)
df_fetch=yes
;;
usage
;;
+ --requester)
+ requester_override="$2"
+ shift
+ ;;
+
-*)
die "unknown knob: $1"
;;
done
case "$dist" in
-ac)
- builder_email="builder-ac@pld-linux.org"
- default_builders="ac-*"
- default_branch="AC-branch"
- url="http://ep09.pld-linux.org:1289/"
- control_url="http://ep09.pld-linux.org/~buildsrc"
- ;;
-ac-java) # fake "dist" for java available ac architectures
- builder_email="builder-ac@pld-linux.org"
- default_builders="ac-i586 ac-i686 ac-athlon ac-amd64"
- default_branch="AC-branch"
- url="http://ep09.pld-linux.org:1289/"
- ;;
-ac-xen) # fake "dist" for xen-enabled architectures
- builder_email="builder-ac@pld-linux.org"
- default_builders="ac-i686 ac-athlon ac-amd64"
- default_branch="AC-branch"
- ;;
ti)
builder_email="builderti@kraz.tld-linux.org"
default_builders="ti-*"
- url="http://kraz.tld-linux.org:1231/"
+ url="https://kraz.tld-linux.org:1241/"
control_url="http://kraz.tld-linux.org/~builderti"
;;
ti-dev)
builder_email="buildertidev@kraz.tld-linux.org"
default_builders="ti-dev-*"
- url="http://kraz.tld-linux.org:1232/"
+ url="https://kraz.tld-linux.org:1242/"
control_url="http://kraz.tld-linux.org/~buildertidev"
;;
-th)
- builder_email="builderth@pld-linux.org"
- default_builders="th-*"
- url="http://src.th.pld-linux.org:1234/"
- control_url="http://src.th.pld-linux.org"
- ;;
-th-java) # fake "dist" for java available th architectures
- builder_email="builderth@pld-linux.org"
- default_builders="th-x86_64 th-athlon th-i686"
- url="http://src.th.pld-linux.org:1234/"
- ;;
-aidath)
- builder_email="builderaidath@ep09.pld-linux.org"
- default_builders="aidath-*"
- ;;
*)
die "dist \`$dist' not known"
;;
# skip marker - pass it along
echo $s
;;
- *.spec:*) # spec with branch
- basename $s
- ;;
- *.spec) # spec without branch
- echo $(basename $s):$branch
- ;;
*:*) # package name with branch
- basename $s | sed -e 's/:/.spec:/'
+ _specfile=$(basename ${s%:*})
+ echo ${_specfile%.spec}.spec:${s##*:}
;;
*) # just package name
- echo $(basename $s).spec:$branch
+ echo $(basename ${s%.spec}).spec:$branch
;;
esac
done`
+if [ "$relup" = "yes" ]; then
+ msg "Auto relup enabled"
+ relup ${message:+-m "$message"} $specs
+fi
+
if [ "$autotag" = "yes" ]; then
msg "Auto autotag build enabled"
specs=$(get_autotag $specs)
build_mode=test
fi
+if [ "$upgrade_scripts" = "yes" ]; then
+ command="cd ~/rpm/rpm-build-tools && git pull"
+ command_flags=as-builder
+ builders="$dist-src"
+ f_upgrade=no
+ build_mode=test
+fi
+
if [[ "$requester" != *@* ]] ; then
- requester="$requester@pld-linux.org"
+ requester="$requester@tld-linux.org"
fi
if [ -z "$builders" ] ; then
msg "Build mode: $(tput setaf 3)$build_mode$c_norm"
fi
+ if [ -n "$requester_override" ] ; then
+ echo " <requester>$requester_override</requester>"
+ fi
+
msg "Queue-ID: $id"
echo
# job to depend on
local depend=
- local b i=1
+ local b i=1 val
local name branch builders_xml
for b in $builders; do
echo -E >&2 "* Command: $command"
echo " <batch id='$bid' depends-on=''>"
echo " <command flags='$command_flags'>"
- echo -E "$command" | sed -e 's,&,\&,g;s,<,\<,g;s,>,\>,g'
+ hsc "$command"
echo "</command>"
echo " <info></info>"
echo "$builders_xml"
echo " <branch>$branch</branch>"
echo " ${kernel:+<kernel>$kernel</kernel>}"
echo " ${target:+<target>$target</target>}"
+
+ oIFS=$IFS; IFS=$cr
+ for b in $define; do
+ [ -z "$b" ] && continue
+ value=${b#*=}
+ b=${b%%=*}
+ echo " <define name='$(hsc $b)'>$(hsc "$value")</define>"
+ msg "- define $b=$value"
+ done
+ IFS=$oIFS
+
echo " <info></info>"
echo
for b in $with; do
echo -E >&2 "* Post-Command: $post_command"
echo " <batch id='$bid' depends-on='$depend'>"
echo " <command flags='$command_flags'>"
- echo -E "$post_command" | sed -e 's,&,\&,g;s,<,\<,g;s,>,\>,g'
+ hsc "$post_command"
echo "</command>"
echo " <info></info>"
echo "$builders_xml"
To: $builder_email
Subject: build request
Message-Id: <$id@$(hostname)>
- X-New-PLD-Builder: request
- X-Requester-Version: \$Id$
+ X-New-TLD-Builder: request
+ X-Requester-Version: $VERSION
EOF