#!/bin/sh # 2003-2009 (c) Etersoft www.etersoft.ru # Author: Vitaly Lipatov <lav@etersoft.ru> # Public domain # # BSH - build source; use hasher # # Создаёт пакет(ы) по указанным спекам и собирает в hasher # Поддерживает удалённую сборку пакета ( ключ -r) # Присылка результата сборки по почте (ключ -m) # TODO: Сжимать отправляемый лог # TODO: присылать обратно собранные пакеты?? # load common functions, compatible with local and installed script . `dirname $0`/../share/eterbuild/functions/common load_mod rpm git RESULT=0 REMCOM= COMMIT= ############################# Usage="Usage: $name [-r -s -u -m -i -c] spec..." function mygetopts() { name=${0##*/} Descr="$name - BSH - build source; use hasher" phelp() { echog "$Descr" echog "$Usage" echog "Options:" echog " -r - remote build" echog " -t - make temporary commit before build (rpmbb like behavior)" echog " -u - sign and upload after build" echog " -s - sign and and copy to upload dir (ETERDESTSRPM) after build" echog " -i - install built packages in test hasher" echog " -l - lazy cleanup (before build, not after)" echog " -c - build without stuff (previous built packages)" } while getopts :hrulsimt opt; do case $opt in h) phelp; exit 0;; r) REMOTEBUILD=1 ;; t) COMMIT="--commit" ;; +?) echog "$name: options should not be preceded by a '+'." 1>&2; exit 2;; # ?) echog "$name: $OPTARG: bad option. Use -h for help." 1>&2 ; exit 2;; ?) OPTIND=$((OPTIND-1)); break; esac done ## remove args that were options if [ $# -gt 0 ]; then shift $((OPTIND - 1)) fi LISTRPMARGS=$@ } ############################# if is_girar_name $1 ; then GIRARHOST=$1 shift fi parse_cmd_pre "$@" mygetopts $LISTARGS [ -n "$LISTNAMES" ] || fatal "Run with exists specs as arg" # TODO: skip for prev. packed src.rpm # If fail, we already has correct changelog add_changelog_helper "- new version" $LISTNAMES # We do not not pass args for myhsh here... # FIXME: не обрабатывает два пропускаемых вместе параметра pack_src_rpm $COMMIT $(echo $LISTRPMARGS | sed -e "s|-[suUicl]||g") # TODO: skip for prev. packed src.rpm set_specdir $LISTNAMES if [ -n "$REMOTEBUILD" ] ; then check_key test -n "$BUILDSERVER" || fatal "Please set BUILDSERVER in config file" # FIXME - get via etersoft-build-utils test -n "$REMOTERPMDIR" || REMOTERPMDIR=`ssh $BUILDSERVER echo $HOME`/RPM LISTSRPM="$(echo $LISTBUILT | xargs -n1 basename)" echo echog "############ Build at build server '$BUILDSERVER' (with $LISTRPMARGS options) ############" echo echog "==== Copying to build server =====" rsync -vay --partial --progress --checksum \ -e ssh $LISTBUILT $BUILDSERVER:$REMOTERPMDIR/SRPMS/ || fatal "Error with rsync" ssh -t $BUILDSERVER "cd $REMOTERPMDIR/SRPMS && time myhsh $MENVARG $LISTRPMARGS $LISTSRPM" RESULT=$? date echo "-------------------------------" test "$RESULT" = "0" && echog "It was remote build at $BUILDSERVER" || echog "There is error during remote build at $BUILDSERVER" else time $ETERBUILDBIN/myhsh $MENVARG $LISTRPMARGS $LISTBUILT RESULT=$? date echo "-------------------------------" fi # make src.rpm if build OK and we have options for rpmbs if [ ! "$RESULT" = "0" ] || [ -z "$LISTRPMARGS" ]; then exit $RESULT fi is_gear $SPECDIR && TSKLIST=$LISTNAMES || TSKLIST=$LISTBUILT $ETERBUILDBIN/rpmbs $GIRARHOST $MENVARG $LISTRPMARGS $TSKLIST