88 lines
1.8 KiB
Bash
Executable File
88 lines
1.8 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"
|
|
|
|
safe_chown() {
|
|
local target="$1"
|
|
local uid
|
|
local gid
|
|
|
|
uid="${APP_UID:-$(stat -c '%u' "$WORKSPACE_DIR")}"
|
|
gid="${APP_GID:-$(stat -c '%g' "$WORKSPACE_DIR")}"
|
|
|
|
chown -R "$uid:$gid" "$target" || true
|
|
}
|
|
|
|
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
|
|
|
|
safe_chown "$APP_SOURCE_DIR"
|
|
|
|
echo "Updating source code..."
|
|
cd "$APP_SOURCE_DIR"
|
|
|
|
if [ -d ".git" ]; then
|
|
git config --global --add safe.directory "$APP_SOURCE_DIR" || true
|
|
git fetch origin main
|
|
git 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"
|
|
|
|
safe_chown "$APP_SOURCE_DIR"
|
|
|
|
echo ""
|
|
echo "DONE"
|
|
echo "Open:"
|
|
echo "$APPFACTORY_PUBLIC_URL/apps/$APP_ID/docs"
|