Changed
- Versioning is now tag-driven via setuptools-scm. The package version is derived from the latest signed annotated
vX.Y.Zgit tag.pyproject.tomlno longer has a hardcodedversion = ...; it usesdynamic = ["version"].iac_scanner.__version__reads from_version.py(written at build time by setuptools-scm) and falls back toimportlib.metadatafor installed wheels. - Release flow is now
make release-{patch,minor,major}. The newscripts/release.pypromotesCHANGELOG.md [Unreleased]→[X.Y.Z], commits the change with DCO sign-off, and creates a GPG-signed annotated tag. Pushing the tag (git push --follow-tags) is the only step that triggers PyPI publish. The legacyscripts/bump_version.py,scripts/check_version.py, and thecheck-versionpre-commit hook are removed. - CI workflows fetch full git history (
fetch-depth: 0) where they build distributions, so setuptools-scm sees the tags it needs.
Added
.github/workflows/release.yml— auto-creates a GitHub Release from the matching CHANGELOG section when avX.Y.Ztag is pushed. Rejects lightweight tags. Therelease: publishedevent then triggers the existingpublish-pypi.yml..github/workflows/scorecard.yml— OpenSSF Scorecard runs weekly + on push tomain. Results posted to the Security tab and to scorecard.dev (badge in README)..github/workflows/codeql.yml— CodeQL static analysis (Python,security-and-qualityquery suite) on PR + weekly cron.GOVERNANCE.md— roles, decision-making, branch-protection policy, release authority.MAINTAINERS.md— canonical maintainer list (mirrors.github/CODEOWNERS).SUPPORT.md— routes users to bug/feature/security/discussion channels.scripts/apply_branch_protection.sh—gh-based, idempotent applier for themain-branch protection rules described inGOVERNANCE.md. Run from any maintainer's machine.- README badges: Python versions, CodeQL, OpenSSF Scorecard, DCO.
- Rule-engine plugin discovery. Third-party rule engines can now register themselves via the
iac_scanner.rule_enginesentry-point group. Install e.g.iac-scanner-cdk-nagand thecdk-nagengine is auto-discovered — no core changes required. Core engine dispatcher insrc/iac_scanner/rules/engine.py. Newavailable_engines()helper lists every usable engine (built-in + plugins). - Companion package:
iac-scanner-cdk-nag(packages/iac-scanner-cdk-nag/). Independent PyPI package that shells out tocdk synth, parses AwsSolutions / HIPAA / NIST-800-53 / PCI-DSS nag annotations, and returns them as iac-scanner Findings. Released via a dedicatedpublish-nag-pypi.ymlworkflow onnag-v*tags. - PEP 561
py.typedmarker oniac_scanner— downstream packages (like the nag extension) and mypy in other repos now recognize this package as fully typed.
Dependencies
This release rolls up a batch of Dependabot upgrades. None change runtime behavior, but consumers pinning by upper bound should be aware:
click>=8.3.3(was>=8.1.0)pydantic>=2.13.4(was>=2.0.0)mcp>=1.27.1([mcp]extra; was>=1.0.0)- Dev:
pytest>=9.0.3,respx>=0.23.1,bandit>=1.9.4,pip-audit>=2.10.0,build>=1.5.0 - Build:
setuptools>=82.0.1+setuptools-scm>=8(new) - GitHub Actions majors:
actions/checkout@v6,actions/setup-python@v6,actions/upload-artifact@v7,actions/download-artifact@v8,sigstore/gh-action-sigstore-python@v3.3.0