# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"

on:
  push:
    branches: [ "cmake_build" ]
  schedule:
    - cron: '22 18 * * 2'

env:
  libbinio_PRESET: default
  libbinio_ROOT: '${{  github.workspace }}/libbinio/out/install/default/lib/cmake/libbinio/'

jobs:
  analyze:
    name: Analyze
    permissions:
      actions: read
      contents: read
      security-events: write

    strategy:
      fail-fast: false
      matrix:
        os: [ 'ubuntu-latest', 'macos-latest' ]
        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

    runs-on: ${{ matrix.os }}

    steps:
    - name: Find libbinio repository
      shell: bash
      run: |
        owner="${GITHUB_REPOSITORY%/*}"
        if [ "$owner" = "adplug" ] || git ls-remote --exit-code "https://github.com/$owner/libbinio.git" >/dev/null 2>&1; then
          echo "LIBBINIO_REPOSITORY=$owner/libbinio" >> "$GITHUB_ENV"
        else
          echo 'LIBBINIO_REPOSITORY=adplug/libbinio' >> "$GITHUB_ENV"
        fi

    - name: Get cmake and ninja
      uses: lukka/get-cmake@latest

    - name: Find MSVC (on Windows)
      uses: ilammy/msvc-dev-cmd@v1

    - name: Checkout libbinio repository
      uses: actions/checkout@v7
      with:
        repository: '${{env.LIBBINIO_REPOSITORY}}'
        ref: master
        path: libbinio
        fetch-depth: 0

    - name: Checkout adplug repository
      uses: actions/checkout@v7
      with:
        path: adplug
        fetch-depth: 0

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v3
      with:
        languages: ${{ matrix.language }}
        # 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.

        # 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


    # Autobuild attempts to build any compiled languages  (C/C++, C#, Go, or Java).
    # If this step fails, then you should remove it and run the build manually (see below)
    # - name: Autobuild
    #  uses: github/codeql-action/autobuild@v3

    # ℹ️ Command-line programs to run using the OS shell.
    # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun

    #   If the Autobuild fails above, remove it and uncomment the following three lines.
    #   modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.

    # - run: |
    #   echo "Run, Build Application using script"
    #   ./location_of_script_within_repo/buildscript.sh

    - name: Build libbinio
      uses: lukka/run-cmake@v10
      with:
        cmakeListsTxtPath: libbinio/CMakeLists.txt
        configurePreset: '${{env.libbinio_PRESET}}'
        buildPreset: '${{env.libbinio_PRESET}}'

    - name: Install libbinio
      working-directory: 'libbinio/out/build/${{env.libbinio_PRESET}}/'
      run: cmake --install .

    - name: Build adplug
      uses: lukka/run-cmake@v10
      with:
        cmakeListsTxtPath: adplug/CMakeLists.txt
        configurePreset: default
        buildPreset: default
        testPreset: default

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