Skip to content

Wheels

Wheels #615

Workflow file for this run

name: Wheels
on:
push:
pull_request:
paths-ignore:
- "CONTRIBUTING.md"
release:
types:
- published
schedule:
# At 12:00 on every day-of-month
- cron: "0 12 */1 * *"
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
build_sdist:
name: Build source distribution
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build sdist
run: pipx run build --sdist
- uses: actions/upload-artifact@v3
with:
path: dist/*.tar.gz
choose_architectures:
name: Decide which architectures to build wheels for
runs-on: ubuntu-latest
steps:
- id: x86_64
run: echo "cibw_arch=x86_64" >> $GITHUB_OUTPUT
- id: aarch64
if: github.event_name == 'release' && github.event.action == 'published'
run: echo "cibw_arch=aarch64" >> $GITHUB_OUTPUT
outputs:
cibw_arches: ${{ toJSON(steps.*.outputs.cibw_arch) }}
build_wheels:
needs: [build_sdist, choose_architectures]
name: Wheel for Linux-${{ matrix.cibw_python }}-${{ matrix.cibw_arch }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
cibw_python: ["cp37-*", "cp38-*", "cp39-*", "cp310-*", "cp311-*", "cp312-*"]
cibw_arch: ${{ fromJSON(needs.choose_architectures.outputs.cibw_arches) }}
steps:
- name: Disable ptrace security restrictions
run: |
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
- uses: docker/setup-qemu-action@v2
if: runner.os == 'Linux'
name: Set up QEMU
- uses: actions/download-artifact@v3
with:
name: artifact
- name: Extract sdist
run: |
tar zxvf *.tar.gz --strip-components=1
- name: Build wheels
uses: pypa/cibuildwheel@v2.15.0
env:
CIBW_BUILD: ${{ matrix.cibw_python }}
CIBW_ARCHS_LINUX: ${{ matrix.cibw_arch }}
CIBW_PRERELEASE_PYTHONS: True
- uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl
test_attaching_to_old_interpreters:
needs: [build_wheels]
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
python_version: ["2.7", "3.6"]
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: artifact
path: dist
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Set up dependencies
run: |
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install -qy \
gdb \
python2.7-dev python2.7-dbg \
python3.6-dev python3.6-dbg python3.6-distutils
- name: Install Python dependencies
run: |
python3 -m pip install --upgrade pip
python3 -m pip install -r requirements-test.txt
python3 -m pip install --no-index --find-links=dist/ --only-binary=pystack pystack
- name: Disable ptrace security restrictions
run: |
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
- name: Run pytest
env:
PYTHON_TEST_VERSION: ${{ matrix.python_version }}
run: python3 -m pytest tests -n auto -vvv
test_wheels:
needs: [build_wheels]
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
python_version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: artifact
path: dist
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "${{matrix.python_version}}-dev"
- name: Set up dependencies
run: |
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install -qy \
gdb \
python${{matrix.python_version}}-dev \
python${{matrix.python_version}}-dbg \
python${{matrix.python_version}}-distutils
- name: Install Python dependencies
run: |
python${{matrix.python_version}} -m pip install --upgrade pip
python${{matrix.python_version}} -m pip install -r requirements-test.txt
python${{matrix.python_version}} -m pip install --no-index --find-links=dist/ --only-binary=pystack pystack
- name: Disable ptrace security restrictions
run: |
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
- name: Run pytest
env:
PYTHON_TEST_VERSION: "auto"
run: python${{matrix.python_version}} -m pytest tests -k 'not 2.7' -n auto -vvv
test_in_alpine:
needs: [build_wheels]
runs-on: ubuntu-latest
strategy:
fail-fast: false
container:
image: alpine
options: --cap-add=SYS_PTRACE
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: artifact
path: dist
- name: Set up dependencies
run: |
apk add --update alpine-sdk bash alpine-sdk python3 python3-dev gdb musl-dbg python3-dbg
- name: Install Python dependencies
run: |
python3 -m venv venv
venv/bin/python3 -m pip install --upgrade pip
venv/bin/python3 -m pip install -r requirements-test.txt
venv/bin/python3 -m pip install --no-index --find-links=dist/ --only-binary=pystack pystack
- name: Run pytest
env:
PYTHON_TEST_VERSION: "auto"
run: venv/bin/python3 -m pytest tests -k 'not 2.7' -n auto -vvv
test_wheels_in_fedora:
needs: [build_wheels]
runs-on: ubuntu-latest
strategy:
fail-fast: false
container:
image: fedora
options: --cap-add=SYS_PTRACE
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: artifact
path: dist
- name: Set up dependencies
run: |
dnf install -y \
gdb \
g++ \
file \
python3 \
python3-devel \
python3-debug
- name: Install Python dependencies
run: |
python3 -m pip install --upgrade pip
python3 -m pip install -r requirements-test.txt
python3 -m pip install --no-index --find-links=dist/ --only-binary=pystack pystack
- name: Run pytest
env:
PYTHON_TEST_VERSION: "auto"
run: python3 -m pytest tests -k 'not 2.7' -n auto -vvv
test_wheels_in_arch:
needs: [build_wheels]
runs-on: ubuntu-latest
strategy:
fail-fast: false
container:
image: archlinux
options: --cap-add=SYS_PTRACE --security-opt seccomp=unconfined
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: artifact
path: dist
- name: Set up dependencies
run: |
pacman -Syu --noconfirm \
gdb \
gcc \
file \
python \
python-pip \
python-setuptools \
python-wheel
- name: Install Python dependencies
run: |
python -m venv venv
venv/bin/python -m pip install --upgrade pip
venv/bin/python -m pip install -r requirements-test.txt
venv/bin/python -m pip install --no-index --find-links=dist/ --only-binary=pystack pystack
- name: Run pytest
env:
PYTHON_TEST_VERSION: "auto"
run: venv/bin/python -m pytest tests -k 'not 2.7' -n auto -vvv
test_wheels_in_debian:
needs: [build_wheels]
runs-on: ubuntu-latest
strategy:
fail-fast: false
container:
image: debian
options: --cap-add=SYS_PTRACE
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: artifact
path: dist
- name: Set up dependencies
run: |
apt-get update
apt-get install -qy \
gdb \
file \
python3-dev \
python3-pip \
python3-venv \
python3-dbg \
python3-distutils
- name: Install Python dependencies
run: |
python3 -m venv venv
venv/bin/python3 -m pip install --upgrade pip
venv/bin/python3 -m pip install -r requirements-test.txt
venv/bin/python3 -m pip install --no-index --find-links=dist/ --only-binary=pystack pystack
- name: Run pytest
env:
PYTHON_TEST_VERSION: "auto"
run: venv/bin/python3 -m pytest tests -k 'not 2.7' -n auto -vvv
upload_pypi:
needs: [test_wheels]
runs-on: ubuntu-latest
if: github.event_name == 'release' && github.event.action == 'published'
steps:
- uses: actions/download-artifact@v3
with:
name: artifact
path: dist
- uses: pypa/gh-action-pypi-publish@release/v1
with:
skip_existing: true
password: ${{ secrets.PYPI_PASSWORD }}