Skip to content

pyproject: Use hatchling as build system #238

pyproject: Use hatchling as build system

pyproject: Use hatchling as build system #238

Workflow file for this run

name: Test all targets
on: [push, pull_request]
permissions:
contents: write
jobs:
quick-tests:
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@v3
- name: Rust setup
uses: actions-rs/toolchain@v1.0.6
with:
toolchain: nightly
override: true
components: rustfmt, clippy
- name: Rust | Cache
uses: Swatinem/rust-cache@v2
with:
prefix-key: "rust-cache"
shared-key: "quick-tests"
- name: Check Rust formatting
run: cargo fmt -- --check
- name: Check Rust code with Clippy
run: cargo clippy -- -Dwarnings -A clippy::not_unsafe_ptr_arg_deref
- name: Run internal tests
run: cargo test --verbose -- --nocapture
- name: Build Rust project
run: cargo build
- name: Build Python module
run: |
pip install --user maturin
pip install . --user
- name: Check Python integration
run: python examples/python/main.py
- name: Check C++ integration
run: |
cd examples/cpp
cmake -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build --config Debug --parallel
./build/simple
- name: Run clang-format style check for C++ example.
uses: jidicula/clang-format-action@v4.11.0
with:
clang-format-version: '16'
check-path: 'examples/cpp/'
exclude-regex: 'examples/cpp/build'
version-manager:
needs: [quick-tests]
runs-on: ubuntu-latest
outputs:
head_hash: ${{ steps.head-hash.outputs.head_hash }}
steps:
- name: Checkout Repo
uses: actions/checkout@v3
- name: Rust setup
uses: actions-rs/toolchain@v1.0.6
with:
toolchain: nightly
override: true
- name: Modify version if release-tag
if: startsWith(github.ref, 'refs/tags/')
run: |
cargo install cargo-bump --force \
&& cargo bump ${{ github.ref_name }}
- name: Automatic commit for version upgrade
if: startsWith(github.ref, 'refs/tags/')
uses: stefanzweifel/git-auto-commit-action@v4
with:
branch: master
commit_message: "Cargo: Update the navigator-lib version to ${{ github.ref_name }}"
- name: Store the head actual hash
id: head-hash
run: echo "head_hash=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
build-cpp:
needs: version-manager
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- TARGET: armv7-unknown-linux-gnueabihf
- TARGET: aarch64-unknown-linux-gnu
- TARGET: armv7-unknown-linux-musleabihf
- TARGET: aarch64-unknown-linux-musl
steps:
- name: Building ${{ matrix.TARGET }}
run: echo "${{ matrix.TARGET }}"
- uses: actions/checkout@v3
with:
ref: ${{ needs.version-manager.outputs.head_hash }}
- name: Rust Setup
uses: actions-rs/toolchain@v1.0.1
with:
toolchain: nightly
target: ${{ matrix.TARGET }}
override: true
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
prefix-key: "rust-cache"
shared-key: "build-cpp-${{ matrix.TARGET }}"
- name: Rust Cross Build Cpp
uses: actions-rs/cargo@v1
with:
use-cross: true
command: build
args: --verbose --release --target=${{ matrix.TARGET }} -Z unstable-options --out-dir output/
- name: Move to it's target
run: |
mkdir dist
mkdir "dist/${{ matrix.TARGET }}"
mv output/* "dist/${{ matrix.TARGET }}"
mv target/release/bindings.h dist/
- name: Upload bin
uses: actions/upload-artifact@v3
with:
name: cpp
path: dist
build-python:
needs: version-manager
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target: [aarch64, armv7]
libc: [auto, musllinux_1_1]
steps:
- uses: actions/checkout@v3
with:
ref: ${{ needs.version-manager.outputs.head_hash }}
- uses: actions/setup-python@v4
with:
python-version: "3.9"
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out dist
manylinux: ${{ matrix.libc }}
- uses: uraimo/run-on-arch-action@master
if: matrix.libc == 'auto'
name: Install built wheel manylinux
with:
arch: ${{ matrix.target }}
distro: bullseye
githubToken: ${{ github.token }}
install: |
apt-get update
apt-get install -y --no-install-recommends python3 python3-pip
pip3 install -U pip
run: |
pip3 install bluerobotics_navigator --no-index --find-links dist/ --force-reinstall
- uses: uraimo/run-on-arch-action@master
if: matrix.libc == 'musllinux_1_1'
name: Install built wheel musl
with:
arch: ${{ matrix.target}}
distro: alpine_latest
githubToken: ${{ github.token }}
install: |
apk add py3-pip
run: |
python3 -m venv ./venv
. ./venv/bin/activate
pip3 install -U pip
pip3 install bluerobotics_navigator --no-index --find-links dist/ --force-reinstall
- name: Upload wheels
uses: actions/upload-artifact@v3
with:
name: python
path: dist
raspberry-test-python:
needs: build-python
if: ${{ github.repository_owner == 'bluerobotics' }}
runs-on: raspbian-armv7-kernel-5.10.33
steps:
- uses: actions/checkout@v3
with:
ref: ${{ needs.version-manager.outputs.head_hash }}
- name: Download wheels
uses: actions/download-artifact@v3
with:
name: python
path: dist
- name: Install built wheel
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends python3 python3-pip
pip3 install -U pip
pip3 install bluerobotics_navigator --no-index --find-links dist/ --force-reinstall
- name: Check Python main example
run: |
export CI=false
python examples/python/main.py
python-release-pypi:
needs: [raspberry-test-python]
runs-on: ubuntu-latest
if: "startsWith(github.ref, 'refs/tags/')"
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v3
with:
name: python
- name: Publish package distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: .
release-assets:
needs: ["build-cpp","raspberry-test-python"]
runs-on: ubuntu-latest
if: "startsWith(github.ref, 'refs/tags/')"
steps:
- name: Download cpp artifacts
uses: actions/download-artifact@v2
with:
name: cpp
path: cpp
- name: Download python artifacts
uses: actions/download-artifact@v2
with:
name: python
path: python
- name: Compress artifacts
run: |
sudo apt update
sudo apt install -y zip
cd cpp
zip -rT ../cpp.zip *
cd ../python
zip -rT ../python.zip *
- name: Upload assets to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ./*.zip
tag: ${{ github.ref }}
file_glob: true
deploy-doc:
needs: version-manager
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1.0.6
with:
toolchain: nightly
override: true
- name: Build docs
run: pip install hatch && hatch run dev:build-doc
# Move it to its own folder
- name: Move python documentation
run: mkdir -p pages/python && mv docs/_build/* pages/python/
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
if: ${{ github.ref == 'refs/heads/master' }}
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./pages