name: "Multi-language repository"
description: "An end-to-end integration test of a multi-language repository using automatic language detection"
operatingSystems:
  - ubuntu
  - os: macos
    runner-image: macos-latest-xlarge
env:
  CODEQL_ACTION_RESOLVE_SUPPORTED_LANGUAGES_USING_CLI: true
installGo: true
installDotNet: true
steps:
  - name: Install Python 3.13 for older CLI versions
    # We need Python 3.13 for older CLI versions because they are not compatible with Python 3.14 or newer.
    # See https://github.com/github/codeql-action/pull/3212
    if: matrix.version != 'nightly-latest' && matrix.version != 'linked'
    uses: actions/setup-python@v6
    with:
      python-version: "3.13"

  - name: Use Xcode 16
    if: runner.os == 'macOS' && matrix.version != 'nightly-latest'
    run: sudo xcode-select -s "/Applications/Xcode_16.app"

  - uses: ./../action/init
    id: init
    with:
      db-location: "${{ runner.temp }}/customDbLocation"
      languages: ${{ runner.os == 'Linux' && 'cpp,csharp,go,java,javascript,python,ruby' || '' }}
      tools: ${{ steps.prepare-test.outputs.tools-url }}

  - name: Build code
    run: ./build.sh

  - uses: ./../action/analyze
    id: analysis
    with:
      upload-database: false

  - name: Check language autodetect for all languages excluding Swift
    run: |
      CPP_DB=${{ fromJson(steps.analysis.outputs.db-locations).cpp }}
      if [[ ! -d $CPP_DB ]] || [[ ! $CPP_DB == ${{ runner.temp }}/customDbLocation/* ]]; then
        echo "Did not create a database for CPP, or created it in the wrong location."
        exit 1
      fi
      CSHARP_DB=${{ fromJson(steps.analysis.outputs.db-locations).csharp }}
      if [[ ! -d $CSHARP_DB ]] || [[ ! $CSHARP_DB == ${{ runner.temp }}/customDbLocation/* ]]; then
        echo "Did not create a database for C Sharp, or created it in the wrong location."
        exit 1
      fi
      GO_DB=${{ fromJson(steps.analysis.outputs.db-locations).go }}
      if [[ ! -d $GO_DB ]] || [[ ! $GO_DB == ${{ runner.temp }}/customDbLocation/* ]]; then
        echo "Did not create a database for Go, or created it in the wrong location."
        exit 1
      fi
      JAVA_DB=${{ fromJson(steps.analysis.outputs.db-locations).java }}
      if [[ ! -d $JAVA_DB ]] || [[ ! $JAVA_DB == ${{ runner.temp }}/customDbLocation/* ]]; then
        echo "Did not create a database for Java, or created it in the wrong location."
        exit 1
      fi
      JAVASCRIPT_DB=${{ fromJson(steps.analysis.outputs.db-locations).javascript }}
      if [[ ! -d $JAVASCRIPT_DB ]] || [[ ! $JAVASCRIPT_DB == ${{ runner.temp }}/customDbLocation/* ]]; then
        echo "Did not create a database for Javascript, or created it in the wrong location."
        exit 1
      fi
      PYTHON_DB=${{ fromJson(steps.analysis.outputs.db-locations).python }}
      if [[ ! -d $PYTHON_DB ]] || [[ ! $PYTHON_DB == ${{ runner.temp }}/customDbLocation/* ]]; then
        echo "Did not create a database for Python, or created it in the wrong location."
        exit 1
      fi
      RUBY_DB=${{ fromJson(steps.analysis.outputs.db-locations).ruby }}
      if [[ ! -d $RUBY_DB ]] || [[ ! $RUBY_DB == ${{ runner.temp }}/customDbLocation/* ]]; then
        echo "Did not create a database for Ruby, or created it in the wrong location."
        exit 1
      fi

  - name: Check language autodetect for Swift on macOS
    if: runner.os == 'macOS'
    run: |
      SWIFT_DB=${{ fromJson(steps.analysis.outputs.db-locations).swift }}
      if [[ ! -d $SWIFT_DB ]] || [[ ! $SWIFT_DB == ${{ runner.temp }}/customDbLocation/* ]]; then
        echo "Did not create a database for Swift, or created it in the wrong location."
        exit 1
      fi
