name: hl2sdk-mock tests
on: 
  push:
    branches:
     - master
     - '[0-9]+.[0-9]+-dev'
  pull_request:
    branches:
     - master
     - '[0-9]+.[0-9]+-dev'
jobs:
  mock:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        name: Clone sourcemod
        with:
          submodules: recursive
          path: sourcemod
      
      - uses: actions/checkout@v4
        name: Clone metamod-source
        with:
          repository: alliedmodders/metamod-source
          submodules: recursive
          path: metamod-source
      
      - uses: actions/checkout@v4
        name: Clone hl2sdk-mock
        with:
          repository: alliedmodders/hl2sdk-mock
          submodules: recursive
          path: hl2sdk-mock
      
      - uses: actions/setup-python@v5
        name: Setup Python 3.10
        with:
          python-version: "3.10"
      
      - name: Install AMBuild
        run: |
          python -m pip install --upgrade pip setuptools wheel
          pip install git+https://github.com/alliedmodders/ambuild

      - name: Build MetaMod:Source
        working-directory: metamod-source
        run: |
          python configure.py --enable-optimize --sdks=mock --targets=x86_64
          ambuild objdir

      - name: Build SourceMod
        working-directory: sourcemod
        run: |
          python configure.py --no-mysql --enable-optimize --sdks=mock --targets=x86_64
          ambuild objdir
      
      - name: Build hl2sdk-mock
        working-directory: hl2sdk-mock
        run: |
          python configure.py --enable-optimize --targets=x86_64
          ambuild objdir
      
      - name: Setup gamedir
        working-directory: hl2sdk-mock
        shell: bash
        run: |
          mkdir ../gamedir
          ./build_gamedir.sh ../gamedir ../metamod-source/objdir/package
          ./build_gamedir.sh ../gamedir ../sourcemod/objdir/package
      
      - name: Compile testsuite
        working-directory: hl2sdk-mock
        shell: bash
        run: |
          mkdir ../gamedir/addons/sourcemod/plugins/optional

          for f in ../sourcemod/plugins/testsuite/mock/*.sp; do
            echo "Compiling $(basename $f)"
            ../gamedir/addons/sourcemod/scripting/spcomp64 -i ../gamedir/addons/sourcemod/scripting/include -o "../gamedir/addons/sourcemod/plugins/optional/$(basename $f .sp).smx" -E "$f"
          done
      
      - name: Test
        working-directory: hl2sdk-mock
        shell: bash
        run: |
          for f in ../gamedir/addons/sourcemod/plugins/optional/*.smx; do
            echo "==================================="
            echo "Running $(basename $f)..."
            echo "==================================="
            timeout 60 ./objdir/dist/x86_64/srcds -game_dir ../gamedir +map de_thunder -command "sm plugins load optional/$(basename $f)" -run -run-ticks 20 |
            {
              failed=0
              while IFS= read -r line; do
                echo "$line"
                if [[ "$line" == *"FAIL"* ]]; then
                  failed=1
                fi
              done
              if [ "$failed" = "1" ]; then
                echo "$(basename $f) failed."
                exit 1
              fi
            }
          done