GitNexus/.github/workflows/codeql.yml
Abhigyan Patwari 5726ad42f0
chore(deps): consolidate all open Dependabot updates (#3682)
* chore(deps): consolidate Dependabot updates

Keep all twelve dependency PRs in one verified update. Refresh the
workflow contract test for the new exact Claude action pin.

* test(eval): align setup-uv action pin

---------

Co-authored-by: Gergo Magyar <gergomagyar0@gmail.com>
Co-authored-by: Gergő Magyar <gergomagyar@icloud.com>
2026-10-23 10:49:45 +01:00

96 lines
4.1 KiB
YAML

name: CodeQL
# Static analysis (SAST) for TypeScript/JavaScript and Python sources.
# Findings upload to the GitHub Security tab as SARIF.
#
# Advisory only on first introduction — see docs/plans/2026-05-03-001-feat-automated-security-scans-plan.md.
# Promote to a required check after baseline triage (operator decision).
on:
pull_request:
branches: [main]
paths-ignore: ['**.md', 'docs/**', 'LICENSE']
push:
branches: [main]
schedule:
# Weekly Monday 06:00 UTC — catches advisories newly published against
# already-merged code without waiting for the next PR.
- cron: '0 6 * * 1'
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
analyze:
name: Analyze (${{ matrix.language }})
runs-on: ubuntu-latest
timeout-minutes: 60
permissions:
actions: read
contents: read
# security-events:write is what enables SARIF upload to the Security tab.
security-events: write
strategy:
fail-fast: false
matrix:
language: [javascript-typescript, python]
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
# Don't leave GITHUB_TOKEN in .git/config for downstream steps to read.
persist-credentials: false
- name: Initialize CodeQL
uses: github/codeql-action/init@6f2ac81f5cd81fe351a197ba0b00d91d03cd2aee # v4.39.0
with:
languages: ${{ matrix.language }}
queries: security-and-quality
# Exclude generated/vendored code; tune after first-run signal.
# gitnexus/vendor/ holds tree-sitter-proto sources (regenerated, not authored).
# CodeQL path filters use .gitignore-style globs and do NOT support
# brace expansion — list each generated parser file separately.
config: |
paths-ignore:
- '**/dist/**'
- '**/node_modules/**'
- 'gitnexus/vendor/**'
- 'gitnexus/src/core/parsing/**/parser.c'
- 'gitnexus/src/core/parsing/**/parser.js'
# Test fixtures are intentionally synthetic inputs (broken/unused
# code, malformed samples) used to exercise the analyzer. CodeQL
# findings here are noise, not real bugs. The second glob also
# covers fixtures nested deeper in the test tree, e.g.
# test/integration/cfg/fixtures/ (the CFG/PDG hazard inputs that
# deliberately contain use-before-init / unused-variable shapes).
- '**/test/fixtures/**'
- '**/test/**/fixtures/**'
# Parsed-only accuracy corpus includes deliberate command injection
# and broken Python imports/returns. It is never executed or packed;
# retain security analysis of the surrounding benchmark harness.
- 'gitnexus/bench/tool-accuracy/fixtures/**'
# GET /api/grep intentionally builds RegExp from the query string
# (literal=1 escapes). ReDoS is handled by worker terminate() —
# see SECURITY.md. Inline codeql[] comments do not clear the
# GitHub PR CodeQL gate, so this file is excluded to avoid
# re-filing js/regex-injection on every push of the same line.
- 'gitnexus/src/server/grep-params.ts'
# Tests construct tmpdir fixtures and pass them into production
# read-only probes (openSync(..., 'r')). CodeQL models that as
# js/insecure-temporary-file even though nothing is created.
- '**/test/**'
# CI vendor fetch: origin is the official Ladybug repo; dest is
# regex-pinned and containment-checked. Inline suppressions do
# not clear the PR CodeQL gate (same as grep-params.ts).
- '.github/scripts/fetch-lbug-fts-artifacts.mjs'
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@6f2ac81f5cd81fe351a197ba0b00d91d03cd2aee # v4.39.0
with:
category: '/language:${{ matrix.language }}'