Skip to content

ci: add CI pipeline & merge gates (SEC-36)#7

Merged
21tmccauley merged 1 commit into
mainfrom
feat/sec-36-ci-pipeline
Jul 9, 2026
Merged

ci: add CI pipeline & merge gates (SEC-36)#7
21tmccauley merged 1 commit into
mainfrom
feat/sec-36-ci-pipeline

Conversation

@21tmccauley

Copy link
Copy Markdown
Collaborator

Add .github/workflows/ci.yml with four jobs matching the contract gates:

  • lint ruff check framework/ (lint + import order) and mypy framework/
    (core framework; TUI suppressed via a pyproject override)
  • test pytest across the Python 3.10-3.13 matrix
  • smoke paramify list/catalog/ksi + describe over every fetcher
  • secrets gitleaks OSS binary (v8.30.1), full-history scan via gitleaks git

Add tests/test_contracts.py: parametrized JSON-Schema validation of every fetcher.yaml and _categories/*.yaml, plus discovery-doesn't-raise and unique-name invariants (+122 tests).

Configure tooling in pyproject.toml: [tool.ruff] gates framework/ only (ruff format not gated yet); [tool.mypy] runs on the core framework with a framework.tui.* ignore_errors override; ruff + mypy added to dev/all extras.

Clear the new gates with behavior-preserving fixes: 3 ruff autofixes (unused imports in the TUI, import sort in executor.py) and core-framework mypy fixes (config_loader signature, two Optional handlings in api.py, and renaming reused except ... as e loop variables to err in cli.py).

Branch protection (CI-green + review before main) is a repo setting, best applied on the public repo (SEC-30); not included here.

Add .github/workflows/ci.yml with four jobs matching the contract gates:

- lint    ruff check framework/ (lint + import order) and mypy framework/
          (core framework; TUI suppressed via a pyproject override)
- test    pytest across the Python 3.10-3.13 matrix
- smoke   paramify list/catalog/ksi + describe over every fetcher
- secrets gitleaks OSS binary (v8.30.1), full-history scan via `gitleaks git`

Add tests/test_contracts.py: parametrized JSON-Schema validation of every
fetcher.yaml and _categories/*.yaml, plus discovery-doesn't-raise and
unique-name invariants (+122 tests).

Configure tooling in pyproject.toml: [tool.ruff] gates framework/ only
(ruff format not gated yet); [tool.mypy] runs on the core framework with a
framework.tui.* ignore_errors override; ruff + mypy added to dev/all extras.

Clear the new gates with behavior-preserving fixes: 3 ruff autofixes (unused
imports in the TUI, import sort in executor.py) and core-framework mypy fixes
(config_loader signature, two Optional handlings in api.py, and renaming reused
`except ... as e` loop variables to `err` in cli.py).

Branch protection (CI-green + review before main) is a repo setting, best
applied on the public repo (SEC-30); not included here.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
@21tmccauley
21tmccauley merged commit f938085 into main Jul 9, 2026
12 checks passed
@21tmccauley
21tmccauley deleted the feat/sec-36-ci-pipeline branch July 10, 2026 19:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant