Skip to content

Commit

Permalink
Add Python bindings (#267)
Browse files Browse the repository at this point in the history
  • Loading branch information
pemistahl authored Nov 8, 2023
1 parent 8d2ebb7 commit 46ce182
Show file tree
Hide file tree
Showing 20 changed files with 1,935 additions and 9 deletions.
83 changes: 83 additions & 0 deletions .github/workflows/python-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
#
# Copyright © 2020-present 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'
- 'pyproject.toml'
- 'requirements.txt'
- 'src/**'
- 'tests/**'
- '**.yml'
pull_request:
branches:
- main
paths:
- 'Cargo.lock'
- 'Cargo.toml'
- 'pyproject.toml'
- 'requirements.txt'
- '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', '3.12' ]
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@v4

- 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 lingua-language-detector

- name: Run Python unit tests
run: pytest tests/python
141 changes: 141 additions & 0 deletions .github/workflows/python-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
#
# Copyright © 2020-present 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 on Linux and target ${{ matrix.target }}

runs-on: ubuntu-latest

strategy:
matrix:
target: [x86_64, x86, aarch64]

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

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
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 on Windows and target ${{ matrix.target }}

runs-on: windows-latest

strategy:
matrix:
target: [x64, x86]

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

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
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 on MacOS and target ${{ matrix.target }}

runs-on: macos-latest

strategy:
matrix:
target: [x86_64, aarch64]

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

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
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

release:
name: Publish wheels to PyPI

runs-on: ubuntu-latest

needs: [linux, windows, macos]

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 *
10 changes: 5 additions & 5 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 Down Expand Up @@ -100,10 +100,10 @@ jobs:
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

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

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

- name: Run WASM integration tests on NodeJS
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
tmp/
out/
Expand Down
Loading

0 comments on commit 46ce182

Please sign in to comment.