Skip to content

Commit f8d5c08

Browse files
committed
Use cibuildwheel
1 parent a70d36f commit f8d5c08

File tree

3 files changed

+238
-65
lines changed

3 files changed

+238
-65
lines changed

.github/workflows/wheels.yml

+20-65
Original file line numberDiff line numberDiff line change
@@ -4,85 +4,40 @@ on:
44
push:
55
branches:
66
- master
7+
- cibuildwheel
78
tags:
89
- 'v*'
910

10-
env:
11-
LIBGIT2_VERSION: 1.3.0
12-
1311
jobs:
14-
linux:
15-
name: Linux
16-
runs-on: ubuntu-20.04
12+
build_wheels:
13+
name: Build wheels on ${{ matrix.os }}
14+
runs-on: ${{ matrix.os }}
1715
strategy:
1816
matrix:
19-
arch: [x86_64, aarch64]
20-
steps:
21-
- name: Checkout pygit2
22-
uses: actions/checkout@v2
23-
24-
- name: Set up QEMU
25-
if: ${{ matrix.arch == 'aarch64' }}
26-
uses: docker/setup-qemu-action@v1
27-
28-
- run: |
29-
/bin/sh misc/build-all-manylinux-wheels.sh ${{ matrix.arch }}
30-
31-
- name: Save wheels
32-
uses: actions/upload-artifact@v2
33-
with:
34-
name: wheels
35-
path: dist/*.whl
17+
os: [ubuntu-20.04, macOS-11]
3618

37-
macos:
38-
name: macos-${{ matrix.py.ver }}
39-
runs-on: macos-latest
40-
env:
41-
MACOSX_DEPLOYMENT_TARGET: "10.9"
42-
strategy:
43-
fail-fast: false
44-
matrix:
45-
py:
46-
- ver: '3.7'
47-
release: '3.7.9' # last Python.org binary release
48-
url: https://www.python.org/ftp/python/3.7.9/python-3.7.9-macosx10.9.pkg
49-
- ver: '3.8'
50-
release: '3.8.10' # last Python.org binary release
51-
url: https://www.python.org/ftp/python/3.8.10/python-3.8.10-macosx10.9.pkg
52-
- ver: '3.9'
53-
release: '3.9.7'
54-
url: https://www.python.org/ftp/python/3.9.7/python-3.9.7-macosx10.9.pkg
55-
- ver: '3.10'
56-
release: '3.10.0'
57-
url: https://www.python.org/ftp/python/3.10.0/python-3.10.0post2-macos11.pkg
5819
steps:
59-
- name: Checkout pygit2
60-
uses: actions/checkout@v2
20+
- uses: actions/checkout@v2
6121

62-
- name: Setup python
63-
run: |
64-
PKG=$(basename "${{ matrix.py.url }}")
65-
wget --no-verbose -N "${{ matrix.py.url }}"
66-
sudo installer -pkg $PKG -target /
67-
export PATH=/Library/Frameworks/Python.framework/Versions/${{ matrix.py.ver }}/bin:$PATH
68-
echo "/Library/Frameworks/Python.framework/Versions/${{ matrix.py.ver }}/bin" >> $GITHUB_PATH
69-
which python3
70-
python3 -VV
71-
test "$(python3 -V)" = "Python ${{ matrix.py.release }}"
22+
- uses: actions/setup-python@v2
7223

73-
- name: Build
74-
run: |
75-
/bin/sh build.sh wheel bundle test
24+
- name: Build wheels
25+
uses: pypa/[email protected]
26+
env:
27+
CIBW_BEFORE_ALL_LINUX: sh install-deps.sh
28+
CIBW_BEFORE_ALL_MACOS: sh install-deps-mac.sh
29+
CIBW_ENVIRONMENT: LIBGIT2_VERSION=1.3.0 LIBSSH2_VERSION=1.10.0 DYLD_LIBRARY_PATH=/usr/local/lib
30+
CIBW_SKIP: "*-musllinux*"
31+
CIBW_REPAIR_WHEEL_COMMAND_MACOS: "DYLD_LIBRARY_PATH=/usr/local/lib delocate-listdeps {wheel} && DYLD_LIBRARY_PATH=/usr/local/lib delocate-wheel --require-archs {delocate_archs} -w {dest_dir} {wheel}"
32+
CIBW_ARCHS_MACOS: x86_64 universal2
7633

77-
- name: Save wheel
78-
uses: actions/upload-artifact@v2
79-
with:
80-
name: wheels
81-
path: wheelhouse/*.whl
34+
- uses: actions/upload-artifact@v2
35+
with:
36+
path: ./wheelhouse/*.whl
8237

8338
pypi:
8439
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
85-
needs: [linux, macos]
40+
needs: [build_wheels]
8641
runs-on: ubuntu-20.04
8742

8843
steps:

install-deps-mac.sh

+106
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
#!/bin/sh
2+
set -x # Print every command and variable
3+
set -e # Fail fast
4+
5+
# Variables
6+
ARCH=`uname -m`
7+
KERNEL=`uname -s`
8+
BUILD_TYPE=${BUILD_TYPE:-Debug}
9+
PYTHON=${PYTHON:-python3}
10+
11+
PREFIX="${PREFIX:-$(pwd)/ci/}"
12+
export LDFLAGS="-Wl,-rpath,$PREFIX/lib"
13+
14+
OPENSSL_VERSION=3.0.0
15+
16+
rm -rf ci
17+
mkdir ci || true
18+
cd ci
19+
20+
21+
# Install zlib
22+
# XXX Build libgit2 with USE_BUNDLED_ZLIB instead?
23+
if [ -n "$ZLIB_VERSION" ]; then
24+
FILENAME=zlib-$ZLIB_VERSION
25+
wget https://www.zlib.net/$FILENAME.tar.gz -N
26+
tar xf $FILENAME.tar.gz
27+
cd $FILENAME
28+
./configure --prefix=$PREFIX
29+
make
30+
make install
31+
cd ..
32+
fi
33+
34+
# Install openssl
35+
FILENAME=openssl-$OPENSSL_VERSION
36+
wget https://www.openssl.org/source/$FILENAME.tar.gz -N --no-check-certificate
37+
38+
tar xf $FILENAME.tar.gz
39+
mv $FILENAME openssl-x86
40+
41+
tar xf $FILENAME.tar.gz
42+
mv $FILENAME openssl-arm
43+
44+
cd openssl-x86
45+
./Configure darwin64-x86_64-cc shared
46+
make
47+
cd ../openssl-arm
48+
./Configure enable-rc5 zlib darwin64-arm64-cc no-asm
49+
make
50+
cd ..
51+
52+
mkdir openssl-universal
53+
54+
LIBSSL=$(basename openssl-x86/libssl.*.dylib)
55+
lipo -create openssl-x86/libssl.*.dylib openssl-arm/libssl.*.dylib -output openssl-universal/$LIBSSL
56+
LIBCRYPTO=$(basename openssl-x86/libcrypto.*.dylib)
57+
lipo -create openssl-x86/libcrypto.*.dylib openssl-arm/libcrypto.*.dylib -output openssl-universal/$LIBCRYPTO
58+
cd openssl-universal
59+
install_name_tool -id "@rpath/$LIBSSL" $LIBSSL
60+
install_name_tool -id "@rpath/$LIBCRYPTO" $LIBCRYPTO
61+
OPENSSL_PREFIX=$(pwd)
62+
cd ..
63+
64+
65+
# Install libssh2
66+
if [ -n "$LIBSSH2_VERSION" ]; then
67+
FILENAME=libssh2-$LIBSSH2_VERSION
68+
wget https://www.libssh2.org/download/$FILENAME.tar.gz -N --no-check-certificate
69+
tar xf $FILENAME.tar.gz
70+
cd $FILENAME
71+
cmake . \
72+
-DCMAKE_INSTALL_PREFIX=$PREFIX \
73+
-DBUILD_SHARED_LIBS=ON \
74+
-DBUILD_EXAMPLES=OFF \
75+
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
76+
-DOPENSSL_CRYPTO_LIBRARY="../openssl-universal/$LIBCRYPTO" \
77+
-DOPENSSL_SSL_LIBRARY="../openssl-universal/$LIBSSL" \
78+
-DOPENSSL_INCLUDE_DIR="../openssl-x86/include" \
79+
-DBUILD_TESTING=OFF
80+
cmake --build . --target install
81+
cd ..
82+
LIBSSH2_PREFIX=$PREFIX
83+
fi
84+
85+
# Install libgit2
86+
if [ -n "$LIBGIT2_VERSION" ]; then
87+
FILENAME=libgit2-$LIBGIT2_VERSION
88+
wget https://github.com/libgit2/libgit2/archive/refs/tags/v$LIBGIT2_VERSION.tar.gz -N -O $FILENAME.tar.gz
89+
tar xf $FILENAME.tar.gz
90+
cd $FILENAME
91+
CMAKE_PREFIX_PATH=$OPENSSL_PREFIX:$LIBSSH2_PREFIX cmake . \
92+
-DBUILD_SHARED_LIBS=ON \
93+
-DBUILD_CLAR=OFF \
94+
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
95+
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
96+
-DOPENSSL_CRYPTO_LIBRARY="../openssl-universal/$LIBCRYPTO" \
97+
-DOPENSSL_SSL_LIBRARY="../openssl-universal/$LIBSSL" \
98+
-DOPENSSL_INCLUDE_DIR="../openssl-x86/include"
99+
cmake --build . --target install
100+
cd ..
101+
fi
102+
103+
# This is gross
104+
cp -r $OPENSSL_PREFIX/*.dylib /usr/local/lib
105+
cp -r $LIBSSH2_PREFIX/lib/*.dylib /usr/local/lib
106+
cp -r $FILENAME/*.dylib /usr/local/lib

install-deps.sh

+112
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
#!/bin/sh
2+
3+
#
4+
# Synopsis:
5+
#
6+
# sh build.sh - Build inplace
7+
# sh build.sh test - Build inplace, and run the tests
8+
# sh build.sh wheel - Build a wheel, install, and run the tests
9+
#
10+
# Environment variables:
11+
#
12+
# LIBSSH2_OPENSSL - Where to find openssl
13+
# LIBSSH2_PREFIX - Where to find libssh2
14+
# LIBSSH2_VERSION=<Version> - Build the given version of libssh2
15+
# LIBGIT2_VERSION=<Versoin> - Build the given version of libgit2
16+
#
17+
# Either use LIBSSH2_PREFIX, or LIBSSH2_VERSION, or none (if libssh2 is already
18+
# in the path, or if you don't want to use it).
19+
#
20+
# Examples.
21+
#
22+
# Build inplace, libgit2 must be available in the path:
23+
#
24+
# sh build.sh
25+
#
26+
# Build libgit2 1.3.0 (will use libssh2 if available), then build pygit2
27+
# inplace:
28+
#
29+
# LIBGIT2_VERSION=1.3.0 sh build.sh
30+
#
31+
# Build libssh2 1.10.0 and libgit2 1.3.0, then build pygit2 inplace:
32+
#
33+
# LIBSSH2_VERSION=1.10.0 LIBGIT2_VERSION=1.3.0 sh build.sh
34+
#
35+
# Tell where libssh2 is installed, build libgit2 1.3.0, then build pygit2
36+
# inplace:
37+
#
38+
# LIBSSH2_PREFIX=/usr/local LIBGIT2_VERSION=1.3.0 sh build.sh
39+
#
40+
# Build inplace and run the tests:
41+
#
42+
# sh build.sh test
43+
#
44+
# Build a wheel:
45+
#
46+
# sh build.sh wheel
47+
#
48+
49+
set -x # Print every command and variable
50+
set -e # Fail fast
51+
52+
# Variables
53+
ARCH=`uname -m`
54+
KERNEL=`uname -s`
55+
BUILD_TYPE=${BUILD_TYPE:-Debug}
56+
PYTHON=${PYTHON:-python3}
57+
58+
PREFIX="${PREFIX:-$(pwd)/ci/}"
59+
export LDFLAGS="-Wl,-rpath,$PREFIX/lib"
60+
61+
rm -rf ci
62+
mkdir ci || true
63+
cd ci
64+
65+
if [ "$KERNEL" = "Linux" ]; then
66+
yum install wget openssl-devel libssh2-devel zlib-devel -y
67+
fi
68+
69+
70+
# Install zlib
71+
# XXX Build libgit2 with USE_BUNDLED_ZLIB instead?
72+
if [ -n "$ZLIB_VERSION" ]; then
73+
FILENAME=zlib-$ZLIB_VERSION
74+
wget https://www.zlib.net/$FILENAME.tar.gz -N
75+
tar xf $FILENAME.tar.gz
76+
cd $FILENAME
77+
./configure --prefix=$PREFIX
78+
make
79+
make install
80+
cd ..
81+
fi
82+
83+
# Install libssh2
84+
if [ -n "$LIBSSH2_VERSION" ]; then
85+
FILENAME=libssh2-$LIBSSH2_VERSION
86+
wget https://www.libssh2.org/download/$FILENAME.tar.gz -N --no-check-certificate
87+
tar xf $FILENAME.tar.gz
88+
cd $FILENAME
89+
cmake . \
90+
-DCMAKE_INSTALL_PREFIX=$PREFIX \
91+
-DBUILD_SHARED_LIBS=ON \
92+
-DBUILD_EXAMPLES=OFF \
93+
-DBUILD_TESTING=OFF
94+
cmake --build . --target install
95+
cd ..
96+
LIBSSH2_PREFIX=$PREFIX
97+
fi
98+
99+
# Install libgit2
100+
if [ -n "$LIBGIT2_VERSION" ]; then
101+
FILENAME=libgit2-$LIBGIT2_VERSION
102+
wget https://github.com/libgit2/libgit2/archive/refs/tags/v$LIBGIT2_VERSION.tar.gz -N -O $FILENAME.tar.gz
103+
tar xf $FILENAME.tar.gz
104+
cd $FILENAME
105+
CMAKE_PREFIX_PATH=$OPENSSL_PREFIX:$LIBSSH2_PREFIX cmake . \
106+
-DBUILD_SHARED_LIBS=ON \
107+
-DBUILD_CLAR=OFF \
108+
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
109+
-DCMAKE_BUILD_TYPE=$BUILD_TYPE
110+
cmake --build . --target install
111+
cd ..
112+
fi

0 commit comments

Comments
 (0)