name: Deploy Promiscuity Locations API

on:
  push:
    branches:
      - main
  workflow_dispatch: {}

jobs:
  deploy:
    runs-on: self-hosted

    env:
      IMAGE_NAME: promiscuity-locations:latest
      IMAGE_TAR: /tmp/promiscuity-locations.tar
      # All nodes that might run the pod (control-plane + workers)
      NODES: "192.168.86.72 192.168.86.73 192.168.86.74"

    steps:
      - name: Checkout repo
        uses: actions/checkout@v4

      # -----------------------------
      # Build Docker image
      # -----------------------------
      - name: Build Docker image
        run: |
          cd microservices/LocationsApi
          docker build -t "${IMAGE_NAME}" .

      # -----------------------------
      # Save image as TAR on runner
      # -----------------------------
      - name: Save Docker image to TAR
        run: |
          docker save "${IMAGE_NAME}" -o "${IMAGE_TAR}"

      # -----------------------------
      # Copy TAR to each Kubernetes node
      # -----------------------------
      - name: Copy TAR to nodes
        run: |
          for node in ${NODES}; do
            echo "Copying image tar to $node ..."
            scp -o StrictHostKeyChecking=no "${IMAGE_TAR}" hz@"$node":/tmp/promiscuity-locations.tar
          done

      # -----------------------------
      # Import image into containerd on each node
      # -----------------------------
      - name: Import image on nodes
        run: |
          for node in ${NODES}; do
            echo "Importing image on $node ..."
            ssh -o StrictHostKeyChecking=no hz@"$node" "sudo ctr -n k8s.io images import /tmp/promiscuity-locations.tar"
          done

      # -----------------------------
      # CLEANUP: delete TAR from nodes
      # -----------------------------
      - name: Clean TAR from nodes
        run: |
          for node in ${NODES}; do
            echo "Removing image tar on $node ..."
            ssh -o StrictHostKeyChecking=no hz@"$node" "rm -f /tmp/promiscuity-locations.tar"
          done

      # -----------------------------
      # CLEANUP: delete TAR from runner
      # -----------------------------
      - name: Clean TAR on runner
        run: |
          rm -f "${IMAGE_TAR}"

      # -----------------------------
      # Write kubeconfig from secret
      # -----------------------------
      - name: Write kubeconfig from secret
        env:
          KUBECONFIG_CONTENT: ${{ secrets.KUBECONFIG }}
        run: |
          mkdir -p /tmp/kube
          printf '%s\n' "$KUBECONFIG_CONTENT" > /tmp/kube/config

      # -----------------------------
      # Ensure namespace exists
      # -----------------------------
      - name: Create namespace if missing
        env:
          KUBECONFIG: /tmp/kube/config
        run: |
          kubectl create namespace promiscuity-locations --dry-run=client -o yaml | kubectl apply -f -

      # -----------------------------
      # Apply Kubernetes manifests
      # -----------------------------
      - name: Apply Locations deployment & service
        env:
          KUBECONFIG: /tmp/kube/config
        run: |
          kubectl apply -f microservices/LocationsApi/k8s/deployment.yaml -n promiscuity-locations
          kubectl apply -f microservices/LocationsApi/k8s/service.yaml -n promiscuity-locations

      # -----------------------------
      # Rollout restart & wait
      # -----------------------------
      - name: Restart Locations deployment
        env:
          KUBECONFIG: /tmp/kube/config
        run: |
          kubectl rollout restart deployment/promiscuity-locations -n promiscuity-locations
          kubectl rollout status deployment/promiscuity-locations -n promiscuity-locations
