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.
Files changed (46) hide show
  1. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/workflows/build-test.yaml +106 -0
  2. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/workflows/release-drafter.yaml +1 -1
  3. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/workflows/security-scans.yaml +12 -8
  4. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.pre-commit-config.yaml +5 -5
  5. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/PKG-INFO +1 -1
  6. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/action.yaml +10 -0
  7. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/_version.py +2 -2
  8. http_api_tool-1.1.4/.github/workflows/codeql.yml +0 -35
  9. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.actrc +0 -0
  10. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.aislop/config.yml +0 -0
  11. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.codespell +0 -0
  12. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.dockerignore +0 -0
  13. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.editorconfig +0 -0
  14. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/actionlint.yaml +0 -0
  15. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/cache-config.yaml +0 -0
  16. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/dependabot.yml +0 -0
  17. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/workflows/build-test-release.yaml +0 -0
  18. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/workflows/clear-action-cache.yaml +0 -0
  19. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.github/workflows/openssf-scorecard.yaml +0 -0
  20. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.gitignore +0 -0
  21. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.gitlint +0 -0
  22. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.readthedocs.yml +0 -0
  23. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/.yamllint +0 -0
  24. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/AGENTS.md +0 -0
  25. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/CHANGELOG-v0.2.0.md +0 -0
  26. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/LICENSE +0 -0
  27. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/LICENSES/Apache-2.0.txt +0 -0
  28. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/README.md +0 -0
  29. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/REUSE.toml +0 -0
  30. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/SECURITY.md +0 -0
  31. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/UV-QUICK-REFERENCE.md +0 -0
  32. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/docker/Containerfile +0 -0
  33. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/pyproject.toml +0 -0
  34. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/scripts/check-pip-security.py +0 -0
  35. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/scripts/generate_requirements.py +0 -0
  36. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/sonar-project.properties +0 -0
  37. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/__init__.py +0 -0
  38. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/__main__.py +0 -0
  39. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/cli.py +0 -0
  40. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/curl_client.py +0 -0
  41. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/reporting.py +0 -0
  42. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/sanitize.py +0 -0
  43. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/validation.py +0 -0
  44. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/src/http_api_tool/verifier.py +0 -0
  45. {http_api_tool-1.1.4 → http_api_tool-1.1.5}/tests/test_http_api_tool.py +0 -0
  46. {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@d01dcdad980f826d4099289e2014126465580807 # v0.14.1
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: lfit/releng-reusable-workflows/.github/workflows/reuse-sonatype-lifecycle.yaml@e3bb02dd0d2e5027cde63732fe00f591d6ecec03 # v0.11.0
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
- NEXUS_IQ_PASSWORD: ${{ secrets.NEXUS_IQ_PASSWORD }}
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: lfit/releng-reusable-workflows/.github/workflows/reuse-sonarqube-cloud.yaml@e3bb02dd0d2e5027cde63732fe00f591d6ecec03 # v0.11.0
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
- SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
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: f368fb366ff7f2f808dd324b83a6d32267799e19 # frozen: v0.17.2
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: 2834ec6639549dd6796205c8f011dedcd587288b # frozen: v2.4.0
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: 9fabf9eb815a57aac116b435e8346c200cdb8604 # frozen: v6.2.0
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: 6431fe01a4f1b978de418160cc7caa6a24f6df76 # frozen: v1.10.0
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: 4f85d46a92dc17713078e5de73f8a13190edf6fc # frozen: 0.38.2
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.4
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.4'
22
- __version_tuple__ = version_tuple = (1, 1, 4)
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