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

80 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
APP_ID="${1:-}"
if [ -z "$APP_ID" ]; then
echo "Usage: ./deploy-app.sh <app-id>"
exit 1
fi
CONFIG_FILE="/opt/appfactory/config/appfactory.env"
source "$CONFIG_FILE"
APP_SOURCE_DIR="$WORKSPACE_DIR/$APP_ID"
CATALOG_FILE="$APPFACTORY_DIR/apps/catalog.yml"
TOOLS_DIR="$WORKSPACE_DIR/appfactory-tools"
if [ ! -d "$APP_SOURCE_DIR" ]; then
echo "Missing app source: $APP_SOURCE_DIR"
exit 1
fi
if [ ! -f "$APP_SOURCE_DIR/Dockerfile" ]; then
echo "Missing Dockerfile in: $APP_SOURCE_DIR"
exit 1
fi
echo "Updating source code..."
cd "$APP_SOURCE_DIR"
if [ -d ".git" ]; then
git \
-c safe.directory="$APP_SOURCE_DIR" \
fetch origin main
git \
-c safe.directory="$APP_SOURCE_DIR" \
reset --hard origin/main
fi
echo "Building Docker image..."
docker build --pull --no-cache -t "$APP_ID:latest" "$APP_SOURCE_DIR"
if [ ! -f "$CATALOG_FILE" ]; then
echo "apps:" > "$CATALOG_FILE"
fi
if ! grep -q "id: $APP_ID" "$CATALOG_FILE"; then
cat >> "$CATALOG_FILE" <<EOF_APP
- id: $APP_ID
name: $APP_ID
language: python
version: 1.0.0
base_path: /apps/$APP_ID
docs: /apps/$APP_ID/docs
health: /apps/$APP_ID/health
status: deployed
EOF_APP
fi
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 "Starting app container..."
cd "$APPFACTORY_DIR/deploy"
docker compose \
-f docker-compose.yml \
-f apps-compose.yml \
up -d --force-recreate "$APP_ID"
echo ""
echo "DONE"
echo "Open:"
echo "$APPFACTORY_PUBLIC_URL/apps/$APP_ID/docs"