Skip to content

Security, dependency audit, and SBOM

The repository security policy is published in SECURITY.md. Suspected vulnerabilities should be reported privately rather than through a public issue.

Local audit

Use an isolated target environment so the result represents the release installation rather than unrelated developer tooling:

python -m pip install pip-audit cyclonedx-bom
python -m venv .audit-env
.audit-env/bin/python -m pip install -e ".[all]"
.audit-env/bin/python -m pip check
AUDIT_SITE=$(.audit-env/bin/python -c "import site; print(site.getsitepackages()[0])")
python -m pip_audit --strict --progress-spinner=off --path "$AUDIT_SITE"
cyclonedx-py environment .audit-env \
  --pyproject pyproject.toml \
  --mc-type library \
  --output-reproducible \
  --output-format JSON \
  --output-file SBOM.cdx.json
.audit-env/bin/python tools/finalize_sbom.py SBOM.cdx.json

pip check verifies installed dependency consistency. pip-audit checks the resolved Python environment against published vulnerability data. The CycloneDX file records the resolved software components used for the audit.

Automation

.github/workflows/security.yml runs on pull requests, protected branches, a weekly schedule, and manual dispatch. A vulnerability finding or audit-service failure blocks that job. The generated SBOM.cdx.json is uploaded as a workflow artifact.

The release report must distinguish locally executed checks from the configured cross-platform GitHub Actions matrix. A workflow definition is not evidence that a remote run passed until GitHub records a successful run for the release commit.