| # Runs CI tests and generates wheels on the following platforms: |
| # |
| # * Linux (py2 and py3) |
| # * macOS (py2 and py3) |
| # * Windows (py3, py2 is done by appveyor) |
| # |
| # Useful URLs: |
| # * https://github.com/pypa/cibuildwheel |
| # * https://github.com/actions/checkout |
| # * https://github.com/actions/setup-python |
| # * https://github.com/actions/upload-artifact |
| |
| on: [push, pull_request] |
| name: build |
| concurrency: |
| group: ${{ github.ref }}-${{ github.workflow }}-${{ github.event_name }}-${{ github.ref == format('refs/heads/{0}', github.event.repository.default_branch) && github.sha || '' }} |
| cancel-in-progress: true |
| jobs: |
| # Linux + macOS + Windows Python 3 |
| py3: |
| name: "py3, ${{ matrix.os }}, ${{ matrix.arch }}" |
| runs-on: ${{ matrix.os }} |
| timeout-minutes: 30 |
| strategy: |
| fail-fast: false |
| matrix: |
| include: |
| - {os: ubuntu-latest, arch: x86_64} |
| - {os: ubuntu-latest, arch: i686} |
| - {os: ubuntu-latest, arch: aarch64} |
| - {os: macos-13, arch: x86_64} |
| - {os: macos-14, arch: arm64} |
| - {os: windows-2019, arch: AMD64} |
| - {os: windows-2019, arch: x86} |
| steps: |
| - uses: actions/checkout@v4 |
| |
| # see https://cibuildwheel.pypa.io/en/stable/faq/#macos-building-cpython-38-wheels-on-arm64 |
| - name: "Install python 3.8 universal2 on macOS arm64" |
| if: runner.os == 'macOS' && runner.arch == 'ARM64' |
| uses: actions/setup-python@v5 |
| env: |
| PIP_DISABLE_PIP_VERSION_CHECK: 1 |
| with: |
| python-version: 3.8 |
| |
| - uses: actions/setup-python@v5 |
| with: |
| python-version: 3.11 |
| |
| - name: Set up QEMU |
| uses: docker/setup-qemu-action@v3 |
| if: matrix.arch == 'aarch64' |
| |
| - name: Create wheels + run tests |
| uses: pypa/cibuildwheel@v2.22.0 |
| env: |
| CIBW_ARCHS: "${{ matrix.arch }}" |
| CIBW_ENABLE: "cpython-prerelease" |
| CIBW_TEST_EXTRAS: test |
| CIBW_TEST_COMMAND: |
| make -C {project} PYTHON="env python" PSUTIL_SCRIPTS_DIR="{project}/scripts" install-sysdeps install-pydeps-test install print-sysinfo test test-memleaks |
| |
| - name: Upload wheels |
| uses: actions/upload-artifact@v4 |
| with: |
| name: wheels-py3-${{ matrix.os }}-${{ matrix.arch }} |
| path: wheelhouse |
| |
| - name: Generate .tar.gz |
| if: matrix.os == 'ubuntu-latest' |
| run: | |
| make generate-manifest |
| python setup.py sdist |
| mv dist/psutil*.tar.gz wheelhouse/ |
| |
| # Linux + macOS + Python 2 |
| py2: |
| name: py2, ${{ matrix.os }} |
| runs-on: ${{ matrix.os }} |
| timeout-minutes: 20 |
| strategy: |
| fail-fast: false |
| matrix: |
| os: [ubuntu-latest, macos-13] |
| env: |
| CIBW_BUILD: 'cp27-*' |
| CIBW_TEST_EXTRAS: test |
| CIBW_TEST_COMMAND: |
| make -C {project} PYTHON="env python" PSUTIL_SCRIPTS_DIR="{project}/scripts" install-sysdeps install-pydeps-test install print-sysinfo test test-memleaks |
| |
| steps: |
| - uses: actions/checkout@v4 |
| - uses: actions/setup-python@v5 |
| with: |
| python-version: 3.9 |
| |
| - name: Create wheels + run tests |
| uses: pypa/cibuildwheel@v1.12.0 |
| |
| - name: Upload wheels |
| uses: actions/upload-artifact@v4 |
| with: |
| name: wheels-py2-${{ matrix.os }} |
| path: wheelhouse |
| |
| - name: Generate .tar.gz |
| if: matrix.os == 'ubuntu-latest' |
| run: | |
| make generate-manifest |
| python setup.py sdist |
| mv dist/psutil*.tar.gz wheelhouse/ |
| |
| # Run linters |
| linters: |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v4 |
| - uses: actions/setup-python@v5 |
| with: |
| python-version: 3.x |
| - name: 'Run linters' |
| run: | |
| python3 -m pip install ruff black rstcheck toml-sort sphinx |
| make lint-all |
| |
| # upload weels as a single artefact |
| upload-wheels: |
| needs: [py2, py3] |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/upload-artifact/merge@v4 |
| with: |
| name: wheels |
| pattern: wheels-* |
| separate-directories: false |
| delete-merged: true |
| |
| # Check sanity of .tar.gz + wheel files |
| check-dist: |
| needs: [upload-wheels] |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v4 |
| - uses: actions/setup-python@v5 |
| with: |
| python-version: 3.x |
| - uses: actions/download-artifact@v4 |
| with: |
| name: wheels |
| path: wheelhouse |
| - run: | |
| python scripts/internal/print_hashes.py wheelhouse/ |
| pipx run twine check --strict wheelhouse/* |
| pipx run abi3audit --verbose --strict wheelhouse/*-abi3-*.whl |