Skip to content

Commit

Permalink
Update the workflows
Browse files Browse the repository at this point in the history
Maturin has offered some new workflow definitions. I've adapted many of
the changes into our existing workflows, while keeping some of the
important original functionality.
One nice change is the migration away from manylinux, so we'll see how
this pans out in the long run.
  • Loading branch information
JacobCallahan committed Oct 9, 2024
1 parent 69643fd commit d17b51b
Show file tree
Hide file tree
Showing 3 changed files with 382 additions and 222 deletions.
187 changes: 112 additions & 75 deletions .github/workflows/build_and_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,8 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: |
3.8
3.9
3.10
3.11
3.12
3.13
python-version-file: 'pyproject.toml'
check-latest: true
allow-prereleases: true
- name: Run pre-commit checks
run: |
Expand All @@ -52,47 +47,58 @@ jobs:

linux:
needs: [code_checks]
runs-on: ubuntu-latest
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
# s390x currently has issues with gcc
target: [x86_64, aarch64, armv7, ppc64le]
platform:
- runner: ubuntu-latest
target: x86_64
- runner: ubuntu-latest
target: x86
- runner: ubuntu-latest
target: aarch64
- runner: ubuntu-latest
target: armv7
# s390x currently has issues building openssl
# - runner: ubuntu-latest
# target: s390x
- runner: ubuntu-latest
target: ppc64le
steps:
- uses: actions/checkout@v4
- name: Temporary fix for openssl regression #25366
run: cargo update openssl-src --precise 300.3.1+3.3.1
- uses: actions/setup-python@v5
with:
python-version: |
3.8
3.9
3.10
3.11
3.12
3.13
python-version-file: 'pyproject.toml'
check-latest: true
allow-prereleases: true
- name: Temporary fix for openssl regression #25366
run: cargo update openssl-src --precise 300.3.1+3.3.1
- name: Build wheels
uses: PyO3/maturin-action@v1
env:
PKG_CONFIG_PATH: "/usr/share/miniconda/lib/pkgconfig/"
OPENSSL_NO_VENDOR: 1
with:
target: ${{ matrix.target }}
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
# sccache: 'true' # Disabled due to issues with sccache on linux
sccache: 'true'
manylinux: auto
before-script-linux: |
# If we're running on rhel centos, install needed packages. thx s3rius!
if command -v yum &> /dev/null; then
yum update -y && yum install -y gcc perl-core openssl openssl-devel pkgconfig libatomic
else
# If we're running on debian-based system.
apt update -y && apt-get install -y libssl-dev openssl pkg-config
apt update -y && apt-get install -y libssl-dev openssl pkg-config libatomic1
fi
# Create symlink for x86
if [ "${{ matrix.platform.target }}" = "x86" ]; then
ln -s /usr/lib/libatomic.so.1 /usr/lib/libatomic.so
fi
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-linux-${{ matrix.target }}
name: wheels-linux-${{ matrix.platform.target }}
path: dist
- name: Install and Test
shell: bash
Expand All @@ -101,72 +107,115 @@ jobs:
pip install .[dev] --find-links dist --force-reinstall
pytest -v tests/
windows:
musllinux:
needs: [code_checks]
runs-on: windows-latest
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
target: [x64, x86]
platform:
- runner: ubuntu-latest
target: x86_64
- runner: ubuntu-latest
target: x86
- runner: ubuntu-latest
target: aarch64
- runner: ubuntu-latest
target: armv7
steps:
- uses: actions/checkout@v4
- name: Temporary fix for openssl regression #25366
run: cargo update openssl-src --precise 300.3.1+3.3.1
- uses: actions/setup-python@v5
with:
python-version: |
3.8
3.9
3.10
3.11
3.12
3.13
python-version-file: 'pyproject.toml'
check-latest: true
allow-prereleases: true
architecture: ${{ matrix.target }}
- name: Set Perl environment variables
- name: Build wheels
uses: PyO3/maturin-action@v1
env:
PKG_CONFIG_PATH: "/usr/share/miniconda/lib/pkgconfig/"
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
# sccache: 'true'
manylinux: musllinux_1_2
before-script-linux: |
# If we're running on rhel centos, install needed packages. thx s3rius!
if command -v yum &> /dev/null; then
yum update -y && yum install -y gcc perl-core openssl openssl-devel pkgconfig libatomic
else
# If we're running on debian-based system.
apt update -y && apt-get install -y libssl-dev openssl pkg-config libatomic1
fi
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-musllinux-${{ matrix.platform.target }}
path: dist
- name: Install and Test
shell: bash
run: |
set -e
pip install .[dev] --find-links dist --force-reinstall
pytest -v tests/
windows:
needs: [code_checks]
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: windows-latest
target: x64
- runner: windows-latest
target: x86
steps:
- uses: actions/checkout@v4
- name: Install OpenSSL
shell: powershell
run: |
echo "PERL=$((where.exe perl)[0])" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
echo "OPENSSL_SRC_PERL=$((where.exe perl)[0])" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
- name: Remove wincred from docker config
run: sed -i '/wincred/d' ~/.docker/config.json
choco install openssl
# using main for windows due to this issue
# https://github.com/actions/setup-python/issues/935
- uses: actions/setup-python@main
with:
python-version-file: 'pyproject.toml'
check-latest: true
allow-prereleases: true
architecture: ${{ matrix.platform.target }}
- name: Build wheels
uses: PyO3/maturin-action@v1
env:
OPENSSL_DIR: C:\Program Files\OpenSSL-Win64
OPENSSL_STATIC: 1
with:
target: ${{ matrix.target }}
args: --release --out dist --find-interpreter
sccache: 'true'
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-windows-${{ matrix.target }}
name: wheels-windows-${{ matrix.platform.target }}
path: dist
- name: Install
shell: bash
run: pip install .[dev] --find-links dist --force-reinstall
# Disabled on windows due to issues with docker
# BuildError: no matching manifest for windows/amd64 ... in the manifest list entries
# - name: Test
# if: ${{ !startsWith(matrix.target, 'x86') }}
# shell: bash
# run: pytest -v tests/

macos:
needs: [code_checks]
runs-on: macos-latest
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
target: [x86_64, aarch64]
env:
OPENSSL_NO_VENDOR: 1
DOCKER_HOST: unix:///var/run/docker.sock
platform:
- runner: macos-12
target: x86_64
- runner: macos-14
target: aarch64
steps:
- uses: actions/checkout@v4
- name: Install OpenSSL
run: |
brew install [email protected]
- uses: actions/setup-python@v5
with:
python-version: |
3.8
3.9
3.10
3.11
3.12
3.13
python-version-file: 'pyproject.toml'
check-latest: true
allow-prereleases: true
- name: Set OPENSSL_DIR
run: echo "OPENSSL_DIR=$(brew --prefix openssl@3)" >> $GITHUB_ENV
Expand All @@ -179,17 +228,5 @@ jobs:
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-macos-${{ matrix.target }}
name: wheels-macos-${{ matrix.platform.target }}
path: dist
# - name: setup-docker
# run: |
# brew install docker
# open --background -a Docker
# while ! docker info &> /dev/null; do sleep 1; done
- name: Install
shell: bash
run: pip install .[dev] --find-links dist --force-reinstall
# Disabled on macos due to issues with docker
# - name: Test
# shell: bash
# run: pytest -v tests/
Loading

0 comments on commit d17b51b

Please sign in to comment.