Skip to content

Add a GitHub Actions workflow for automatically publishing releases to PyPI #141

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
161 changes: 161 additions & 0 deletions .github/workflows/pypi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
# This file is autogenerated by maturin v1.5.1, and minimally edited by hand.
# See comments below for the edited sections.
#
# To update, run
#
# maturin generate-ci github
#
# and re-add the edits.
name: CI

on:
push:
branches:
- main
- master
tags:
- '*'
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
linux:
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: ubuntu-latest
target: x86_64
- runner: ubuntu-latest
target: x86
- runner: ubuntu-latest
target: aarch64
- runner: ubuntu-latest
target: armv7
# BEGIN EDITED SECTION #
# The `s390x` and `ppc64le` architectures have been removed as they are not supported.
# END EDITED SECTION #
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: 'true'
manylinux: auto
# BEGIN EDITED SECTION #
# Install OpenSSL development headers into the manylinux docker container
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm a bit confused why we need to install openssl if we're using vendored openssl? In general I'd rather not use vendored openssl where possible

Copy link
Member Author

@anoadragon453 anoadragon453 Apr 29, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree that it's not the nicest solution to vendor OpenSSL.

I've gone ahead and reverted the vendoring, and while we do install libssl-dev and pkg-config, the openssl-sys crate continues to fail to find the headers.

And for the life of me I can't get it to find them! So very tempted to vendor here.

# used to build the wheels.
# Note: libatomic is necessary for the build to succeed.
before-script-linux: |
set -ex

# If we're running on rhel centos, install needed packages.
if command -v yum &> /dev/null; then
yum update -y && yum install -y perl-core openssl openssl-devel pkgconfig libatomic

# If we're running on i686 we need to symlink libatomic
# in order to build openssl with -latomic flag.
if [[ ! -d "/usr/lib64" ]]; then
ln -s /usr/lib/libatomic.so.1 /usr/lib/libatomic.so
fi

OPENSSL_LIB_DIR=/usr/lib
else
# If we're running on debian-based system.
apt update -y && apt-get install -y libssl-dev openssl pkg-config

OPENSSL_LIB_DIR=/usr/lib/x86_64-linux-gnu
fi

export OPENSSL_DIR="/usr/lib/ssl"
export OPENSSL_INCLUDE_DIR=/usr/include/openssl
export OPENSSL_NO_VENDOR=1

ls $OPENSSL_LIB_DIR
ls $OPENSSL_INCLUDE_DIR


echo "OpenSSL Lib Dir: $OPENSSL_LIB_DIR"
echo "OpenSSL Include Dir: $OPENSSL_INCLUDE_DIR"

pkg-config --list-all
pkg-config --libs --cflags openssl
# END EDITED SECTION #
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-linux-${{ matrix.platform.target }}
path: dist

# BEGIN EDITED SECTION #
# The `windows` job has been removed as it is not a supported platform.
# END EDITED SECTION #

macos:
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: macos-latest
target: x86_64
- runner: macos-14
target: aarch64
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: 'true'
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-macos-${{ matrix.platform.target }}
path: dist

sdist:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build sdist
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
- name: Upload sdist
uses: actions/upload-artifact@v4
with:
name: wheels-sdist
path: dist

release:
name: Release
runs-on: ubuntu-latest
if: "startsWith(github.ref, 'refs/tags/')"
# BEGIN EDITED SECTION #
# Note: The `windows` job was removed from this list.
needs: [linux, macos, sdist]
# END EDITED SECTION #
steps:
- uses: actions/download-artifact@v4
- name: Publish to PyPI
uses: PyO3/maturin-action@v1
# BEGIN EDITED SECTION
# The `MATURIN_PYPI_TOKEN` env var was removed in order to authenticate
# to PyPI using the Trusted Publishers feature instead.
# END EDITED SECTION.
with:
command: upload
args: --non-interactive --skip-existing wheels-*/*
Loading