name: sonar-scan

on:
  push:
    branches: [master]
  pull_request:
    branches: [master]

# Cancel old PR builds when pushing new commits.
concurrency:
  group: sonar-scan-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  sonar-scan:
    runs-on: ubuntu-latest
    env:
      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
          submodules: recursive
      - name: Install Build Wrapper
        uses: SonarSource/sonarqube-scan-action/install-build-wrapper@v6
      - name: Install dependencies and prepare build
        run: |
          .github/scripts/sonar-prepare
      - name: Run Build Wrapper
        run: |
          build-wrapper-linux-x86-64 --out-dir ${{ env.BUILD_WRAPPER_OUT_DIR }} .github/scripts/sonar-build
      - name: Ensure compile_commands.json is generated
        run: ls -l "${{ env.BUILD_WRAPPER_OUT_DIR }}/compile_commands.json"
      - name: SonarQube Scan
        if: github.event_name == 'push'
        uses: SonarSource/sonarqube-scan-action@v6
        env:
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
        with:
          args: >
            --define "sonar.cfamily.compile-commands=${{ env.BUILD_WRAPPER_OUT_DIR }}/compile_commands.json"
