diff options
Diffstat (limited to 'mockit')
| -rwxr-xr-x | mockit | 306 | 
1 files changed, 306 insertions, 0 deletions
| @@ -0,0 +1,306 @@ +#!/bin/bash + +if [ "$2" = "" ]; then +	echo -e "\nusage: $0 [ options ] SRPM target [ min_ver [, max_ver [, mock_options ]]]\n" +	echo -e "\t--redis            store build command in redis queue" +	echo -e "\t--valkey           store build command in valkey queue" +	echo -e "\t--list             list queue content" +	echo -e "\t--nobase | --scl   only build PHP SCL packages" +	echo -e "\t--noscl | --base   only build PHP base packages" +	echo -e "\t--mock             distro is a mock config name\n" +	echo -e "Targets:" +	echo -e "\tDistribution: el8a el8x el9a el9x el10a el10x fc41a fc41x fc42a fc42x fc43a fc43x" +	echo -e "\tPHP:          all, zts" +	echo -e "\tMemcached:    memcached" +	echo -e "\tImageMagick:  im6, im7" +	echo -e "\tRedis:        r60, r62, r70, r72, r80, r82" +	echo -e "\tValkey:       v81, v90\n" +	exit 0 +fi + +# Script options +BUILD_BASE=1 +BUILD_SCLS=1 +BUILD_MOCK=0 +REDIS=0 +REMOTE=0 + +# ARCH detection and check +if [ "$(uname -m)" = "x86_64" ]; then +	SUF=x +	QUEUE=mockx +	REDISCLI="valkey-cli" +else +	SUF=a +	QUEUE=mocka +	REDISCLI="valkey-cli -h remi" +fi + +if [ "$1" == "--redis" -o "$1" == "--valkey" ]; then +	CHECK=$($REDISCLI ping) +	[ "$CHECK" = "PONG" ] || exit 1 +	REDIS=1 +	shift +fi + +# Queue commands +if [ "$1" == "--list" ]; then +	a=$($REDISCLI bgsave) +	echo "-- x86_64 queue: $($REDISCLI scard mockx) tasks --" +	a=$($REDISCLI smembers mockx) +	[ -n "$a" ] && $REDISCLI smembers mockx | \ +       sed -e 's/^.*-r /  /;s/rebuild/\t/;s:/.*/::' | sort | head -n 25 || \ +       ps -ef | grep mock/mock | grep -v grep + +	echo -e "\n-- aarch64 queue: $($REDISCLI scard mocka) tasks --" +	a=$($REDISCLI smembers mocka) +	[ -n "$a" ] && $REDISCLI smembers mocka  | \ +      sed -e 's/^.*-r /  /;s/rebuild/\t/;s:/.*/::'| sort || \ +      ps -ef | ssh remi@ampere 'ps -ef | grep mock/mock | grep -v grep' + +	exit 0 +elif [ "$1" == "--clean" ]; then +	$REDISCLI del mockx +	$REDISCLI del mocka +	exit 0 +fi + +if [ "$1" == "--nobase" -o "$1" == "--scl" ]; then +	BUILD_BASE=0 +	shift +elif [ "$1" == "--noscl" -o "$1" == "--base" ]; then +	BUILD_SCLS=0 +	shift +elif [ "$1" == "--mock" ]; then +	BUILD_BASE=0 +	BUILD_SCLS=0 +	BUILD_MOCK=1 +	shift +fi + +SRPM=$1 +DIST=$2 +shift 2 + +# PHP version build range +if [ "$1" = "" ]; then +	MIN=56 +else +	MIN=$1 +	shift +fi +if [ "$1" = "" ]; then +	MAX=85 +else +	MAX=$1 +	shift +fi + +case $DIST in +	*x|*xm|*xr|*xr62|*xr72|*xr80|*xr82|*xv81|*xv90) +		if [ $SUF != x ]; then +			echo "Not an x86_64 builder" +			exit 1 +		fi +		;; +	*a|*am|*ar|*ar62|*ar72|*ar80|*ar82|*av81|*av90) +		if [ $SUF != a ]; then +			if [ $REDIS -ge 1 ]; then +				REMOTE=1 +			else +				echo "Not an aarch64 builder" +				exit 1 +			fi +		fi +		;; +esac + +# SRPM abolute path +mockref=/home/rpmbuild/SPECS/remirepo/tools/mock +mocketc=$mockref +srpmdir=/home/rpmbuild/site/rpms/SRPMS +case $DIST in +	*a|*am) +		mocketc=/home/remi/mock +		srpmdir=/home/remi/SRPMS +		;; +esac + +if [ -f $srpmdir/$SRPM ]; then +	SRPM=$srpmdir/$SRPM +elif [ -f $PWD/$SRPM ]; then +	SRPM=$PWD/$SRPM +elif [ ! -f $SRPM ]; then +	echo "file not found '$SRPM'" +	exit 1 +fi + +# Send to remote aarch64 builder +if [ $REMOTE -ge 1 ]; then +	LST=/tmp/srpm_aarch64_sent.list +	touch $LST +	if ! grep -q $SRPM $LST; then +		scp $SRPM remi@ampere:todo/ +		echo $SRPM >>$LST +	fi +	mocketc=/home/remi/mock +	QUEUE=mocka +	SRPM=/home/remi/todo/$(basename $SRPM) +fi + +# PHP version matrix +echo mockit $SRPM $DIST $MIN $MAX $@ +case $DIST in +	fc43x|fc43a|fc42x|fc42a|fc41x|fc41a|el9x|el9a|el10x|el10a) +		LST="74 80 81 82 83 84 85" +		SCL="74 80 81 82 83 84 85" +		;; +	el8a) +		LST="72 73 74 80 81 82 83 84 85" +		SCL="72 73 74 80 81 82 83 84 85" +		;; +	el8x) +		LST="72 73 74 80 81 82 83 84 85" +		SCL="56 70 71 72 73 74 80 81 82 83 84 85" +		;; +	all) +		if [ $REDIS -ge 1 ]; then +			for i in fc41x fc42x fc43x el8x el9x el10x fc41a fc42a fc43a el8a el9a el10a +			do +				[ $BUILD_BASE -ge 1 ] && $0 --valkey --base $SRPM $i $MIN $MAX $@ +				[ $BUILD_SCLS -ge 1 ] && $0 --valkey --scl  $SRPM $i $MIN $MAX $@ +			done +		else +			echo Not supported for direct build +		fi +		;; +	zts) +		if [ $REDIS -ge 1 ]; then +			[ $MAX -gt 83 ] && MAX=83 +			for i in el8x el9x +			do +				[ $BUILD_BASE -ge 1 ] && $0 --valkey --base $SRPM $i $MIN $MAX $@ +			done +		else +			echo Not supported for direct build +		fi +		;; +	memcached) +		if [ $REDIS -ge 1 ]; then +			for i in fc41x fc42x fc43x el8x el9xm el10xm fc41a fc42a fc43a el8a el9am el10am +			do +				$0 --valkey --mock $SRPM $i $MIN $MAX $@ +			done +		else +			echo Not supported for direct build +		fi +		;; +	im6) +		if [ $REDIS -ge 1 ]; then +			for i in el8xr el9x el8ar el9a +			do +				$0 --valkey --mock $SRPM $i $MIN $MAX $@ +			done +		else +			echo Not supported for direct build +		fi +		;; +	im7) +		if [ $REDIS -ge 1 ]; then +			for i in fc41x fc42x fc43x el8xr el9x el10x fc41a fc42a fc43a el8ar el9a el10a +			do +				$0 --valkey --mock $SRPM $i $MIN $MAX $@ +			done +		else +			echo Not supported for direct build +		fi +		;; +	v81|v90) +		if [ $REDIS -ge 1 ]; then +			for i in fc42x fc43x fc41x el8x el9x el10x fc41a fc42a fc43a el8a el9a el10a +			do +				$0 --valkey --mock $SRPM ${i}${DIST} $MIN $MAX $@ +			done +		else +			echo Not supported for direct build +		fi +		;; +	r80|r82) +		if [ $REDIS -ge 1 ]; then +			for i in fc42x fc41x fc43x el8x el9x el10x fc41a fc42a fc43a el8a el9a el10a +			do +				$0 --valkey --mock $SRPM ${i}${DIST} $MIN $MAX $@ +			done +		else +			echo Not supported for direct build +		fi +		;; +	r72) +		if [ $REDIS -ge 1 ]; then +			for i in el8x el9x el10x el8a el9a el10a +			do +				$0 --valkey --mock $SRPM ${i}${DIST} $MIN $MAX $@ +			done +		else +			echo Not supported for direct build +		fi +		;; +	r60|r62|r70) +		if [ $REDIS -ge 1 ]; then +			for i in el8x el9x el8a el9a +			do +				$0 --valkey --mock $SRPM ${i}${DIST} $MIN $MAX $@ +			done +		else +			echo Not supported for direct build +		fi +		;; +	*) +		if [ $BUILD_MOCK -eq 0 -o ! -f ${mockref}/${DIST}.cfg ]; then +			[ $BUILD_MOCK -eq 0  ] && echo "BUILD_MOCK=0" +			[ ! -f ${mocketc}/${DIST}.cfg ] && echo "${mockref}/${DIST}.cfg missing" +			echo Unkown DIST $DIST +			exit 1 +		fi +		;; +esac + +ID=${QUEUE:-$PPID} + +# Build base/modules +[ $BUILD_BASE -ge 1 ] && for i in $LST +do +	if [ 0$i -ge $MIN -a 0$i -le $MAX ]; then +		CMD="mock -q --configdir=$mocketc -r ${DIST}${i} rebuild $SRPM $@" +		if [ $REDIS -ge 1 ]; then +			$REDISCLI sadd $QUEUE "$CMD" +		else +			echo -n "$(date +%X)    $i " +			$CMD --uniqueext=$ID && echo " Ok." || echo " Error !" +		fi +	fi +done +# Build Software Collections +[ $BUILD_SCLS -ge 1 ] && for i in $SCL +do +	if [ 0$i -ge $MIN -a 0$i -le $MAX ]; then +		CMD="mock -q --configdir=$mocketc -r ${DIST}scl${i} rebuild $SRPM $@" +		if [ $REDIS -ge 1 ]; then +			$REDISCLI sadd $QUEUE "$CMD" +		else +			echo -n "$(date +%X) scl$i " +			$CMD --uniqueext=$ID && echo " Ok." || echo " Error !" +		fi +	fi +done +# Build using mock config +if [ $BUILD_MOCK -ge 1 ]; then +	CMD="mock -q --configdir=$mocketc -r ${DIST} rebuild $SRPM $@" +	$REDISCLI sadd $QUEUE "$CMD" +fi + +if [ $REDIS -ge 1 ]; then +	echo "Queue size: " $($REDISCLI scard $QUEUE) +else +	date +%X +fi | 
