name: 📊 CodeQL
run-name: |
  ${{ github.event_name == 'schedule' && '⏰ Scheduled CodeQL run' || '' }}
  ${{ github.event_name == 'push' && format('📊 Pushed CodeQL run - {0}', github.event.head_commit.message) || '' }}
  ${{ github.event_name == 'pull_request' && format('📊 CodeQL run for PR {0} - {1}', github.event.pull_request.number, github.event.pull_request.title) || github.event.head_commit.message }}

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]
  schedule:
    - cron: "36 18 * * 4"

jobs:
  analyze:
    name: 📊 Analyze
    runs-on: ubuntu-latest
    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        language: [ python, javascript, cpp ]

    steps:
      - name: ⬇ Checkout
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: 📥 Install Packages (cpp)
        if: ${{ matrix.language == 'cpp' }}
        run: |
          sudo apt-get update
          sudo apt-get install --yes git build-essential qtbase5-dev libqt5serialport5-dev libqt5websockets5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5x11extras5-dev libusb-1.0-0-dev python3-dev libcec-dev libxcb-image0-dev libxcb-util0-dev libxcb-shm0-dev libxcb-render0-dev libxcb-randr0-dev libxrandr-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev libasound2-dev libturbojpeg0-dev libjpeg-dev libssl-dev libftdi1-dev 

      - name: Temporarily downgrade CMake to 3.28.3 # Please remove if GitHub has updated Cmake (greater than 3.30.0)
        uses: jwlawson/actions-setup-cmake@v2
        with:
          cmake-version: '3.28.3'          

      - name: 🔁 Initialize CodeQL
        uses: github/codeql-action/init@v3
        with:
          languages: ${{ matrix.language }}
          queries: +security-and-quality
          config-file: ./.github/config/codeql.yml
          
      - name: 👷 Autobuild
        uses: github/codeql-action/autobuild@v3

      - name: 🏃 Perform CodeQL Analysis
        uses: github/codeql-action/analyze@v3
        with:
          category: "/language:${{ matrix.language }}"
          upload: False
          output: sarif-results

      - name: 🆔 Filter SARIF
        uses: advanced-security/filter-sarif@v1
        with:
          patterns: |
            -**/dependencies/**
            -**/moc_*.cpp
            -**/libsrc/flatbufserver/hyperion_request_generated.h
            -**/libsrc/protoserver/message.pb.cc
            -**/libsrc/protoserver/message.pb.h
          input: sarif-results/${{ matrix.language }}.sarif
          output: sarif-results/${{ matrix.language }}.sarif

      - name: 📦 Upload SARIF
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: sarif-results/${{ matrix.language }}.sarif

      - name: 📦 Upload loc as a Build Artifact
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.language }}.sarif
          path: sarif-results
          retention-days: 1