77 lines
1.9 KiB
Bash
Executable File
77 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -o errexit
|
|
set -o nounset
|
|
set -o pipefail
|
|
|
|
source "$(dirname "${BASH_SOURCE}")/helper.sh"
|
|
cd "${ROOT}"
|
|
|
|
DEBUG="${DEBUG:-}"
|
|
INCREMENTAL="${INCREMENTAL:-}"
|
|
QUICKLY="${QUICKLY:-}"
|
|
SYNC="${SYNC:-}"
|
|
PARALLET="${PARALLET:-0}"
|
|
PARALLET_JOBS="${PARALLET_JOBS:-4}"
|
|
EXCLUDE="$(helper::exclude)"
|
|
|
|
declare -A DOMAIN_MAP=()
|
|
|
|
function wait_jobs() {
|
|
local job_num=${1:-3}
|
|
local perc=$(jobs -p | wc -l)
|
|
while [ "${perc}" -gt "${job_num}" ]; do
|
|
sleep 1
|
|
perc=$(jobs -p | wc -l)
|
|
done
|
|
}
|
|
|
|
function sync_with_domain() {
|
|
local domain="${1}"
|
|
|
|
local list=$(echo ${DOMAIN_MAP[${domain}]} | tr ' ' '\n' | shuf)
|
|
for image in ${list}; do
|
|
regex="${DEFAULT_REGEX}"
|
|
if [[ "${image#*/}" =~ ":" ]]; then
|
|
regex="${image##*:}"
|
|
image="${image%:*}"
|
|
fi
|
|
local to="$(helper::replace_domain "${domain}/${image}")"
|
|
|
|
local logfile="${to//\//_}_sync.log"
|
|
echo >"${logfile}"
|
|
|
|
DEBUG="${DEBUG}" SYNC="${SYNC}" QUICKLY="${QUICKLY}" INCREMENTAL="${INCREMENTAL}" PARALLET="${PARALLET}" FOCUS="${regex}" SKIP="${EXCLUDE}" ./hack/diff-image.sh "${domain}/${image}" "${to}" 2>&1 | tee -a "${logfile}" || {
|
|
echo "Error: diff image ${domain}/${image} $(helper::replace_domain "${domain}/${image}")"
|
|
}
|
|
done
|
|
}
|
|
|
|
function main() {
|
|
|
|
for image in $(helper::get_source); do
|
|
key="${image%%/*}"
|
|
val="${image#*/}"
|
|
if [[ -v "DOMAIN_MAP[${key}]" ]]; then
|
|
DOMAIN_MAP["${key}"]+=" ${val}"
|
|
else
|
|
DOMAIN_MAP["${key}"]="${val}"
|
|
fi
|
|
done
|
|
|
|
for domain in "${!DOMAIN_MAP[@]}"; do
|
|
if [[ "${PARALLET_JOBS}" -eq 0 ]]; then
|
|
sync_with_domain "${domain}"
|
|
else
|
|
wait_jobs "${PARALLET_JOBS}"
|
|
sync_with_domain "${domain}" &
|
|
fi
|
|
done
|
|
|
|
wait
|
|
}
|
|
|
|
trap "trap - SIGTERM && kill 0 && echo exit..." SIGTERM SIGINT
|
|
|
|
main
|