Files
appfactory-tools/scripts/delete-app.sh
T

87 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
APP_ID="${1:-}"
if [ -z "$APP_ID" ]; then
echo "Usage: ./delete-app.sh <app-id>"
exit 1
fi
CONFIG_FILE="/opt/appfactory/config/appfactory.env"
source "$CONFIG_FILE"
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"
echo "Deleting Gitea repository..."
curl -sS -X DELETE \
"$GITEA_URL/api/v1/repos/$GITEA_ORG/$APP_ID" \
-H "Authorization: token $GITEA_TOKEN" || true
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():
lines = compose_file.read_text().splitlines()
lines = remove_block(lines, lambda l: l.startswith(f" {app_id}:"))
compose_file.write_text("\n".join(lines).rstrip() + "\n")
if catalog_file.exists():
lines = catalog_file.read_text().splitlines()
lines = remove_block(lines, lambda l: l.strip() == f"- id: {app_id}")
catalog_file.write_text("\n".join(lines).rstrip() + "\n")
if caddy_file.exists():
lines = caddy_file.read_text().splitlines()
lines = remove_block(lines, lambda l: f"/apps/{app_id}/*" in l)
caddy_file.write_text("\n".join(lines).rstrip() + "\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"