name: Build and Deploy to Production

on:
  push:
    branches:
      - production

env:
  REGISTRY: 194.5.195.53:30080
  IMAGE_NAME: admin/cms

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    container:
      image: docker:latest
      options: --privileged
      env:
        HTTP_PROXY: http://proxyuser:87zH26nbqT2@46.249.98.211:3128
        HTTPS_PROXY: http://proxyuser:87zH26nbqT2@46.249.98.211:3128
        NO_PROXY: localhost,127.0.0.1,gitea-svc,45.149.79.127,10.0.0.0/8
    steps:
      - name: Install dependencies
        run: |
          apk add --no-cache git curl
          
          # Install kubectl with fixed version
          KUBECTL_VERSION="v1.31.0"
          curl -LO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl"
          chmod +x kubectl
          mv kubectl /usr/local/bin/

      - name: Start Docker daemon with insecure registry
        run: |
          mkdir -p /etc/docker
          cat > /etc/docker/daemon.json << 'DAEMON'
          {
            "insecure-registries": ["194.5.195.53:30080", "194.5.195.53:32082", "gitea-svc:3000"]
          }
          DAEMON
          mkdir -p ~/.docker
          cat > ~/.docker/config.json << 'CONF'
          {
            "proxies": {
              "default": {
                "httpProxy": "http://proxyuser:87zH26nbqT2@46.249.98.211:3128",
                "httpsProxy": "http://proxyuser:87zH26nbqT2@46.249.98.211:3128",
                "noProxy": "localhost,127.0.0.1,gitea-svc,45.149.79.127,10.0.0.0/8"
              }
            }
          }
          CONF
          dockerd &
          for i in $(seq 1 30); do
            docker info >/dev/null 2>&1 && break || sleep 2
          done
          docker info
    
      - name: Checkout code
        run: |
          git clone --depth 1 --branch production http://gitea-svc:3000/admin/CMS.git .
          git log -1 --format="%H %s"

      - name: Build Docker Image
        run: |
          docker build -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} \
                       -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:prod \
                       --build-arg HTTP_PROXY=http://proxyuser:87zH26nbqT2@46.249.98.211:3128 \
                       --build-arg HTTPS_PROXY=http://proxyuser:87zH26nbqT2@46.249.98.211:3128 \
                       .

      - name: Push to Registry
        run: |
          echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login ${{ env.REGISTRY }} -u admin --password-stdin
          docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
          docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:prod
          
      - name: Deploy to Production
        run: |
          # Setup kubeconfig for PRODUCTION
          mkdir -p ~/.kube
          echo "${{ secrets.KUBECONFIG_PROD }}" | base64 -d > ~/.kube/config
          
          # Restart deployment to pull new image
          kubectl rollout restart deployment/cms || echo "Deployment doesn't exist yet"
          
          # Wait for rollout to complete
          kubectl rollout status deployment/cms --timeout=5m || echo "Deployment rollout pending"
