158 lines
5.2 KiB
Bash
Executable file
158 lines
5.2 KiB
Bash
Executable file
#!/bin/bash
|
|
# Deploy commands for lilith-platform.live
|
|
# Sourced by the top-level ./run script — do not execute directly.
|
|
# ROOT_DIR is set by the caller.
|
|
#
|
|
# Deployments are gated through Forgejo Actions CI by default.
|
|
# Use --direct to bypass CI and deploy from your local machine (emergencies only).
|
|
|
|
COMMAND="${1:-}"
|
|
shift || true
|
|
|
|
FORGEJO_URL="http://forge.black.local"
|
|
FORGEJO_REPO="lilith/lilith-platform.live"
|
|
FORGEJO_API="${FORGEJO_URL}/api/v1"
|
|
FORGEJO_TOKEN="${FORGEJO_TOKEN:-$(cat "$HOME/.config/forgejo/token" 2>/dev/null || echo "")}"
|
|
|
|
# Check if --direct flag is present in remaining args
|
|
DIRECT=false
|
|
FILTERED_ARGS=()
|
|
for arg in "$@"; do
|
|
if [[ "$arg" == "--direct" ]]; then
|
|
DIRECT=true
|
|
else
|
|
FILTERED_ARGS+=("$arg")
|
|
fi
|
|
done
|
|
set -- "${FILTERED_ARGS[@]+"${FILTERED_ARGS[@]}"}"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Trigger a Forgejo Actions workflow_dispatch
|
|
# ---------------------------------------------------------------------------
|
|
trigger_ci() {
|
|
local workflow="$1"
|
|
local ref="${2:-main}"
|
|
|
|
if [[ -z "$FORGEJO_TOKEN" ]]; then
|
|
echo "ERROR: FORGEJO_TOKEN is required to trigger CI." >&2
|
|
echo ""
|
|
echo " Get a token from: ${FORGEJO_URL}/user/settings/applications"
|
|
echo " Then either:"
|
|
echo " export FORGEJO_TOKEN=<token>"
|
|
echo " echo <token> > ~/.config/forgejo/token && chmod 600 ~/.config/forgejo/token"
|
|
echo ""
|
|
echo " Or deploy directly (emergencies only): ./run ${COMMAND} --direct"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Triggering ${workflow} via Forgejo Actions (ref: ${ref})..."
|
|
local http_status
|
|
http_status="$(curl -sf -o /dev/null -w '%{http_code}' \
|
|
-X POST \
|
|
-H "Authorization: token ${FORGEJO_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
"${FORGEJO_API}/repos/${FORGEJO_REPO}/actions/workflows/${workflow}/dispatches" \
|
|
-d "{\"ref\": \"${ref}\"}" 2>/dev/null || echo "000")"
|
|
|
|
if [[ "$http_status" == "204" || "$http_status" == "200" ]]; then
|
|
echo " Workflow dispatched."
|
|
else
|
|
echo "ERROR: Forgejo API returned HTTP ${http_status}" >&2
|
|
echo " Check token permissions and that Forgejo Actions is enabled." >&2
|
|
exit 1
|
|
fi
|
|
|
|
sleep 2
|
|
local run_url
|
|
run_url="$(curl -sf \
|
|
-H "Authorization: token ${FORGEJO_TOKEN}" \
|
|
"${FORGEJO_API}/repos/${FORGEJO_REPO}/actions/runs?limit=1" 2>/dev/null \
|
|
| grep -o '"html_url":"[^"]*"' | head -1 | cut -d'"' -f4 || echo "")"
|
|
|
|
echo ""
|
|
if [[ -n "$run_url" ]]; then
|
|
echo " Monitor: ${run_url}"
|
|
else
|
|
echo " Monitor: ${FORGEJO_URL}/${FORGEJO_REPO}/actions"
|
|
fi
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Commands
|
|
# ---------------------------------------------------------------------------
|
|
case "$COMMAND" in
|
|
deploy:quinn)
|
|
if [[ "$DIRECT" == "true" ]]; then
|
|
echo "[direct] Deploying quinn.www to production..."
|
|
bash "$ROOT_DIR/deployments/@domains/quinn.www/deploy.sh" "$@"
|
|
else
|
|
trigger_ci "deploy-quinn-www.yml"
|
|
fi
|
|
;;
|
|
|
|
deploy:my)
|
|
if [[ "$DIRECT" == "true" ]]; then
|
|
echo "[direct] Deploying quinn.my to production..."
|
|
bash "$ROOT_DIR/deployments/@domains/quinn.my/deploy.sh" "$@"
|
|
else
|
|
trigger_ci "deploy-quinn-my.yml"
|
|
fi
|
|
;;
|
|
|
|
deploy:admin)
|
|
if [[ "$DIRECT" == "true" ]]; then
|
|
echo "[direct] Deploying quinn.admin to production..."
|
|
bash "$ROOT_DIR/deployments/@domains/quinn.admin/deploy.sh" "$@"
|
|
else
|
|
trigger_ci "deploy-quinn-admin.yml"
|
|
fi
|
|
;;
|
|
|
|
deploy:data)
|
|
if [[ "$DIRECT" == "true" ]]; then
|
|
echo "[direct] Deploying quinn.data to production..."
|
|
bash "$ROOT_DIR/deployments/@domains/quinn.data/deploy.sh" "$@"
|
|
else
|
|
trigger_ci "deploy-quinn-data.yml"
|
|
fi
|
|
;;
|
|
|
|
deploy:m)
|
|
if [[ "$DIRECT" == "true" ]]; then
|
|
echo "[direct] Deploying quinn.m to production..."
|
|
bash "$ROOT_DIR/deployments/@domains/quinn.m/deploy.sh" "$@"
|
|
else
|
|
echo "ERROR: No Forgejo workflow exists for quinn.m yet." >&2
|
|
echo " Run with --direct to deploy from this machine:" >&2
|
|
echo " ./run deploy:m --direct" >&2
|
|
exit 1
|
|
fi
|
|
;;
|
|
|
|
deploy:newsletter)
|
|
if [[ "$DIRECT" == "true" ]]; then
|
|
echo "[direct] Deploying comm-newsletter to production..."
|
|
bash "$ROOT_DIR/deployments/@domains/quinn.admin/deploy-newsletter.sh" "$@"
|
|
else
|
|
trigger_ci "deploy-quinn-newsletter.yml"
|
|
fi
|
|
;;
|
|
|
|
*)
|
|
echo "Unknown deploy command: $COMMAND"
|
|
echo ""
|
|
echo "Deploy commands (run via Forgejo Actions CI by default):"
|
|
echo " ./run deploy:quinn Trigger quinn.www CI deployment"
|
|
echo " ./run deploy:my Trigger quinn.my CI deployment"
|
|
echo " ./run deploy:admin Trigger quinn.admin CI deployment"
|
|
echo " ./run deploy:data Trigger quinn.data CI deployment"
|
|
echo " ./run deploy:m Deploy quinn.m (--direct only — no CI workflow yet)"
|
|
echo " ./run deploy:newsletter Trigger newsletter CI deployment"
|
|
echo ""
|
|
echo " All commands accept --direct to bypass CI (emergencies / offline deploys)."
|
|
echo " Rollback (always direct): ./run deploy:<target> --direct --rollback"
|
|
echo ""
|
|
echo " FORGEJO_TOKEN env var required for CI triggers."
|
|
exit 1
|
|
;;
|
|
esac
|