name: CI & Wheel Release Pipeline on: push: branches: [ main, master ] tags: [ 'v*' ] pull_request: branches: [ main, master ] permissions: contents: read jobs: test-rust: name: Cargo Test & Clippy (Linux x86_64) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable with: components: clippy, rustfmt - name: Run Tests run: cargo test --workspace - name: Run Clippy run: cargo clippy --workspace --tests -- -D warnings - name: Check Formatting run: cargo fmt --check build-wheels: name: Build Wheels (${{ matrix.os }} - ${{ matrix.target }}) runs-on: ${{ matrix.os }} needs: test-rust strategy: fail-fast: false matrix: include: - os: ubuntu-latest target: x86_64 args: --manylinux 2_28 - os: ubuntu-latest target: aarch64 args: --manylinux 2_28 - os: ubuntu-latest target: x86_64 args: --musllinux 1_2 - os: macos-latest target: x86_64 - os: macos-latest target: aarch64 - os: windows-latest target: x64 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.12' - name: Build wheels via Maturin uses: PyO3/maturin-action@v1 with: target: ${{ matrix.target }} args: --release --out dist ${{ matrix.args }} manifest-path: crates/justapi-py/Cargo.toml - name: Upload Wheels uses: actions/upload-artifact@v4 with: name: wheels-${{ matrix.os }}-${{ matrix.target }}-${{ strategy.job-index }} path: dist/*.whl publish: name: Publish to PyPI runs-on: ubuntu-latest needs: build-wheels if: startsWith(github.ref, 'refs/tags/v') permissions: id-token: write steps: - uses: actions/download-artifact@v4 with: pattern: wheels-* merge-multiple: true path: dist - name: Publish to PyPI uses: pypa/gh-action-pypa-publish@release/v1