#!/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 }" 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"