pyproject: Use hatchling as build system #238
Workflow file for this run
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
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 |