--- buildman/bm 2025/01/20 22:40:23 1.1.1.1 +++ buildman/bm 2025/03/10 17:17:29 1.9 @@ -44,16 +44,17 @@ then exit 1 fi -if [ $EUID -ne ${BUILDMAN_UID} ] -then - echo "${PROGN} error: must be run as user \"${BUILDMAN_USER}\"" - exit 1 -fi +#if [ $EUID -ne ${BUILDMAN_UID} ] +#then +# echo "${PROGN} error: must be run as user \"${BUILDMAN_USER}\"" +# exit 1 +#fi ACTION="" PROJECT="" BUILD_HOST="" OS=`uname` +PYES="no" if [ "$OS" = "SCO_SV" ] ; then THOST=`hostname -s` @@ -70,11 +71,14 @@ fi tmphost=`echo ${THOST} | cut -d. -f1` THOST="${tmphost}" - -while getopts ':p:h:a:bl:o:' OPTION +while getopts ':p:h:a:bl:o:y' OPTION do case $OPTION in + y) + PYES="yes" + ;; + l) ACTION="list" TOLIST="${OPTARG}" @@ -104,10 +108,16 @@ do esac done +if [ "${ACTION}" = "" ] +then + echo "${PROGN}: no action specified" + exit 1 +fi + if [ ! -z "${PROJECT}" ] then PROJECT_BASE="${BUILDMAN_BASE}/projects/${PROJECT}" - if [ "${ACTION}" == "add" -a ! -d ${PROJECT_BASE} ] + if [ "${ACTION}" = "add" -a ! -d ${PROJECT_BASE} ] then echo "$PROGN: creating ${PROJECT} in ${PROJECT_BASE}..." mkdir -p "${PROJECT_BASE}" @@ -115,7 +125,7 @@ then if [ ! -d "${PROJECT_BASE}" ] then - echo "$PROGN error: project ${PROJECT} not defined" + echo "$PROGN error: project ${PROJECT} not defined [${PROJECT_BASE}]" exit 1 fi fi @@ -130,7 +140,11 @@ case $ACTION in ;; h|hosts) - ls -l "${BUILDMAN_BASE}/projects/${PROJECT}/hosts" + BHOSTS=`ls -1 "${BUILDMAN_BASE}/projects/${PROJECT}/hosts"` + for BHOST in ${BHOSTS} + do + echo ${BHOST} + done ;; *) @@ -159,7 +173,7 @@ case $ACTION in echo "$PROGN: creating directory structure for project \"${PROJECT}\"" mkdir -p "${PBASE}/hosts" - + mkdir -p "${PBASE}/scripts" ;; @@ -171,6 +185,7 @@ case $ACTION in fi PBASE="${BUILDMAN_BASE}/projects/${PROJECT}" + if [ ! -d "${PBASE}" ] then echo "$PROGN error: project \"${PROJECT}\" does not exist" @@ -190,14 +205,62 @@ case $ACTION in exit 1 fi + if [ -z "${OPTIONS}" ] + then + echo "$PROGN error: must pass -o \"os:version:arch\"" + exit 1 + fi + + PLSTR="${BUILD_HOST}:${OPTIONS}:buildman::" + H_PLATFORM=`echo ${PLSTR} | cut -d: -f2` + H_VERSION=`echo ${PLSTR} | cut -d: -f3` + H_ARCH=`echo ${PLSTR} | cut -d: -f4` + + if [ "${PYES}" = "no" ] + then + echo + echo "Host Details" + echo "============" + echo "Project: ${PROJECT}" + echo "Hostname: ${BUILD_HOST}" + echo "Platform: ${H_PLATFORM}" + echo "Version: ${H_VERSION}" + echo "Architecture: ${H_ARCH}" + echo + + read -n 1 -p "OK to create? (y/n) " YORN + echo + + if [ "${YORN}" = "y" -o "${YORN}" = "Y" ] + then + CONF=1 + else + echo "$PROGN: aborted" + exit 2 + fi + fi + echo "$PROGN: adding host \"${BUILD_HOST}\" to project \"${PROJECT}\"" mkdir -p "${HBASE}" + mkdir -p "${HBASE}/jobs" + mkdir -p "${HBASE}/logs" + + PFILE="${PBASE}/${H_PLATFORM}-platform.list" + echo + echo "==================================================" + echo " Don't forget to add the BuildMan cron job" + echo " to ${BUILDMAN_USER}@${BUILD_HOST}" + echo "==================================================" + echo + echo "${PLSTR}" >> "${PFILE}" + cd ${PBASE} + ls -1 *-platform.list | cut -d- -f1 | sort | uniq > platforms.list ;; esac ;; - + build) if [ -z "${BUILD_HOST}" ] @@ -206,28 +269,55 @@ case $ACTION in exit 1 fi - BUILD_BASE="${PROJECT_BASE}/hosts/${BUILD_HOST}" + if [ "${BUILD_HOST}" != '*' ] + then + BUILD_BASE="${PROJECT_BASE}/hosts/${BUILD_HOST}" + + if [ ! -d "${BUILD_BASE}" ] + then + echo "$PROGN error: build host ${BUILD_HOST} not configured" + exit 1 + fi + + BUILD_WANTED="${PROJECT_BASE}/hosts/${BUILD_HOST}/build-wanted" - if [ ! -d "${BUILD_BASE}" ] - then - echo "$PROGN error: build host ${BUILD_HOST} not configured" - exit 1 - fi - - BUILD_WANTED="${PROJECT_BASE}/${HOST}/build-wanted" + if [ -f "${BUILD_WANTED}" ] + then + echo "$PROGN error: build already requested on host ${BUILD_HOST}" + exit 1 + fi - if [ -f "${BUILD_WANTED}" ] - then - echo "$PROGN error: build already requested" - exit 1 + touch "${BUILD_WANTED}" + echo "$PROGN: build of project ${PROJECT} requested on ${BUILD_HOST}" + else + BHOSTS=`ls -1 "${BUILDMAN_BASE}/projects/${PROJECT}/hosts"` + for BUILD_HOST in ${BHOSTS} + do + BUILD_BASE="${PROJECT_BASE}/hosts/${BUILD_HOST}" + + if [ ! -d "${BUILD_BASE}" ] + then + echo "$PROGN error: build host ${BUILD_HOST} not configured" + continue + fi + + BUILD_WANTED="${PROJECT_BASE}/hosts/${BUILD_HOST}/build-wanted" + + if [ -f "${BUILD_WANTED}" ] + then + echo "$PROGN error: build already requested on ${BUILD_HOST}" + continue + fi + + touch "${BUILD_WANTED}" > /dev/null 2>&1 + if [ $? = 0 ] + then + echo "$PROGN: build of project ${PROJECT} requested on build host ${BUILD_HOST}" + else + echo "$PROGN: error requesting build of ${PROJECT} on build host ${BUILD_HOST}" + fi + done fi - - touch "${BUILD_WANTED}" - echo "$PROGN: build of project ${PROJECT} requested on build host ${HOST}" ;; esac - - - -