feat: adding TEST_MODE.

This commit is contained in:
Robert Wlodarczyk 2023-03-04 18:31:55 -08:00
parent 035cd4a906
commit 022399e16a
2 changed files with 40 additions and 14 deletions

View File

@ -19,6 +19,7 @@ RUN apk update && \
apk upgrade && \ apk upgrade && \
apk add --no-cache \ apk add --no-cache \
bash \ bash \
coreutils \
curl \ curl \
gettext \ gettext \
jq \ jq \

View File

@ -4,8 +4,13 @@ set -e
DOCKER_SOCK=/var/run/docker.sock DOCKER_SOCK=/var/run/docker.sock
CRONTAB_FILE=/etc/crontabs/docker CRONTAB_FILE=/etc/crontabs/docker
LOG_DIR=/var/log/crontab
if [ -z "${HOME_DIR}" ]; then if [ -z "${HOME_DIR}" ] && [ -n "${TEST_MODE}" ]; then
HOME_DIR=/tmp/crontab-docker-testing
CRONTAB_FILE=${HOME_DIR}/test
LOG_DIR=${HOME_DIR}/crontab
elif [ -z "${HOME_DIR}" ]; then
echo "HOME_DIR not set." echo "HOME_DIR not set."
exit 1 exit 1
fi fi
@ -18,10 +23,9 @@ if [ -z "${DOCKER_HOST}" ] && [ -a "${DOCKER_PORT_2375_TCP}" ]; then
fi fi
if [ "${LOG_FILE}" == "" ]; then if [ "${LOG_FILE}" == "" ]; then
LOG_DIR=/var/log/crontab
LOG_FILE=${LOG_DIR}/jobs.log LOG_FILE=${LOG_DIR}/jobs.log
mkdir -p ${LOG_DIR} mkdir -p "${LOG_DIR}"
touch ${LOG_FILE} touch "${LOG_FILE}"
fi fi
normalize_config() { normalize_config() {
@ -115,10 +119,7 @@ make_cmd() {
parse_schedule() { parse_schedule() {
case $1 in case $1 in
"@yearly") "@yearly"|"@annually")
echo "0 0 1 1 *"
;;
"@annually")
echo "0 0 1 1 *" echo "0 0 1 1 *"
;; ;;
"@monthly") "@monthly")
@ -156,6 +157,28 @@ parse_schedule() {
echo "*/${TOTAL} * * * *" echo "*/${TOTAL} * * * *"
;; ;;
"@random")
for when in "$@"
do
if [ "$when" == "@random" ]; then
continue
fi
M H D="*"
case $when in
"@m")
M=$(shuf -i 0-6 -n 1)
;;
"@h")
H=$(shuf -i 0-23 -n 1)
;;
"@d")
D=$(shuf -i 0-6 -n 1)
;;
esac
done
echo "${M} ${H} * * ${D}"
;;
*) *)
echo "${@}" echo "${@}"
;; ;;
@ -163,7 +186,7 @@ parse_schedule() {
} }
function build_crontab() { function build_crontab() {
rm -rf ${CRONTAB_FILE} rm -rf "${CRONTAB_FILE}"
ONSTART=() ONSTART=()
while read -r i ; do while read -r i ; do
@ -203,7 +226,7 @@ function build_crontab() {
echo "" echo ""
echo "echo \"start cron job __${SCRIPT_NAME}__\"" echo "echo \"start cron job __${SCRIPT_NAME}__\""
echo "${CRON_COMMAND}" echo "${CRON_COMMAND}"
} >> "${SCRIPT_PATH}" } > "${SCRIPT_PATH}"
TRIGGER=$(echo "${KEY}" | jq -r '.trigger') TRIGGER=$(echo "${KEY}" | jq -r '.trigger')
if [ "${TRIGGER}" != "null" ]; then if [ "${TRIGGER}" != "null" ]; then
@ -222,9 +245,9 @@ function build_crontab() {
echo "echo \"end cron job __${SCRIPT_NAME}__\"" >> "${SCRIPT_PATH}" echo "echo \"end cron job __${SCRIPT_NAME}__\"" >> "${SCRIPT_PATH}"
if [ "${COMMENT}" != "null" ]; then if [ "${COMMENT}" != "null" ]; then
echo "# ${COMMENT}" >> ${CRONTAB_FILE} echo "# ${COMMENT}" >> "${CRONTAB_FILE}"
fi fi
echo "${SCHEDULE} ${SCRIPT_PATH}" >> ${CRONTAB_FILE} echo "${SCHEDULE} ${SCRIPT_PATH}" >> "${CRONTAB_FILE}"
ONSTART_COMMAND=$(echo "${KEY}" | jq -r '.onstart') ONSTART_COMMAND=$(echo "${KEY}" | jq -r '.onstart')
if [ "${ONSTART_COMMAND}" == "true" ]; then if [ "${ONSTART_COMMAND}" == "true" ]; then
@ -233,7 +256,7 @@ function build_crontab() {
done < <(jq -r '. | keys[]' "${CONFIG}") done < <(jq -r '. | keys[]' "${CONFIG}")
printf "##### crontab generated #####\n" printf "##### crontab generated #####\n"
cat ${CRONTAB_FILE} cat "${CRONTAB_FILE}"
printf "##### run commands with onstart #####\n" printf "##### run commands with onstart #####\n"
for ONSTART_COMMAND in "${ONSTART[@]}"; do for ONSTART_COMMAND in "${ONSTART[@]}"; do
@ -258,6 +281,8 @@ start_app() {
exec "${@}" exec "${@}"
} }
if [ -z "${TEST_MODE}" ]; then
ensure_docker_socket_accessible ensure_docker_socket_accessible
fi
printf "✨ starting crontab container ✨\n" printf "✨ starting crontab container ✨\n"
start_app "${@}" start_app "${@}"