Skip to content

Commit

Permalink
Add Python extension module (#173)
Browse files Browse the repository at this point in the history
  • Loading branch information
pemistahl authored Aug 24, 2023
1 parent 60b02af commit 88a7cb1
Show file tree
Hide file tree
Showing 15 changed files with 1,370 additions and 43 deletions.
79 changes: 79 additions & 0 deletions .github/workflows/python-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#
# Copyright © 2019-today Peter M. Stahl [email protected]
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either expressed or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Python Build

on:
push:
branches:
- main
paths:
- 'Cargo.lock'
- 'Cargo.toml'
- 'src/**'
- 'tests/**'
- '**.yml'
pull_request:
branches:
- main
paths:
- 'Cargo.lock'
- 'Cargo.toml'
- 'src/**'
- 'tests/**'
- '**.yml'

jobs:
python-build:
name: Python ${{ matrix.python-version }} on ${{ matrix.name }}

runs-on: ${{ matrix.os }}

strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]
python-version: [ '3.8', '3.9', '3.10', '3.11' ]
include:
- os: ubuntu-latest
name: Linux 64-Bit

- os: macos-latest
name: MacOS 64-Bit

- os: windows-latest
name: Windows 64-Bit

steps:
- name: Check out repository
uses: actions/checkout@v3

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'

- name: Install maturin and pytest
run: pip install -r requirements.txt

- name: Build Python extension
run: maturin build

- name: Install Python extension
run: pip install --find-links=target/wheels grex

- name: Run Python unit tests
run: pytest tests/python/test_grex.py
165 changes: 165 additions & 0 deletions .github/workflows/python-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
#
# Copyright © 2019-today Peter M. Stahl [email protected]
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either expressed or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Python Release

on:
push:
tags:
- v1.*

jobs:
linux:
name: Python ${{ matrix.python-version }} on target ${{ matrix.target }}

runs-on: ubuntu-latest

strategy:
matrix:
target: [x86_64, x86, aarch64, armv7, s390x, ppc64le]
python-version: [ '3.8', '3.9', '3.10', '3.11' ]

steps:
- name: Check out repository
uses: actions/checkout@v3

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'

- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist --find-interpreter
sccache: 'true'
manylinux: auto

- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: dist

windows:
name: Python ${{ matrix.python-version }} on target ${{ matrix.target }}

runs-on: windows-latest

strategy:
matrix:
target: [x64, x86]
python-version: [ '3.8', '3.9', '3.10', '3.11' ]

steps:
- name: Check out repository
uses: actions/checkout@v3

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.target }}
cache: 'pip'

- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist --find-interpreter
sccache: 'true'

- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: dist

macos:
name: Python ${{ matrix.python-version }} on target ${{ matrix.target }}

runs-on: macos-latest

strategy:
matrix:
target: [x86_64, aarch64]
python-version: [ '3.8', '3.9', '3.10', '3.11' ]

steps:
- name: Check out repository
uses: actions/checkout@v3

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'

- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist --find-interpreter
sccache: 'true'

- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: wheels
path: dist

sdist:
name: Source distribution

runs-on: ubuntu-latest

steps:
- name: Check out repository
uses: actions/checkout@v3

- name: Build source distribution
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist

- name: Upload source distribution
uses: actions/upload-artifact@v3
with:
name: wheels
path: dist

release:
name: Publish wheels to PyPI

runs-on: ubuntu-latest

needs: [linux, windows, macos, sdist]

steps:
- name: Download wheels from previous jobs
uses: actions/download-artifact@v3
with:
name: wheels

- name: Upload to PyPI
uses: PyO3/maturin-action@v1
env:
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
with:
command: upload
args: --skip-existing *
25 changes: 8 additions & 17 deletions .github/workflows/build.yml → .github/workflows/rust-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.

name: build
name: Rust Build

on:
push:
Expand All @@ -36,8 +36,8 @@ on:
- '**.yml'

jobs:
build-and-test:
name: ${{ matrix.name }}
rust-build:
name: Rust on ${{ matrix.name }}

runs-on: ${{ matrix.os }}

Expand All @@ -47,31 +47,26 @@ jobs:
os: [ubuntu-latest, macos-latest, windows-latest]
include:
- os: ubuntu-latest
name: Linux Binary 64-Bit
name: Linux 64-Bit
target: x86_64-unknown-linux-musl

- os: macos-latest
name: MacOS Binary 64-Bit
name: MacOS 64-Bit
target: x86_64-apple-darwin
target2: aarch64-apple-darwin
env:
MACOSX_DEPLOYMENT_TARGET: 10.7

- os: windows-latest
name: Windows Binary 64-Bit
name: Windows 64-Bit
target: x86_64-pc-windows-msvc

steps:
- name: Check out repository
uses: actions/checkout@v3

- name: Add rustup default target
- name: Add rustup target
run: rustup target add ${{ matrix.target }}

- name: Add rustup Apple ARM64 target
if: ${{ matrix.os == 'macos-latest' }}
run: rustup target add ${{ matrix.target2 }}

- name: Install apt packages
if: ${{ matrix.os == 'ubuntu-latest' }}
run: sudo apt-get install musl-tools libssl-dev
Expand Down Expand Up @@ -103,13 +98,9 @@ jobs:
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

- name: Build default target in debug mode
- name: Build target in debug mode
run: cargo build --target ${{ matrix.target }} --locked

- name: Build Apple ARM64 target in debug mode
if: ${{ matrix.os == 'macos-latest' }}
run: cargo build --target ${{ matrix.target2 }} --locked

- name: Test default target in debug mode
run: cargo test --target ${{ matrix.target }}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@
# See the License for the specific language governing permissions and
# limitations under the License.

name: release
name: Rust Release

on:
push:
tags:
- v1.*

jobs:
create-release:
rust-release:
name: ${{ matrix.name }}

runs-on: ${{ matrix.os }}
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
*.launch
.settings/
.metadata/
.venv
*.sublime-workspace
bin/
tmp/
Expand Down
Loading

0 comments on commit 88a7cb1

Please sign in to comment.