apt-repo-updater/apt-repo-updater.sh
2023-08-04 10:21:27 +08:00

76 lines
1.6 KiB
Bash

#!/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"