http-api-tool 1.1.4__tar.gz → 1.1.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/workflows/build-test.yaml +106 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/workflows/release-drafter.yaml +1 -1
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/workflows/security-scans.yaml +12 -8
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.pre-commit-config.yaml +5 -5
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/PKG-INFO +1 -1
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/action.yaml +10 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/_version.py +2 -2
- http_api_tool-1.1.4/.github/workflows/codeql.yml +0 -35
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.actrc +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.aislop/config.yml +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.codespell +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.dockerignore +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.editorconfig +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/actionlint.yaml +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/cache-config.yaml +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/dependabot.yml +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/workflows/build-test-release.yaml +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/workflows/clear-action-cache.yaml +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/workflows/openssf-scorecard.yaml +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.gitignore +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.gitlint +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.readthedocs.yml +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.yamllint +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/AGENTS.md +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/CHANGELOG-v0.2.0.md +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/LICENSE +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/LICENSES/Apache-2.0.txt +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/README.md +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/REUSE.toml +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/SECURITY.md +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/UV-QUICK-REFERENCE.md +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/docker/Containerfile +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/pyproject.toml +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/scripts/check-pip-security.py +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/scripts/generate_requirements.py +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/sonar-project.properties +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/__init__.py +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/__main__.py +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/cli.py +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/curl_client.py +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/reporting.py +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/sanitize.py +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/validation.py +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/verifier.py +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/tests/test_http_api_tool.py +0 -0
- {http_api_tool-1.1.4 → http_api_tool-1.1.5}/uv.lock +0 -0
|
@@ -655,7 +655,32 @@ jobs:
|
|
|
655
655
|
env:
|
|
656
656
|
STEPS_GO_HTTPBIN_OUTPUTS_SERVICE_URL: ${{ steps.go-httpbin.outputs.service-url }}
|
|
657
657
|
|
|
658
|
+
# setup-uv in the action must neither start an interpreter from the
|
|
659
|
+
# caller's workspace nor read its uv settings. Each planted
|
|
660
|
+
# interpreter records that it ran, and the uv.toml's
|
|
661
|
+
# required-version would fail the action.
|
|
662
|
+
- name: Plant interpreters and uv settings in the workspace
|
|
663
|
+
run: |
|
|
664
|
+
set -euo pipefail
|
|
665
|
+
marker="$RUNNER_TEMP/planted-ran"
|
|
666
|
+
stub() {
|
|
667
|
+
# $0 and $* expand when the stub runs, not here.
|
|
668
|
+
# shellcheck disable=SC2016
|
|
669
|
+
printf '#!/bin/sh\necho "%s: $0 $*" >> "%s"\nexit 1\n' \
|
|
670
|
+
"$1" "$marker" > "$2"
|
|
671
|
+
chmod +x "$2"
|
|
672
|
+
}
|
|
673
|
+
mkdir -p .venv/bin planted
|
|
674
|
+
printf 'home = /usr/bin\nversion_info = 3.12.0\n' > .venv/pyvenv.cfg
|
|
675
|
+
stub venv .venv/bin/python3
|
|
676
|
+
stub venv .venv/bin/python
|
|
677
|
+
stub python-version planted/python3
|
|
678
|
+
echo "$GITHUB_WORKSPACE/planted/python3" > .python-version
|
|
679
|
+
printf '%s\n' 'cache-dir = "/nonexistent/planted-cache"' \
|
|
680
|
+
'required-version = "==0.0.1"' > uv.toml
|
|
681
|
+
|
|
658
682
|
- name: Test uvx deployment with host URL
|
|
683
|
+
id: uvx-get
|
|
659
684
|
uses: $/
|
|
660
685
|
with:
|
|
661
686
|
deploy: 'uvx'
|
|
@@ -703,6 +728,87 @@ jobs:
|
|
|
703
728
|
verify_ssl: 'false'
|
|
704
729
|
debug: 'true'
|
|
705
730
|
|
|
731
|
+
- name: Check uvx results and that no planted interpreter ran
|
|
732
|
+
env:
|
|
733
|
+
HTTP_CODE: ${{ steps.uvx-get.outputs.response_http_code }}
|
|
734
|
+
run: |
|
|
735
|
+
set -euo pipefail
|
|
736
|
+
marker="$RUNNER_TEMP/planted-ran"
|
|
737
|
+
if [[ -e "$marker" ]]; then
|
|
738
|
+
echo "::error::A planted workspace interpreter ran:"
|
|
739
|
+
cat "$marker"
|
|
740
|
+
exit 1
|
|
741
|
+
fi
|
|
742
|
+
if [[ "$HTTP_CODE" != "200" ]]; then
|
|
743
|
+
echo "::error::Unexpected response_http_code: '$HTTP_CODE'"
|
|
744
|
+
exit 1
|
|
745
|
+
fi
|
|
746
|
+
rm -rf .venv planted .python-version uv.toml
|
|
747
|
+
|
|
748
|
+
# The same check with the action checked out inside the workspace
|
|
749
|
+
# ('uses: ./...'), as a caller that vendors it would. The planted
|
|
750
|
+
# files sit in the workspace root, the action directory's parent,
|
|
751
|
+
# where only the step's UV_* settings keep uv from using them.
|
|
752
|
+
- name: Checkout this action into the workspace
|
|
753
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
754
|
+
with:
|
|
755
|
+
path: 'local-action'
|
|
756
|
+
persist-credentials: false
|
|
757
|
+
|
|
758
|
+
- name: Plant interpreters and uv settings above the action
|
|
759
|
+
run: |
|
|
760
|
+
set -euo pipefail
|
|
761
|
+
marker="$RUNNER_TEMP/planted-ran"
|
|
762
|
+
stub() {
|
|
763
|
+
# $0 and $* expand when the stub runs, not here.
|
|
764
|
+
# shellcheck disable=SC2016
|
|
765
|
+
printf '#!/bin/sh\necho "%s: $0 $*" >> "%s"\nexit 1\n' \
|
|
766
|
+
"$1" "$marker" > "$2"
|
|
767
|
+
chmod +x "$2"
|
|
768
|
+
}
|
|
769
|
+
mkdir -p .venv/bin planted
|
|
770
|
+
printf 'home = /usr/bin\nversion_info = 3.12.0\n' > .venv/pyvenv.cfg
|
|
771
|
+
stub venv .venv/bin/python3
|
|
772
|
+
stub venv .venv/bin/python
|
|
773
|
+
stub python-version planted/python3
|
|
774
|
+
echo "$GITHUB_WORKSPACE/planted/python3" > .python-version
|
|
775
|
+
printf '%s\n' 'cache-dir = "/nonexistent/planted-cache"' \
|
|
776
|
+
'required-version = "==0.0.1"' > uv.toml
|
|
777
|
+
|
|
778
|
+
- name: Test uvx deployment from the workspace copy
|
|
779
|
+
id: uvx-local
|
|
780
|
+
# The local path is the point of this step: '$/' would download
|
|
781
|
+
# the action outside the workspace, as the steps above do.
|
|
782
|
+
uses: ./local-action # zizmor: ignore[self-repository]
|
|
783
|
+
with:
|
|
784
|
+
deploy: 'uvx'
|
|
785
|
+
url: '${{ steps.test-urls.outputs.host-url }}/get'
|
|
786
|
+
service_name: 'UVX Local Copy Test'
|
|
787
|
+
expected_http_code: 200
|
|
788
|
+
retries: 3
|
|
789
|
+
initial_sleep_time: 1
|
|
790
|
+
verify_ssl: 'false'
|
|
791
|
+
debug: 'true'
|
|
792
|
+
|
|
793
|
+
- name: Check the workspace copy and that nothing planted ran
|
|
794
|
+
env:
|
|
795
|
+
HTTP_CODE: ${{ steps.uvx-local.outputs.response_http_code }}
|
|
796
|
+
run: |
|
|
797
|
+
set -euo pipefail
|
|
798
|
+
marker="$RUNNER_TEMP/planted-ran"
|
|
799
|
+
if [[ -e "$marker" ]]; then
|
|
800
|
+
echo "::error::A planted workspace interpreter ran:"
|
|
801
|
+
cat "$marker"
|
|
802
|
+
exit 1
|
|
803
|
+
fi
|
|
804
|
+
if [[ "$HTTP_CODE" != "200" ]]; then
|
|
805
|
+
echo "::error::Unexpected response_http_code: '$HTTP_CODE'"
|
|
806
|
+
exit 1
|
|
807
|
+
fi
|
|
808
|
+
# local-action/ stays: the runner reads its action.yaml again
|
|
809
|
+
# for the post-job cleanup of a local action.
|
|
810
|
+
rm -rf .venv planted .python-version uv.toml
|
|
811
|
+
|
|
706
812
|
- name: Verify both deployment modes work
|
|
707
813
|
run: |
|
|
708
814
|
echo "=== Deployment Mode Test Summary ==="
|
|
@@ -28,7 +28,7 @@ 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@2fed66c9c36c4687c31ca349b925b81ec629673f # v0.15.0
|
|
32
32
|
with:
|
|
33
33
|
config: '@6d4a65c5601afd6c2fbe52bda4b0024b132f265d' # v0.19.0
|
|
34
34
|
|
|
@@ -34,24 +34,28 @@ 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:
|
|
37
|
+
uses: lfreleng-actions/security-workflows/.github/workflows/sonatype-lifecycle.yaml@378fcc19ebdf37f17fde4888d4b71c83b21d6cf3 # v0.9.7
|
|
38
|
+
# Nexus IQ cannot read pyproject.toml or uv.lock, so have the lane
|
|
39
|
+
# resolve uv.lock and scan the downloaded artefacts. Python 3.11
|
|
40
|
+
# matches the python:3.11-slim image and the requires-python floor;
|
|
41
|
+
# pinning it stops a new Python release without wheels from breaking
|
|
42
|
+
# resolution.
|
|
43
|
+
with:
|
|
44
|
+
build_type: 'python'
|
|
45
|
+
python_version: '3.11'
|
|
38
46
|
# Neither scan writes a cache; deny writes under branch_protection_rule
|
|
39
47
|
cache-mode: read
|
|
40
48
|
secrets:
|
|
41
|
-
|
|
49
|
+
nexus_iq_password: ${{ secrets.NEXUS_IQ_PASSWORD }}
|
|
42
50
|
|
|
43
51
|
# Scan results are found at: https://sonarcloud.io/login
|
|
44
52
|
sonarqube-cloud:
|
|
45
53
|
name: "SonarQube Cloud"
|
|
46
54
|
# yamllint disable-line rule:line-length
|
|
47
|
-
uses:
|
|
55
|
+
uses: lfreleng-actions/security-workflows/.github/workflows/sonarqube-cloud.yaml@378fcc19ebdf37f17fde4888d4b71c83b21d6cf3 # v0.9.7
|
|
48
56
|
# Neither scan writes a cache; deny writes under branch_protection_rule
|
|
49
57
|
cache-mode: read
|
|
50
58
|
permissions:
|
|
51
59
|
contents: read # Reusable scan job checks out the repo
|
|
52
|
-
security-events: write # Upload results to the code-scanning dashboard
|
|
53
|
-
id-token: write # Publish results and obtain a badge via OIDC
|
|
54
|
-
# Uncomment the permission below if installing in a private repository.
|
|
55
|
-
# actions: read
|
|
56
60
|
secrets:
|
|
57
|
-
|
|
61
|
+
sonar_token: ${{ secrets.SONAR_TOKEN }}
|
|
@@ -73,7 +73,7 @@ repos:
|
|
|
73
73
|
args: [--config-file=.yamllint]
|
|
74
74
|
|
|
75
75
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
76
|
-
rev:
|
|
76
|
+
rev: 25bcf95026b96e2dd3c0aec3090c3d6ef6ca2e6c # frozen: v0.17.3
|
|
77
77
|
hooks:
|
|
78
78
|
- id: ruff
|
|
79
79
|
files: ^(src|tests|scripts)/.+\.py$
|
|
@@ -82,7 +82,7 @@ repos:
|
|
|
82
82
|
files: ^(src|tests|scripts)/.+\.py$
|
|
83
83
|
|
|
84
84
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
85
|
-
rev:
|
|
85
|
+
rev: ad26ebfa797fcb9b8f83275937c1c1d6e126719c # frozen: v2.4.1
|
|
86
86
|
hooks:
|
|
87
87
|
- id: mypy
|
|
88
88
|
additional_dependencies: [types-pycurl]
|
|
@@ -112,7 +112,7 @@ repos:
|
|
|
112
112
|
args: ["--fix"]
|
|
113
113
|
|
|
114
114
|
- repo: https://github.com/fsfe/reuse-tool
|
|
115
|
-
rev:
|
|
115
|
+
rev: bffd9abdccdd86e7926c871a31564913547552c9 # frozen: v6.3.0
|
|
116
116
|
hooks:
|
|
117
117
|
- id: reuse
|
|
118
118
|
|
|
@@ -133,7 +133,7 @@ repos:
|
|
|
133
133
|
- id: basedpyright
|
|
134
134
|
|
|
135
135
|
- repo: https://github.com/lfreleng-actions/gha-workflow-linter
|
|
136
|
-
rev:
|
|
136
|
+
rev: 00aec232d3fd85436fff24dfeaad23921c5db1cb # frozen: v1.10.1
|
|
137
137
|
hooks:
|
|
138
138
|
- id: gha-workflow-linter
|
|
139
139
|
args: [lint, .]
|
|
@@ -149,7 +149,7 @@ repos:
|
|
|
149
149
|
always_run: true
|
|
150
150
|
|
|
151
151
|
- repo: https://github.com/python-jsonschema/check-jsonschema
|
|
152
|
-
rev:
|
|
152
|
+
rev: 39478bf2c099a58683d3f1aedf675105318b078d # frozen: 0.39.0
|
|
153
153
|
hooks:
|
|
154
154
|
- id: check-github-actions
|
|
155
155
|
- id: check-github-workflows
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: http-api-tool
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.5
|
|
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,10 +166,20 @@ runs:
|
|
|
166
166
|
# UVX deployment path (default)
|
|
167
167
|
- name: Install uv for uvx deployment
|
|
168
168
|
if: inputs.deploy == 'uvx'
|
|
169
|
+
# setup-uv runs the interpreter 'uv python find' returns for its
|
|
170
|
+
# working directory and reads uv settings (required-version,
|
|
171
|
+
# cache-dir) there; the default is the caller's workspace. Point it
|
|
172
|
+
# at this action's own files. The UV_* settings cover an action
|
|
173
|
+
# loaded from inside the workspace ('uses: ./').
|
|
169
174
|
uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
175
|
+
env:
|
|
176
|
+
UV_NO_CONFIG: "1"
|
|
177
|
+
UV_SYSTEM_PYTHON: "1"
|
|
178
|
+
UV_NO_PROJECT: "1"
|
|
170
179
|
with:
|
|
171
180
|
enable-cache: false
|
|
172
181
|
ignore-empty-workdir: true
|
|
182
|
+
working-directory: ${{ github.action_path }}
|
|
173
183
|
|
|
174
184
|
- name: Run http-api-tool via uvx
|
|
175
185
|
if: inputs.deploy == 'uvx'
|
|
@@ -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.5'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 1, 5)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
# SPDX-FileCopyrightText: 2025 The Linux Foundation
|
|
4
|
-
|
|
5
|
-
name: 'CodeQL'
|
|
6
|
-
# Must be called codeql.yml NOT codeql.yaml or GitHub will ignore it
|
|
7
|
-
|
|
8
|
-
on:
|
|
9
|
-
workflow_dispatch:
|
|
10
|
-
push:
|
|
11
|
-
branches: ['main', 'master']
|
|
12
|
-
paths:
|
|
13
|
-
- '!.github/**'
|
|
14
|
-
- '!.docs/**'
|
|
15
|
-
schedule:
|
|
16
|
-
- cron: '40 4 * * 0'
|
|
17
|
-
|
|
18
|
-
permissions: {}
|
|
19
|
-
|
|
20
|
-
concurrency:
|
|
21
|
-
group: ${{ github.workflow }}
|
|
22
|
-
cancel-in-progress: true
|
|
23
|
-
|
|
24
|
-
jobs:
|
|
25
|
-
codeql:
|
|
26
|
-
name: 'CodeQL'
|
|
27
|
-
permissions:
|
|
28
|
-
contents: read # checkout
|
|
29
|
-
security-events: write # upload results to code scanning
|
|
30
|
-
packages: read # fetch internal or private CodeQL packs
|
|
31
|
-
actions: read # the upload reads run info on private repositories
|
|
32
|
-
# yamllint disable-line rule:line-length
|
|
33
|
-
uses: lfreleng-actions/security-workflows/.github/workflows/codeql.yaml@378fcc19ebdf37f17fde4888d4b71c83b21d6cf3 # v0.9.7
|
|
34
|
-
with:
|
|
35
|
-
languages: 'python,actions'
|
|
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
|
|
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
|