name: e2e-test

on:
  workflow_call:
  pull_request:
    branches: [main]
    types: [opened, synchronize, reopened]
  push:
    branches: [main]

concurrency:
  group: e2e-singlecard
  cancel-in-progress: false

jobs:
  e2e:
    name: e2e-test-singlecard
    runs-on:
      - self-hosted
      - Linux
      - X64

    steps:
      - name: Checkout PR code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Verify PR workspace
        run: |
          echo "===== WORKSPACE ====="
          pwd
          ls -l
          echo "===== GIT INFO ====="
          git rev-parse HEAD
          git log -1 --oneline
          git status --porcelain

      - name: Start docker
        run: |
          bash ci/scripts/docker/start_docker.sh

      - name: Install enviroments
        env: 
          PROXY_URL: ${{ secrets.PROXY_URL }}
          NO_PROXY_LIST: ${{ secrets.NO_PROXY_LIST }}
        run: |
          bash ci/scripts/env/install_env.sh

      - name: Start vLLM server
        run: |
          bash ci/scripts/server/start_vllm.sh

      - name: Wait for vLLM ready
        run: |
          bash ci/scripts/server/wait_vllm.sh

      - name: API Test
        run: |
          docker exec aiak-e2e-singlecard bash -lc '
            curl http://localhost:8356/v1/chat/completions \
              -H "Content-Type: application/json" \
              -d @- << "EOF"
          {
            "model": "Qwen3-8B",
            "messages": [
              { "role": "user", "content": "Who are you?" }
            ],
            "max_tokens": 200,
            "temperature": 0
          }
          EOF
          '

      # - name: Accuracy testing
      #   run: |
      #     bash ci/scripts/tests/run_accuracy.sh

      # - name: Performance testing
      #   run: |
      #     docker exec aiak-e2e-singlecard bash -lc '
      #       source ci/scripts/common/env.sh
      #       source ci/scripts/common/log.sh
      #       #!/bin/bash
      #       # ==========================================
      #       # 1. Define test dimensions
      #       #    (can be easily extended, e.g., add "2048x2048")
      #       # ==========================================
      #       DIMENSIONS=("1024x1024")

      #       # ==========================================
      #       # 2. Define concurrency generation logic (densification strategy)
      #       # ============x==============================
      #       # Use array concatenation to combine different density ranges
      #       # Syntax: seq [start] [step] [end]
      #       CONCURRENCIES=(1)

      #       # ==========================================
      #       # 3. Automatically assemble test cases
      #       # ==========================================
      #       TEST_COMBINATIONS=() # Initialize empty array

      #       # 🔄 Modified: outer loop over batch size (concurrency), inner loop over dimensions
      #       for bs in "${CONCURRENCIES[@]}"; do    # ← outer loop: concurrency
      #           for dim in "${DIMENSIONS[@]}"; do  # ← inner loop: dimensions
      #               case_str="${bs}x${dim}"
      #               TEST_COMBINATIONS+=("$case_str")
      #           done
      #       done

      #       # ==========================================
      #       # 4. (Optional) Print generated cases for sanity check
      #       # ==========================================
      #       echo "Generated ${#TEST_COMBINATIONS[@]} test cases in total:"
      #       echo "${TEST_COMBINATIONS[@]}" # Uncomment if you want to print all cases

      #       # Progress counters
      #       TOTAL_TESTS=${#TEST_COMBINATIONS[@]}
      #       CURRENT_TEST=0

      #       # Iterate over all test combinations
      #       for COMBINATION in "${TEST_COMBINATIONS[@]}"; do
      #           # Parse parameters from combination string
      #           NUM_PROMPTS=$(echo $COMBINATION | cut -d'x' -f1)
      #           INPUT_LEN=$(echo $COMBINATION | cut -d'x' -f2)
      #           OUTPUT_LEN=$(echo $COMBINATION | cut -d'x' -f3)

      #           # Update progress
      #           CURRENT_TEST=$((CURRENT_TEST + 1))

      #           echo "=========================================================="
      #           echo "Test progress: $CURRENT_TEST / $TOTAL_TESTS"
      #           echo "Current configuration: concurrency=$NUM_PROMPTS, input_len=$INPUT_LEN, output_len=$OUTPUT_LEN"
      #           echo "=========================================================="

      #           #OUTPUT_FILE="$RESULT_DIR/p800_${NUM_PROMPTS}_${INPUT_LEN}_${OUTPUT_LEN}.log"

      #           # Run benchmark
      #           python3 -m vllm.entrypoints.cli.main bench serve \
      #               --host 127.0.0.1 \
      #               --port ${VLLM_PORT:-8356}\
      #               --backend vllm \
      #               --model ${SERVED_MODEL_NAME:-Qwen3-8B} \
      #               --dataset-name random \
      #               --num-prompts $NUM_PROMPTS \
      #               --random-input-len $INPUT_LEN \
      #               --random-output-len $OUTPUT_LEN \
      #               --tokenizer ${MODEL_PATH:-/ssd3/models/Qwen3-8B} \
      #               --ignore-eos
      #       done
      #     '
      
      - name: Set permissions
        if: always()
        run: |
          bash ci/scripts/docker/set_permissions.sh

      - name: Cleanup docker
        if: always()
        run: |
          bash ci/scripts/docker/stop_docker.sh
