#!/usr/bin/env bash PROJECT=$1 LOG_DIR="/var/log/openSUSE-release-tools/${PROJECT}" IBS_PRODUCT_PREFIX="SUSE:SLFO:Products:" GITEA_PRODUCTS_URL="https://src.suse.de/products/" [ ! -d "${LOG_DIR}" ] && mkdir ${LOG_DIR} ibs_to_gitea_product() { printf '%s' "${GITEA_PRODUCTS_URL}$(printf '%s' "${PROJECT}" | sed "s/${IBS_PRODUCT_PREFIX}//" | sed -E 's/:/\#/g')" } pkglistgen_extra_args() { if [[ ${PROJECT} =~ ^${IBS_PRODUCT_PREFIX}.* ]] ; then printf '%s' "--engine product_composer --git-url $(ibs_to_gitea_product)" else printf '' fi } logger() { date -Is >> ${LOG_DIR}/pkglistgen.log echo "$1" >> ${LOG_DIR}/pkglistgen.log } polling_repo() { logger "[CHECKING] Checking standard repository from ${PROJECT}" OUTPUT=$(timeout 3m /usr/share/openSUSE-release-tools/verify-repo-built-successful.py -A ${API_URL} -p ${PROJECT} -r standard $(pkglistgen_extra_args) 2>&1) RETURNCODE=$? if [ ${RETURNCODE} -eq 0 ]; then logger "[READY] Repository is NOT building" elif [ ${RETURNCODE} -eq 124 ]; then logger "[TIMEOUT] Verifying repository status reaches a timeout" else case ${OUTPUT} in *"Repository "*" is not yet finished"*) logger "[BUILDING] Repository is building" RETURNCODE=3 ;; *"Repository "*" has "*" packages"*) logger "[FAILED] Repository has package build failed" RETURNCODE=4 ;; *"Repository "*" has more disabled packages than succeeded"*) logger "[ERROR] Repository has more disabled packages than succeeded" RETURNCODE=5 ;; esac logger "${OUTPUT}" fi return ${RETURNCODE} } logger "[START] Start osrt-pkglistgen@${PROJECT}.service: polling repository results" polling_repo # Check if repository building if [ $? -eq 3 ]; then # Repository is building, waiting it finishes while true; do logger "[WAITING] Waiting 10min before next repository status check" sleep 10m polling_repo case $? in 0) # Stop polling repository results: Repository finished building if systemctl is-active --quiet osrt-relpkggen@${PROJECT}.service; then logger "[WARNING] osrt-relpkggen@${PROJECT}.service is running" logger "[WAITING] Waiting for osrt-relpkggen@${PROJECT}.service finishes" continue else logger"[RUNNING] Running osrt-pkglistgen" /usr/bin/osrt-pkglistgen -A ${API_URL} --debug update_and_solve -p ${PROJECT} -s target --custom-cache-tag product --force >> ${LOG_DIR}/pkglistgen.log 2>&1 exit $? fi ;; 3) # Continue polling repository results: Repository is still building continue ;; 124) # Retry polling repository results: Verifying repository results reaches a timeout continue ;; *) # Stop polling repository results: Failed polling results exit 1 ;; esac done fi logger "[FINISH] Finish osrt-pkglistgen@${PROJECT}.service"