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.
- http_api_tool-1.1.2/.aislop/config.yml +5 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.editorconfig +2 -2
- http_api_tool-1.1.2/.github/actionlint.yaml +12 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/workflows/build-test-release.yaml +23 -23
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/workflows/build-test.yaml +41 -58
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/workflows/clear-action-cache.yaml +1 -1
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/workflows/codeql.yml +1 -1
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/workflows/openssf-scorecard.yaml +3 -1
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/workflows/release-drafter.yaml +2 -2
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/workflows/security-scans.yaml +6 -2
- http_api_tool-1.1.2/.gitlint +30 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.pre-commit-config.yaml +47 -22
- http_api_tool-1.1.2/AGENTS.md +43 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/PKG-INFO +1 -1
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/action.yaml +1 -1
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/pyproject.toml +9 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/_version.py +2 -2
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/uv.lock +20 -7
- http_api_tool-1.1.1/.gitlint +0 -37
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.actrc +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.codespell +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.dockerignore +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/cache-config.yaml +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.github/dependabot.yml +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.gitignore +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.readthedocs.yml +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/.yamllint +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/CHANGELOG-v0.2.0.md +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/LICENSE +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/LICENSES/Apache-2.0.txt +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/README.md +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/REUSE.toml +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/SECURITY.md +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/UV-QUICK-REFERENCE.md +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/docker/Containerfile +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/scripts/check-pip-security.py +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/scripts/generate_requirements.py +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/sonar-project.properties +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/__init__.py +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/__main__.py +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/cli.py +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/curl_client.py +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/reporting.py +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/sanitize.py +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/validation.py +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/src/http_api_tool/verifier.py +0 -0
- {http_api_tool-1.1.1 → http_api_tool-1.1.2}/tests/test_http_api_tool.py +0 -0
|
@@ -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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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:
|
|
7
|
+
skip:
|
|
8
|
+
- gha-workflow-linter
|
|
9
|
+
- aislop
|
|
8
10
|
autofix_commit_msg: |
|
|
9
|
-
Chore:
|
|
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:
|
|
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
|
|
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:
|
|
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:
|
|
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
|
|
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:
|
|
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
|
-
|
|
102
|
-
#
|
|
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:
|
|
131
|
+
rev: a11caebebdbf797e1e96611123db279b334a7675 # frozen: 1.40.2
|
|
117
132
|
hooks:
|
|
118
133
|
- id: basedpyright
|
|
119
134
|
|
|
120
|
-
- repo: https://github.com/
|
|
121
|
-
rev:
|
|
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:
|
|
127
|
-
|
|
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
|
-
|
|
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.
|
|
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@
|
|
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.
|
|
22
|
-
__version_tuple__ = version_tuple = (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"
|
|
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.
|
|
973
|
+
version = "2.8.0"
|
|
962
974
|
source = { registry = "https://pypi.org/simple" }
|
|
963
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
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/
|
|
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 = "
|
|
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/
|
|
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/
|
|
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
|
]
|
http_api_tool-1.1.1/.gitlint
DELETED
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|