Treat an explicitly empty value as set, not absent, when writing Dynamic #7246
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: tests | |
| on: | |
| merge_group: | |
| push: | |
| branches-ignore: | |
| # temporary GH branches relating to merge queues (jaraco/skeleton#93) | |
| - gh-readonly-queue/** | |
| tags: | |
| # required if branches-ignore is supplied (jaraco/skeleton#103) | |
| - '**' | |
| pull_request: | |
| workflow_dispatch: | |
| concurrency: | |
| group: >- | |
| ${{ github.workflow }}- | |
| ${{ github.ref_type }}- | |
| ${{ github.event.pull_request.number || github.sha }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| jobs: | |
| test: | |
| strategy: | |
| # https://blog.jaraco.com/efficient-use-of-ci-resources/ | |
| matrix: | |
| python: | |
| - "3.10" | |
| - "3.14" | |
| - "3.14t" | |
| platform: | |
| - ubuntu-latest | |
| - macos-latest | |
| - windows-latest | |
| include: | |
| - python: "3.11" | |
| platform: ubuntu-latest | |
| - python: "3.12" | |
| platform: ubuntu-latest | |
| - python: "3.13" | |
| platform: ubuntu-latest | |
| # Disabled: cffi (required by PyNaCl) doesn't support free-threaded CPython 3.13t. | |
| # - python: "3.13t" | |
| # platform: ubuntu-latest | |
| - python: "3.15" | |
| platform: ubuntu-latest | |
| - python: pypy3.11 | |
| platform: ubuntu-latest | |
| distutils: stdlib | |
| - platform: ubuntu-latest | |
| python: "3.10" | |
| distutils: stdlib | |
| uses: ./.github/workflows/test-suite.yml | |
| with: | |
| job: ${{ github.job }} | |
| python: ${{ matrix.python }} | |
| platform: ${{ matrix.platform }} | |
| distutils: ${{ matrix.distutils }} | |
| full-test: true | |
| secrets: inherit | |
| collateral: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| job: | |
| - diffcov | |
| - docs | |
| uses: ./.github/workflows/test-suite.yml | |
| with: | |
| platform: ubuntu-latest | |
| tox-env: ${{ matrix.job }} | |
| check: # This job does nothing and is only used for the branch protection | |
| if: always() | |
| needs: | |
| - check-changed-folders | |
| - integration-test | |
| - test | |
| - collateral | |
| - test_cygwin | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Decide whether the needed jobs succeeded or failed | |
| uses: re-actors/alls-green@release/v1 | |
| with: | |
| allowed-skips: check-changed-folders, integration-test | |
| jobs: ${{ toJSON(needs) }} | |
| test_cygwin: | |
| strategy: | |
| matrix: | |
| python: | |
| - 312 | |
| platform: | |
| - windows-latest | |
| runs-on: ${{ matrix.platform }} | |
| timeout-minutes: 75 | |
| # Decoupled from the reusable test-suite.yml (Cygwin needs its own shell); | |
| # env vars shared with that workflow are duplicated here deliberately. | |
| env: | |
| FORCE_COLOR: 1 | |
| PIP_DISABLE_PIP_VERSION_CHECK: 'true' | |
| PIP_NO_WARN_SCRIPT_LOCATION: 'true' | |
| TOX_OVERRIDE: >- | |
| testenv.pass_env+=GITHUB_*,FORCE_COLOR | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Cygwin with Python | |
| uses: cygwin/cygwin-install-action@v4 | |
| with: | |
| platform: x86_64 | |
| packages: >- | |
| python${{ matrix.python }}, | |
| python${{ matrix.python }}-devel, | |
| python${{ matrix.python }}-pip, | |
| gcc-core, | |
| git, | |
| - name: Record the currently selected Python version | |
| id: python-install | |
| # NOTE: This roughly emulates what `actions/setup-python` provides | |
| # NOTE: except the action gets the version from the installation path | |
| # NOTE: on disk and we get it from runtime. | |
| run: | | |
| python -c 'import platform; print("python-version=" + platform.python_version())' >> ${GITHUB_OUTPUT} | |
| shell: C:\cygwin\bin\env.exe CYGWIN_NOWINPATH=1 CHERE_INVOKING=1 C:\cygwin\bin\bash.exe -leo pipefail -o igncr {0} | |
| - name: Install tox using pip | |
| shell: C:\cygwin\bin\env.exe CYGWIN_NOWINPATH=1 CHERE_INVOKING=1 C:\cygwin\bin\bash.exe -leo pipefail -o igncr {0} | |
| run: | | |
| # Workaround for https://github.com/pypa/setuptools/issues/4831 | |
| python -m pip install tox | |
| - name: Run tests | |
| shell: C:\cygwin\bin\env.exe CYGWIN_NOWINPATH=1 CHERE_INVOKING=1 C:\cygwin\bin\bash.exe -leo pipefail -o igncr {0} | |
| run: | | |
| git config --global --add safe.directory "$(cygpath -u "${{ github.workspace }}")" # workaround for #3408 | |
| echo "$(cygpath -u "${{ github.workspace }}")" # for debugging purposes | |
| python -m tox | |
| - name: Create coverage report | |
| if: hashFiles('.coverage') != '' # Rudimentary `file.exists()` | |
| run: | | |
| python -m pip install coverage | |
| python -m coverage xml --ignore-errors | |
| shell: C:\cygwin\bin\env.exe CYGWIN_NOWINPATH=1 CHERE_INVOKING=1 C:\cygwin\bin\bash.exe -leo pipefail -o igncr {0} | |
| - name: Publish coverage | |
| if: hashFiles('coverage.xml') != '' # Rudimentary `file.exists()` | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| flags: >- # Mark which lines are covered by which envs | |
| CI-GHA, | |
| ${{ github.job }}, | |
| OS-${{ runner.os }}, | |
| VM-${{ matrix.platform }}, | |
| Py-${{ steps.python-install.outputs.python-version }} | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| check-changed-folders: | |
| name: Fail the job if files changed under _disutils/_vendor folders | |
| if: github.event_name == 'pull_request' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v3 | |
| with: | |
| fetch-depth: 0 | |
| - name: Check if files changed in the _distutils folder | |
| id: changed-files-specific-distutils | |
| uses: tj-actions/changed-files@v46 | |
| with: | |
| files: | | |
| setuptools/_distutils/** | |
| - name: Check if files changed in the _vendor folder | |
| id: changed-files-specific-vendor | |
| uses: tj-actions/changed-files@v46 | |
| with: | |
| files: | | |
| setuptools/_vendor/** | |
| - name: Fail the job if any file(s) in the _distutils folder change | |
| if: steps.changed-files-specific-distutils.outputs.any_changed == 'true' | |
| run: | | |
| echo "One or more files in the setuptools/_distutils folder has changed." | tee "${GITHUB_STEP_SUMMARY}" | |
| exit 1 | |
| - name: Fail the job if any file(s) in the _vendor folder change | |
| if: steps.changed-files-specific-vendor.outputs.any_changed == 'true' | |
| run: | | |
| echo "One or more files in the setuptools/_vendor folder has changed." | tee "${GITHUB_STEP_SUMMARY}" | |
| exit 1 | |
| integration-test: | |
| needs: test | |
| if: github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && contains(github.ref, 'refs/tags/')) | |
| # To avoid long times and high resource usage, we assume that: | |
| # 1. The setuptools APIs used by packages don't vary too much with OS or | |
| # Python implementation | |
| # 2. Any circumstance for which the previous assumption is not valid is | |
| # already tested via unit tests (or other tests not classified here as | |
| # "integration") | |
| # With that in mind, the integration tests can run for a single setup | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 75 | |
| # Decoupled from the reusable test-suite.yml; env vars shared with that | |
| # workflow are duplicated here deliberately. | |
| env: | |
| FORCE_COLOR: 1 | |
| PIP_DISABLE_PIP_VERSION_CHECK: 'true' | |
| PIP_NO_WARN_SCRIPT_LOCATION: 'true' | |
| TOX_OVERRIDE: >- | |
| testenv.pass_env+=GITHUB_*,FORCE_COLOR | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install OS-level dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install build-essential gfortran libopenblas-dev libyaml-dev | |
| - name: Setup Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| # Use a release that is not very new but still have a long life: | |
| python-version: "3.10" | |
| - name: Install tox | |
| run: | | |
| python -m pip install tox | |
| - name: Run integration tests | |
| run: tox -e integration | |
| release: | |
| permissions: | |
| contents: write | |
| needs: | |
| - check | |
| if: >- # `always()` prevents auto-cancellation when previous steps are skipped (#5151): | |
| always() | |
| && needs.check.result == 'success' | |
| && github.event_name == 'push' && github.ref_type == 'tag' | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 75 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: 3.x | |
| - name: Install tox | |
| run: python -m pip install tox | |
| - name: Run | |
| run: tox -e release | |
| env: | |
| TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |