diff --git a/.ci/assets/ci_constraints.txt b/.ci/assets/ci_constraints.txt index 3380502b..2b7015ff 100644 --- a/.ci/assets/ci_constraints.txt +++ b/.ci/assets/ci_constraints.txt @@ -1,6 +1,6 @@ # Pulpcore versions without the openapi command do no longer work in the CI # Pulpcore versions without the django 5 storage compatibility will fail, >3.63,<3.70 -pulpcore>=3.21.30,!=3.23.*,!=3.24.*,!=3.25.*,!=3.26.*,!=3.27.*,!=3.29.*,!=3.30.*,!=3.31.*,!=3.32.*,!=3.33.*,!=3.34.*,!=3.35.*,!=3.36.*,!=3.37.*,!=3.38.*,!=3.40.*,!=3.41.*,!=3.42.*,!=3.43.*,!=3.44.*,!=3.45.*,!=3.46.*,!=3.47.*,!=3.48.*,!=3.50.*,!=3.51.*,!=3.52.*,!=3.53.*,!=3.54.*,!=3.64.*,!=3.65.*,!=3.66.*,!=3.67.*,!=3.68.*,!=3.69.* +pulpcore>=3.49.0,!=3.50.*,!=3.51.*,!=3.52.*,!=3.53.*,!=3.54.*,!=3.64.*,!=3.65.*,!=3.66.*,!=3.67.*,!=3.68.*,!=3.69.* tablib!=3.6.0 diff --git a/.ci/scripts/calc_constraints.py b/.ci/scripts/calc_constraints.py index 83e197aa..4b60a810 100755 --- a/.ci/scripts/calc_constraints.py +++ b/.ci/scripts/calc_constraints.py @@ -26,10 +26,14 @@ def fetch_pulpcore_upper_bound(requirement): with urllib.request.urlopen(CORE_TEMPLATE_URL) as f: template = yaml.safe_load(f.read()) - supported_versions = template["supported_release_branches"] - supported_versions.append(template["latest_release_branch"]) + supported_branches = [ + *template["supported_release_branches"], + template["latest_release_branch"], + ] applicable_versions = sorted( - requirement.specifier.filter((Version(v) for v in supported_versions)) + Version(branch) + for branch in supported_branches + if requirement.specifier.contains(Version(f"{branch}.999999")) ) if len(applicable_versions) == 0: raise Exception("No supported pulpcore version in required range.") diff --git a/.ci/scripts/skip_tests.py b/.ci/scripts/skip_tests.py index 380a3da9..fb09fa37 100755 --- a/.ci/scripts/skip_tests.py +++ b/.ci/scripts/skip_tests.py @@ -1,4 +1,10 @@ #!/usr/bin/env python3 +# /// script +# requires-python = ">=3.12" +# dependencies = [ +# "gitpython>=3.1.62", +# ] +# /// """ skip_tests.py - Check if only documentation files were changed in a git branch diff --git a/.ci/scripts/validate_commit_message.py b/.ci/scripts/validate_commit_message.py index 2aab9085..f5207a3a 100644 --- a/.ci/scripts/validate_commit_message.py +++ b/.ci/scripts/validate_commit_message.py @@ -1,6 +1,14 @@ # This file is managed by the plugin template. # Do not edit. +# /// script +# requires-python = ">=3.12" +# dependencies = [ +# "pygithub", +# "pyyaml", +# ] +# /// + import os import re import subprocess diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6b57f614..c28d5d11 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -38,15 +38,13 @@ jobs: uses: "astral-sh/setup-uv@v7" with: enable-cache: true - - name: "Install python dependencies" - run: | - uv pip install build packaging twine wheel mkdocs jq - name: "Build package" run: | - python3 -m build - twine check dist/* + uv build + uvx twine check dist/* - name: "Install built packages" run: | + # This seems to be the only way to inject the constraints file. uv pip install dist/pulp_python-*-py3-none-any.whl -c .ci/assets/ci_constraints.txt - name: "Generate api specs" run: | @@ -88,15 +86,6 @@ jobs: if-no-files-found: "error" retention-days: 5 overwrite: true - - name: "Upload python client docs" - uses: "actions/upload-artifact@v7" - with: - name: "python-client-docs.tar" - path: | - pulp_python/python-python-client-docs.tar - if-no-files-found: "error" - retention-days: 5 - overwrite: true - name: "Build Ruby bindings packages" run: | .github/workflows/scripts/build_ruby_client.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7c716017..17c7f237 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,16 +30,12 @@ jobs: path: "pulp_python" - uses: "actions/setup-python@v6" with: - python-version: "3.11" + python-version: "3.12" - name: "Install uv" uses: "astral-sh/setup-uv@v7" with: enable-cache: true - - name: "Install python dependencies" - run: | - uv pip install requests pygithub pyyaml - name: "Check commit message" - if: github.event_name == 'pull_request' env: PY_COLORS: "1" ANSIBLE_FORCE_COLOR: "1" @@ -61,16 +57,12 @@ jobs: - uses: "actions/setup-python@v6" with: - python-version: "3.11" + python-version: "3.12" - name: "Install uv" uses: "astral-sh/setup-uv@v7" with: enable-cache: true - - name: "Install python dependencies" - run: | - uv pip install gitpython - - name: "Analyze changed files" id: "check" shell: "bash" @@ -86,7 +78,7 @@ jobs: BASE_REF=${{ github.event.pull_request.base.sha }} echo "Checking against:" git name-rev $BASE_REF - python3 .ci/scripts/skip_tests.py . $BASE_REF + uv run --script .ci/scripts/skip_tests.py . $BASE_REF exit_code=$? if [ $exit_code -ne 0 ] && [ $exit_code -ne 1 ]; then echo "Error: skip_tests.py returned unexpected exit code $exit_code" diff --git a/.github/workflows/pr_checks.yml b/.github/workflows/pr_checks.yml index fbe045a0..066bee49 100644 --- a/.github/workflows/pr_checks.yml +++ b/.github/workflows/pr_checks.yml @@ -47,7 +47,6 @@ jobs: enable-cache: true - name: "Determine PR labels" run: | - uv pip install GitPython==3.1.42 git fetch origin ${{ github.event.pull_request.head.sha }} uv run --script .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/sanity.yml b/.github/workflows/sanity.yml index 2382b374..3f697caa 100644 --- a/.github/workflows/sanity.yml +++ b/.github/workflows/sanity.yml @@ -32,7 +32,7 @@ jobs: - uses: "actions/setup-python@v6" with: - python-version: "3.11" + python-version: "3.12" - name: "Install uv" uses: "astral-sh/setup-uv@v7" with: diff --git a/.github/workflows/scripts/before_install.sh b/.github/workflows/scripts/before_install.sh index 26ca55f1..7483a5ca 100755 --- a/.github/workflows/scripts/before_install.sh +++ b/.github/workflows/scripts/before_install.sh @@ -23,7 +23,7 @@ if [ -f .github/workflows/scripts/pre_before_install.sh ]; then source .github/workflows/scripts/pre_before_install.sh fi -COMPONENT_VERSION="$(bump-my-version show current_version | tail -n -1 | python -c 'from packaging.version import Version; print(Version(input()))')" +COMPONENT_VERSION="$(python -c 'import tomllib; from packaging.version import Version; print(Version(tomllib.load(open("pyproject.toml", "rb"))["tool"]["bumpversion"]["current_version"]))')" COMPONENT_SOURCE="./pulp_python/dist/pulp_python-${COMPONENT_VERSION}-py3-none-any.whl" if [ "$TEST" = "s3" ]; then COMPONENT_SOURCE="${COMPONENT_SOURCE} pulpcore[s3]" diff --git a/.github/workflows/scripts/build_python_client.sh b/.github/workflows/scripts/build_python_client.sh index 9eb0def9..8414e4a5 100755 --- a/.github/workflows/scripts/build_python_client.sh +++ b/.github/workflows/scripts/build_python_client.sh @@ -1,7 +1,7 @@ #!/bin/bash # This script expects all -api.json files to exist in the plugins root directory. -# It produces a -python-client.tar and -python-client-docs.tar file in the plugins root directory. +# It produces a -python-client.tar file in the plugins root directory. # WARNING: DO NOT EDIT! # @@ -21,34 +21,11 @@ rm -rf "pulp_python-client" ./gen-client.sh "../pulp_python/python-api.json" "python" python "pulp_python" pushd pulp_python-client -python -m build - -twine check "dist/pulp_python_client-"*"-py3-none-any.whl" -twine check "dist/pulp_python_client-"*".tar.gz" +uv build +uvx twine check "dist/pulp_python_client-"*"-py3-none-any.whl" +uvx twine check "dist/pulp_python_client-"*".tar.gz" tar cvf "../../pulp_python/python-python-client.tar" ./dist -find ./docs/* -exec sed -i 's/Back to README/Back to HOME/g' {} \; -find ./docs/* -exec sed -i 's/README//g' {} \; -cp README.md docs/index.md -sed -i 's/docs\///g' docs/index.md -find ./docs/* -exec sed -i 's/\.md//g' {} \; - -cat >> mkdocs.yml << DOCSYAML ---- -site_name: PulpPython Client -site_description: Python bindings -site_author: Pulp Team -site_url: https://docs.pulpproject.org/pulp_python_client/ -repo_name: pulp/pulp_python -repo_url: https://github.com/pulp/pulp_python -theme: readthedocs -DOCSYAML - -# Building the bindings docs -mkdocs build - -# Pack the built site. -tar cvf ../../pulp_python/python-python-client-docs.tar ./site popd popd diff --git a/.github/workflows/scripts/check_commit.sh b/.github/workflows/scripts/check_commit.sh index 400e0542..0893fb24 100755 --- a/.github/workflows/scripts/check_commit.sh +++ b/.github/workflows/scripts/check_commit.sh @@ -14,5 +14,5 @@ set -euv for SHA in $(curl -H "Authorization: token $GITHUB_TOKEN" "$GITHUB_CONTEXT" | jq -r '.[].sha') do - python3 .ci/scripts/validate_commit_message.py "$SHA" + uv run --script .ci/scripts/validate_commit_message.py "$SHA" done diff --git a/.github/workflows/scripts/script.sh b/.github/workflows/scripts/script.sh index 3d7f2431..1d45d2fa 100755 --- a/.github/workflows/scripts/script.sh +++ b/.github/workflows/scripts/script.sh @@ -72,7 +72,7 @@ pushd ../pulp-openapi-generator rm -rf "./${PACKAGE}-client" ./gen-client.sh "${COMPONENT}-api.json" "${COMPONENT}" python "${PACKAGE}" pushd "${PACKAGE}-client" - python -m build + uv build popd else if [ ! -f "${PACKAGE}-client/dist/${PACKAGE}_client-${VERSION}-py3-none-any.whl" ] diff --git a/.github/workflows/scripts/update_backport_labels.py b/.github/workflows/scripts/update_backport_labels.py index 063314b6..e31fe51b 100755 --- a/.github/workflows/scripts/update_backport_labels.py +++ b/.github/workflows/scripts/update_backport_labels.py @@ -5,6 +5,16 @@ # # For more info visit https://github.com/pulp/plugin_template +# /// script +# requires-python = ">=3.12" +# dependencies = [ +# "pyyaml", +# "requests", +# ] +# /// + +# This script is running with elevated privileges from the main branch against pull requests. + import os import random diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 00e64503..b39789fd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -43,7 +43,7 @@ jobs: - uses: "actions/setup-python@v6" with: - python-version: "3.11" + python-version: "3.12" - name: "Install uv" uses: "astral-sh/setup-uv@v7" with: @@ -77,7 +77,7 @@ jobs: - name: "Install python dependencies" run: | - uv pip install build towncrier twine wheel httpie docker netaddr boto3 'ansible~=10.3.0' mkdocs jq jsonpatch bump-my-version + uv pip install httpie docker netaddr boto3 'ansible~=10.3.0' mkdocs jsonpatch echo "HTTPIE_CONFIG_DIR=$GITHUB_WORKSPACE/pulp_python/.ci/assets/httpie/" >> $GITHUB_ENV - name: "Set environment variables" diff --git a/.github/workflows/update-labels.yml b/.github/workflows/update-labels.yml index 59db92a5..f1db1a57 100644 --- a/.github/workflows/update-labels.yml +++ b/.github/workflows/update-labels.yml @@ -24,7 +24,7 @@ jobs: steps: - uses: "actions/setup-python@v6" with: - python-version: "3.11" + python-version: "3.12" - name: "Install uv" uses: "astral-sh/setup-uv@v7" with: @@ -33,13 +33,10 @@ jobs: run: | git config --global user.name 'pulpbot' git config --global user.email 'pulp-infra@redhat.com' - - name: "Install python dependencies" - run: | - uv pip install requests pyyaml - uses: "actions/checkout@v6" - name: "Update labels" run: | - python3 .github/workflows/scripts/update_backport_labels.py + uv run --script .github/workflows/scripts/update_backport_labels.py env: GITHUB_TOKEN: "${{ secrets.RELEASE_TOKEN }}" ...