-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1b35b33
commit 4998f42
Showing
1 changed file
with
103 additions
and
113 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,143 +6,133 @@ on: | |
types: [published] | ||
|
||
jobs: | ||
# Build for manylinux, which allows it to be run on many different Linux platforms | ||
build-manylinux: | ||
strategy: | ||
# Let individual matrix jobs go if one fails | ||
fail-fast: false | ||
matrix: | ||
include: | ||
# We are compatible with all supported Python versions. The 'cp37-cp37m' is the PEP 425 tag of that specific | ||
# Python version, which is where the Python interpreters of the manylinux Docker container are located. | ||
- py-version: 3.7 | ||
py-pep-425: 'cp37-cp37m' | ||
- py-version: 3.8 | ||
py-pep-425: 'cp38-cp38' | ||
- py-version: 3.9 | ||
py-pep-425: 'cp39-cp39' | ||
runs-on: ubuntu-latest | ||
steps: | ||
# Set up the repository with the Docker container action, which will allow us to build and run a manylinux Docker | ||
# container that will ensure compatibility. See the action repository for more info. | ||
- name: Checkout action | ||
uses: actions/checkout@v2 | ||
with: | ||
repository: tmtenbrink/python-wheels-manylinux-build | ||
# Set up the package repository in a sub-path, so it doesn't overwrite the Docker container action repo | ||
- name: Checkout rustfrc | ||
uses: actions/checkout@v2 | ||
with: | ||
path: ${{ github.repository }} | ||
- name: Setup Python environment | ||
uses: actions/setup-python@v2 | ||
# Build for manylinux, which allows it to be run on many different Linux platforms | ||
build-manylinux: | ||
strategy: | ||
# Let individual matrix jobs go if one fails | ||
fail-fast: false | ||
matrix: | ||
include: | ||
# We are compatible with all supported Python versions. The 'cp37-cp37m' is the PEP 425 tag of that specific | ||
# Python version, which is where the Python interpreters of the manylinux Docker container are located. | ||
- py-version: '3.7' | ||
py-pep-425: 'cp37-cp37m' | ||
- py-version: '3.8' | ||
py-pep-425: 'cp38-cp38' | ||
- py-version: '3.9' | ||
py-pep-425: 'cp39-cp39' | ||
- py-version: '3.10' | ||
py-pep-425: 'cp310-cp310' | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout rustfrc | ||
uses: actions/checkout@v2 | ||
with: | ||
path: ${{ github.repository }} | ||
# Set up the repository with the Docker container action, which will allow us to build and run a manylinux Docker | ||
# container that will ensure compatibility. See the action repository for more info. | ||
- name: maturin-manylinux-wheels-action | ||
uses: tmtenbrink/[email protected] | ||
with: | ||
py-version: "python${{ matrix.py-version }}" | ||
py-pep-425: ${{ matrix.py-pep-425 }} | ||
package-path: ${{ github.repository }} | ||
# Set up the package repository in a sub-path, so it doesn't overwrite the Docker container action repo | ||
|
||
# It now uploads all the wheel files to an artifact that we can later retrieve | ||
- uses: actions/upload-artifact@v2 | ||
with: | ||
name: wheels | ||
path: ${{ github.repository }}/dist | ||
|
||
buildmac: | ||
runs-on: macos-11 | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
# If we run it without this argument, it will generate only x86_64 wheels, which are compatible with more | ||
# macOS and pip versions. Universal2 wheels are compatible with Apple Silicon (aarch64) Macs but also updated | ||
# x86_64 Macs. In the future only universal2 wheels will be necessary. | ||
target: ['--universal2', ''] | ||
py-version: ['3.7', '3.8', '3.9', '3.10'] | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- uses: actions/setup-python@v2 | ||
with: | ||
python-version: ${{ matrix.py-version }} | ||
# ./ means it will search for the 'action.yml' in the Docker container action repo root. It will then build the | ||
# Docker container and run it with the variables we give it. Specifically, it will run entrypoint.sh that is | ||
# also in the Docker container action repo, which will perform the same steps as the other jobs, but inside the | ||
# container. When it is done, it will have placed the compiled wheels at the /dist directory of the package root, | ||
# which we had set as ${{ github.repository }} when we checked out the package repository | ||
- name: Build manylinux Python wheels | ||
uses: './' | ||
with: | ||
py-version: "python${{ matrix.py-version }}" | ||
py-pep-425: ${{ matrix.py-pep-425 }} | ||
package-path: ${{ github.repository }} | ||
# It now uploads all the wheel files to an artifact that we can later retrieve | ||
|
||
# The x86_64 Rust toolchain is installed on GitHub runners, but since we compile also for Apple Silicon, we also | ||
# need the correct Rust toolchain. | ||
- name: Rustup install aarch64 target | ||
run: rustup target add aarch64-apple-darwin | ||
if: ${{ matrix.target == '--universal2' }} | ||
|
||
# We install poetry as a dependency manager to read the pyproject.toml of our package. | ||
- name: Poetry | ||
run: curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python - | ||
|
||
# GitHub has modified PATH behavior, so we use the below command to add poetry to our PATH | ||
- name: Add poetry path | ||
run: echo "$HOME/.local/bin" >> $GITHUB_PATH | ||
|
||
# poetry update will install all dependencies for our package, as well as maturin, which we use as our build | ||
# back-end | ||
- name: Poetry update | ||
run: poetry update | ||
working-directory: ${{ github.workspace }} | ||
|
||
# delocate is the macOS version of auditwheel. | ||
- name: Install delocate | ||
run: pip install delocate | ||
working-directory: ${{ github.workspace }} | ||
|
||
# This command will actually compile the wheels. We use --release to make sure Rust properly optimizes the code. | ||
# The ${{ matrix.target }} indicates whether we are building universal 2 wheels. Finally using -i python ensures | ||
# only the Python we set up above will be used as target. | ||
- name: maturin build release | ||
run: poetry run maturin build --release ${{ matrix.target }} -i python | ||
working-directory: ${{ github.workspace }} | ||
|
||
# We now fix the wheels using delocate | ||
- name: delocate fix wheels | ||
run: find . -name "*.whl" -exec delocate-wheel -w wheelhouse --require-archs=universal2 {} \; | ||
working-directory: ${{ github.workspace }} | ||
|
||
- uses: actions/upload-artifact@v2 | ||
with: | ||
name: wheels | ||
path: ${{ github.repository }}/dist | ||
path: ${{ github.workspace }}/wheelhouse | ||
|
||
buildmac: | ||
runs-on: macos-11 | ||
buildwindows: | ||
runs-on: windows-latest | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
# If we run it without this argument, it will generate only x86_64 wheels, which are compatible with more | ||
# macOS and pip versions. Universal2 wheels are compatible with Apple Silicon (aarch64) Macs but also updated | ||
# x86_64 Macs. In the future only universal2 wheels will be necessary. | ||
target: ['--universal2', ''] | ||
py-version: ['3.7', '3.8', '3.9'] | ||
py-version: ['3.7', '3.8', '3.9', '3.10'] | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- uses: actions/setup-python@v2 | ||
with: | ||
python-version: ${{ matrix.py-version }} | ||
|
||
# The x86_64 Rust toolchain is installed on GitHub runners, but since we compile also for Apple Silicon, we also | ||
# need the correct Rust toolchain. | ||
- name: Rustup install aarch64 target | ||
run: rustup target add aarch64-apple-darwin | ||
if: ${{ matrix.target == '--universal2' }} | ||
|
||
# We install poetry as a dependency manager to read the pyproject.toml of our package. | ||
# Installing poetry requires a different command on Windows than on macOS/Linux | ||
- name: Poetry | ||
run: curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python - | ||
run: (Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py -UseBasicParsing).Content | python - | ||
|
||
# GitHub has modified PATH behavior, so we use the below command to add poetry to our PATH | ||
- name: Add poetry path | ||
run: echo "$HOME/.local/bin" >> $GITHUB_PATH | ||
# PATH is also different | ||
- name: Poetry path | ||
run: echo "$env:APPDATA\Python\Scripts" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | ||
|
||
# poetry update will install all dependencies for our package, as well as maturin, which we use as our build | ||
# back-end | ||
- name: Poetry update | ||
run: poetry update | ||
run: | | ||
poetry update | ||
working-directory: ${{ github.workspace }} | ||
|
||
# delocate is the macOS version of auditwheel. | ||
- name: Install delocate | ||
run: pip install delocate | ||
working-directory: ${{ github.workspace }} | ||
|
||
# This command will actually compile the wheels. We use --release to make sure Rust properly optimizes the code. | ||
# The ${{ matrix.target }} indicates whether we are building universal 2 wheels. Finally using -i python ensures | ||
# only the Python we set up above will be used as target. | ||
- name: maturin build release | ||
run: poetry run maturin build --release ${{ matrix.target }} -i python | ||
working-directory: ${{ github.workspace }} | ||
|
||
# We now fix the wheels using delocate | ||
- name: delocate fix wheels | ||
run: find . -name "*.whl" -exec delocate-wheel -w wheelhouse --require-archs=universal2 {} \; | ||
run: poetry run maturin build --release -i python | ||
working-directory: ${{ github.workspace }} | ||
|
||
- uses: actions/upload-artifact@v2 | ||
with: | ||
name: wheels | ||
path: ${{ github.workspace }}/wheelhouse | ||
|
||
buildwindows: | ||
runs-on: windows-latest | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
py-version: ['3.7', '3.8', '3.9'] | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- uses: actions/setup-python@v2 | ||
with: | ||
python-version: ${{ matrix.py-version }} | ||
|
||
# Installing poetry requires a different command on Windows than on macOS/Linux | ||
- name: Poetry | ||
run: (Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py -UseBasicParsing).Content | python - | ||
|
||
# PATH is also different | ||
- name: Poetry path | ||
run: echo "$env:APPDATA\Python\Scripts" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | ||
|
||
- name: Poetry update | ||
run: | | ||
poetry update | ||
working-directory: ${{ github.workspace }} | ||
|
||
- name: maturin build release | ||
run: poetry run maturin build --release -i python | ||
working-directory: ${{ github.workspace }} | ||
|
||
- uses: actions/upload-artifact@v2 | ||
with: | ||
name: wheels | ||
path: ${{ github.workspace }}/target/wheels | ||
path: ${{ github.workspace }}/target/wheels |