Annotation of buildman/bm, revision 1.1

1.1     ! snw         1: #!/bin/sh
        !             2: 
        !             3: # SPDX-FileCopyrightText: (C) 2025 Coherent Logic Development LLC
        !             4: # SPDX-FileCopyrightText: (C) 2025 Serena Willis
        !             5: #
        !             6: # SPDX-License-Identifier: AGPL-3.0
        !             7: 
        !             8: #
        !             9: # BuildMan 0.0.1
        !            10: #  Distributed CI/CD system with portability to older UNIX systems
        !            11: #
        !            12: #  bm - primary BuildMan script
        !            13: #
        !            14: # Copyright (C) 2025 Coherent Logic Development LLC
        !            15: #
        !            16: # Author: Serena Willis <snw@coherent-logic.com>
        !            17: #
        !            18: 
        !            19: PROGN=`basename $0`
        !            20: 
        !            21: if [ -f "/etc/default/bm" ]
        !            22: then
        !            23:     . /etc/default/bm
        !            24: else
        !            25:     echo "${PROGN} error:  no /etc/default/bm"
        !            26:     exit 1
        !            27: fi
        !            28: 
        !            29: if [ -z ${BUILDMAN_BASE} ]
        !            30: then
        !            31:     echo "${PROGN} error:  BUILDMAN_BASE undefined"
        !            32:     exit 1
        !            33: fi
        !            34: 
        !            35: if [ -z ${BUILDMAN_UID} ]
        !            36: then
        !            37:     echo "${PROGN} error:  BUILDMAN_UID undefined"
        !            38:     exit 1
        !            39: fi
        !            40: 
        !            41: if [ -z ${BUILDMAN_GID} ]
        !            42: then
        !            43:     echo "${PROGN} error:  BUILDMAN_GID undefined"
        !            44:     exit 1
        !            45: fi
        !            46: 
        !            47: if [ $EUID -ne ${BUILDMAN_UID} ]
        !            48: then
        !            49:     echo "${PROGN} error:  must be run as user \"${BUILDMAN_USER}\""
        !            50:     exit 1
        !            51: fi
        !            52: 
        !            53: ACTION=""
        !            54: PROJECT=""
        !            55: BUILD_HOST=""
        !            56: OS=`uname`
        !            57: 
        !            58: if [ "$OS" = "SCO_SV" ] ; then
        !            59:     THOST=`hostname -s`
        !            60:     PATH=/usr/gnu/bin:$PATH
        !            61:     export PATH
        !            62: else
        !            63:     if [ "$OS" = "SunOS" ] ; then
        !            64:         THOST=`hostname`
        !            65:     else    
        !            66:         THOST=`hostname -s`
        !            67:     fi
        !            68: fi
        !            69: 
        !            70: tmphost=`echo ${THOST} | cut -d. -f1`
        !            71: THOST="${tmphost}"
        !            72: 
        !            73: 
        !            74: while getopts ':p:h:a:bl:o:' OPTION
        !            75: do
        !            76:     case $OPTION in
        !            77: 
        !            78:         l)
        !            79:             ACTION="list"
        !            80:             TOLIST="${OPTARG}"
        !            81:             ;;
        !            82: 
        !            83:         o)
        !            84:             OPTIONS="${OPTARG}"
        !            85:             ;;
        !            86:         
        !            87:         p)
        !            88:             PROJECT="${OPTARG}"
        !            89:             ;;
        !            90: 
        !            91:         a)
        !            92:             ACTION="add"
        !            93:             TOADD="${OPTARG}"
        !            94:             ;;
        !            95: 
        !            96:         b)
        !            97:             ACTION="build"
        !            98:             ;;
        !            99: 
        !           100:         h)
        !           101:             BUILD_HOST="${OPTARG}"
        !           102:             ;;
        !           103: 
        !           104:     esac
        !           105: done
        !           106: 
        !           107: if [ ! -z "${PROJECT}" ]
        !           108: then
        !           109:     PROJECT_BASE="${BUILDMAN_BASE}/projects/${PROJECT}"
        !           110:     if [ "${ACTION}" == "add" -a ! -d ${PROJECT_BASE} ]
        !           111:     then
        !           112:         echo "$PROGN:  creating ${PROJECT} in ${PROJECT_BASE}..."
        !           113:         mkdir -p "${PROJECT_BASE}"
        !           114:     fi
        !           115: 
        !           116:     if [ ! -d "${PROJECT_BASE}" ]
        !           117:     then
        !           118:         echo "$PROGN error:  project ${PROJECT} not defined"
        !           119:         exit 1
        !           120:     fi
        !           121: fi
        !           122: 
        !           123: case $ACTION in
        !           124: 
        !           125:     list)
        !           126:         case $TOLIST in
        !           127: 
        !           128:             p|projects)
        !           129:                 ls -d -1 ${BUILDMAN_BASE}/projects/*
        !           130:                 ;;
        !           131: 
        !           132:             h|hosts)
        !           133:                 ls -l "${BUILDMAN_BASE}/projects/${PROJECT}/hosts"
        !           134:                 ;;
        !           135: 
        !           136:             *)
        !           137:                 echo "$PROGN error:  invalid list specifier \"${TOLIST}\""
        !           138:                 exit 1
        !           139:                 ;;
        !           140:         esac
        !           141:         ;;
        !           142: 
        !           143:     add)
        !           144:         case $TOADD in
        !           145: 
        !           146:             p|project)
        !           147:                 if [ -z "${PROJECT}" ]
        !           148:                 then
        !           149:                     echo "$PROGN error:  no project specified (use -p)"
        !           150:                     exit 1
        !           151:                 fi
        !           152: 
        !           153:                 PBASE="${BUILDMAN_BASE}/projects/${PROJECT}"
        !           154:                 if [ -d "${PBASE}" ]
        !           155:                 then
        !           156:                     echo "$PROGN error:  project \"${PROJECT}\" already exists"
        !           157:                     exit 1
        !           158:                 fi
        !           159: 
        !           160:                 echo "$PROGN:  creating directory structure for project \"${PROJECT}\""
        !           161:                 mkdir -p "${PBASE}/hosts"
        !           162:                 
        !           163:                 ;;
        !           164:             
        !           165: 
        !           166:             h|host)
        !           167:                 if [ -z "${PROJECT}" ]
        !           168:                 then
        !           169:                     echo "$PROGN error:  no project specified (use -p)"
        !           170:                     exit 1
        !           171:                 fi
        !           172: 
        !           173:                 PBASE="${BUILDMAN_BASE}/projects/${PROJECT}"
        !           174:                 if [ ! -d "${PBASE}" ]
        !           175:                 then
        !           176:                     echo "$PROGN error:  project \"${PROJECT}\" does not exist"
        !           177:                     exit 1
        !           178:                 fi
        !           179:                 
        !           180:                 if [ -z "${BUILD_HOST}" ]
        !           181:                 then
        !           182:                     echo "$PROGN error:  no host specified (use -h)"
        !           183:                     exit 1
        !           184:                 fi
        !           185: 
        !           186:                 HBASE="${PBASE}/hosts/${BUILD_HOST}"
        !           187:                 if [ -d "${HBASE}" ]
        !           188:                 then
        !           189:                     echo "$PROGN error:  build host \"${BUILD_HOST}\" already exists"
        !           190:                     exit 1
        !           191:                 fi
        !           192: 
        !           193:                 echo "$PROGN:  adding host \"${BUILD_HOST}\" to project \"${PROJECT}\""
        !           194:                 mkdir -p "${HBASE}"
        !           195:                 ;;
        !           196: 
        !           197:         esac
        !           198:         ;;
        !           199:             
        !           200:                 
        !           201:     
        !           202:     build)
        !           203:         if [ -z "${BUILD_HOST}" ]
        !           204:         then
        !           205:             echo "$PROGN error:  no build host specified"
        !           206:             exit 1
        !           207:         fi
        !           208: 
        !           209:         BUILD_BASE="${PROJECT_BASE}/hosts/${BUILD_HOST}"
        !           210: 
        !           211:         if [ ! -d "${BUILD_BASE}" ]
        !           212:         then
        !           213:             echo "$PROGN error:  build host ${BUILD_HOST} not configured"
        !           214:             exit 1
        !           215:         fi
        !           216:         
        !           217:         BUILD_WANTED="${PROJECT_BASE}/${HOST}/build-wanted"
        !           218: 
        !           219:         if [ -f "${BUILD_WANTED}" ]
        !           220:         then
        !           221:             echo "$PROGN error:  build already requested"
        !           222:             exit 1
        !           223:         fi
        !           224: 
        !           225:         touch "${BUILD_WANTED}"
        !           226:         echo "$PROGN:  build of project ${PROJECT} requested on build host ${HOST}"
        !           227:         ;;
        !           228: 
        !           229: esac
        !           230:         
        !           231: 
        !           232:     
        !           233:         

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>