name: SonarCloud analysis
on:
  pull_request:
    types: [opened, synchronize, reopened]
jobs:
  build:
    name: SonarCloud analysis
    runs-on: ubuntu-latest
    container: ghcr.io/nextcloud/continuous-integration-client:client-5.15-14
    env:
      SONAR_SERVER_URL: "https://sonarcloud.io"
      BUILD_WRAPPER_OUT_DIR: build_wrapper_output_directory # Directory where build-wrapper output will be placed
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis

      - name: Restore cache
        uses: actions/cache@v4
        with:
          path: /cache
          key: ${{ runner.os }}

      - name: Run build-wrapper
        run: |
          mkdir build
          cd build
          cmake .. -G Ninja -DCMAKE_C_COMPILER=gcc-11 -DCMAKE_CXX_COMPILER=g++-11 -DCMAKE_BUILD_TYPE=Debug -DQUICK_COMPILER=ON -DBUILD_UPDATER=ON -DBUILD_TESTING=1 -DCMAKE_CXX_FLAGS=-Werror -DOPENSSL_ROOT_DIR=/usr/local/lib64 -DBUILD_COVERAGE=ON -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
          build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} ninja
      - name: Run tests
        run: |
          cd build
          useradd -m -s /bin/bash test
          chown -R test:test .
          su -c 'xvfb-run ctest --output-on-failure --output-junit testResult.xml' test
      - name: Generate coverage report
        run: |
          cd build
          su -c 'ctest -T Coverage' test
      - name: Run sonar-scanner
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
        run: |
          cp sonar-project.properties build
          cd build
          sonar-scanner --define sonar.host.url="${{ env.SONAR_SERVER_URL }}" --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}"
