Files
gitea-migration/setup/nginx-to-caddy/validate_caddy.sh

104 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
# shellcheck source=./lib.sh
source "$SCRIPT_DIR/lib.sh"
CONFIG_FILE="$SCRIPT_DIR/output/Caddyfile.generated"
FORMAT_FILE=true
USE_DOCKER=false
DO_ADAPT=true
DO_VALIDATE=true
CADDY_IMAGE="slothcroissant/caddy-cloudflaredns:latest"
usage() {
cat <<USAGE
Usage: $(basename "$0") [options]
Format/adapt/validate a generated Caddyfile.
Options:
--config=PATH Caddyfile to validate (default: setup/nginx-to-caddy/output/Caddyfile.generated)
--no-format Skip caddy fmt
--no-adapt Skip caddy adapt
--no-validate Skip caddy validate
--docker Use Docker image instead of local caddy binary
--image=NAME Docker image when --docker is used (default: slothcroissant/caddy-cloudflaredns:latest)
--help, -h Show help
USAGE
}
for arg in "$@"; do
case "$arg" in
--config=*) CONFIG_FILE="${arg#*=}" ;;
--no-format) FORMAT_FILE=false ;;
--no-adapt) DO_ADAPT=false ;;
--no-validate) DO_VALIDATE=false ;;
--docker) USE_DOCKER=true ;;
--image=*) CADDY_IMAGE="${arg#*=}" ;;
--help|-h) usage; exit 0 ;;
*) log_error "Unknown argument: $arg"; usage; exit 1 ;;
esac
done
if [[ ! -f "$CONFIG_FILE" ]]; then
log_error "Config file not found: $CONFIG_FILE"
exit 1
fi
CONFIG_FILE="$(cd "$(dirname "$CONFIG_FILE")" && pwd)/$(basename "$CONFIG_FILE")"
if [[ "$USE_DOCKER" == "true" ]]; then
require_cmd docker
docker_env_args=()
if [[ -n "${CF_API_TOKEN:-}" ]]; then
docker_env_args+=( -e "CF_API_TOKEN=${CF_API_TOKEN}" )
elif [[ -n "${CLOUDFLARE_API_TOKEN:-}" ]]; then
docker_env_args+=( -e "CF_API_TOKEN=${CLOUDFLARE_API_TOKEN}" )
fi
if [[ "$FORMAT_FILE" == "true" ]]; then
log_info "Formatting Caddyfile with Docker..."
docker run --rm \
"${docker_env_args[@]}" \
-v "$CONFIG_FILE:/etc/caddy/Caddyfile" \
"$CADDY_IMAGE" caddy fmt --overwrite /etc/caddy/Caddyfile
fi
if [[ "$DO_ADAPT" == "true" ]]; then
log_info "Adapting Caddyfile (Docker)..."
docker run --rm \
"${docker_env_args[@]}" \
-v "$CONFIG_FILE:/etc/caddy/Caddyfile:ro" \
"$CADDY_IMAGE" caddy adapt --config /etc/caddy/Caddyfile --adapter caddyfile >/dev/null
fi
if [[ "$DO_VALIDATE" == "true" ]]; then
log_info "Validating Caddyfile (Docker)..."
docker run --rm \
"${docker_env_args[@]}" \
-v "$CONFIG_FILE:/etc/caddy/Caddyfile:ro" \
"$CADDY_IMAGE" caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile
fi
else
require_cmd caddy
if [[ "$FORMAT_FILE" == "true" ]]; then
log_info "Formatting Caddyfile..."
caddy fmt --overwrite "$CONFIG_FILE"
fi
if [[ "$DO_ADAPT" == "true" ]]; then
log_info "Adapting Caddyfile..."
caddy adapt --config "$CONFIG_FILE" --adapter caddyfile >/dev/null
fi
if [[ "$DO_VALIDATE" == "true" ]]; then
log_info "Validating Caddyfile..."
caddy validate --config "$CONFIG_FILE" --adapter caddyfile
fi
fi
log_success "Validation checks complete"