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: | docker run --rm \ -v /etc/easypanel/traefik/config:/traefik-config \ alpine sh -c ' apk add jq -q --no-progress 2>/dev/null FILE=/traefik-config/main.yaml if jq -e ".http.routers[\"https-ubigeo-0\"]" "$FILE" > /dev/null 2>&1; then echo "ubigeo route already exists in main.yaml" exit 0 fi jq ".http.routers[\"http-ubigeo-0\"] = {\"rule\": \"Host(\\\"api-ubigeo.darkcodex.dev\\\") && PathPrefix(\\\"/\\\")\", \"entryPoints\": [\"http\"], \"middlewares\": [\"redirect-to-https\", \"bad-gateway-error-page\"], \"service\": \"ubigeo_api-0\"} | .http.routers[\"https-ubigeo-0\"] = {\"rule\": \"Host(\\\"api-ubigeo.darkcodex.dev\\\") && PathPrefix(\\\"/\\\")\", \"entryPoints\": [\"https\"], \"middlewares\": [\"bad-gateway-error-page\"], \"service\": \"ubigeo_api-0\", \"tls\": {\"certResolver\": \"letsencrypt\"}} | .http.services[\"ubigeo_api-0\"] = {\"loadBalancer\": {\"passHostHeader\": true, \"servers\": [{\"url\": \"http://ubigeo-api:3200/\"}]}}" \ "$FILE" > /tmp/main-new.json && mv /tmp/main-new.json "$FILE" echo "Traefik route injected into main.yaml" ' - 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"