Skip to content
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

pyo3 bindings for uap-python #3

Merged
merged 1 commit into from
Oct 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions .github/workflows/pychecks.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: py checks

on:
pull_request:
push:
branches:
- main

permissions:
contents: read

jobs:
checks:
runs-on: ubuntu-latest
steps:
- name: Checkout working copy
uses: actions/checkout@v4
- name: ruff check
uses: chartboost/ruff-action@v1
with:
args: check
- name: ruff format
if: always()
uses: chartboost/ruff-action@v1
with:
args: format --diff
- name: Set up Python
id: setup_python
if: always()
uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Install mypy
id: install_mypy
if: ${{ always() && steps.setup_python.conclusion == 'success' }}
run: |
python -mpip install --upgrade pip
python -mpip install mypy pytest types-PyYaml
- name: mypy
if: ${{ always() && steps.install_mypy.conclusion == 'success' }}
run: mypy --strict .
193 changes: 193 additions & 0 deletions .github/workflows/pyo3-wheels.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
name: Wheels and Tests

on:
push:
branches: [ main ]
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
wheels:
strategy:
matrix:
python-version:
- "3.x"
- "pypy-3.10"
- "graalpy-24"
arch:
- x86_64
- aarch64
platform:
- linux
- musllinux
- windows
- macos

exclude:
- platform: windows
arch: aarch64
- platform: windows
python-version: graalpy-24

include:
- platform: linux
manylinux: auto
- platform: musllinux
manylinux: musllinux_1_2

- args: --release --out dist -m ua-parser-py/Cargo.toml -i python
- platform: linux
args: --release --out dist -m ua-parser-py/Cargo.toml -i python --zig
- platform: musllinux
args: --release --out dist -m ua-parser-py/Cargo.toml

- runs: ubuntu-latest
- platform: windows
runs: windows-latest
- platform: macos
runs: macos-latest

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

steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.arch }}
args: ${{ matrix.args }}
sccache: 'true'
manylinux: ${{ matrix.manylinux }}
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.platform }}-${{ matrix.arch }}-${{ matrix.python-version }}
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 -m ua-parser-py/Cargo.toml
- name: Upload sdist
uses: actions/upload-artifact@v4
with:
name: wheels-sdist
path: dist

# TODO: tags don't work because multiple crates in same repo, so
# needs some other method of picking versions
release:
name: Release
runs-on: ubuntu-latest
if: ${{ github.event_name == 'workflow_dispatch' }}
needs: [wheels, sdist]
permissions:
# Use to sign the release artifacts
id-token: write
# Used to upload release artifacts
contents: write
# Used to generate artifact attestation
attestations: write
steps:
- uses: actions/download-artifact@v4
- name: Generate artifact attestation
uses: actions/attest-build-provenance@v1
with:
subject-path: 'wheels-*/*'
- name: Publish to PyPI
uses: PyO3/maturin-action@v1
env:
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
with:
command: upload
args: --non-interactive --skip-existing wheels-*/*

tests:
needs: wheels

strategy:
fail-fast: false
matrix:
python-version:
- "3.9"
- "3.10"
- "3.11"
- "3.12"
- "3.13"
- "pypy-3.10"
- "graalpy-24"
platform:
- linux
# probably requires a custom image of some sort
# - musllinux
- windows
- macos

exclude:
- platform: windows
python-version: graalpy-24

include:
# would probably need to run qemu inside the thing to full
# test the archs...
- arch: x86_64
- platform: macos
arch: aarch64

- wheel: "3.x"
- python-version: "pypy-3.10"
wheel: "pypy-3.10"
- python-version: "graalpy-24"
wheel: "graalpy-24"

- runs: ubuntu-latest
- platform: windows
runs: windows-latest
- platform: macos
runs: macos-latest

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

steps:
- name: Checkout working copy
uses: actions/checkout@v4
with:
submodules: true
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
- name: Retrieve wheel
uses: actions/download-artifact@v4
with:
name: wheels-${{ matrix.platform }}-${{ matrix.arch }}-${{ matrix.wheel }}
path: dist
- name: Update pip
run: python -mpip install --upgrade pip
- name: Maybe install libyaml-dev
if: matrix.runs == 'ubuntu-latest'
run: |
# if binary wheels are not available for the current
# package install libyaml-dev so we can install pyyaml
# from source
if ! pip download --only-binary :all: pyyaml > /dev/null 2>&1; then
sudo apt install libyaml-dev
fi
- name: Install test dependencies
run: python -mpip install pytest pyyaml
- name: Install wheel
run: pip install --find-links dist ua_parser_rs
- name: Run tests
run: pytest -v -Werror -ra ua-parser-py
11 changes: 5 additions & 6 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
@@ -1,25 +1,24 @@
name: Rust

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
push:
branches:
- main

env:
CARGO_TERM_COLOR: always

jobs:
checks:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Build
run: cargo build --verbose
- name: Check
run: cargo check
- name: Format
run: cargo fmt --check
- name: clippy
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,5 @@ Cargo.lock
*.dSYM/
regex-filtered/re2/flake.lock
regex-filtered/re2/bench
.tox/
__pycache__
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[workspace]
members = ["regex-filtered", "ua-parser"]
members = ["regex-filtered", "ua-parser", "ua-parser-py"]
resolver = "2"

[profile.release]
Expand Down
14 changes: 14 additions & 0 deletions ua-parser-py/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[package]
name = "ua-parser-rs"
version = "0.1.0"
edition = "2021"
license = "Apache 2.0"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
name = "ua_parser_rs"
crate-type = ["cdylib"]

[dependencies]
pyo3 = { version = "0.22", features = ["extension-module", "abi3", "abi3-py38"] }
ua-parser = { version = "0.2.0", path = "../ua-parser" }
Loading
Loading