diff options
Diffstat (limited to '.github/workflows/ci.yml')
-rw-r--r-- | .github/workflows/ci.yml | 111 |
1 files changed, 82 insertions, 29 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a8466e0f1..2ac66970e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,36 +8,89 @@ on: jobs: build: - - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 strategy: matrix: + start-method: + - 'fork' + - 'spawn' python-version: - - '3.6' - - '3.7' - - '3.8' - - '3.9' - - '3.10.0-alpha - 3.10.0' - - 'pypy-3.7' - + - '3.9' + - '3.10' + - '3.11' + - '3.12' + - '3.13-dev' + - 'pypy-3.10' + exclude: + - python-version: '3.9' + start-method: 'spawn' + - python-version: '3.10' + start-method: 'spawn' + - python-version: '3.11' + start-method: 'spawn' + - python-version: '3.13-dev' + start-method: 'spawn' + - python-version: 'pypy-3.10' + start-method: 'spawn' + fail-fast: false steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install python dependencies - run: | - set -xe - sudo apt-get install -y --no-install-recommends libxslt-dev libxml2-dev libxml2-utils zstd - python -VV - python -m site - python -m pip install --upgrade pip - python -m pip install tox tox-gh-actions - - name: Test ./setup.py install --root=/tmp/install-root - run: | - printf "[build_ext]\nportage_ext_modules=true" >> setup.cfg - ./setup.py install --root=/tmp/install-root - - name: Run tox targets for ${{ matrix.python-version }} - run: | - tox -vv + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + set -xe + echo "force-unsafe-io" | sudo tee /etc/dpkg/dpkg.cfg.d/force-unsafe-io + sudo apt-get update -q + sudo apt-get install -qy --no-install-recommends libxslt-dev libxml2-dev libxml2-utils meson pax-utils zstd + + # Patch Ubuntu's old Meson to fix pypy-3.9 detection. + curl -s -f https://github.com/mesonbuild/meson/commit/2540ad6e9e08370ddd0b6753fdc9314945a672f0.patch | sudo patch -d /usr/lib/python3/dist-packages -p1 --no-backup-if-mismatch + + python -VV + python -m site + python -m pip install --upgrade pip + # setuptools needed for 3.12+ because of https://github.com/mesonbuild/meson/issues/7702. + python -m pip install pytest pytest-rerunfailures pytest-xdist setuptools + + # symlink /bin/true to /usr/bin/getuto (or do we want to grab the script from github?) + sudo ln -s /bin/true /usr/bin/getuto + - name: Patch python scripts to set spawn start method + if: ${{ matrix.start-method == 'spawn' }} + run: | + IFS='' + while read -r bin_file; do + if [[ $(head -n1 "${bin_file}") == '#!/usr/bin/env python' ]]; then + mode=top + while read -r line; do + if [[ ${mode} == top ]]; then + if [[ ${line} == \#* ]]; then + echo "${line}" + else + echo "import multiprocessing" + echo 'multiprocessing.set_start_method("spawn", force=True)' + echo "${line}" + mode=bottom + fi + else + echo "${line}" + fi + done < "${bin_file}" > "${bin_file}.new" + chmod +x "${bin_file}.new" + mv "${bin_file}"{.new,} + fi + done < <(find bin -maxdepth 1 -type f) + - name: Test meson install --destdir /tmp/install-root + run: | + echo -e "[binaries]\npython = '$(command -v python)'" > /tmp/native.ini + meson setup --native-file /tmp/native.ini /tmp/build . + meson install -C /tmp/build --destdir /tmp/install-root + - name: Run tests for ${{ matrix.python-version }} + run: | + [[ "${{ matrix.start-method }}" == "spawn" ]] && export PORTAGE_MULTIPROCESSING_START_METHOD=spawn + export PYTEST_ADDOPTS="-vv -ra -l -o console_output_style=count -n $(nproc) --dist=worksteal" + # Use pytest-rerunfailures to workaround pytest-xdist worker crashes with spawn start-method (bug 924416). + [[ "${{ matrix.start-method }}" == "spawn" ]] && PYTEST_ADDOPTS+=" --reruns 5 --only-rerun 'worker .* crashed while running'" + meson test -C /tmp/build --verbose |