socketsecurity 2.9.3__tar.gz → 2.9.5__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 (172) hide show
  1. socketsecurity-2.9.5/.github/workflows/dependency-audit.yml +157 -0
  2. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/workflows/python-tests.yml +2 -11
  3. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/workflows/version-check.yml +2 -6
  4. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/CHANGELOG.md +24 -0
  5. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/PKG-INFO +2 -2
  6. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/docs/cli-reference.md +1 -1
  7. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/pyproject.toml +2 -2
  8. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/__init__.py +1 -1
  9. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/tools/reachability.py +3 -3
  10. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/uv.lock +8 -8
  11. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/CODEOWNERS +0 -0
  12. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/PULL_REQUEST_TEMPLATE/bug-fix.md +0 -0
  13. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/PULL_REQUEST_TEMPLATE/feature.md +0 -0
  14. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/PULL_REQUEST_TEMPLATE/improvement.md +0 -0
  15. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  16. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/actions/setup-docker/action.yml +0 -0
  17. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/actions/setup-hatch/action.yml +0 -0
  18. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/actions/setup-sfw/action.yml +0 -0
  19. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/dependabot.yml +0 -0
  20. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/workflows/dependency-review.yml +0 -0
  21. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/workflows/docker-stable.yml +0 -0
  22. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/workflows/e2e-test.yml +0 -0
  23. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/workflows/package-check.yml +0 -0
  24. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/workflows/pr-preview.yml +0 -0
  25. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/workflows/release.yml +0 -0
  26. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.github/zizmor.yml +0 -0
  27. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.gitignore +0 -0
  28. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.hooks/sync_version.py +0 -0
  29. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.pre-commit-config.yaml +0 -0
  30. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/.python-version +0 -0
  31. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/CONTRIBUTING.md +0 -0
  32. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/Dockerfile +0 -0
  33. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/Dockerfile.preview +0 -0
  34. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/LICENSE +0 -0
  35. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/Makefile +0 -0
  36. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/README.md +0 -0
  37. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/benchmarks/manifest_discovery.py +0 -0
  38. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/docs/ci-cd.md +0 -0
  39. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/docs/development.md +0 -0
  40. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/docs/troubleshooting.md +0 -0
  41. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/examples/config/sarif-dashboard-parity.json +0 -0
  42. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/examples/config/sarif-dashboard-parity.toml +0 -0
  43. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/examples/config/sarif-diff-ci-cd.json +0 -0
  44. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/examples/config/sarif-diff-ci-cd.toml +0 -0
  45. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/examples/config/sarif-instance-detail.json +0 -0
  46. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/examples/config/sarif-instance-detail.toml +0 -0
  47. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/instructions/gitlab-commit-status/uat.md +0 -0
  48. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/pytest.ini +0 -0
  49. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/scripts/build_container.sh +0 -0
  50. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/scripts/build_container_flexible.sh +0 -0
  51. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/scripts/deploy-test-docker.sh +0 -0
  52. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/scripts/deploy-test-pypi.sh +0 -0
  53. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/scripts/docker-entrypoint.sh +0 -0
  54. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/scripts/run.sh +0 -0
  55. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/session.md +0 -0
  56. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socket.yml +0 -0
  57. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/config.py +0 -0
  58. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/__init__.py +0 -0
  59. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/alert_selection.py +0 -0
  60. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/classes.py +0 -0
  61. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/cli_client.py +0 -0
  62. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/cli_run.py +0 -0
  63. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/exceptions.py +0 -0
  64. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/git_interface.py +0 -0
  65. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/git_remote.py +0 -0
  66. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/helper/__init__.py +0 -0
  67. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/helper/socket_facts_loader.py +0 -0
  68. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/lazy_file_loader.py +0 -0
  69. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/log_uploader.py +0 -0
  70. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/logging.py +0 -0
  71. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/messages.py +0 -0
  72. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/pull_request.py +0 -0
  73. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/resource_utils.py +0 -0
  74. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/scm/__init__.py +0 -0
  75. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/scm/base.py +0 -0
  76. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/scm/client.py +0 -0
  77. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/scm/github.py +0 -0
  78. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/scm/gitlab.py +0 -0
  79. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/scm_comments.py +0 -0
  80. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/socket_config.py +0 -0
  81. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/streaming.py +0 -0
  82. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/core/utils.py +0 -0
  83. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/fossa_compat.py +0 -0
  84. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/output.py +0 -0
  85. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/plugins/__init__.py +0 -0
  86. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/plugins/base.py +0 -0
  87. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/plugins/formatters/__init__.py +0 -0
  88. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/plugins/formatters/slack.py +0 -0
  89. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/plugins/jira.py +0 -0
  90. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/plugins/manager.py +0 -0
  91. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/plugins/slack.py +0 -0
  92. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/plugins/teams.py +0 -0
  93. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/plugins/webhook.py +0 -0
  94. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/socketsecurity/socketcli.py +0 -0
  95. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/__init__.py +0 -0
  96. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/core/conftest.py +0 -0
  97. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/core/create_diff_input.json +0 -0
  98. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/core/test_diff_alerts.py +0 -0
  99. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/core/test_diff_generation.py +0 -0
  100. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/core/test_diff_scan_polling.py +0 -0
  101. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/core/test_facts_compression.py +0 -0
  102. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/core/test_full_scan_outputs.py +0 -0
  103. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/core/test_has_manifest_files.py +0 -0
  104. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/core/test_invalid_facts_marker.py +0 -0
  105. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/core/test_package_and_alerts.py +0 -0
  106. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/core/test_sdk_methods.py +0 -0
  107. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/core/test_supporting_methods.py +0 -0
  108. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/data/fullscans/create_response.json +0 -0
  109. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/data/fullscans/diff/stream_diff.json +0 -0
  110. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/data/fullscans/diff/stream_diff_full.json +0 -0
  111. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/data/fullscans/head_scan/metadata.json +0 -0
  112. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/data/fullscans/head_scan/stream_scan.json +0 -0
  113. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/data/fullscans/head_scan/stream_scan_full.json +0 -0
  114. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/data/fullscans/new_scan/metadata.json +0 -0
  115. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/data/fullscans/new_scan/stream_scan.json +0 -0
  116. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/data/repos/repo_info_error.json +0 -0
  117. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/data/repos/repo_info_no_head.json +0 -0
  118. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/data/repos/repo_info_success.json +0 -0
  119. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/data/settings/security-policy.json +0 -0
  120. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/e2e/fixtures/simple-npm/index.js +0 -0
  121. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/e2e/fixtures/simple-npm/package.json +0 -0
  122. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/e2e/fixtures/simple-pypi/requirements.txt +0 -0
  123. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/e2e/reach-facts-probe.sh +0 -0
  124. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/e2e/validate-gitlab.sh +0 -0
  125. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/e2e/validate-json.sh +0 -0
  126. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/e2e/validate-reachability.sh +0 -0
  127. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/e2e/validate-sarif.sh +0 -0
  128. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/e2e/validate-scan.sh +0 -0
  129. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/fixtures/fossa/README.md +0 -0
  130. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/fixtures/fossa/fossa-analyze-empty.json +0 -0
  131. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/fixtures/fossa/fossa-analyze-populated.json +0 -0
  132. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/fixtures/fossa/fossa-sbom-empty-deep.json +0 -0
  133. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/fixtures/fossa/fossa-sbom-populated.json +0 -0
  134. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/__init__.py +0 -0
  135. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_alert_selection.py +0 -0
  136. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_cli_config.py +0 -0
  137. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_cli_run.py +0 -0
  138. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_client.py +0 -0
  139. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_config.py +0 -0
  140. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_dependency_overview.py +0 -0
  141. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_disable_ignore.py +0 -0
  142. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_exclude_paths.py +0 -0
  143. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_fossa_compat.py +0 -0
  144. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_fossa_parity.py +0 -0
  145. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_full_scan_retry.py +0 -0
  146. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_git_interface.py +0 -0
  147. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_git_remote.py +0 -0
  148. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_github_buildkite_config.py +0 -0
  149. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_gitlab_auth.py +0 -0
  150. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_gitlab_auth_fallback.py +0 -0
  151. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_gitlab_commit_status.py +0 -0
  152. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_gitlab_format.py +0 -0
  153. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_ignore_authorization.py +0 -0
  154. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_ignore_telemetry_filtering.py +0 -0
  155. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_include_dirs.py +0 -0
  156. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_log_uploader.py +0 -0
  157. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_manifest_discovery.py +0 -0
  158. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_messages.py +0 -0
  159. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_output.py +0 -0
  160. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_pr_comment_rendering.py +0 -0
  161. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_pull_request_context.py +0 -0
  162. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_reachability.py +0 -0
  163. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_scan_scope.py +0 -0
  164. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_slack_plugin.py +0 -0
  165. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_slack_severity_normalization.py +0 -0
  166. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_socketcli.py +0 -0
  167. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_streaming.py +0 -0
  168. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/tests/unit/test_tier1_finalize.py +0 -0
  169. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/workflows/bitbucket-pipelines.yml +0 -0
  170. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/workflows/buildkite.yml +0 -0
  171. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/workflows/github-actions.yml +0 -0
  172. {socketsecurity-2.9.3 → socketsecurity-2.9.5}/workflows/gitlab-ci.yml +0 -0
@@ -0,0 +1,157 @@
1
+ name: Dependency Audit
2
+
3
+ env:
4
+ PYTHON_VERSION: "3.12"
5
+
6
+ # pip-audit compares the lockfile against advisory databases that publish
7
+ # continuously, so the result tracks the clock, not the commit. Hence the cron.
8
+ on:
9
+ schedule:
10
+ - cron: "17 6 * * *"
11
+ # Unfiltered: a required check behind a paths filter never reports on a
12
+ # pull request that misses the filter, which blocks the merge.
13
+ pull_request:
14
+ push:
15
+ branches: [main]
16
+ paths:
17
+ - "pyproject.toml"
18
+ - "uv.lock"
19
+ - ".github/workflows/dependency-audit.yml"
20
+ workflow_dispatch:
21
+
22
+ permissions:
23
+ contents: read
24
+
25
+ concurrency:
26
+ group: dependency-audit-${{ github.event.pull_request.number || github.ref }}
27
+ cancel-in-progress: true
28
+
29
+ jobs:
30
+ dependency-audit:
31
+ runs-on: ubuntu-latest
32
+ timeout-minutes: 10
33
+ permissions:
34
+ contents: read
35
+ issues: write
36
+ steps:
37
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
38
+ with:
39
+ fetch-depth: 1
40
+ persist-credentials: false
41
+
42
+ - name: 🐍 setup python
43
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
44
+ with:
45
+ python-version: ${{ env.PYTHON_VERSION }}
46
+
47
+ - name: 🛠️ install uv
48
+ run: |
49
+ python -m pip install --upgrade pip
50
+ pip install uv
51
+
52
+ - name: 🛡️ pip-audit (known CVEs in the locked deps)
53
+ id: audit
54
+ run: |
55
+ uv export --no-hashes --no-emit-project --format requirements-txt > /tmp/req-audit.txt
56
+
57
+ set +e
58
+ uvx pip-audit --strict --progress-spinner off --disable-pip --no-deps \
59
+ -r /tmp/req-audit.txt 2>&1 | tee /tmp/audit.log
60
+ status=${PIPESTATUS[0]}
61
+ set -e
62
+
63
+ # Written before the exit so the next step can quote it.
64
+ {
65
+ echo 'report<<AUDIT_REPORT_EOF'
66
+ cat /tmp/audit.log
67
+ echo 'AUDIT_REPORT_EOF'
68
+ } >> "$GITHUB_OUTPUT"
69
+
70
+ exit "$status"
71
+
72
+ # A scheduled run has no pull request to turn red, so record it instead.
73
+ - name: 📮 open or update the tracking issue
74
+ if: always() && steps.audit.outcome == 'failure' && github.event_name == 'schedule'
75
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
76
+ env:
77
+ AUDIT_REPORT: ${{ steps.audit.outputs.report }}
78
+ with:
79
+ script: |
80
+ const marker = '<!-- dependency-audit-tracking-issue -->';
81
+ const title = 'Dependency audit: known vulnerabilities in the locked dependencies';
82
+ const runUrl =
83
+ `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}` +
84
+ `/actions/runs/${context.runId}`;
85
+ const body = [
86
+ marker,
87
+ '`pip-audit` found known vulnerabilities in the locked dependency set.',
88
+ '',
89
+ 'Bump the affected pins in `pyproject.toml`, run `uv lock`, and open a PR.',
90
+ '',
91
+ '```',
92
+ process.env.AUDIT_REPORT.trim(),
93
+ '```',
94
+ '',
95
+ `Run: ${runUrl}`,
96
+ `Last checked: ${new Date().toISOString()}`,
97
+ ].join('\n');
98
+
99
+ const existing = await github.paginate(github.rest.issues.listForRepo, {
100
+ owner: context.repo.owner,
101
+ repo: context.repo.repo,
102
+ state: 'open',
103
+ per_page: 100,
104
+ });
105
+ const tracking = existing.find(
106
+ (issue) => !issue.pull_request && issue.body && issue.body.includes(marker),
107
+ );
108
+
109
+ if (tracking) {
110
+ await github.rest.issues.update({
111
+ owner: context.repo.owner,
112
+ repo: context.repo.repo,
113
+ issue_number: tracking.number,
114
+ body,
115
+ });
116
+ core.notice(`Updated tracking issue #${tracking.number}`);
117
+ } else {
118
+ const created = await github.rest.issues.create({
119
+ owner: context.repo.owner,
120
+ repo: context.repo.repo,
121
+ title,
122
+ body,
123
+ labels: ['dependencies'],
124
+ });
125
+ core.notice(`Opened tracking issue #${created.data.number}`);
126
+ }
127
+
128
+ - name: ✅ close the tracking issue once the audit is clean
129
+ if: always() && steps.audit.outcome == 'success' && github.event_name == 'schedule'
130
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
131
+ with:
132
+ script: |
133
+ const marker = '<!-- dependency-audit-tracking-issue -->';
134
+ const existing = await github.paginate(github.rest.issues.listForRepo, {
135
+ owner: context.repo.owner,
136
+ repo: context.repo.repo,
137
+ state: 'open',
138
+ per_page: 100,
139
+ });
140
+ const tracking = existing.find(
141
+ (issue) => !issue.pull_request && issue.body && issue.body.includes(marker),
142
+ );
143
+ if (!tracking) {
144
+ return;
145
+ }
146
+ await github.rest.issues.createComment({
147
+ owner: context.repo.owner,
148
+ repo: context.repo.repo,
149
+ issue_number: tracking.number,
150
+ body: 'The scheduled audit is clean again. Closing.',
151
+ });
152
+ await github.rest.issues.update({
153
+ owner: context.repo.owner,
154
+ repo: context.repo.repo,
155
+ issue_number: tracking.number,
156
+ state: 'closed',
157
+ });
@@ -13,14 +13,9 @@ on:
13
13
  - "pyproject.toml"
14
14
  - "uv.lock"
15
15
  - ".github/workflows/python-tests.yml"
16
+ # Unfiltered: a required check behind a paths filter never reports on a
17
+ # pull request that misses the filter, which blocks the merge.
16
18
  pull_request:
17
- paths:
18
- - "socketsecurity/**/*.py"
19
- - "tests/unit/**/*.py"
20
- - "tests/core/**/*.py"
21
- - "pyproject.toml"
22
- - "uv.lock"
23
- - ".github/workflows/python-tests.yml"
24
19
  workflow_dispatch:
25
20
 
26
21
  permissions:
@@ -62,10 +57,6 @@ jobs:
62
57
  from socketsecurity.config import CliConfig
63
58
  print('import smoke OK')
64
59
  "
65
- - name: 🛡️ pip-audit (known CVEs in the locked deps)
66
- run: |
67
- uv export --no-hashes --no-emit-project --format requirements-txt > /tmp/req-audit.txt
68
- uvx pip-audit --strict --progress-spinner off --disable-pip --no-deps -r /tmp/req-audit.txt
69
60
 
70
61
  ruff:
71
62
  runs-on: ubuntu-latest
@@ -1,13 +1,9 @@
1
1
  name: Version Check
2
2
  on:
3
+ # Unfiltered: a required check behind a paths filter never reports on a
4
+ # pull request that misses the filter, which blocks the merge.
3
5
  pull_request:
4
6
  types: [opened, synchronize, ready_for_review]
5
- paths:
6
- - 'socketsecurity/**'
7
- - 'pyproject.toml'
8
- - 'uv.lock'
9
- # Included so a change to the check itself is exercised by its own PR.
10
- - '.github/workflows/version-check.yml'
11
7
 
12
8
  permissions:
13
9
  contents: read
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.9.5
4
+
5
+ ### Changed: bump pinned gitpython to 3.1.62 and soupsieve to 2.9.2
6
+
7
+ - Bumped `gitpython` from `3.1.59` to `3.1.62` (CVE-2026-87817, CVE-2026-87818,
8
+ CVE-2026-87819) and the transitive `soupsieve` pin from `2.8.4` to `2.9.2`
9
+ (GHSA-gjv8-xp57-g29c, GHSA-j934-xhv5-fg8f).
10
+ - Normalized the `gitpython` requirement to its lowercase PEP 503 name.
11
+
12
+ ### Changed: audit the locked dependencies on a schedule
13
+
14
+ - `pip-audit` moved out of the Unit Tests workflow into a new Dependency Audit
15
+ workflow that also runs daily, so advisories published against unchanged pins
16
+ are reported on their own schedule rather than on the next push.
17
+
18
+ ## 2.9.4
19
+
20
+ ### Changed: bump pinned @coana-tech/cli to 15.10.46
21
+
22
+ - Bumped the pinned reachability engine (`@coana-tech/cli`) from `15.10.45` to
23
+ `15.10.46`. See the
24
+ [reachability analysis changelog](https://docs.socket.dev/docs/reachability-analysis-changelog)
25
+ for engine changes.
26
+
3
27
  ## 2.9.3
4
28
 
5
29
  ### Changed: bump pinned @coana-tech/cli to 15.10.45
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: socketsecurity
3
- Version: 2.9.3
3
+ Version: 2.9.5
4
4
  Summary: Socket Security CLI for CI/CD
5
5
  Project-URL: Homepage, https://socket.dev
6
6
  Author-email: Douglas Coburn <douglas@socket.dev>
@@ -36,7 +36,7 @@ Requires-Python: >=3.11
36
36
  Requires-Dist: beautifulsoup4==4.15.0
37
37
  Requires-Dist: brotli==1.2.0; platform_python_implementation == 'CPython'
38
38
  Requires-Dist: brotlicffi==1.2.0.2; platform_python_implementation != 'CPython'
39
- Requires-Dist: gitpython==3.1.59
39
+ Requires-Dist: gitpython==3.1.62
40
40
  Requires-Dist: markdown==3.10.3
41
41
  Requires-Dist: mdutils==1.8.1
42
42
  Requires-Dist: packaging==26.3
@@ -336,7 +336,7 @@ If you don't want to provide the Socket API Token every time then you can use th
336
336
  | Parameter | Required | Default | Description |
337
337
  |:---------------------------------|:---------|:--------|:---------------------------------------------------------------------------------------------------------------------------|
338
338
  | `--reach` | False | False | Enable reachability analysis to identify which vulnerable functions are actually called by your code. Creates a full application reachability scan (`scan_type=socket_tier1`). |
339
- | `--reach-version` | False | 15.10.45 | Version of @coana-tech/cli to use. Defaults to the pinned version that ships with this CLI release, so the engine only changes when you upgrade the Socket CLI. Pass `latest` to always use the newest published version (opt-in auto-update), or an explicit version (e.g. `1.2.3`) to pin it. |
339
+ | `--reach-version` | False | 15.10.46 | Version of @coana-tech/cli to use. Defaults to the pinned version that ships with this CLI release, so the engine only changes when you upgrade the Socket CLI. Pass `latest` to always use the newest published version (opt-in auto-update), or an explicit version (e.g. `1.2.3`) to pin it. |
340
340
  | `--reach-analysis-timeout` | False | 10m | Timeout for each reachability analysis run, e.g. `90s`, `10m` or `1h`. Omitted by default, so coana applies its own default (`10m`). Alias: `--reach-timeout` |
341
341
  | `--reach-analysis-memory-limit` | False | 8GB | Memory limit for each reachability analysis run, e.g. `512MB` or `8GB`. Omitted by default, so coana applies its own default (`8GB`). Alias: `--reach-memory-limit` |
342
342
  | `--reach-concurrency` | False | 1 | Control parallel analysis execution (must be >= 1). Omitted by default, so coana applies its own default. |
@@ -6,14 +6,14 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "socketsecurity"
9
- version = "2.9.3"
9
+ version = "2.9.5"
10
10
  requires-python = ">= 3.11"
11
11
  license = {"file" = "LICENSE"}
12
12
  dependencies = [
13
13
  "requests==2.34.2",
14
14
  "mdutils==1.8.1",
15
15
  "prettytable==3.18.0",
16
- "GitPython==3.1.59",
16
+ "gitpython==3.1.62",
17
17
  "packaging==26.3",
18
18
  "python-dotenv==1.2.3",
19
19
  "socketdev==3.6.0",
@@ -1,3 +1,3 @@
1
1
  __author__ = 'socket.dev'
2
- __version__ = '2.9.3'
2
+ __version__ = '2.9.5'
3
3
  USER_AGENT = f'SocketPythonCLI/{__version__}'
@@ -19,7 +19,7 @@ log = logging.getLogger(__name__)
19
19
  # Pinned @coana-tech/cli version. Bumped deliberately per Python CLI release so the
20
20
  # reachability engine version only changes through a standard pip upgrade (advance notice).
21
21
  # Pass --reach-version latest to opt into the newest published version instead.
22
- DEFAULT_COANA_CLI_VERSION: Final = "15.10.45"
22
+ DEFAULT_COANA_CLI_VERSION: Final = "15.10.46"
23
23
 
24
24
  # Resolved @coana-tech/cli script paths from the npm-install fallback, keyed by version.
25
25
  # Lives for the process lifetime so repeated fallback invocations install only once
@@ -56,7 +56,7 @@ class ReachabilityAnalyzer:
56
56
 
57
57
  def _resolve_coana_package_spec(self, version: Optional[str] = None) -> str:
58
58
  """
59
- Resolve the @coana-tech/cli package spec to run (e.g. '@coana-tech/cli@15.10.45').
59
+ Resolve the @coana-tech/cli package spec to run (e.g. '@coana-tech/cli@15.10.46').
60
60
 
61
61
  Args:
62
62
  version: Coana CLI version to use.
@@ -65,7 +65,7 @@ class ReachabilityAnalyzer:
65
65
  - '<semver>': that exact version.
66
66
 
67
67
  Returns:
68
- str: The package specifier to use with npx (e.g. '@coana-tech/cli@15.10.45').
68
+ str: The package specifier to use with npx (e.g. '@coana-tech/cli@15.10.46').
69
69
  """
70
70
  return f"@coana-tech/cli@{self._resolve_coana_version(version)}"
71
71
 
@@ -575,14 +575,14 @@ wheels = [
575
575
 
576
576
  [[package]]
577
577
  name = "gitpython"
578
- version = "3.1.59"
578
+ version = "3.1.62"
579
579
  source = { registry = "https://pypi.org/simple" }
580
580
  dependencies = [
581
581
  { name = "gitdb" },
582
582
  ]
583
- sdist = { url = "https://files.pythonhosted.org/packages/ca/dc/126b28e76b24a9268ba931ad3e012f71ebdadf62fd9f17758f7074bb0b20/gitpython-3.1.59.tar.gz", hash = "sha256:0a1475cfdc38a5bfba1a3e9a4a9da52a39749ecec322b772915c019f94e5b7e4", size = 230445, upload-time = "2026-08-10T12:03:20.271Z" }
583
+ sdist = { url = "https://files.pythonhosted.org/packages/e0/db/3ca813cbacb23ab6fe46ff38a9b5ef8e73e970c8051f2ce903aacafe0446/gitpython-3.1.62.tar.gz", hash = "sha256:1791de66309bc0c7cfca40bf8d2e3de7ca091cbf94e6051be1ad0722c61062af", size = 231728, upload-time = "2026-09-07T02:57:21.155Z" }
584
584
  wheels = [
585
- { url = "https://files.pythonhosted.org/packages/ef/ed/ae57eb7d344f43f87b74b3a281ead6ec7d6394eef72a7b1dcb28dd089550/gitpython-3.1.59-py3-none-any.whl", hash = "sha256:67a82f537384578643624c8b2c531938a9b82be431663e575dcf638526631d4c", size = 220996, upload-time = "2026-08-10T12:03:18.804Z" },
585
+ { url = "https://files.pythonhosted.org/packages/d6/0b/29d7965215f8ef830a7ca1f42997fe13e5693d85e9edb18f938d063ef5f2/gitpython-3.1.62-py3-none-any.whl", hash = "sha256:7002251225e10e29d2e1f49e6532613fe5d5d9f0b6f1f02997a52b38fe56899e", size = 222753, upload-time = "2026-09-07T02:57:19.762Z" },
586
586
  ]
587
587
 
588
588
  [[package]]
@@ -1293,7 +1293,7 @@ wheels = [
1293
1293
 
1294
1294
  [[package]]
1295
1295
  name = "socketsecurity"
1296
- version = "2.9.3"
1296
+ version = "2.9.5"
1297
1297
  source = { editable = "." }
1298
1298
  dependencies = [
1299
1299
  { name = "beautifulsoup4" },
@@ -1335,7 +1335,7 @@ requires-dist = [
1335
1335
  { name = "beautifulsoup4", specifier = "==4.15.0" },
1336
1336
  { name = "brotli", marker = "platform_python_implementation == 'CPython'", specifier = "==1.2.0" },
1337
1337
  { name = "brotlicffi", marker = "platform_python_implementation != 'CPython'", specifier = "==1.2.0.2" },
1338
- { name = "gitpython", specifier = "==3.1.59" },
1338
+ { name = "gitpython", specifier = "==3.1.62" },
1339
1339
  { name = "hatch", marker = "extra == 'dev'", specifier = "==1.18.0" },
1340
1340
  { name = "markdown", specifier = "==3.10.3" },
1341
1341
  { name = "mdutils", specifier = "==1.8.1" },
@@ -1361,11 +1361,11 @@ dev = [{ name = "pre-commit", specifier = ">=4.3.0" }]
1361
1361
 
1362
1362
  [[package]]
1363
1363
  name = "soupsieve"
1364
- version = "2.8.4"
1364
+ version = "2.9.2"
1365
1365
  source = { registry = "https://pypi.org/simple" }
1366
- sdist = { url = "https://files.pythonhosted.org/packages/47/2c/0a5f6f8ee0d5589e48c7640213ed5175d52cf540a06725b628cc1a45d6ce/soupsieve-2.8.4.tar.gz", hash = "sha256:e121fd02e975c695e4e9e8774a5ee35d74714b59307868dcc5319ad2d9e3328e", size = 121110, upload-time = "2026-05-24T13:55:57.154Z" }
1366
+ sdist = { url = "https://files.pythonhosted.org/packages/69/99/a6ca3beb3ccacb41fb3321d8a60e5566f9e6467601ef8eba6a17e1b89778/soupsieve-2.9.2.tar.gz", hash = "sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74", size = 122445, upload-time = "2026-08-07T00:57:24.801Z" }
1367
1367
  wheels = [
1368
- { url = "https://files.pythonhosted.org/packages/5e/f5/0c41cb68dcae6b7de4fac4188a3a9589e21fb31df21ea3a2e888db95e6c9/soupsieve-2.8.4-py3-none-any.whl", hash = "sha256:e7e6b0769c8f51ed59acab6e994b00621096cfb1c640a7509295987388fbaf65", size = 37304, upload-time = "2026-05-24T13:55:55.406Z" },
1368
+ { url = "https://files.pythonhosted.org/packages/eb/dc/ad025c1ee131eba60c69f4dd5779b18fcf1e6b21a343e2162a84d5d133c7/soupsieve-2.9.2-py3-none-any.whl", hash = "sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823", size = 37370, upload-time = "2026-08-07T00:57:23.524Z" },
1369
1369
  ]
1370
1370
 
1371
1371
  [[package]]
File without changes
File without changes
File without changes