#!/usr/bin/env bash WORK_DIR=${WORK_DIR:?"WORK_DIR is not set!!"} INCOME_DIR=${INCOME_DIR:="${WORK_DIR}/income"} CODENAME=(bookworm) set -o functrace set -o nounset set -o errtrace set -o errexit function msg { local mesg="$1"; shift printf "====> ${mesg}\n" "$@" } function term_handle { if [[ -n "$inotify_pid" ]] then GO_ON=0 msg "sending TERM to inotifywait..." kill -s TERM "$inotify_pid" 2>/dev/null || true fi } function term_delay { GO_ON=0 msg "building repo, will terminate later" } trap 'term_handle' TERM SIGINT INT function build_repo { trap 'term_delay' TERM SIGINT INT for deb in "${INCOME_DIR}/"* do if [[ "$deb" = *"/*" ]] then msg "no file in $INCOME_DIR, skip this build" break fi msg "start adding $deb" for codename in "${CODENAME[@]}" do msg "adding $deb into $codename" reprepro includedeb "$codename" "$deb" done msg "finished adding $deb" msg "removing $deb from income dir $INCOME_DIR" rm $deb done trap 'term_handle' TERM SIGINT INT } cd "$WORK_DIR" GO_ON=1 # flag of if continue the loop PROGRAM_NAME="$0" while [[ "$GO_ON" = "1" ]] do build_repo msg "start watching $INCOME_DIR" inotifywait --quiet -e move -e modify -e create "$INCOME_DIR" & inotify_pid="$!" # when inotifywait was killed, its return code is no-zero, # so when wait return inotifywait's return code, script will exit due to errexit wait || true done msg "$PROGRAM_NAME shutdown"