From 8ecdf2d4eb14e465db4d0e4c3a8da81a9db920d0 Mon Sep 17 00:00:00 2001 From: Jiri Uhlir Date: Thu, 21 May 2026 11:46:03 +0200 Subject: [PATCH] Add delete app script --- scripts/delete-app.sh | 70 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100755 scripts/delete-app.sh diff --git a/scripts/delete-app.sh b/scripts/delete-app.sh new file mode 100755 index 0000000..93c5bfe --- /dev/null +++ b/scripts/delete-app.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash +set -euo pipefail + +APP_ID="${1:-}" + +if [ -z "$APP_ID" ]; then + echo "Usage:" + echo " ./delete-app.sh " + exit 1 +fi + +BASE_DIR="/opt/appfactory" +WORKSPACE_DIR="/home/jiri/workspace" +COMPOSE_FILE="$BASE_DIR/deploy/apps-compose.yml" +CADDY_FILE="$BASE_DIR/gateway/Caddyfile" +CATALOG_FILE="$BASE_DIR/apps/catalog.yml" + +echo "Deleting app: $APP_ID" + +docker rm -f "$APP_ID" 2>/dev/null || true +docker rmi -f "$APP_ID:latest" 2>/dev/null || true + +python3 - "$APP_ID" "$COMPOSE_FILE" "$CATALOG_FILE" "$CADDY_FILE" <<'PY' +import sys +from pathlib import Path + +app_id = sys.argv[1] +compose_file = Path(sys.argv[2]) +catalog_file = Path(sys.argv[3]) +caddy_file = Path(sys.argv[4]) + +def remove_yaml_block(path: Path, start_patterns): + lines = path.read_text().splitlines() + out = [] + i = 0 + while i < len(lines): + line = lines[i] + if any(p in line for p in start_patterns): + indent = len(line) - len(line.lstrip()) + i += 1 + while i < len(lines): + next_line = lines[i] + if next_line.strip() and (len(next_line) - len(next_line.lstrip())) <= indent: + break + i += 1 + continue + out.append(line) + i += 1 + path.write_text("\n".join(out).rstrip() + "\n") + +remove_yaml_block(compose_file, [f" {app_id}:"]) +remove_yaml_block(catalog_file, [f" - id: {app_id}"]) + +text = caddy_file.read_text() +block = f""" handle_path /apps/{app_id}/* {{ + reverse_proxy {app_id}:8000 + }} + +""" +text = text.replace(block, "") +caddy_file.write_text(text) +PY + +rm -rf "$WORKSPACE_DIR/$APP_ID" || true + +cd "$BASE_DIR/deploy" +docker compose -f docker-compose.yml -f apps-compose.yml up -d +docker exec appfactory-caddy caddy reload --config /etc/caddy/Caddyfile || docker restart appfactory-caddy + +echo "Deleted: $APP_ID"