From a1cac875fd2266c15a77bc0ac2a1150827bd6449 Mon Sep 17 00:00:00 2001 From: Matthias Dellweg Date: Fri, 14 Aug 2026 15:53:00 +0200 Subject: [PATCH] Enable v4 api in s3 tests --- .ci/ansible/Containerfile.j2 | 2 +- .github/workflows/build.yml | 11 +++++++++-- .github/workflows/ci.yml | 15 +++++++++++++-- .github/workflows/create-branch.yml | 7 ++++++- .github/workflows/docs.yml | 9 ++++++++- .github/workflows/lint.yml | 9 ++++++++- .github/workflows/nightly.yml | 9 ++++++++- .github/workflows/pr_checks.yml | 9 ++++++++- .github/workflows/publish.yml | 9 ++++++++- .github/workflows/release.yml | 9 ++++++++- .github/workflows/sanity.yml | 9 ++++++++- .github/workflows/scripts/before_install.sh | 2 +- .github/workflows/scripts/before_script.sh | 8 ++++---- .github/workflows/scripts/install.sh | 6 +++--- .github/workflows/scripts/script.sh | 10 ++-------- .github/workflows/test.yml | 8 +++++--- .github/workflows/update-labels.yml | 9 ++++++++- .github/workflows/update_ci.yml | 9 ++++++++- pyproject.toml | 1 + template_config.yml | 1 + 20 files changed, 118 insertions(+), 34 deletions(-) diff --git a/.ci/ansible/Containerfile.j2 b/.ci/ansible/Containerfile.j2 index 13b5ff05e36..69c62ba04e3 100644 --- a/.ci/ansible/Containerfile.j2 +++ b/.ci/ansible/Containerfile.j2 @@ -9,7 +9,7 @@ ADD ./{{ plugin_name }}/{{ plugin_name | replace("-", "_") }}/app/webserver_snip ADD ./{{ item.origin }} {{ item.destination }} {%- endfor %} -# This MUST be the ONLY call to pip install in inside the container. +# This MUST be the ONLY package install inside the container. RUN --mount=type=cache,target=/root/.cache/uv uv pip install --upgrade setuptools wheel && \ uv pip install {{ image.source }} {%- if image.upperbounds | default(false) -%} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 49230420900..4682047735c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,6 +10,9 @@ name: "Build" on: workflow_call: +env: + UV_SYSTEM_PYTHON: "1" + defaults: run: working-directory: "pulpcore" @@ -31,16 +34,20 @@ jobs: - uses: "actions/setup-python@v6" with: python-version: "3.11" + - name: "Install uv" + uses: "astral-sh/setup-uv@v7" + with: + enable-cache: true - name: "Install python dependencies" run: | - pip install build packaging twine wheel mkdocs jq + uv pip install build packaging twine wheel mkdocs jq - name: "Build package" run: | python3 -m build twine check dist/* - name: "Install built packages" run: | - pip install dist/pulpcore-*-py3-none-any.whl -c .ci/assets/ci_constraints.txt + uv pip install dist/pulpcore-*-py3-none-any.whl -c .ci/assets/ci_constraints.txt - name: "Generate api specs" run: | pulpcore-manager openapi --file "api.json" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 612346b62ff..452d934b082 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,6 +9,9 @@ name: "Core CI" on: {pull_request: {branches: ['*']}} +env: + UV_SYSTEM_PYTHON: "1" + concurrency: group: ${{ github.ref_name }}-${{ github.workflow }} cancel-in-progress: true @@ -28,9 +31,13 @@ jobs: - uses: "actions/setup-python@v6" with: python-version: "3.11" + - name: "Install uv" + uses: "astral-sh/setup-uv@v7" + with: + enable-cache: true - name: "Install python dependencies" run: | - pip install requests pygithub pyyaml + uv pip install requests pygithub pyyaml - name: "Check commit message" if: github.event_name == 'pull_request' env: @@ -55,10 +62,14 @@ jobs: - uses: "actions/setup-python@v6" with: python-version: "3.12" + - name: "Install uv" + uses: "astral-sh/setup-uv@v7" + with: + enable-cache: true - name: "Install python dependencies" run: | - pip install gitpython + uv pip install gitpython - name: "Analyze changed files" id: "check" diff --git a/.github/workflows/create-branch.yml b/.github/workflows/create-branch.yml index 4456ad95ba0..e44dc924c7b 100644 --- a/.github/workflows/create-branch.yml +++ b/.github/workflows/create-branch.yml @@ -12,6 +12,7 @@ on: env: RELEASE_WORKFLOW: true + UV_SYSTEM_PYTHON: "1" jobs: create-branch: @@ -38,10 +39,14 @@ jobs: - uses: "actions/setup-python@v6" with: python-version: "3.11" + - name: "Install uv" + uses: "astral-sh/setup-uv@v7" + with: + enable-cache: true - name: "Install python dependencies" run: | - pip install bump-my-version packaging -r plugin_template/requirements.txt + uv pip install bump-my-version packaging -r plugin_template/requirements.txt - name: "Setting secrets" working-directory: "pulpcore" diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 1ccf2f20239..e111dc49230 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -15,6 +15,9 @@ on: required: true type: "string" +env: + UV_SYSTEM_PYTHON: "1" + jobs: changelog: runs-on: "ubuntu-latest" @@ -29,9 +32,13 @@ jobs: - uses: "actions/setup-python@v6" with: python-version: "3.12" + - name: "Install uv" + uses: "astral-sh/setup-uv@v7" + with: + enable-cache: true - name: "Install python dependencies" run: | - pip install towncrier + uv pip install towncrier - name: "Build changelog" run: | towncrier build --yes --version 4.0.0.ci diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index c1a3bbbf860..44ecdbb1152 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -10,6 +10,9 @@ name: "Lint" on: workflow_call: +env: + UV_SYSTEM_PYTHON: "1" + defaults: run: working-directory: "pulpcore" @@ -27,10 +30,14 @@ jobs: - uses: "actions/setup-python@v6" with: python-version: "3.11" + - name: "Install uv" + uses: "astral-sh/setup-uv@v7" + with: + enable-cache: true - name: "Install python dependencies" run: | - pip install -r lint_requirements.txt + uv pip install -r lint_requirements.txt - name: "Lint workflow files" run: | diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index e7fe433e410..fe3b7c571b4 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -14,6 +14,9 @@ on: - cron: "00 3 * * *" workflow_dispatch: +env: + UV_SYSTEM_PYTHON: "1" + defaults: run: working-directory: "pulpcore" @@ -44,10 +47,14 @@ jobs: - uses: "actions/setup-python@v6" with: python-version: "3.13" + - name: "Install uv" + uses: "astral-sh/setup-uv@v7" + with: + enable-cache: true - name: "Install python dependencies" run: | - pip install gitpython packaging toml + uv pip install gitpython packaging toml - name: "Configure Git with pulpbot name and email" run: | diff --git a/.github/workflows/pr_checks.yml b/.github/workflows/pr_checks.yml index 905d0ecc5f5..556d676000b 100644 --- a/.github/workflows/pr_checks.yml +++ b/.github/workflows/pr_checks.yml @@ -17,6 +17,9 @@ on: - "main" - "[0-9]+.[0-9]+" +env: + UV_SYSTEM_PYTHON: "1" + # This workflow runs with elevated permissions. # Do not even think about running a single bit of code from the PR. # Static analysis should be fine however. @@ -38,9 +41,13 @@ jobs: - uses: "actions/setup-python@v6" with: python-version: "3.11" + - name: "Install uv" + uses: "astral-sh/setup-uv@v7" + with: + enable-cache: true - name: "Determine PR labels" run: | - pip install GitPython==3.1.42 + uv pip install GitPython==3.1.42 git fetch origin ${{ github.event.pull_request.head.sha }} python .ci/scripts/pr_labels.py "origin/${{ github.base_ref }}" "${{ github.event.pull_request.head.sha }}" >> "$GITHUB_ENV" - uses: "actions/github-script@v8" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c9535a49664..edad84dbc4a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -12,6 +12,9 @@ on: tags: - "[0-9]+.[0-9]+.[0-9]+" +env: + UV_SYSTEM_PYTHON: "1" + defaults: run: working-directory: "pulpcore" @@ -131,10 +134,14 @@ jobs: - uses: "actions/setup-python@v6" with: python-version: "3.11" + - name: "Install uv" + uses: "astral-sh/setup-uv@v7" + with: + enable-cache: true - name: "Install towncrier" run: | - pip install towncrier + uv pip install towncrier - name: "Get release notes" id: "get_release_notes" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2180377cf01..755a5069a11 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,6 +10,9 @@ name: Core Release Pipeline on: workflow_dispatch: +env: + UV_SYSTEM_PYTHON: "1" + defaults: run: working-directory: "pulpcore" @@ -31,10 +34,14 @@ jobs: - uses: "actions/setup-python@v6" with: python-version: "3.11" + - name: "Install uv" + uses: "astral-sh/setup-uv@v7" + with: + enable-cache: true - name: "Install python dependencies" run: | - pip install bump-my-version towncrier + uv pip install bump-my-version towncrier - name: "Configure Git with pulpbot name and email" run: | diff --git a/.github/workflows/sanity.yml b/.github/workflows/sanity.yml index 8f4fde37932..e2bf0785cdc 100644 --- a/.github/workflows/sanity.yml +++ b/.github/workflows/sanity.yml @@ -13,6 +13,9 @@ name: "Sanity" on: workflow_call: +env: + UV_SYSTEM_PYTHON: "1" + defaults: run: working-directory: "pulpcore" @@ -30,10 +33,14 @@ jobs: - uses: "actions/setup-python@v6" with: python-version: "3.11" + - name: "Install uv" + uses: "astral-sh/setup-uv@v7" + with: + enable-cache: true - name: "Install python dependencies" run: | - pip install -r lint_requirements.txt + uv pip install -r lint_requirements.txt - name: "Verify bump version config" run: | diff --git a/.github/workflows/scripts/before_install.sh b/.github/workflows/scripts/before_install.sh index b759af34a72..9240803e4f3 100755 --- a/.github/workflows/scripts/before_install.sh +++ b/.github/workflows/scripts/before_install.sh @@ -94,7 +94,7 @@ if [ "$TEST" = "s3" ]; then s3_test: true minio_access_key: "${MINIO_ACCESS_KEY}" minio_secret_key: "${MINIO_SECRET_KEY}" -pulp_scenario_settings: {"DISABLED_authentication_backends": "@merge django.contrib.auth.backends.RemoteUserBackend", "DISABLED_authentication_json_header": "HTTP_X_RH_IDENTITY", "DISABLED_authentication_json_header_jq_filter": ".identity.user.username", "DISABLED_authentication_json_header_openapi_security_scheme": {"description": "External OAuth integration", "flows": {"clientCredentials": {"scopes": {"api.console": "grant_access_to_pulp"}, "tokenUrl": "https://your-identity-provider/token/issuer"}}, "type": "oauth2"}, "DISABLED_rest_framework__default_authentication_classes": "@merge pulpcore.app.authentication.JSONHeaderRemoteAuthentication", "MEDIA_ROOT": "", "STORAGES": {"default": {"BACKEND": "storages.backends.s3boto3.S3Boto3Storage", "OPTIONS": {"access_key": "AKIAIT2Z5TDYPX3ARJBA", "addressing_style": "path", "bucket_name": "pulp3", "default_acl": "@none", "endpoint_url": "http://minio:9000", "region_name": "eu-central-1", "secret_key": "fqRvjWaPU5o0fCqQuUWbj9Fainj2pVZtBCiDiieS", "signature_version": "s3v4"}}, "staticfiles": {"BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage"}}, "api_root": "/rerouted/djnd/", "domain_enabled": true, "hide_guarded_distributions": true, "rest_framework__default_permission_classes": ["pulpcore.plugin.access_policy.AccessPolicyFromSettings"], "spectacular_settings__oas_version": "3.0.3"} +pulp_scenario_settings: {"DISABLED_authentication_backends": "@merge django.contrib.auth.backends.RemoteUserBackend", "DISABLED_authentication_json_header": "HTTP_X_RH_IDENTITY", "DISABLED_authentication_json_header_jq_filter": ".identity.user.username", "DISABLED_authentication_json_header_openapi_security_scheme": {"description": "External OAuth integration", "flows": {"clientCredentials": {"scopes": {"api.console": "grant_access_to_pulp"}, "tokenUrl": "https://your-identity-provider/token/issuer"}}, "type": "oauth2"}, "DISABLED_rest_framework__default_authentication_classes": "@merge pulpcore.app.authentication.JSONHeaderRemoteAuthentication", "ENABLE_V4_API": true, "MEDIA_ROOT": "", "STORAGES": {"default": {"BACKEND": "storages.backends.s3boto3.S3Boto3Storage", "OPTIONS": {"access_key": "AKIAIT2Z5TDYPX3ARJBA", "addressing_style": "path", "bucket_name": "pulp3", "default_acl": "@none", "endpoint_url": "http://minio:9000", "region_name": "eu-central-1", "secret_key": "fqRvjWaPU5o0fCqQuUWbj9Fainj2pVZtBCiDiieS", "signature_version": "s3v4"}}, "staticfiles": {"BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage"}}, "api_root": "/rerouted/djnd/", "domain_enabled": true, "hide_guarded_distributions": true, "rest_framework__default_permission_classes": ["pulpcore.plugin.access_policy.AccessPolicyFromSettings"], "spectacular_settings__oas_version": "3.0.3"} pulp_scenario_env: {} VARSYAML fi diff --git a/.github/workflows/scripts/before_script.sh b/.github/workflows/scripts/before_script.sh index 1c2557eaddb..2cad07e509f 100755 --- a/.github/workflows/scripts/before_script.sh +++ b/.github/workflows/scripts/before_script.sh @@ -39,12 +39,12 @@ echo "# Constraints Files:" tail -v -n +1 ../*/*constraints.txt || true echo -echo "# pip list outside the container" -pip list +echo "# package list outside the container" +uv pip list echo -echo "# pip list inside the container" -cmd_prefix bash -c "pip3 list" +echo "# package list inside the container" +cmd_prefix bash -c "uv pip list" echo echo "# State of the containers" diff --git a/.github/workflows/scripts/install.sh b/.github/workflows/scripts/install.sh index 8395faaad65..7ebc2d0d174 100755 --- a/.github/workflows/scripts/install.sh +++ b/.github/workflows/scripts/install.sh @@ -17,8 +17,8 @@ source .github/workflows/scripts/utils.sh PIP_REQUIREMENTS=("pulp-cli" "yq") -# This must be the **only** call to "pip install" on the test runner. -pip install ${PIP_REQUIREMENTS[*]} +# This must be the **only** package install on the test runner. +uv pip install ${PIP_REQUIREMENTS[*]} if [[ "$TEST" = "s3" ]]; then for i in {1..3} @@ -33,7 +33,7 @@ fi fi # Check out the pulp-cli branch matching the installed version. -PULP_CLI_VERSION="$(pip freeze | sed -n -e 's/pulp-cli==//p')" +PULP_CLI_VERSION="$(uv pip freeze | sed -n -e 's/pulp-cli==//p')" git clone --depth 1 --branch "$PULP_CLI_VERSION" https://github.com/pulp/pulp-cli.git ../pulp-cli PULP_API_ROOT="$(yq -r '.pulp_scenario_settings.api_root // .pulp_settings.api_root // "/pulp/"' < .ci/ansible/vars/main.yaml)" diff --git a/.github/workflows/scripts/script.sh b/.github/workflows/scripts/script.sh index 65ad9995e02..4575280ae93 100755 --- a/.github/workflows/scripts/script.sh +++ b/.github/workflows/scripts/script.sh @@ -117,7 +117,7 @@ cmd_stdin_prefix bash -c "cat > /tmp/unittest_requirements.txt" < unittest_requi cmd_stdin_prefix bash -c "cat > /tmp/functest_requirements.txt" < functest_requirements.txt cmd_stdin_prefix bash -c "cat > /tmp/bindings_requirements.txt" < bindings_requirements.txt cmd_stdin_prefix bash -c "cat > /tmp/bindings_constraints.txt" < bindings_constraints.txt -cmd_prefix pip3 install -r /tmp/unittest_requirements.txt -r /tmp/functest_requirements.txt -r /tmp/bindings_requirements.txt -c /tmp/bindings_constraints.txt +cmd_prefix uv pip install -r /tmp/unittest_requirements.txt -r /tmp/functest_requirements.txt -r /tmp/bindings_requirements.txt -c /tmp/bindings_constraints.txt CERTIFI=$(cmd_prefix python3 -c 'import certifi; print(certifi.where())') cmd_prefix bash -c "cat /etc/pulp/certs/pulp_webserver.crt >> '$CERTIFI'" @@ -170,13 +170,7 @@ export PULP_FIXTURES_URL="http://pulp-fixtures:8080" # some pulp-cli tests use the api root envvar export PULP_API_ROOT="$(EDITOR=cat pulp config edit 2>/dev/null | awk -F'"' '/api_root/{print $2; exit}')" pushd ../pulp-cli -if [[ -f "test_requirements.txt" ]] -then - pip install -r test_requirements.txt - pytest -v tests -m "pulpcore or pulp_file or pulp_certguard" -else - PULP_CA_BUNDLE="/usr/local/share/ca-certificates/pulp_webserver.crt" make livetest PYTEST_MARK="live and (pulpcore or pulp_file or pulp_certguard)" -fi +PULP_CA_BUNDLE="/usr/local/share/ca-certificates/pulp_webserver.crt" make paralleltest PYTEST_MARK="live and (pulpcore or pulp_file or pulp_certguard)" popd if [ -f "$POST_SCRIPT" ]; then diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 833c98e4f8c..5b98b004ef2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,6 +14,9 @@ on: required: true type: "string" +env: + UV_SYSTEM_PYTHON: "1" + defaults: run: working-directory: "pulpcore" @@ -41,7 +44,6 @@ jobs: - uses: "actions/setup-python@v6" with: python-version: "3.11" - - name: "Install uv" uses: "astral-sh/setup-uv@v7" with: @@ -83,7 +85,7 @@ jobs: - name: "Install python dependencies" run: | - pip install build towncrier twine wheel httpie docker netaddr boto3 'ansible~=10.3.0' mkdocs jq jsonpatch bump-my-version + uv pip install build towncrier twine wheel httpie docker netaddr boto3 'ansible~=10.3.0' mkdocs jq jsonpatch bump-my-version echo "HTTPIE_CONFIG_DIR=$GITHUB_WORKSPACE/pulpcore/.ci/assets/httpie/" >> $GITHUB_ENV - name: "Set environment variables" @@ -153,5 +155,5 @@ jobs: docker logs pulp || true docker exec pulp ls -latr /etc/yum.repos.d/ || true docker exec pulp cat /etc/yum.repos.d/* || true - docker exec pulp bash -c "pip3 list" || true + docker exec pulp bash -c "uv pip list" || true ... diff --git a/.github/workflows/update-labels.yml b/.github/workflows/update-labels.yml index 6ae6a0245ac..72e9fe750a6 100644 --- a/.github/workflows/update-labels.yml +++ b/.github/workflows/update-labels.yml @@ -15,6 +15,9 @@ on: paths: - "template_config.yml" +env: + UV_SYSTEM_PYTHON: "1" + jobs: update_backport_labels: runs-on: "ubuntu-latest" @@ -22,13 +25,17 @@ jobs: - uses: "actions/setup-python@v6" with: python-version: "3.11" + - name: "Install uv" + uses: "astral-sh/setup-uv@v7" + with: + enable-cache: true - name: "Configure Git with pulpbot name and email" run: | git config --global user.name 'pulpbot' git config --global user.email 'pulp-infra@redhat.com' - name: "Install python dependencies" run: | - pip install requests pyyaml + uv pip install requests pyyaml - uses: "actions/checkout@v6" - name: "Update labels" run: | diff --git a/.github/workflows/update_ci.yml b/.github/workflows/update_ci.yml index 345bc9c9776..a471a278ed3 100644 --- a/.github/workflows/update_ci.yml +++ b/.github/workflows/update_ci.yml @@ -15,6 +15,9 @@ on: - cron: "30 17 * * 0" workflow_dispatch: +env: + UV_SYSTEM_PYTHON: "1" + jobs: update: runs-on: "ubuntu-latest" @@ -32,10 +35,14 @@ jobs: - uses: "actions/setup-python@v6" with: python-version: "3.11" + - name: "Install uv" + uses: "astral-sh/setup-uv@v7" + with: + enable-cache: true - name: "Install python dependencies" run: | - pip install gitpython packaging -r plugin_template/requirements.txt + uv pip install gitpython packaging -r plugin_template/requirements.txt - name: "Configure Git with pulpbot name and email" run: | diff --git a/pyproject.toml b/pyproject.toml index 2ddc1d74183..c30da4560db 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -267,6 +267,7 @@ filename = "./pyproject.toml" search = "version = \"{current_version}\"" replace = "version = \"{new_version}\"" + [tool.ruff] # This section is managed by the plugin template. Do not edit manually. line-length = 100 diff --git a/template_config.yml b/template_config.yml index 2ad8f97e04d..0a72287323b 100644 --- a/template_config.yml +++ b/template_config.yml @@ -89,6 +89,7 @@ pulp_settings_azure: worker_type: "redis" pulp_settings_gcp: null pulp_settings_s3: + ENABLE_V4_API: true DISABLED_authentication_backends: "@merge django.contrib.auth.backends.RemoteUserBackend" DISABLED_authentication_json_header: "HTTP_X_RH_IDENTITY" DISABLED_authentication_json_header_jq_filter: ".identity.user.username"