name: "CodeQL"

on:
  workflow_dispatch:
  push:
    branches: [ 'master' ]
    paths:
      - '**.c'
      - '**.cpp'
      - '**.h'
  pull_request:
    types:
      - opened
    # The branches below must be a subset of the branches above.
    branches: [ 'master' ]
    paths:
      - '**.c'
      - '**.cpp'
      - '**.h'
  schedule:
    - cron: '33 7 * * 6'

jobs:
  analyze:
    name: Analyze
    if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule'
    runs-on: windows-2019
    timeout-minutes: 60

    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        language: [ 'cpp' ]
        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
        # Use only 'java' to analyze code written in Java, Kotlin or both.
        # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both.
        # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support

    steps:
    - name: Cleanup build folder
      run: |
        rm -r -Force ${{ github.workspace }}\*

    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Setup msbuild
      uses: microsoft/setup-msbuild@v1

    # Qt 6 is only required for ARM64 build currently.
    # - name: Install Qt6 x64
    #   uses: jurplel/install-qt-action@v3
    #   with:
    #     version: '6.3.1'
    #     arch:  'win64_msvc2019_64'

    - name: Install Qt5 x64
      uses: jurplel/install-qt-action@v3
      with:
        version: '5.15.2'
        arch:  'win64_msvc2019_64'
        cache: true

    - name: Installing Jom
      run: SandboxiePlus\install_jom.cmd

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v3
      with:
        languages: ${{ matrix.language }}
        config-file: ./.github/codeql/codeql-config.yml
        # If you wish to specify custom queries, you can do so here or in a config file.
        # By default, queries listed here will override any specified in a config file.
        # Prefix the list here with "+" to use these queries and those in the config file.

        # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
        # queries: security-extended,security-and-quality

    - name: Build Sandboxie x86
      run: msbuild /t:build Sandboxie\Sandbox.sln /p:Configuration="SbieRelease" /p:Platform=Win32 -maxcpucount:8

    - name: Build Sandboxie x64
      run: msbuild /t:build Sandboxie\Sandbox.sln /p:Configuration="SbieRelease" /p:Platform=x64 -maxcpucount:8

    - name: Build Sandboxie-Plus x64
      run: SandboxiePlus\qmake_plus.cmd x64

    - name: Build SbieShell x64
      run: msbuild /t:restore,build -p:RestorePackagesConfig=true SandboxiePlus\SbieShell\SbieShell.sln /p:Configuration="Release" /p:Platform=x64

    - name: Build Sandboxie-Tools x64
      run: msbuild /t:build SandboxieTools\SandboxieTools.sln /p:Configuration="Release" /p:Platform=x64 -maxcpucount:8

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v3
      with:
        category: "/language:${{matrix.language}}"
