mirror of
https://gitea.com/gitea/act_runner.git
synced 2026-10-29 03:16:43 +08:00
`gitea-runner register` pinged the instance in an unbounded loop, so a permanent failure like an untrusted certificate or a wrong URL never returned. It now pings once and returns the error, like other one-shot commands. The image entrypoint keeps retrying registration indefinitely by default, like the daemon, so a container without a restart policy still recovers once Gitea is reachable. `GITEA_MAX_REG_ATTEMPTS` had no effect because its counter was incremented outside the loop. When set, it now caps the attempts, after which the entrypoint exits non-zero. Fixes: https://gitea.com/gitea/runner/issues/1195 Co-authored-by: silverwind <me@silverwind.io> Reviewed-on: https://gitea.com/gitea/runner/pulls/1197 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-by: silverwind <2021+silverwind@noreply.gitea.com> Co-authored-by: bircni <bircni@icloud.com>
63 lines
2.1 KiB
Bash
Executable File
63 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
if [[ ! -d /data ]]; then
|
|
mkdir -p /data
|
|
fi
|
|
|
|
cd /data
|
|
|
|
CONFIG_ARG=""
|
|
if [[ ! -z "${CONFIG_FILE}" ]]; then
|
|
CONFIG_ARG="--config ${CONFIG_FILE}"
|
|
fi
|
|
RUNNER_STATE_FILE=${RUNNER_STATE_FILE:-$(gitea-runner ${CONFIG_ARG} config runner-file)}
|
|
LABEL_ARGS=""
|
|
if [[ ! -z "${GITEA_RUNNER_LABELS}" ]]; then
|
|
LABEL_ARGS="--labels ${GITEA_RUNNER_LABELS}"
|
|
fi
|
|
EXTRA_ARGS="${LABEL_ARGS}"
|
|
if [[ ! -z "${GITEA_RUNNER_EPHEMERAL}" ]]; then
|
|
EXTRA_ARGS="${EXTRA_ARGS} --ephemeral"
|
|
fi
|
|
# Also pass the labels to the daemon, so that an already registered runner
|
|
# picks up changes to GITEA_RUNNER_LABELS instead of keeping the labels it
|
|
# was first registered with.
|
|
RUN_ARGS="${LABEL_ARGS}"
|
|
if [[ ! -z "${GITEA_RUNNER_ONCE}" ]]; then
|
|
RUN_ARGS="${RUN_ARGS} --once"
|
|
fi
|
|
|
|
# In case no token is set, it's possible to read the token from a file, i.e. a Docker Secret
|
|
if [[ -z "${GITEA_RUNNER_REGISTRATION_TOKEN}" ]] && [[ -f "${GITEA_RUNNER_REGISTRATION_TOKEN_FILE}" ]]; then
|
|
GITEA_RUNNER_REGISTRATION_TOKEN=$(cat "${GITEA_RUNNER_REGISTRATION_TOKEN_FILE}")
|
|
fi
|
|
|
|
# Use the same ENV variable names as https://github.com/vegardit/docker-gitea-act-runner
|
|
test -f "$RUNNER_STATE_FILE" || echo "$RUNNER_STATE_FILE is missing or not a regular file"
|
|
|
|
if [[ ! -s "$RUNNER_STATE_FILE" ]]; then
|
|
for ((try = 1; ; try++)); do # waits for Gitea like the daemon does, a container may have no restart policy
|
|
gitea-runner register \
|
|
--instance "${GITEA_INSTANCE_URL}" \
|
|
--token "${GITEA_RUNNER_REGISTRATION_TOKEN}" \
|
|
--name "${GITEA_RUNNER_NAME:-`hostname`}" \
|
|
${CONFIG_ARG} ${EXTRA_ARGS} --no-interactive 2>&1 | tee /tmp/reg.log
|
|
|
|
if grep -q 'Runner registered successfully' /tmp/reg.log; then
|
|
echo "SUCCESS"
|
|
break
|
|
fi
|
|
if [[ ${GITEA_MAX_REG_ATTEMPTS:-0} -gt 0 ]] && [[ $try -ge $GITEA_MAX_REG_ATTEMPTS ]]; then
|
|
echo "Registration failed after ${try} attempts"
|
|
exit 1
|
|
fi
|
|
echo "Waiting to retry ..."
|
|
sleep 5
|
|
done
|
|
fi
|
|
# Prevent reading the token from the gitea-runner process
|
|
unset GITEA_RUNNER_REGISTRATION_TOKEN
|
|
unset GITEA_RUNNER_REGISTRATION_TOKEN_FILE
|
|
|
|
exec gitea-runner daemon ${CONFIG_ARG} ${RUN_ARGS}
|