name: Deploy Ladill Care

on:
  push:
    branches:
      - main
  workflow_dispatch:

permissions:
  contents: read

concurrency:
  group: deploy-care
  cancel-in-progress: true

jobs:
  deploy:
    runs-on: deploy
    env:
      NODE_ROOT: /tmp/ladill-node-22-r1
      NODE_VERSION: "22.14.0"
      # act_runner v0.2.x does not expose gitea.run_attempt — use run_id only.
      RELEASE_ARCHIVE: /tmp/ladill-care-release-${{ gitea.run_id }}.tgz
      WORKSPACE: /tmp/${{ gitea.repository_owner }}-care-${{ gitea.run_id }}
      LADILL_APP_ROOT: /var/www/ladill-care
    steps:
      - name: Checkout
        shell: bash {0}
        run: |
          set -Eeuo pipefail
          DEPLOY_GITEA_TOKEN="$(cat /home/deploy/.ladill-deploy-gitea-token)"
          REPO_URL="${{ gitea.server_url }}/${{ gitea.repository }}.git"
          rm -rf "$WORKSPACE"
          mkdir -p "$WORKSPACE"
          export GIT_TERMINAL_PROMPT=0
          git \
            -c credential.helper= \
            -c http.extraHeader="Authorization: token ${DEPLOY_GITEA_TOKEN}" \
            clone --depth 1 --single-branch --no-tags --branch "${{ gitea.ref_name }}" \
            "$REPO_URL" "$WORKSPACE"

      - name: Build frontend assets
        shell: bash {0}
        run: |
          set -Eeuo pipefail
          cd "$WORKSPACE"
          if command -v npm >/dev/null 2>&1 && npm -v >/dev/null 2>&1; then
            NPM_BIN="$(command -v npm)"
          elif [ -x "$NODE_ROOT/bin/npm" ]; then
            export PATH="$NODE_ROOT/bin:$PATH"
            NPM_BIN="$NODE_ROOT/bin/npm"
          else
            rm -rf "$NODE_ROOT"
            mkdir -p "$NODE_ROOT"
            case "$(uname -m)" in
              x86_64|amd64) NODE_ARCH="x64" ;;
              aarch64|arm64) NODE_ARCH="arm64" ;;
              *) echo "Unsupported architecture: $(uname -m)" >&2; exit 1 ;;
            esac
            curl -fsSL "https://nodejs.org/download/release/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${NODE_ARCH}.tar.xz" \
              | tar -xJ --strip-components=1 -C "$NODE_ROOT"
            export PATH="$NODE_ROOT/bin:$PATH"
            NPM_BIN="$NODE_ROOT/bin/npm"
          fi
          "$NPM_BIN" ci --no-audit --no-fund
          "$NPM_BIN" run build


      - name: Build release archive
        shell: bash {0}
        run: |
          set -Eeuo pipefail
          cd "$WORKSPACE"
          printf '%s\n' "${{ gitea.sha }}" > REVISION
          rm -f "$RELEASE_ARCHIVE"
          tar -czf "$RELEASE_ARCHIVE" \
            --exclude=.git --exclude=.gitea --exclude=.github --exclude=.env \
            --exclude=node_modules --exclude=vendor --exclude=storage --exclude=tests .

      - name: Deploy release
        shell: bash {0}
        env:
          LADILL_RELEASE_ARCHIVE: /tmp/ladill-care-release-${{ gitea.run_id }}.tgz
        run: |
          set -Eeuo pipefail
          : "${LADILL_APP_ROOT:?Set LADILL_APP_ROOT}"
          bash "$WORKSPACE/deploy/deploy.sh"

      - name: Ensure nginx vhost
        shell: bash {0}
        run: |
          set -Eeuo pipefail
          NGINX_SCRIPT="$WORKSPACE/deployment/setup-service-subdomain-nginx.sh"
          if [ ! -f "$NGINX_SCRIPT" ]; then
            NGINX_SCRIPT="/var/www/ladill.com/current/deployment/setup-service-subdomain-nginx.sh"
          fi
          if [ ! -f "$NGINX_SCRIPT" ]; then
            echo "WARN: setup-service-subdomain-nginx.sh not found — configure care.ladill.com vhost manually"
            exit 0
          fi
          if sudo -n bash "$NGINX_SCRIPT" care --app /var/www/ladill-care/current; then
            echo "nginx vhost updated for care.ladill.com"
          else
            echo "WARN: nginx vhost step skipped (deploy user cannot sudo) — vhost must already be provisioned"
          fi

      - name: Cleanup
        if: always()
        shell: bash {0}
        run: |
          rm -rf "$WORKSPACE"
          rm -f "$RELEASE_ARCHIVE"
