github-security-report 0.8.0__tar.gz → 0.9.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. {github_security_report-0.8.0 → github_security_report-0.9.0}/PKG-INFO +3 -3
  2. {github_security_report-0.8.0 → github_security_report-0.9.0}/pyproject.toml +3 -3
  3. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/_version.py +2 -2
  4. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/categories.py +15 -7
  5. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/severity.py +14 -9
  6. {github_security_report-0.8.0 → github_security_report-0.9.0}/.gitignore +0 -0
  7. {github_security_report-0.8.0 → github_security_report-0.9.0}/LICENSE +0 -0
  8. {github_security_report-0.8.0 → github_security_report-0.9.0}/LICENSES/Apache-2.0.txt +0 -0
  9. {github_security_report-0.8.0 → github_security_report-0.9.0}/README.md +0 -0
  10. {github_security_report-0.8.0 → github_security_report-0.9.0}/scripts/README.md +0 -0
  11. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/__init__.py +0 -0
  12. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/classify.py +0 -0
  13. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/cli.py +0 -0
  14. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/client.py +0 -0
  15. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/collect.py +0 -0
  16. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/config.py +0 -0
  17. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/gating.py +0 -0
  18. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/gitctx.py +0 -0
  19. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/models.py +0 -0
  20. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/posture.py +0 -0
  21. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/py.typed +0 -0
  22. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/remediate.py +0 -0
  23. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/render/__init__.py +0 -0
  24. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/render/html.py +0 -0
  25. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/render/markdown.py +0 -0
  26. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/render/slack.py +0 -0
  27. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/render/terminal.py +0 -0
  28. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/report.py +0 -0
  29. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/rulesets.py +0 -0
  30. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/runner.py +0 -0
  31. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/scope.py +0 -0
  32. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/templates/index.html.j2 +0 -0
  33. {github_security_report-0.8.0 → github_security_report-0.9.0}/src/github_security_report/templates/report.html.j2 +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: github-security-report
3
- Version: 0.8.0
3
+ Version: 0.9.0
4
4
  Summary: Security and quality reporting across GitHub organisations
5
5
  Project-URL: Homepage, https://github.com/lfreleng-actions/github-security-report-action
6
6
  Project-URL: Repository, https://github.com/lfreleng-actions/github-security-report-action
@@ -29,14 +29,14 @@ Requires-Dist: jinja2==3.1.6
29
29
  Requires-Dist: jsonschema==4.26.0
30
30
  Requires-Dist: pyyaml==6.0.3
31
31
  Requires-Dist: rich==15.0.0
32
- Requires-Dist: typer==0.26.8
32
+ Requires-Dist: typer==0.27.0
33
33
  Provides-Extra: dev
34
34
  Requires-Dist: mypy==2.3.0; extra == 'dev'
35
35
  Requires-Dist: pytest-asyncio==1.4.0; extra == 'dev'
36
36
  Requires-Dist: pytest-cov==7.1.0; extra == 'dev'
37
37
  Requires-Dist: pytest==9.1.1; extra == 'dev'
38
38
  Requires-Dist: respx==0.23.1; extra == 'dev'
39
- Requires-Dist: ruff==0.15.21; extra == 'dev'
39
+ Requires-Dist: ruff==0.15.22; extra == 'dev'
40
40
  Requires-Dist: syrupy==5.5.3; extra == 'dev'
41
41
  Requires-Dist: types-jsonschema==4.26.0.20260518; extra == 'dev'
42
42
  Requires-Dist: types-pyyaml==6.0.12.20250915; extra == 'dev'
@@ -45,7 +45,7 @@ keywords = [
45
45
  ]
46
46
  dependencies = [
47
47
  "httpx[http2]==0.28.1",
48
- "typer==0.26.8",
48
+ "typer==0.27.0",
49
49
  "rich==15.0.0",
50
50
  "jinja2==3.1.6",
51
51
  "jsonschema==4.26.0",
@@ -65,7 +65,7 @@ dev = [
65
65
  "respx==0.23.1",
66
66
  "syrupy==5.5.3",
67
67
  "mypy==2.3.0",
68
- "ruff==0.15.21",
68
+ "ruff==0.15.22",
69
69
  "types-jsonschema==4.26.0.20260518",
70
70
  "types-PyYAML==6.0.12.20250915",
71
71
  ]
@@ -97,7 +97,7 @@ dev = [
97
97
  "respx==0.23.1",
98
98
  "syrupy==5.5.3",
99
99
  "mypy==2.3.0",
100
- "ruff==0.15.21",
100
+ "ruff==0.15.22",
101
101
  "types-jsonschema==4.26.0.20260518",
102
102
  "types-PyYAML==6.0.12.20250915",
103
103
  ]
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.8.0'
22
- __version_tuple__ = version_tuple = (0, 8, 0)
21
+ __version__ = version = '0.9.0'
22
+ __version_tuple__ = version_tuple = (0, 9, 0)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -67,9 +67,9 @@ class CategoryMeta:
67
67
  # A repository fails (appears as an offender) only when it carries a finding
68
68
  # at or above this rung; findings below it fold into the clean count. The
69
69
  # global default is MEDIUM, so Low and Informational findings pass; a
70
- # category may lower it (Zizmor uses LOW, so only Informational passes).
71
- # Meaningful only for the severity-ranked signals; binary categories ignore
72
- # it. Overridable per category via the JSON config.
70
+ # category may lower it (Zizmor uses INFORMATIONAL, so every finding
71
+ # counts). Meaningful only for the severity-ranked signals; binary
72
+ # categories ignore it. Overridable per category via the JSON config.
73
73
  fail_severity: Severity = Severity.MEDIUM
74
74
 
75
75
 
@@ -106,10 +106,18 @@ _CATEGORIES: dict[CategoryKey, CategoryMeta] = {
106
106
  "Zizmor static analysis of GitHub Actions workflows, ranked "
107
107
  "worst-first by severity."
108
108
  ),
109
- # zizmor emits its Low findings at SARIF level "note", which
110
- # normalises to LOW (see severity.py), so any zizmor finding fails --
111
- # matching the ruleset-enforced PR gate that blocks on note-and-above.
112
- fail_severity=Severity.LOW,
109
+ # The organisation scan pipeline runs zizmor with an
110
+ # 'informational' floor, so every finding it can report reaches the
111
+ # SARIF. Match that here: any zizmor finding counts, at any
112
+ # severity. This mirrors the ruleset-enforced PR gate, which blocks
113
+ # on any finding regardless of level.
114
+ #
115
+ # zizmor emits both Low and Informational findings at SARIF level
116
+ # "note", and the code-scanning alerts API exposes only that level
117
+ # (not zizmor's own severity property), so the two are
118
+ # indistinguishable here. Cutting at INFORMATIONAL sidesteps the
119
+ # ambiguity: both surface either way.
120
+ fail_severity=Severity.INFORMATIONAL,
113
121
  ),
114
122
  CategoryKey.AISLOP: CategoryMeta(
115
123
  key=CategoryKey.AISLOP,
@@ -19,10 +19,13 @@ directly.
19
19
  The ``note`` mapping mirrors zizmor's own SARIF encoder, which emits both its
20
20
  Low and Informational findings at SARIF level ``note`` (Medium -> ``warning``,
21
21
  High -> ``error``). The organisation scan pipeline runs zizmor with
22
- ``--min-severity low``, so informational findings never reach the uploaded
23
- SARIF: every ``note`` alert in code scanning is a genuine Low finding, and the
24
- ruleset-enforced PR gate blocks on it. Mapping ``note`` below LOW would
25
- (and previously did) under-state the estate's posture relative to that gate.
22
+ ``--min-severity informational``, so both tiers reach the uploaded SARIF and a
23
+ ``note`` alert may be either. The code-scanning alerts API exposes only the
24
+ SARIF level -- not the ``zizmor/severity`` property carried in the raw SARIF --
25
+ so the two cannot be separated here. ``note`` therefore stays at LOW rather
26
+ than INFORMATIONAL, which errs towards over- rather than under-stating the
27
+ estate's posture; the zizmor category cuts at INFORMATIONAL (see
28
+ ``categories.py``) so both tiers are reported regardless of where this maps.
26
29
  """
27
30
 
28
31
  from __future__ import annotations
@@ -59,11 +62,13 @@ _SECURITY_NAMES: dict[str, Severity] = {
59
62
  }
60
63
 
61
64
  # SARIF level -> security scale, used only as a fallback (zizmor, aislop).
62
- # zizmor's SARIF encoder emits Low AND Informational findings as ``note``, but
63
- # the scan pipeline's --min-severity low floor keeps informational findings out
64
- # of the SARIF entirely, so a ``note`` alert is a genuine Low finding (matching
65
- # the ruleset-enforced PR gate, which blocks on note-and-above). aislop uses
66
- # the same three levels. The rare ``none`` level stays at INFORMATIONAL.
65
+ # zizmor's SARIF encoder emits Low AND Informational findings as ``note``, and
66
+ # the scan pipeline's --min-severity informational floor lets both through, so
67
+ # a ``note`` alert may be either tier. The alerts API does not expose zizmor's
68
+ # own severity property, so they are indistinguishable here; ``note`` maps to
69
+ # LOW to avoid under-stating, and the zizmor category's INFORMATIONAL cutoff
70
+ # ensures both are reported. aislop uses the same three levels. The rare
71
+ # ``none`` level stays at INFORMATIONAL.
67
72
  _SARIF_LEVEL_NAMES: dict[str, Severity] = {
68
73
  "error": Severity.HIGH,
69
74
  "warning": Severity.MEDIUM,