Files
compose-files/deploy/stack-deploy.sh
T
2026-06-25 16:53:23 -07:00

27 lines
1.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# stack-deploy.sh - Safe Docker Swarm stack deployer
# Handles special chars in .env (||, backticks, %, *) via Python
set -euo pipefail
STACK="${1:?Usage: stack-deploy.sh <stack-name>}"
DIR="/volume1/docker/compose-files"
YAML="$DIR/${STACK}.yaml"
ENVFILE="$DIR/${STACK}.env"
PY="/volume1/docker/compose-files/deploy/envparse.py"
[ -f "$YAML" ] || { echo "ERROR: $YAML not found"; exit 1; }
echo "==> Deploying stack: $STACK"
if [ -f "$ENVFILE" ]; then
echo " Loading: $ENVFILE"
eval "$(python3 $PY export "$ENVFILE")"
VARS="$(python3 $PY vars "$ENVFILE")"
echo " Vars: $VARS"
envsubst "$VARS" < "$YAML" \
| python3 $PY strip \
| docker stack deploy -c - "$STACK"\
|| { echo -e "\\n Hint: 'secret not found' means Woodpecker hasn't provisioned secrets yet for this stack."; echo -e " Trigger the pipeline first: https://woodpecker.bryanmail.net\\n"; exit 1; }
else
echo " No env file"
docker stack deploy -c "$YAML" "$STACK"\
|| { echo -e "\\n Hint: 'secret not found' means Woodpecker hasn't provisioned secrets yet for this stack."; echo -e " Trigger the pipeline first: https://woodpecker.bryanmail.net\\n"; exit 1; }
fi
echo "==> Done: $STACK"