From af5c6536aba77b1db99bb16995d3a684351efb93 Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Thu, 9 Mar 2023 13:14:06 -0800 Subject: [PATCH] New python312dev.yml (to replace upstream.yml) (#30006) * Replace upstream.yml with new python312.yml * Revert "Replace upstream.yml with new python312.yml" This reverts commit 9a6b9b4e6fee7a4b9d88f09f666f7cba9773265a. * Bring back python312.yml as upstream.yml * Move upstream.yml back to python312.yml * Move python312.yml to python312dev.yml * Change label python312dev to gha_wf_python312dev_enable; introduce label gha_wf_ci_disable. * FlakyException failure_point_init debugging prints * Revert "FlakyException failure_point_init debugging prints" This reverts commit d38c9daa2a20e91945a1a0c510e0b4b3e00bedd0. * Skip failing test specifically for 3.12alpha6 Root problem: * Up to and including 3.12alpha3: `PyErr_Fetch()` produces the `FlakyException` type. * With 3.12alpha6: `PyErr_Fetch()` produces the `ValueError` type instead. Additional detail: Up to and including 3.12alpha3: only `PyErr_NormalizeException()` hits the `ValueError` in `FlakyException._init__`, but not `PyErr_Fetch()`. * Remove test code that does not exercise anything in pybind11, but breaks between Python 3.12alpha3 (still working) and 3.12alpha6 (broken): ``` str(OrderedDict([(1, "a"), (2, "b")])) ``` Old: ``` OrderedDict([(1, 'a'), (2, 'b')]) ``` New: ``` OrderedDict({1: 'a', 2: 'b'}) ``` * Document that test_embed is still failing (tested only interactively with locally install 3.12alpha6, but the behavior is exactly the same as previously observed in the GH workflow). * Try again: gha_wf_ci_disable * Give up on trying to use label to disable entire workflow file. --- .github/workflows/python312dev.yml | 143 +++++++++++++++++++++++++++++ .github/workflows/upstream.yml | 114 ----------------------- tests/test_exceptions.py | 5 + tests/test_modules.py | 1 - 4 files changed, 148 insertions(+), 115 deletions(-) create mode 100644 .github/workflows/python312dev.yml delete mode 100644 .github/workflows/upstream.yml diff --git a/.github/workflows/python312dev.yml b/.github/workflows/python312dev.yml new file mode 100644 index 00000000..cf61d6dd --- /dev/null +++ b/.github/workflows/python312dev.yml @@ -0,0 +1,143 @@ +name: python312dev + +on: + workflow_dispatch: + pull_request: + +concurrency: + group: python312dev-${{ github.ref }} + cancel-in-progress: false + +env: + PYTEST_TIMEOUT: 300 + +jobs: + standard: + name: "🐍 3.12-dev • ubuntu-latest • x64" + runs-on: ubuntu-latest + + # Hint: Select the label in the PR web view. + if: "contains(github.event.pull_request.labels.*.name, 'gha_wf_python312dev_enable')" + + steps: + - name: Show env + run: env + + - uses: actions/checkout@v3 + + - name: Setup Python 3.12-dev + uses: actions/setup-python@v4 + with: + python-version: "3.12-dev" + + - name: Setup Boost + run: sudo apt-get install libboost-dev + + - name: Update CMake + uses: jwlawson/actions-setup-cmake@v1.13 + + - name: Run pip installs + run: | + python -m pip install --upgrade pip + python -m pip install --prefer-binary -r tests/requirements.txt + # python -m pip install --prefer-binary numpy # SLOW + # python -m pip install --prefer-binary scipy # FAILED ~Nov 2022 + + - name: Show platform info + run: python -m platform + + - name: Show CMake version + run: cmake --version + + # FIRST BUILD + - name: Configure C++11 + run: > + cmake -S . -B build11 + -DCMAKE_VERBOSE_MAKEFILE=ON + -DPYBIND11_WERROR=ON + -DDOWNLOAD_CATCH=ON + -DDOWNLOAD_EIGEN=ON + -DCMAKE_CXX_STANDARD=11 + -DCMAKE_BUILD_TYPE=Debug + + - name: Build C++11 + run: cmake --build build11 -j 2 + + - name: Python tests C++11 + run: cmake --build build11 --target pytest -j 2 + + # python-3.12.0-alpha.1-linux-22.04-x64.tar.gz PASSED + # python-3.12.0-alpha.2-linux-22.04-x64.tar.gz FAILED + # python-3.12.0-alpha.3-linux-22.04-x64.tar.gz FAILED + # python-3.12.0-alpha.6-linux-22.04-x64.tar.gz FAILED + # free(): invalid pointer + # Custom PyConfig + # /home/runner/work/pybind11/pybind11/tests/test_embed/test_interpreter.cpp:175 + # /home/runner/work/pybind11/pybind11/tests/test_embed/test_interpreter.cpp:179: FAILED: + # gdb traceback points here: + # https://github.com/python/cpython/blame/54289f85b2af1ecf046089ddf535dda1bdf6af24/Python/import.c#L524 + # - name: C++ tests C++11 + # run: cmake --build build11 --target cpptest -j 2 + + - name: Interface test C++11 + run: cmake --build build11 --target test_cmake_build + + - name: Clean directory + run: git clean -fdx + + # SECOND BUILD + - name: Configure C++17 + run: > + cmake -S . -B build17 + -DCMAKE_VERBOSE_MAKEFILE=ON + -DPYBIND11_WERROR=ON + -DDOWNLOAD_CATCH=ON + -DDOWNLOAD_EIGEN=ON + -DCMAKE_CXX_STANDARD=17 + -DCMAKE_BUILD_TYPE=Debug + + - name: Build C++17 + run: cmake --build build17 -j 2 + + - name: Python tests C++17 + run: cmake --build build17 --target pytest + + # - name: C++ tests C++17 + # run: cmake --build build17 --target cpptest + + - name: Interface test C++17 + run: cmake --build build17 --target test_cmake_build + + - name: Clean directory + run: git clean -fdx + + # THIRD BUILD + - name: Configure C++17 max DPYBIND11_INTERNALS_VERSION + run: > + cmake -S . -B build17max + -DCMAKE_VERBOSE_MAKEFILE=ON + -DPYBIND11_WERROR=ON + -DDOWNLOAD_CATCH=ON + -DDOWNLOAD_EIGEN=ON + -DCMAKE_CXX_STANDARD=17 + -DCMAKE_BUILD_TYPE=Debug + -DPYBIND11_INTERNALS_VERSION=10000000 + + - name: Build C++17 max DPYBIND11_INTERNALS_VERSION + run: cmake --build build17max -j 2 + + - name: Python tests C++17 max DPYBIND11_INTERNALS_VERSION + run: cmake --build build17max --target pytest + + # - name: C++ tests C++17 max DPYBIND11_INTERNALS_VERSION + # run: cmake --build build17max --target cpptest + + - name: Interface test C++17 max DPYBIND11_INTERNALS_VERSION + run: cmake --build build17max --target test_cmake_build + + # Ensure the setup_helpers module can build packages using setuptools + - name: Setuptools helpers test + run: pytest tests/extra_setuptools + + - name: Clean directory + run: git clean -fdx diff --git a/.github/workflows/upstream.yml b/.github/workflows/upstream.yml deleted file mode 100644 index a15861ee..00000000 --- a/.github/workflows/upstream.yml +++ /dev/null @@ -1,114 +0,0 @@ - -name: Upstream - -on: - workflow_dispatch: - pull_request: - -concurrency: - group: upstream-${{ github.ref }} - cancel-in-progress: true - -env: - PIP_ONLY_BINARY: numpy - # For cmake: - VERBOSE: 1 - -jobs: - standard: - name: "🐍 3.11 latest internals • ubuntu-latest • x64" - runs-on: ubuntu-latest - if: "contains(github.event.pull_request.labels.*.name, 'python dev')" - - steps: - - uses: actions/checkout@v3 - - - name: Setup Python 3.11 - uses: actions/setup-python@v4 - with: - python-version: "3.11-dev" - - - name: Setup Boost (Linux) - if: runner.os == 'Linux' - run: sudo apt-get install libboost-dev - - - name: Update CMake - uses: jwlawson/actions-setup-cmake@v1.13 - - - name: Prepare env - run: | - python -m pip install -r tests/requirements.txt - - - name: Setup annotations on Linux - if: runner.os == 'Linux' - run: python -m pip install pytest-github-actions-annotate-failures - - # First build - C++11 mode and inplace - - name: Configure C++11 - run: > - cmake -S . -B . - -DPYBIND11_WERROR=ON - -DDOWNLOAD_CATCH=ON - -DDOWNLOAD_EIGEN=ON - -DCMAKE_CXX_STANDARD=11 - - - name: Build C++11 - run: cmake --build . -j 2 - - - name: Python tests C++11 - run: cmake --build . --target pytest -j 2 - - - name: C++11 tests - run: cmake --build . --target cpptest -j 2 - - - name: Interface test C++11 - run: cmake --build . --target test_cmake_build - - - name: Clean directory - run: git clean -fdx - - # Second build - C++17 mode and in a build directory - - name: Configure C++17 - run: > - cmake -S . -B build2 - -DPYBIND11_WERROR=ON - -DDOWNLOAD_CATCH=ON - -DDOWNLOAD_EIGEN=ON - -DCMAKE_CXX_STANDARD=17 - ${{ matrix.args }} - ${{ matrix.args2 }} - - - name: Build - run: cmake --build build2 -j 2 - - - name: Python tests - run: cmake --build build2 --target pytest - - - name: C++ tests - run: cmake --build build2 --target cpptest - - # Third build - C++17 mode with unstable ABI - - name: Configure (unstable ABI) - run: > - cmake -S . -B build3 - -DPYBIND11_WERROR=ON - -DDOWNLOAD_CATCH=ON - -DDOWNLOAD_EIGEN=ON - -DCMAKE_CXX_STANDARD=17 - -DPYBIND11_INTERNALS_VERSION=10000000 - "-DPYBIND11_TEST_OVERRIDE=test_call_policies.cpp;test_gil_scoped.cpp;test_thread.cpp" - ${{ matrix.args }} - - - name: Build (unstable ABI) - run: cmake --build build3 -j 2 - - - name: Python tests (unstable ABI) - run: cmake --build build3 --target pytest - - - name: Interface test - run: cmake --build build3 --target test_cmake_build - - # This makes sure the setup_helpers module can build packages using - # setuptools - - name: Setuptools helpers test - run: pytest tests/extra_setuptools diff --git a/tests/test_exceptions.py b/tests/test_exceptions.py index 7f80a5da..0a097f2a 100644 --- a/tests/test_exceptions.py +++ b/tests/test_exceptions.py @@ -317,6 +317,11 @@ def test_error_already_set_what_with_happy_exceptions( assert what == expected_what +@pytest.mark.skipif( + # Intentionally very specific: + "sys.version_info == (3, 12, 0, 'alpha', 6)", + reason="Suspected bug in 3.12alpha6", +) @pytest.mark.skipif("env.PYPY", reason="PyErr_NormalizeException Segmentation fault") def test_flaky_exception_failure_point_init(): with pytest.raises(RuntimeError) as excinfo: diff --git a/tests/test_modules.py b/tests/test_modules.py index 3d73e3fb..2f6d825b 100644 --- a/tests/test_modules.py +++ b/tests/test_modules.py @@ -63,7 +63,6 @@ def test_importing(): from pybind11_tests.modules import OD assert OD is OrderedDict - assert str(OD([(1, "a"), (2, "b")])) == "OrderedDict([(1, 'a'), (2, 'b')])" def test_pydoc():