name: CodeQL

on:
  workflow_dispatch:
    inputs:
      profile:
        description: CodeQL security profile to run
        required: false
        default: all
        type: choice
        options:
          - all
          - security
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]
    paths:
      - ".github/actions/**"
      - ".github/codeql/**"
      - ".github/workflows/**"
      - "packages/**"
      - "src/**"
  push:
    branches:
      - main
    paths:
      - ".github/actions/**"
      - ".github/codeql/**"
      - ".github/workflows/**"
      - "packages/**"
      - "src/**"
  schedule:
    - cron: "0 6 * * *"

concurrency:
  group: codeql-${{ github.workflow }}-${{ github.event_name == 'workflow_dispatch' && github.run_id || github.event_name == 'pull_request' && github.event.pull_request.number || github.sha }}
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}

env:
  FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"

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

jobs:
  security-high:
    name: Security High (${{ matrix.category }})
    if: ${{ (github.event_name != 'pull_request' || !github.event.pull_request.draft) && (github.event_name != 'workflow_dispatch' || inputs.profile == 'all' || inputs.profile == 'security') }}
    runs-on: ${{ matrix.runs_on }}
    timeout-minutes: ${{ matrix.timeout_minutes }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - language: javascript-typescript
            category: core-auth-secrets
            runs_on: blacksmith-8vcpu-ubuntu-2404
            timeout_minutes: 25
            config_file: ./.github/codeql/codeql-core-auth-secrets-critical-security.yml
          - language: javascript-typescript
            category: channel-runtime-boundary
            runs_on: blacksmith-8vcpu-ubuntu-2404
            timeout_minutes: 25
            config_file: ./.github/codeql/codeql-channel-runtime-boundary-critical-security.yml
          - language: javascript-typescript
            category: network-ssrf-boundary
            runs_on: blacksmith-4vcpu-ubuntu-2404
            timeout_minutes: 25
            config_file: ./.github/codeql/codeql-network-ssrf-boundary-critical-security.yml
          - language: javascript-typescript
            category: mcp-process-tool-boundary
            runs_on: blacksmith-4vcpu-ubuntu-2404
            timeout_minutes: 25
            config_file: ./.github/codeql/codeql-mcp-process-tool-boundary-critical-security.yml
          - language: javascript-typescript
            category: plugin-trust-boundary
            runs_on: blacksmith-4vcpu-ubuntu-2404
            timeout_minutes: 25
            config_file: ./.github/codeql/codeql-plugin-trust-boundary-critical-security.yml
          - language: actions
            category: actions
            runs_on: blacksmith-8vcpu-ubuntu-2404
            timeout_minutes: 10
            config_file: ./.github/codeql/codeql-actions-critical-security.yml
    steps:
      - name: Checkout
        if: ${{ matrix.category != 'actions' }}
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          submodules: false

      - name: Checkout Actions security sources
        if: ${{ matrix.category == 'actions' }}
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          submodules: false
          sparse-checkout: |
            .github/actions
            .github/workflows
            .github/codeql

      - name: Initialize CodeQL
        uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4
        with:
          languages: ${{ matrix.language }}
          config-file: ${{ matrix.config_file }}

      - name: Analyze
        uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4
        with:
          category: "/codeql-security-high/${{ matrix.category }}"
