#!/usr/bin/env bash set -euo pipefail APP_ID="${1:-}" if [ -z "$APP_ID" ]; then echo "Usage:" echo " ./delete-app.sh " exit 1 fi CONFIG_FILE="/opt/appfactory/config/appfactory.env" if [ -f "$CONFIG_FILE" ]; then source "$CONFIG_FILE" fi APPFACTORY_DIR="${APPFACTORY_DIR:-/opt/appfactory}" WORKSPACE_DIR="${WORKSPACE_DIR:-/home/jiri/workspace}" COMPOSE_FILE="$APPFACTORY_DIR/deploy/apps-compose.yml" CATALOG_FILE="$APPFACTORY_DIR/apps/catalog.yml" CADDY_FILE="$APPFACTORY_DIR/gateway/Caddyfile" TOOLS_DIR="$WORKSPACE_DIR/appfactory-tools" echo "Deleting app: $APP_ID" if [ -n "${GITEA_URL:-}" ] && [ -n "${GITEA_TOKEN:-}" ] && [ -n "${GITEA_ORG:-}" ]; then echo "Deleting Gitea repository..." curl -sS -X DELETE \ "$GITEA_URL/api/v1/repos/$GITEA_ORG/$APP_ID" \ -H "Authorization: token $GITEA_TOKEN" || true fi echo "Stopping container..." docker rm -f "$APP_ID" || true echo "Removing image..." docker rmi -f "$APP_ID:latest" || true echo "Removing workspace..." rm -rf "$WORKSPACE_DIR/$APP_ID" 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_block(lines, predicate): out = [] i = 0 while i < len(lines): line = lines[i] if predicate(line): indent = len(line) - len(line.lstrip()) i += 1 while i < len(lines): next_line = lines[i] if next_line.strip(): next_indent = len(next_line) - len(next_line.lstrip()) if next_indent <= indent: break i += 1 continue out.append(line) i += 1 return out if compose_file.exists(): compose_lines = compose_file.read_text().splitlines() compose_lines = remove_block( compose_lines, lambda l: l.startswith(f" {app_id}:") ) compose_file.write_text("\n".join(compose_lines) + "\n") if catalog_file.exists(): catalog_lines = catalog_file.read_text().splitlines() catalog_lines = remove_block( catalog_lines, lambda l: l.strip() == f"- id: {app_id}" ) catalog_file.write_text("\n".join(catalog_lines) + "\n") if caddy_file.exists(): caddy_lines = caddy_file.read_text().splitlines() caddy_lines = remove_block( caddy_lines, lambda l: f"/apps/{app_id}/*" in l ) caddy_file.write_text("\n".join(caddy_lines) + "\n") PY echo "Regenerating generated files..." "$TOOLS_DIR/scripts/generate-apps-compose.sh" "$TOOLS_DIR/scripts/generate-caddyfile.sh" "$TOOLS_DIR/scripts/generate-apps-page.sh" echo "DONE"