name: Deploy on: push: branches: [main] jobs: deploy: runs-on: self-hosted steps: - name: Checkout run: | if [ ! -d /workspace/darkcodex/api-ubigeo/.git ]; then git clone https://948ee86882f8d9ca46eb94750addfccdace443a6@git.darkcodex.dev/darkcodex/api-ubigeo.git \ /workspace/darkcodex/api-ubigeo fi cd /workspace/darkcodex/api-ubigeo git fetch origin main git reset --hard origin/main - name: Sync source run: | rsync -a --delete \ --exclude='.git' \ --exclude='node_modules' \ --exclude='dist' \ --exclude='.env' \ /workspace/darkcodex/api-ubigeo/ /home/deployer/api-ubigeo/ - name: Build image run: | cd /home/deployer/api-ubigeo docker build -t ubigeo-api:latest . - name: Deploy containers run: | cd /home/deployer/api-ubigeo docker compose -f docker-compose.production.yml down --remove-orphans docker compose -f docker-compose.production.yml up -d - name: Register Traefik route run: | TRAEFIK_DIR=/etc/easypanel/traefik/config ROUTE_FILE=$TRAEFIK_DIR/api-ubigeo.yaml # Check if we can write there if [ ! -w "$TRAEFIK_DIR" ]; then echo "Cannot write to $TRAEFIK_DIR — skipping Traefik config" exit 0 fi # Only add if not already present if [ ! -f "$ROUTE_FILE" ]; then cat > "$ROUTE_FILE" << 'EOF' http: routers: ubigeo-api: rule: "Host(`api-ubigeo.darkcodex.dev`)" service: ubigeo-api entryPoints: - websecure tls: certResolver: letsencrypt services: ubigeo-api: loadBalancer: servers: - url: "http://ubigeo-api:3200" EOF echo "Traefik route created at $ROUTE_FILE" else echo "Traefik route already exists" fi - name: Health check run: | sleep 15 STATUS=$(wget -qO- http://ubigeo-api:3200/api/v1/health 2>/dev/null || echo "fail") echo "Health: $STATUS" echo "$STATUS" | grep -q "ok" && echo "Deploy OK" || echo "Warning: health check unreachable from runner"