http-api-tool 1.1.1__tar.gz → 1.1.2__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 (47) hide show
  1. http_api_tool-1.1.2/.aislop/config.yml +5 -0
  2. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.editorconfig +2 -2
  3. http_api_tool-1.1.2/.github/actionlint.yaml +12 -0
  4. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/workflows/build-test-release.yaml +23 -23
  5. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/workflows/build-test.yaml +41 -58
  6. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/workflows/clear-action-cache.yaml +1 -1
  7. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/workflows/codeql.yml +1 -1
  8. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/workflows/openssf-scorecard.yaml +3 -1
  9. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/workflows/release-drafter.yaml +2 -2
  10. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/workflows/security-scans.yaml +6 -2
  11. http_api_tool-1.1.2/.gitlint +30 -0
  12. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.pre-commit-config.yaml +47 -22
  13. http_api_tool-1.1.2/AGENTS.md +43 -0
  14. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/PKG-INFO +1 -1
  15. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/action.yaml +1 -1
  16. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/pyproject.toml +9 -0
  17. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/_version.py +2 -2
  18. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/uv.lock +20 -7
  19. http_api_tool-1.1.1/.gitlint +0 -37
  20. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.actrc +0 -0
  21. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.codespell +0 -0
  22. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.dockerignore +0 -0
  23. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/cache-config.yaml +0 -0
  24. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/dependabot.yml +0 -0
  25. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.gitignore +0 -0
  26. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.readthedocs.yml +0 -0
  27. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.yamllint +0 -0
  28. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/CHANGELOG-v0.2.0.md +0 -0
  29. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/LICENSE +0 -0
  30. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/LICENSES/Apache-2.0.txt +0 -0
  31. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/README.md +0 -0
  32. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/REUSE.toml +0 -0
  33. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/SECURITY.md +0 -0
  34. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/UV-QUICK-REFERENCE.md +0 -0
  35. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/docker/Containerfile +0 -0
  36. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/scripts/check-pip-security.py +0 -0
  37. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/scripts/generate_requirements.py +0 -0
  38. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/sonar-project.properties +0 -0
  39. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/__init__.py +0 -0
  40. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/__main__.py +0 -0
  41. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/cli.py +0 -0
  42. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/curl_client.py +0 -0
  43. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/reporting.py +0 -0
  44. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/sanitize.py +0 -0
  45. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/validation.py +0 -0
  46. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/verifier.py +0 -0
  47. {http_api_tool-1.1.1 → http_api_tool-1.1.2}/tests/test_http_api_tool.py +0 -0
@@ -0,0 +1,5 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2026 The Linux Foundation
3
+
4
+ ci:
5
+ failBelow: 100
@@ -13,11 +13,11 @@ indent_size = 4
13
13
  [*.{json,yaml,yml}]
14
14
  indent_size = 2
15
15
 
16
- [*.markdown]
16
+ [*.{md,markdown}]
17
17
  max_line_length = 80
18
18
 
19
19
  [*.py]
20
- max_line_legth = 120
20
+ max_line_length = 120
21
21
 
22
22
  [*.sh]
23
23
  max_line_length = 80
@@ -0,0 +1,12 @@
1
+ ---
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ # SPDX-FileCopyrightText: 2025 The Linux Foundation
4
+
5
+ paths:
6
+ .github/workflows/build-test.yaml:
7
+ ignore:
8
+ # actionlint v1.17.0 rejects a bare '$/' (an action at the repository
9
+ # root), which GitHub accepts and runs. The ignore also skips input and
10
+ # output checks for those steps; drop it once a release with
11
+ # kjanat/actionlint#200 is pinned (actions-template#253).
12
+ - 'specifying action "\$/" in invalid format because path is missing'
@@ -32,7 +32,7 @@ jobs:
32
32
  timeout-minutes: 5
33
33
  steps:
34
34
  # yamllint disable-line rule:line-length
35
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
35
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
36
36
  with:
37
37
  egress-policy: audit
38
38
 
@@ -45,7 +45,7 @@ jobs:
45
45
  - name: "Gather repository metadata"
46
46
  id: repo-metadata
47
47
  # yamllint disable-line rule:line-length
48
- uses: lfreleng-actions/repository-metadata-action@8d17362fe9a656744433f3dec7fc60f14b23f858 # v0.2.6
48
+ uses: lfreleng-actions/repository-metadata-action@847400e0d0b34cc88a572fa9575accd80401b796 # v0.3.1
49
49
  with:
50
50
  github_token: ${{ secrets.GITHUB_TOKEN }}
51
51
  github_summary: 'true'
@@ -64,7 +64,7 @@ jobs:
64
64
  steps:
65
65
  # Harden the runner used by this workflow
66
66
  # yamllint disable-line rule:line-length
67
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
67
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
68
68
  with:
69
69
  egress-policy: 'audit'
70
70
 
@@ -79,7 +79,7 @@ jobs:
79
79
  - name: 'Verify pushed tag'
80
80
  id: 'tag-validate'
81
81
  # yamllint disable-line rule:line-length
82
- uses: lfreleng-actions/tag-validate-action@b2865c287f732486e12dfdfb75aef0692b024608 # v1.1.2
82
+ uses: lfreleng-actions/tag-validate-action@63470621b8ebc5c4fc86ebb616727dd0a7285dd9 # v1.1.7
83
83
  with:
84
84
  token: "${{ secrets.GITHUB_TOKEN }}"
85
85
  require_type: 'semver'
@@ -132,7 +132,7 @@ jobs:
132
132
  steps:
133
133
  # Harden the runner used by this workflow
134
134
  # yamllint disable-line rule:line-length
135
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
135
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
136
136
  with:
137
137
  egress-policy: 'audit'
138
138
 
@@ -144,7 +144,7 @@ jobs:
144
144
  - name: 'Build Python project'
145
145
  id: 'python-build'
146
146
  # yamllint disable-line rule:line-length
147
- uses: lfreleng-actions/python-build-action@97cf36d2a5914c94761408545d154c983024de1d # v2.0.0
147
+ uses: lfreleng-actions/python-build-action@1a1d011cd71e781f9b7896fc9a8c5653406a7758 # v2.1.0
148
148
  with:
149
149
  sigstore_sign: true
150
150
  attestations: true
@@ -163,7 +163,7 @@ jobs:
163
163
  steps:
164
164
  # Harden the runner used by this workflow
165
165
  # yamllint disable-line rule:line-length
166
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
166
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
167
167
  with:
168
168
  egress-policy: 'audit'
169
169
 
@@ -174,7 +174,7 @@ jobs:
174
174
 
175
175
  - name: 'Test Python project [PYTEST]'
176
176
  # yamllint disable-line rule:line-length
177
- uses: lfreleng-actions/python-test-action@4129c285f63e4d004b9e615b881f44cd63ba5f45 # v1.2.0
177
+ uses: lfreleng-actions/python-test-action@88506b4bba4d2acd670ea3cc0bb6f976e0391d24 # v1.3.0
178
178
  with:
179
179
  python_version: "${{ matrix.python-version }}"
180
180
 
@@ -192,7 +192,7 @@ jobs:
192
192
  steps:
193
193
  # Harden the runner used by this workflow
194
194
  # yamllint disable-line rule:line-length
195
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
195
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
196
196
  with:
197
197
  egress-policy: 'audit'
198
198
 
@@ -203,7 +203,7 @@ jobs:
203
203
 
204
204
  - name: 'Audit Python project'
205
205
  # yamllint disable-line rule:line-length
206
- uses: lfreleng-actions/python-audit-action@b0f486bd612f394d36e1cb7068a608525bcc9b09 # v0.4.0
206
+ uses: lfreleng-actions/python-audit-action@f823e631b562f7632730ab36ba0b59a724350d88 # v0.5.1
207
207
  with:
208
208
  python_version: "${{ matrix.python-version }}"
209
209
  permit_fail: "${{ vars.NO_BLOCK_AUDIT_FAIL == 'true' }}"
@@ -218,7 +218,7 @@ jobs:
218
218
  steps:
219
219
  # Harden the runner used by this workflow
220
220
  # yamllint disable-line rule:line-length
221
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
221
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
222
222
  with:
223
223
  egress-policy: 'audit'
224
224
 
@@ -230,7 +230,7 @@ jobs:
230
230
  - name: "Generate SBOM"
231
231
  id: sbom
232
232
  # yamllint disable-line rule:line-length
233
- uses: lfreleng-actions/python-sbom-action@60648e3351a48617d40f68ccb1f143e050f74c96 # v0.1.1
233
+ uses: lfreleng-actions/python-sbom-action@a849d7190403165d437f2b8d29bc17a4894728f7 # v0.1.3
234
234
  with:
235
235
  include_dev: "false"
236
236
  sbom_format: "both"
@@ -247,7 +247,7 @@ jobs:
247
247
 
248
248
  - name: "Security scan with Grype (SARIF)"
249
249
  # yamllint disable-line rule:line-length
250
- uses: anchore/scan-action@e1165082ffb1fe366ebaf02d8526e7c4989ea9d2 # v7.4.0
250
+ uses: anchore/scan-action@27805bf3b4e84b4a5c980df22ed233c00390a439 # v7.4.2
251
251
  id: grype-sarif
252
252
  # The first Grype scan should not abort the job on failure so that
253
253
  # subsequent steps can collect artefacts and display human-readable
@@ -261,7 +261,7 @@ jobs:
261
261
 
262
262
  - name: "Security scan with Grype (Text/Table)"
263
263
  # yamllint disable-line rule:line-length
264
- uses: anchore/scan-action@e1165082ffb1fe366ebaf02d8526e7c4989ea9d2 # v7.4.0
264
+ uses: anchore/scan-action@27805bf3b4e84b4a5c980df22ed233c00390a439 # v7.4.2
265
265
  id: grype-table
266
266
  if: always()
267
267
  with:
@@ -345,7 +345,7 @@ jobs:
345
345
  steps:
346
346
  # Harden the runner used by this workflow
347
347
  # yamllint disable-line rule:line-length
348
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
348
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
349
349
  with:
350
350
  egress-policy: 'audit'
351
351
 
@@ -370,7 +370,7 @@ jobs:
370
370
  steps:
371
371
  # Harden the runner used by this workflow
372
372
  # yamllint disable-line rule:line-length
373
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
373
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
374
374
  with:
375
375
  egress-policy: 'audit'
376
376
 
@@ -382,7 +382,7 @@ jobs:
382
382
  # Set up Docker Buildx
383
383
  - name: Set up Docker Buildx
384
384
  # yamllint disable-line rule:line-length
385
- uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0
385
+ uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
386
386
 
387
387
  # Login to GitHub Container Registry
388
388
  - name: Login to Container Registry
@@ -414,7 +414,7 @@ jobs:
414
414
  # Build and push image with comprehensive caching
415
415
  - name: Build and push Docker image
416
416
  # yamllint disable-line rule:line-length
417
- uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
417
+ uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
418
418
  with:
419
419
  context: .
420
420
  file: ./docker/Containerfile
@@ -457,7 +457,7 @@ jobs:
457
457
  steps:
458
458
  # Harden the runner used by this workflow
459
459
  # yamllint disable-line rule:line-length
460
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
460
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
461
461
  with:
462
462
  egress-policy: 'audit'
463
463
 
@@ -495,7 +495,7 @@ jobs:
495
495
  steps:
496
496
  # Harden the runner used by this workflow
497
497
  # yamllint disable-line rule:line-length
498
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
498
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
499
499
  with:
500
500
  egress-policy: 'audit'
501
501
 
@@ -513,7 +513,7 @@ jobs:
513
513
 
514
514
  - name: 'Attach build artefacts to release'
515
515
  # yamllint disable-line rule:line-length
516
- uses: lfreleng-actions/release-assets-action@22a6302f3d1775e4a192c45235cc7833a2781b12 # v0.1.1
516
+ uses: lfreleng-actions/release-assets-action@51e2955cf9aeab3731efd7cc4605aa2847e7d8e2 # v0.1.3
517
517
  with:
518
518
  asset_paths: '["${{ needs.python-build.outputs.artefact_path }}/**"]'
519
519
  release_tag: "${{ needs.tag-validate.outputs.tag }}"
@@ -535,7 +535,7 @@ jobs:
535
535
  steps:
536
536
  # Harden the runner used by this workflow
537
537
  # yamllint disable-line rule:line-length
538
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
538
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
539
539
  with:
540
540
  egress-policy: 'audit'
541
541
 
@@ -566,7 +566,7 @@ jobs:
566
566
  id: 'promote-release'
567
567
  if: steps.check-promoted.outputs.already_promoted == 'false'
568
568
  # yamllint disable-line rule:line-length
569
- uses: lfreleng-actions/draft-release-promote-action@072990900b99030363d81d4131c2bf2855f07df0 # v0.1.4
569
+ uses: lfreleng-actions/draft-release-promote-action@e420b392557c9b1eea642f0d54dec4ff39086d5f # v0.1.5
570
570
  with:
571
571
  token: "${{ secrets.GITHUB_TOKEN }}"
572
572
  tag: "${{ needs.tag-validate.outputs.tag }}"
@@ -76,7 +76,7 @@ jobs:
76
76
  steps:
77
77
  # Harden the runner
78
78
  - name: Harden Runner
79
- uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
79
+ uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
80
80
  with:
81
81
  egress-policy: audit
82
82
 
@@ -87,12 +87,12 @@ jobs:
87
87
 
88
88
  # Set up Docker Buildx with caching
89
89
  - name: Set up Docker Buildx
90
- uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0
90
+ uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
91
91
 
92
92
  # Build Docker image with registry cache
93
93
  - name: Build Docker image
94
94
  id: build
95
- uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
95
+ uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
96
96
  with:
97
97
  context: .
98
98
  file: ./docker/Containerfile
@@ -130,14 +130,9 @@ jobs:
130
130
  contents: read
131
131
 
132
132
  steps:
133
- - name: Checkout repository
134
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
135
- with:
136
- persist-credentials: false
137
-
138
133
  # Set up go-httpbin for testing
139
134
  - name: Setup go-httpbin HTTPS service
140
- uses: lfreleng-actions/go-httpbin-action@8b66d1d684264a26f4b087c94485aeb2be45cea7 # v0.1.5
135
+ uses: lfreleng-actions/go-httpbin-action@b0fcc716270b4975172449a293173e679773d17e # v0.1.6
141
136
  id: go-httpbin
142
137
  with:
143
138
  debug: 'true'
@@ -145,7 +140,7 @@ jobs:
145
140
 
146
141
  # Test 1: Basic GET request
147
142
  - name: Test Basic GET request
148
- uses: ./
143
+ uses: $/
149
144
  with:
150
145
  url: 'https://${{ steps.go-httpbin.outputs.host-gateway-ip }}:8080/get'
151
146
  ca_bundle_path: '${{ steps.go-httpbin.outputs.ca-cert-path }}'
@@ -154,7 +149,7 @@ jobs:
154
149
 
155
150
  # Test 2: POST request with JSON
156
151
  - name: Test POST request with JSON
157
- uses: ./
152
+ uses: $/
158
153
  with:
159
154
  url: 'https://${{ steps.go-httpbin.outputs.host-gateway-ip }}:8080/post'
160
155
  http_method: 'POST'
@@ -166,7 +161,7 @@ jobs:
166
161
 
167
162
  # Test 3: Custom headers
168
163
  - name: Test Custom headers
169
- uses: ./
164
+ uses: $/
170
165
  with:
171
166
  url: 'https://${{ steps.go-httpbin.outputs.host-gateway-ip }}:8080/headers'
172
167
  request_headers: '{"X-Test-Header": "test-value", "X-API-Key": "secret123"}'
@@ -176,7 +171,7 @@ jobs:
176
171
 
177
172
  # Test 4: Error handling (404)
178
173
  - name: Test Error handling (404)
179
- uses: ./
174
+ uses: $/
180
175
  with:
181
176
  url: 'https://${{ steps.go-httpbin.outputs.host-gateway-ip }}:8080/status/404'
182
177
  ca_bundle_path: '${{ steps.go-httpbin.outputs.ca-cert-path }}'
@@ -185,7 +180,7 @@ jobs:
185
180
 
186
181
  # Test 5: Error handling (500)
187
182
  - name: Test Error handling (500)
188
- uses: ./
183
+ uses: $/
189
184
  with:
190
185
  url: 'https://${{ steps.go-httpbin.outputs.host-gateway-ip }}:8080/status/500'
191
186
  ca_bundle_path: '${{ steps.go-httpbin.outputs.ca-cert-path }}'
@@ -208,7 +203,7 @@ jobs:
208
203
  steps:
209
204
  # Harden the runner
210
205
  - name: Harden Runner
211
- uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
206
+ uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
212
207
  with:
213
208
  egress-policy: audit
214
209
 
@@ -219,7 +214,7 @@ jobs:
219
214
 
220
215
  # Set up Docker Buildx
221
216
  - name: Set up Docker Buildx
222
- uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0
217
+ uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
223
218
 
224
219
  # Login to GitHub Container Registry
225
220
  - name: Login to Container Registry
@@ -246,7 +241,7 @@ jobs:
246
241
 
247
242
  # Build and push image with comprehensive caching
248
243
  - name: Build and push Docker image
249
- uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
244
+ uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
250
245
  with:
251
246
  context: .
252
247
  file: ./docker/Containerfile
@@ -290,7 +285,7 @@ jobs:
290
285
  GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
291
286
  steps:
292
287
  # Harden the runner used by this workflow
293
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
288
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
294
289
  with:
295
290
  egress-policy: 'audit'
296
291
 
@@ -324,7 +319,7 @@ jobs:
324
319
  - name: 'Build Python project'
325
320
  id: python-build
326
321
  # yamllint disable-line rule:line-length
327
- uses: lfreleng-actions/python-build-action@97cf36d2a5914c94761408545d154c983024de1d # v2.0.0
322
+ uses: lfreleng-actions/python-build-action@1a1d011cd71e781f9b7896fc9a8c5653406a7758 # v2.1.0
328
323
 
329
324
  # Python tests with matrix strategy (after container pipeline)
330
325
  python-tests:
@@ -340,7 +335,7 @@ jobs:
340
335
  timeout-minutes: 12
341
336
  steps:
342
337
  # Harden the runner used by this workflow
343
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
338
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
344
339
  with:
345
340
  egress-policy: audit
346
341
 
@@ -373,7 +368,7 @@ jobs:
373
368
 
374
369
  - name: "Python tests [pytest] ${{ matrix.python-version }}"
375
370
  # yamllint disable-line rule:line-length
376
- uses: lfreleng-actions/python-test-action@4129c285f63e4d004b9e615b881f44cd63ba5f45 # v1.2.0
371
+ uses: lfreleng-actions/python-test-action@88506b4bba4d2acd670ea3cc0bb6f976e0391d24 # v1.3.0
377
372
  with:
378
373
  python_version: ${{ matrix.python-version }}
379
374
 
@@ -391,7 +386,7 @@ jobs:
391
386
  timeout-minutes: 10
392
387
  steps:
393
388
  # Harden the runner used by this workflow
394
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
389
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
395
390
  with:
396
391
  egress-policy: 'audit'
397
392
 
@@ -424,7 +419,7 @@ jobs:
424
419
 
425
420
  - name: "Audit dependencies ${{ matrix.python-version }}"
426
421
  # yamllint disable-line rule:line-length
427
- uses: lfreleng-actions/python-audit-action@b0f486bd612f394d36e1cb7068a608525bcc9b09 # v0.4.0
422
+ uses: lfreleng-actions/python-audit-action@f823e631b562f7632730ab36ba0b59a724350d88 # v0.5.1
428
423
  with:
429
424
  python_version: "${{ matrix.python-version }}"
430
425
 
@@ -439,7 +434,7 @@ jobs:
439
434
  timeout-minutes: 15
440
435
  steps:
441
436
  # Harden the runner used by this workflow
442
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
437
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
443
438
  with:
444
439
  egress-policy: 'audit'
445
440
 
@@ -471,7 +466,7 @@ jobs:
471
466
  uv-cli-${{ runner.os }}-
472
467
 
473
468
  - name: Install UV
474
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
469
+ uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
475
470
 
476
471
  - name: Install project dependencies
477
472
  run: |
@@ -488,7 +483,7 @@ jobs:
488
483
  # Start go-httpbin service for testing
489
484
  - name: Setup go-httpbin service
490
485
  id: go-httpbin
491
- uses: lfreleng-actions/go-httpbin-action@8b66d1d684264a26f4b087c94485aeb2be45cea7 # v0.1.5
486
+ uses: lfreleng-actions/go-httpbin-action@b0fcc716270b4975172449a293173e679773d17e # v0.1.6
492
487
  with:
493
488
  port: '8080'
494
489
  debug: 'true'
@@ -566,24 +561,20 @@ jobs:
566
561
  timeout-minutes: 10
567
562
  steps:
568
563
  # Harden the runner used by this workflow
569
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
564
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
570
565
  with:
571
566
  egress-policy: 'audit'
572
567
 
573
- - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
574
- with:
575
- persist-credentials: false
576
-
577
568
  # Start go-httpbin service for testing
578
569
  - name: Setup go-httpbin service
579
570
  id: go-httpbin
580
- uses: lfreleng-actions/go-httpbin-action@8b66d1d684264a26f4b087c94485aeb2be45cea7 # v0.1.5
571
+ uses: lfreleng-actions/go-httpbin-action@b0fcc716270b4975172449a293173e679773d17e # v0.1.6
581
572
  with:
582
573
  port: '8080'
583
574
  debug: 'true'
584
575
 
585
576
  - name: Test GitHub Action (local)
586
- uses: ./
577
+ uses: $/
587
578
  with:
588
579
  url: '${{ steps.go-httpbin.outputs.service-url }}/get'
589
580
  service_name: 'HTTPBin Test Service'
@@ -593,7 +584,7 @@ jobs:
593
584
  ca_bundle_path: '${{ steps.go-httpbin.outputs.ca-cert-path }}'
594
585
 
595
586
  - name: Test GitHub Action with POST
596
- uses: ./
587
+ uses: $/
597
588
  with:
598
589
  url: '${{ steps.go-httpbin.outputs.service-url }}/post'
599
590
  service_name: 'HTTPBin POST Test'
@@ -604,7 +595,7 @@ jobs:
604
595
  ca_bundle_path: '${{ steps.go-httpbin.outputs.ca-cert-path }}'
605
596
 
606
597
  - name: Test GitHub Action error handling
607
- uses: ./
598
+ uses: $/
608
599
  continue-on-error: true
609
600
  with:
610
601
  url: 'https://localhost:9999/nonexistent'
@@ -627,18 +618,14 @@ jobs:
627
618
  timeout-minutes: 10
628
619
  steps:
629
620
  # Harden the runner used by this workflow
630
- - uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
621
+ - uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
631
622
  with:
632
623
  egress-policy: 'audit'
633
624
 
634
- - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
635
- with:
636
- persist-credentials: false
637
-
638
625
  # Start go-httpbin service for testing
639
626
  - name: Setup go-httpbin service
640
627
  id: go-httpbin
641
- uses: lfreleng-actions/go-httpbin-action@8b66d1d684264a26f4b087c94485aeb2be45cea7 # v0.1.5
628
+ uses: lfreleng-actions/go-httpbin-action@b0fcc716270b4975172449a293173e679773d17e # v0.1.6
642
629
  with:
643
630
  port: '8080'
644
631
  debug: 'true'
@@ -669,7 +656,7 @@ jobs:
669
656
  STEPS_GO_HTTPBIN_OUTPUTS_SERVICE_URL: ${{ steps.go-httpbin.outputs.service-url }}
670
657
 
671
658
  - name: Test uvx deployment with host URL
672
- uses: ./
659
+ uses: $/
673
660
  with:
674
661
  deploy: 'uvx'
675
662
  url: '${{ steps.test-urls.outputs.host-url }}/get'
@@ -686,7 +673,7 @@ jobs:
686
673
  echo "UVX runs on the host, so it can access services via loopback interface"
687
674
 
688
675
  - name: Test docker deployment with gateway URL
689
- uses: ./
676
+ uses: $/
690
677
  with:
691
678
  deploy: 'docker'
692
679
  url: '${{ steps.test-urls.outputs.gateway-url }}/get'
@@ -704,7 +691,7 @@ jobs:
704
691
 
705
692
 
706
693
  - name: Test uvx with POST request
707
- uses: ./
694
+ uses: $/
708
695
  with:
709
696
  deploy: 'uvx'
710
697
  url: '${{ steps.test-urls.outputs.host-url }}/post'
@@ -743,25 +730,21 @@ jobs:
743
730
  steps:
744
731
  # Harden the runner used by this workflow
745
732
  - name: Harden Runner
746
- uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
733
+ uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
747
734
  with:
748
735
  egress-policy: audit
749
736
 
750
- - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
751
- with:
752
- persist-credentials: false
753
-
754
737
  # Start go-httpbin service for testing
755
738
  - name: Setup go-httpbin service
756
739
  id: go-httpbin
757
- uses: lfreleng-actions/go-httpbin-action@8b66d1d684264a26f4b087c94485aeb2be45cea7 # v0.1.5
740
+ uses: lfreleng-actions/go-httpbin-action@b0fcc716270b4975172449a293173e679773d17e # v0.1.6
758
741
  with:
759
742
  port: '8080'
760
743
  debug: 'true'
761
744
 
762
745
  # Test Docker integration via GitHub Action (no Docker CLI dependency)
763
746
  - name: Test Docker integration via GitHub Action
764
- uses: ./
747
+ uses: $/
765
748
  with:
766
749
  url: '${{ steps.go-httpbin.outputs.service-url }}/get'
767
750
  service_name: 'Docker Integration Test (PR)'
@@ -772,7 +755,7 @@ jobs:
772
755
 
773
756
  # Test additional Docker integration scenarios via GitHub Action
774
757
  - name: Test Docker integration with POST
775
- uses: ./
758
+ uses: $/
776
759
  with:
777
760
  url: '${{ steps.go-httpbin.outputs.service-url }}/post'
778
761
  service_name: 'Docker Integration POST Test (PR)'
@@ -785,7 +768,7 @@ jobs:
785
768
 
786
769
  # Test Docker integration with custom headers
787
770
  - name: Test Docker integration with headers
788
- uses: ./
771
+ uses: $/
789
772
  with:
790
773
  url: '${{ steps.go-httpbin.outputs.service-url }}/headers'
791
774
  service_name: 'Docker Integration Headers Test (PR)'
@@ -814,7 +797,7 @@ jobs:
814
797
  steps:
815
798
  # Harden the runner used by this workflow
816
799
  - name: Harden Runner
817
- uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
800
+ uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
818
801
  with:
819
802
  egress-policy: audit
820
803
 
@@ -824,7 +807,7 @@ jobs:
824
807
 
825
808
  # Set up Docker Buildx
826
809
  - name: Set up Docker Buildx
827
- uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0
810
+ uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
828
811
 
829
812
  # Login to Container Registry
830
813
  - name: Login to Container Registry
@@ -846,7 +829,7 @@ jobs:
846
829
  # Start go-httpbin service for testing
847
830
  - name: Setup go-httpbin service
848
831
  id: go-httpbin
849
- uses: lfreleng-actions/go-httpbin-action@8b66d1d684264a26f4b087c94485aeb2be45cea7 # v0.1.5
832
+ uses: lfreleng-actions/go-httpbin-action@b0fcc716270b4975172449a293173e679773d17e # v0.1.6
850
833
  with:
851
834
  port: '8080'
852
835
  debug: 'true'
@@ -889,7 +872,7 @@ jobs:
889
872
  steps:
890
873
  # Harden the runner
891
874
  - name: Harden Runner
892
- uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
875
+ uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
893
876
  with:
894
877
  egress-policy: audit
895
878
 
@@ -922,7 +905,7 @@ jobs:
922
905
 
923
906
  # Install UV
924
907
  - name: Install UV
925
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
908
+ uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
926
909
 
927
910
  # Install project dependencies with dev extras (includes bandit)
928
911
  - name: Install project dependencies
@@ -51,7 +51,7 @@ jobs:
51
51
  permissions:
52
52
  actions: write # list and delete repository Actions caches
53
53
  # yamllint disable-line rule:line-length
54
- uses: lfreleng-actions/generic-workflows/.github/workflows/clear-action-cache.yaml@007258a132e4ba5358a20a5c0a902fa04de3a045 # v0.0.4
54
+ uses: lfreleng-actions/generic-workflows/.github/workflows/clear-action-cache.yaml@42ee0a60963eede4169a7347f62da102bfc3b9b5 # v0.4.0
55
55
  with:
56
56
  key_pattern: ${{ inputs.key_pattern }}
57
57
  ref_filter: ${{ inputs.ref_filter }}
@@ -25,7 +25,7 @@ jobs:
25
25
  scan:
26
26
  name: 'Audit Repository'
27
27
  # yamllint disable-line rule:line-length
28
- uses: lfit/releng-reusable-workflows/.github/workflows/reuse-python-codeql.yaml@f7aae218f1fa0257e3dcd19f5c7d3f88f482f266 # v0.10.1
28
+ uses: lfit/releng-reusable-workflows/.github/workflows/reuse-python-codeql.yaml@87eacd1f8322263ebbc1411ce2ea82bab10ed091 # v0.10.3
29
29
  permissions:
30
30
  security-events: write # Upload CodeQL results to code-scanning
31
31
  packages: read # Fetch internal or private CodeQL packs
@@ -28,7 +28,9 @@ jobs:
28
28
  openssf-scorecard:
29
29
  name: "OpenSSF Scorecard"
30
30
  # yamllint disable-line rule:line-length
31
- uses: lfit/releng-reusable-workflows/.github/workflows/reuse-openssf-scorecard.yaml@f7aae218f1fa0257e3dcd19f5c7d3f88f482f266 # v0.10.1
31
+ uses: lfit/releng-reusable-workflows/.github/workflows/reuse-openssf-scorecard.yaml@87eacd1f8322263ebbc1411ce2ea82bab10ed091 # v0.10.3
32
+ # Scorecard uses no cache; deny writes under branch_protection_rule
33
+ cache-mode: read
32
34
  permissions:
33
35
  contents: read # Read repository contents (checkout, etc.)
34
36
  # yamllint disable-line rule:line-length
@@ -28,14 +28,14 @@ jobs:
28
28
  # organisation's .github repository and publish it as
29
29
  # $CONNECTION_ALLOW_LIST for the harden-runner step below.
30
30
  # yamllint disable-line rule:line-length
31
- - uses: lfreleng-actions/harden-runner-block-action@6db537b3e6d060c3287c5a3ce2c28b55b0af330d # v0.2.1
31
+ - uses: lfreleng-actions/harden-runner-block-action@a32eb064a1188f6b0f15d2c0c0381efe54b0dd22 # v0.12.2
32
32
  with:
33
33
  config: '@18d9c4446bea555d0783e850f6d295f844fe8f67' # v0.1.1
34
34
 
35
35
  # Harden the runner with the just-loaded allow-list.
36
36
  - name: 'Harden runner (block)'
37
37
  # yamllint disable-line rule:line-length
38
- uses: step-security/harden-runner@b09bb98e06d4d774595224525879c09bc6e98c40 # v2.20.1
38
+ uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
39
39
  with:
40
40
  egress-policy: 'block'
41
41
  allowed-endpoints: >
@@ -34,7 +34,9 @@ jobs:
34
34
  permissions:
35
35
  contents: read # Reusable scan job checks out the repo
36
36
  # yamllint disable-line rule:line-length
37
- uses: lfit/releng-reusable-workflows/.github/workflows/reuse-sonatype-lifecycle.yaml@f7aae218f1fa0257e3dcd19f5c7d3f88f482f266 # v0.10.1
37
+ uses: lfit/releng-reusable-workflows/.github/workflows/reuse-sonatype-lifecycle.yaml@87eacd1f8322263ebbc1411ce2ea82bab10ed091 # v0.10.3
38
+ # Neither scan writes a cache; deny writes under branch_protection_rule
39
+ cache-mode: read
38
40
  secrets:
39
41
  NEXUS_IQ_PASSWORD: ${{ secrets.NEXUS_IQ_PASSWORD }}
40
42
 
@@ -42,7 +44,9 @@ jobs:
42
44
  sonarqube-cloud:
43
45
  name: "SonarQube Cloud"
44
46
  # yamllint disable-line rule:line-length
45
- uses: lfit/releng-reusable-workflows/.github/workflows/reuse-sonarqube-cloud.yaml@f7aae218f1fa0257e3dcd19f5c7d3f88f482f266 # v0.10.1
47
+ uses: lfit/releng-reusable-workflows/.github/workflows/reuse-sonarqube-cloud.yaml@87eacd1f8322263ebbc1411ce2ea82bab10ed091 # v0.10.3
48
+ # Neither scan writes a cache; deny writes under branch_protection_rule
49
+ cache-mode: read
46
50
  permissions:
47
51
  contents: read # Reusable scan job checks out the repo
48
52
  security-events: write # Upload results to the code-scanning dashboard
@@ -0,0 +1,30 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # SPDX-FileCopyrightText: 2025 The Linux Foundation
3
+
4
+ [general]
5
+ regex-style-search=true
6
+ contrib=contrib-title-conventional-commits,contrib-body-requires-signed-off-by
7
+
8
+ [title-max-length]
9
+ line-length=50
10
+
11
+ # Anchored because gitlint v0.19.1 calls search() for this rule; an
12
+ # unanchored pattern would match anywhere in the title and never fail.
13
+ [title-match-regex]
14
+ regex=^[A-Z][a-zA-Z]*(\([^)]+\))?!?: [A-Z]
15
+
16
+ [body-max-line-length]
17
+ line-length=72
18
+
19
+ [contrib-title-conventional-commits]
20
+ types=Fix,Feat,Chore,Docs,Style,Refactor,Perf,Test,Revert,CI,Build
21
+
22
+ # A DCO trailer cannot be wrapped, so waive B1 for commits carrying one
23
+ # longer than 72 characters. [ignore-body-lines] cannot be used: it
24
+ # would hide the sign-off from the signed-off-by check.
25
+ [ignore-by-body]
26
+ regex=^(?=(Signed-off-by|Co-authored-by): ).{73,}
27
+ ignore=B1
28
+
29
+ [ignore-body-lines]
30
+ regex=(.*)https?://(.*)
@@ -4,19 +4,33 @@
4
4
 
5
5
  ci:
6
6
  autofix_prs: false
7
- skip: [gha-workflow-linter]
7
+ skip:
8
+ - gha-workflow-linter
9
+ - aislop
8
10
  autofix_commit_msg: |
9
- Chore: pre-commit autofixes
11
+ Chore: Pre-commit autofixes
10
12
 
11
13
  Signed-off-by: pre-commit-ci[bot] <pre-commit-ci@users.noreply.github.com>
12
14
  autoupdate_commit_msg: |
13
- Chore: pre-commit autoupdate
15
+ Chore: Pre-commit autoupdate
14
16
 
15
17
  Signed-off-by: pre-commit-ci[bot] <pre-commit-ci@users.noreply.github.com>
16
18
 
19
+ default_install_hook_types: [pre-commit, commit-msg]
20
+ default_stages: [pre-commit]
21
+
17
22
  exclude: "^docs/conf.py"
18
23
 
19
24
  repos:
25
+ - repo: local
26
+ hooks:
27
+ - id: frozen-rev-is-a-release
28
+ name: frozen revs name a release
29
+ language: pygrep
30
+ # yamllint disable-line rule:line-length
31
+ entry: '^\s*rev:\s*\S+\s+#\s*frozen:(?!\s+v?[0-9]+(\.[0-9]+)*(-[0-9]+)?\s*$)'
32
+ files: '^\.pre-commit-config\.yaml$'
33
+
20
34
  - repo: https://github.com/pre-commit/pre-commit-hooks
21
35
  rev: 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c # frozen: v6.0.0
22
36
  hooks:
@@ -40,8 +54,14 @@ repos:
40
54
  - --branch=rc
41
55
  - --branch=production
42
56
 
57
+ - repo: https://github.com/gitleaks/gitleaks
58
+ rev: 2ca41cc1372d1e939a6a879f18cdc19fc1cac1ce # frozen: v8.30.0
59
+ hooks:
60
+ - id: gitleaks
61
+ always_run: true
62
+
43
63
  - repo: https://github.com/jorisroovers/gitlint
44
- rev: acc9d9de6369b76d22cb4167029d2035e8730b98 # frozen: v0.19.1
64
+ rev: acc9d9de6369b76d22cb4167029d2035e8730b98 # frozen: v0.19.1
45
65
  hooks:
46
66
  - id: gitlint
47
67
 
@@ -53,7 +73,7 @@ repos:
53
73
  args: [--config-file=.yamllint]
54
74
 
55
75
  - repo: https://github.com/astral-sh/ruff-pre-commit
56
- rev: 65dbdb59d2f2d9c3bdc343c566821ad3319ddaa3 # frozen: v0.16.3
76
+ rev: f12be1ebaa5351c1fc76472de98db2c3446c8253 # frozen: v0.16.10
57
77
  hooks:
58
78
  - id: ruff
59
79
  files: ^(src|tests|scripts)/.+\.py$
@@ -62,7 +82,7 @@ repos:
62
82
  files: ^(src|tests|scripts)/.+\.py$
63
83
 
64
84
  - repo: https://github.com/pre-commit/mirrors-mypy
65
- rev: 7ff8d35ae36a7d2b968f2f90b4c723e292e594ee # frozen: v2.3.1
85
+ rev: 2834ec6639549dd6796205c8f011dedcd587288b # frozen: v2.4.0
66
86
  hooks:
67
87
  - id: mypy
68
88
  additional_dependencies: [types-pycurl]
@@ -72,18 +92,16 @@ repos:
72
92
  hooks:
73
93
  - id: interrogate
74
94
  args: [--config=pyproject.toml]
75
- # Currently only src contains Python files that need docstrings
76
- # Tests are excluded via pyproject.toml configuration
77
95
  files: ^src/.+\.py$
78
96
 
79
97
  - repo: https://github.com/btford/write-good
80
- rev: ab66ce10136dfad5146e69e70f82a3efac8842c1 # frozen: v1.0.8
98
+ rev: ab66ce10136dfad5146e69e70f82a3efac8842c1 # frozen: v1.0.8
81
99
  hooks:
82
100
  - id: write-good
83
101
  files: "\\.(rst|md|markdown|mdown|mkdn)$"
84
102
 
85
103
  - repo: https://github.com/shellcheck-py/shellcheck-py
86
- rev: 745eface02aef23e168a8afb6b5737818efbea95 # frozen: v0.11.0.1
104
+ rev: a6564f5d57444e123433a5c9af733e3975c77229 # frozen: v0.11.0.1-1
87
105
  hooks:
88
106
  - id: shellcheck
89
107
 
@@ -98,14 +116,11 @@ repos:
98
116
  hooks:
99
117
  - id: reuse
100
118
 
101
- # Replaces: https://github.com/rhysd/actionlint
102
- # Permits actionlint to run both locally and with precommit.ci/GitHub
103
- - repo: https://github.com/Mateusz-Grzelinski/actionlint-py
104
- rev: c04ed26e40637cab1aa9879c693832a9c120fb20 # frozen: v1.7.12.24
119
+ - repo: https://github.com/kjanat/actionlint
120
+ rev: 2da2ceb4af2c7ecc48f5b9311d85080c3971b5f0 # frozen: v1.17.0
105
121
  hooks:
106
- - id: actionlint
122
+ - id: actionlint-shellcheck
107
123
 
108
- # Check for misspellings in documentation files
109
124
  - repo: https://github.com/codespell-project/codespell
110
125
  rev: 57b21406f092110c18776e39b0bda50d37c945c8 # frozen: v2.4.3
111
126
  hooks:
@@ -113,20 +128,30 @@ repos:
113
128
  args: ["--ignore-words=.codespell"]
114
129
 
115
130
  - repo: https://github.com/DetachHead/basedpyright-prek-mirror
116
- rev: 3c94d276aa3005fa1f5a977946c9dc106135c083 # frozen: 1.39.10
131
+ rev: a11caebebdbf797e1e96611123db279b334a7675 # frozen: 1.40.2
117
132
  hooks:
118
133
  - id: basedpyright
119
134
 
120
- - repo: https://github.com/modeseven-lfit/gha-workflow-linter
121
- rev: 7f11ad46be1cd2b3d778428d40fcb09309bb3be5 # frozen: v1.4.1
135
+ - repo: https://github.com/lfreleng-actions/gha-workflow-linter
136
+ rev: b23b60e5884e985320a030e6114032152e2373cd # frozen: v1.7.1
122
137
  hooks:
123
138
  - id: gha-workflow-linter
124
139
  args: [lint, .]
125
140
 
126
- - repo: https://github.com/python-jsonschema/check-jsonschema.git
127
- rev: c4654a7e007c9619a5eb63c39a456572a0fa1851 # frozen: 0.38.0
141
+ - repo: local
142
+ hooks:
143
+ - id: aislop
144
+ name: aislop
145
+ entry: aislop ci --human
146
+ language: node
147
+ additional_dependencies: ["aislop@0.13.1"]
148
+ pass_filenames: false
149
+ always_run: true
150
+
151
+ - repo: https://github.com/python-jsonschema/check-jsonschema
152
+ rev: 4f85d46a92dc17713078e5de73f8a13190edf6fc # frozen: 0.38.2
128
153
  hooks:
129
- # - id: check-github-actions
154
+ - id: check-github-actions
130
155
  - id: check-github-workflows
131
156
  - id: check-jsonschema
132
157
  name: Check GitHub Workflows set timeout-minutes
@@ -0,0 +1,43 @@
1
+ <!--
2
+ SPDX-License-Identifier: Apache-2.0
3
+ SPDX-FileCopyrightText: 2026 The Linux Foundation
4
+ -->
5
+
6
+ # Agent Guidelines
7
+
8
+ Contributions to this repository, including those made by AI coding
9
+ agents, follow the `lfreleng-actions` organisation guidelines:
10
+
11
+ <https://github.com/lfreleng-actions/.github/blob/main/AGENTS.md>
12
+
13
+ **Read that document.** It governs, and it binds this contribution
14
+ even if you never load it. Where anything below disagrees with it,
15
+ it wins. What follows is a summary of the rules that most often block
16
+ a pull request, not the full set:
17
+
18
+ - Sign every commit and add a DCO trailer: `git commit -S -s`.
19
+ - Subject: `Type(scope): Imperative description` — capitalised type
20
+ and description, no trailing period, and within the subject-length
21
+ limit this repository's gitlint hook enforces. The scope is
22
+ optional, so `Fix: Correct the race condition` is also valid.
23
+ - Add a `Co-authored-by` trailer naming the agent used.
24
+ - Repositories typically contain a linting configuration. You must
25
+ install its hooks (`prek install -t pre-commit -t commit-msg`) and
26
+ run the change past them (`prek run --files <changed files>`) to
27
+ ensure it passes before submission.
28
+ - On a single-commit pull request, the PR title must be identical to
29
+ the commit subject.
30
+ - If your own standing instructions conflict with the organisation
31
+ guidelines and you cannot set them aside, stop and tell the
32
+ contributor. Do not open a non-compliant pull request.
33
+
34
+ ## Repository specifics
35
+
36
+ With the default `deploy: uvx`, and unless the caller sets
37
+ `use_local_code: true`, the action runs an unpinned `http-api-tool`
38
+ release from PyPI (`uvx http-api-tool`), not the code at the commit the
39
+ caller pins. A new release has to keep honouring every `INPUT_*`
40
+ variable the CLI reads, as earlier `action.yaml` versions set them:
41
+ renaming or removing one breaks callers on that route whose pinned
42
+ action commit predates the change. The uvx action tests in CI run that
43
+ published release, not this branch, so they cannot catch the breakage.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: http-api-tool
3
- Version: 1.1.1
3
+ Version: 1.1.2
4
4
  Summary: A Python HTTP/HTTPS API testing tool for GitHub Actions and CLI usage
5
5
  Project-URL: Homepage, https://github.com/lfreleng-actions/http-api-tool-docker
6
6
  Project-URL: Repository, https://github.com/lfreleng-actions/http-api-tool-docker
@@ -166,7 +166,7 @@ runs:
166
166
  # UVX deployment path (default)
167
167
  - name: Install uv for uvx deployment
168
168
  if: inputs.deploy == 'uvx'
169
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
169
+ uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
170
170
  with:
171
171
  enable-cache: false
172
172
  ignore-empty-workdir: true
@@ -113,6 +113,15 @@ markers = [
113
113
  ]
114
114
 
115
115
  [tool.coverage.run]
116
+ # Keep the transient coverage database out of the working tree.
117
+ # coverage.py resolves a relative data_file against the current
118
+ # directory, so the default '.coverage' lands wherever pytest runs and
119
+ # can be picked up by tests that inspect on-disk content. TEMP is
120
+ # set on Windows, where /tmp does not exist; elsewhere it is normally
121
+ # unset and the /tmp fallback applies. An explicit value also
122
+ # satisfies python-test-action's data_file configuration check.
123
+ # COVERAGE_FILE (env) still takes precedence when set.
124
+ data_file = "${TEMP-/tmp}/.coverage.http-api-tool-docker"
116
125
  source = ["http_api_tool"]
117
126
  omit = [
118
127
  "*/tests/*",
@@ -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 = '1.1.1'
22
- __version_tuple__ = version_tuple = (1, 1, 1)
21
+ __version__ = version = '1.1.2'
22
+ __version_tuple__ = version_tuple = (1, 1, 2)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -316,7 +316,7 @@ name = "exceptiongroup"
316
316
  version = "1.3.0"
317
317
  source = { registry = "https://pypi.org/simple" }
318
318
  dependencies = [
319
- { name = "typing-extensions", marker = "python_full_version < '3.13'" },
319
+ { name = "typing-extensions" },
320
320
  ]
321
321
  sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" }
322
322
  wheels = [
@@ -711,6 +711,18 @@ wheels = [
711
711
  { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424, upload-time = "2025-09-09T10:57:00.695Z" },
712
712
  ]
713
713
 
714
+ [[package]]
715
+ name = "python-discovery"
716
+ version = "1.6.1"
717
+ source = { registry = "https://pypi.org/simple" }
718
+ dependencies = [
719
+ { name = "filelock" },
720
+ ]
721
+ sdist = { url = "https://files.pythonhosted.org/packages/0c/57/250bd238b966cece44328235eb85290045d059265fdaf7527a3a958123db/python_discovery-1.6.1.tar.gz", hash = "sha256:cf87d3627dfb4412437fdd5b13eae402607722998d21567993aedbc59b23c15e", size = 84338, upload-time = "2026-09-18T01:31:53.971Z" }
722
+ wheels = [
723
+ { url = "https://files.pythonhosted.org/packages/16/7d/e9ffbadfbf89c93848412d04594135c4ae8c1d37d9e053b9c3ed718fabc4/python_discovery-1.6.1-py3-none-any.whl", hash = "sha256:d43fcdef879fe795352bd13ccf8d185ba5a9f86f36cfcd00529f596e737442b3", size = 38664, upload-time = "2026-09-18T01:31:52.448Z" },
724
+ ]
725
+
714
726
  [[package]]
715
727
  name = "pytokens"
716
728
  version = "0.4.1"
@@ -958,24 +970,25 @@ wheels = [
958
970
 
959
971
  [[package]]
960
972
  name = "urllib3"
961
- version = "2.7.0"
973
+ version = "2.8.0"
962
974
  source = { registry = "https://pypi.org/simple" }
963
- sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" }
975
+ sdist = { url = "https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz", hash = "sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63", size = 458972, upload-time = "2026-09-15T19:29:36.253Z" }
964
976
  wheels = [
965
- { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" },
977
+ { url = "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl", hash = "sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3", size = 135717, upload-time = "2026-09-15T19:29:34.577Z" },
966
978
  ]
967
979
 
968
980
  [[package]]
969
981
  name = "virtualenv"
970
- version = "20.36.1"
982
+ version = "21.7.13"
971
983
  source = { registry = "https://pypi.org/simple" }
972
984
  dependencies = [
973
985
  { name = "distlib" },
974
986
  { name = "filelock" },
975
987
  { name = "platformdirs" },
988
+ { name = "python-discovery" },
976
989
  { name = "typing-extensions", marker = "python_full_version < '3.11'" },
977
990
  ]
978
- sdist = { url = "https://files.pythonhosted.org/packages/aa/a3/4d310fa5f00863544e1d0f4de93bddec248499ccf97d4791bc3122c9d4f3/virtualenv-20.36.1.tar.gz", hash = "sha256:8befb5c81842c641f8ee658481e42641c68b5eab3521d8e092d18320902466ba", size = 6032239, upload-time = "2026-01-09T18:21:01.296Z" }
991
+ sdist = { url = "https://files.pythonhosted.org/packages/13/50/c9b84eb106d0db420b9878dac0a386c5791726f127ce20b06897f6e3a1e9/virtualenv-21.7.13.tar.gz", hash = "sha256:0355558b6f33619aab31347e43643b0ebc97f61ea3acf617b2b69e1f8a843d11", size = 5360306, upload-time = "2026-09-18T04:35:49.354Z" }
979
992
  wheels = [
980
- { url = "https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl", hash = "sha256:575a8d6b124ef88f6f51d56d656132389f961062a9177016a50e4f507bbcc19f", size = 6008258, upload-time = "2026-01-09T18:20:59.425Z" },
993
+ { url = "https://files.pythonhosted.org/packages/9a/ce/e74453531b0c49a58d0e8a4f9bab4495705859fee4a4f7de27d58f4a791a/virtualenv-21.7.13-py3-none-any.whl", hash = "sha256:1bea5af7463f59c4719db48fe739579a2a4f569c96f26c086edda85c96da9f59", size = 5328680, upload-time = "2026-09-18T04:35:47.194Z" },
981
994
  ]
@@ -1,37 +0,0 @@
1
- # SPDX-License-Identifier: Apache-2.0
2
- # SPDX-FileCopyrightText: 2025 The Linux Foundation
3
-
4
- # All these sections are optional, edit this file as you like.
5
- [general]
6
- # Ignore certain rules, you can reference them by their id or by their full
7
- # name
8
- # ignore=title-trailing-punctuation, T3
9
-
10
- # verbosity should be a value between 1 and 3, the command line -v flags take
11
- # precedence over this
12
- # verbosity = 2
13
-
14
- # By default gitlint will ignore merge commits. Set to 'false' to disable.
15
- # ignore-merge-commits=true
16
-
17
- # By default gitlint will ignore fixup commits. Set to 'false' to disable.
18
- # ignore-fixup-commits=true
19
-
20
- # By default gitlint will ignore squash commits. Set to 'false' to disable.
21
- # ignore-squash-commits=true
22
-
23
- # Enable debug mode (prints more output). Disabled by default.
24
- # debug=true
25
-
26
- # Set the extra-path where gitlint will search for user defined rules
27
- # See http://jorisroovers.github.io/gitlint/user_defined_rules for details
28
- # extra-path=examples/
29
-
30
- contrib=contrib-title-conventional-commits,contrib-body-requires-signed-off-by
31
-
32
- [contrib-title-conventional-commits]
33
- types=Fix,Feat,Chore,Docs,Style,Refactor,Perf,Test,Revert,CI,Build
34
-
35
- # Disable linting on lines that have URLs on them
36
- [ignore-body-lines]
37
- regex=(.*)https?://(.*)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes