| # Build and test the python package | |
| name: Python build and test | |
| on: | |
| push: | |
| branches: [ main ] | |
| pull_request: | |
| branches: [ main ] | |
| workflow_dispatch: | |
| branches: [main] | |
| permissions: | |
| contents: read | |
| jobs: | |
| build: | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| os: ['ubuntu-latest', 'macos-latest', 'windows-latest'] | |
| python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] | |
| fail-fast: false | |
| steps: | |
| - name: Check out from Git | |
| uses: actions/checkout@v6 | |
| - name: Get history and tags for SCM versioning to work | |
| run: | | |
| git fetch --prune --unshallow | |
| git fetch --depth=1 origin +refs/tags/*:refs/tags/* | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install ".[build,test,development,documentation]" | |
| - name: Test | |
| run: | | |
| invoke test | |
| - name: Build | |
| run: | | |
| inv build | |
| inv build.mkdocs | |
| build-rust: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| # Rust runtime doesn't support 3.14 yet. | |
| python-version: ["3.10", "3.11", "3.12", "3.13"] | |
| rust-version: [ "1.80.0", "1.91.0" ] | |
| fail-fast: false | |
| steps: | |
| - name: Check out from Git | |
| uses: actions/checkout@v6 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install Python dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install ".[build,test,development,documentation]" | |
| - name: Install Rust toolchain | |
| uses: actions-rust-lang/setup-rust-toolchain@v1 | |
| with: | |
| components: clippy,rustfmt | |
| toolchain: ${{ matrix.rust-version }} | |
| - name: Install Rust dependencies | |
| run: cargo install cargo-all-features --version 1.11.0 # allows building/testing combinations of features | |
| - name: Check License Headers | |
| run: cd rust && cargo run --features dev-tools --bin file-header check-all | |
| - name: Rust Build | |
| run: cd rust && cargo build --all-targets && cargo build-all-features | |
| # Lints after build so what clippy needs is already built | |
| - name: Rust Lints | |
| run: cd rust && cargo fmt --check && cargo clippy --all-targets -- --deny warnings && cargo clippy --all-features --all-targets -- --deny warnings | |
| - name: Rust Tests | |
| run: cd rust && cargo test-all-features | |
| # At some point, hook up publishing the binary. For now, just make sure it builds. | |
| # Once we're ready to publish binaries, this should be built with `--release`. | |
| - name: Build Bumble CLI | |
| run: cd rust && cargo build --features bumble-tools --bin bumble |