chore(deps): bump the rust-dependencies group across 1 directory with 2 updates #215
This file contains hidden or 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
| # CI — every push/PR to main | |
| # | |
| # Full quality gate (nextest, wheel smoke, pytest) runs locally via pre-push hook: | |
| # ./scripts/install-git-hooks.sh | |
| # | |
| # Pipeline: | |
| # 1. sanity — fast metadata + doc drift checks (~1 min) | |
| # 2. rust-gate — fmt + clippy + nextest (core/polars/backtest) when Rust sources change | |
| # 3. python-gold — gold-vector streaming parity (Linux + macOS) | |
| # 4. docs — mkdocs gh-pages deploy (main branch only) | |
| # | |
| # Release (crates.io + PyPI) is a separate workflow: release.yml on v* tags. | |
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| workflow_dispatch: | |
| concurrency: | |
| group: ci-${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| changes: | |
| name: Detect path changes | |
| runs-on: ubuntu-latest | |
| outputs: | |
| rust: ${{ steps.filter.outputs.rust }} | |
| python_gold: ${{ steps.filter.outputs.python_gold }} | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: dorny/paths-filter@v4 | |
| id: filter | |
| with: | |
| filters: | | |
| rust: | |
| - '**/*.rs' | |
| - '**/Cargo.toml' | |
| - 'Cargo.lock' | |
| - '.github/workflows/ci.yml' | |
| python_gold: | |
| - 'tests/python/**' | |
| - 'tests/options_india/**' | |
| - 'quantwave-py/**' | |
| - 'quantwave-core/src/options_india/**' | |
| - 'quantwave-core/tests/gold_standard/**' | |
| - '.github/workflows/ci.yml' | |
| sanity: | |
| name: Doc & metadata sanity | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-python@v7 | |
| with: | |
| python-version: "3.12" | |
| - name: Metadata and documentation drift | |
| run: | | |
| python3 scripts/check_metadata_drift.py | |
| python3 scripts/check_doc_drift.py | |
| python3 scripts/check_public_metadata.py | |
| python3 scripts/check_aeo.py | |
| python3 scripts/check_benchmark_claims.py | |
| python3 scripts/check_repo_hygiene.py | |
| python3 scripts/check_indicator_parity_coverage.py | |
| python3 scripts/check_core_safety.py | |
| python3 scripts/check_validation_docs.py | |
| python3 scripts/check_release_invariants.py | |
| python3 scripts/check_bead_ids.py | |
| python3 scripts/check_talib_map_drift.py | |
| python3 scripts/check_api_stubs_drift.py | |
| python3 scripts/check_doc_latex.py | |
| python3 scripts/check_doc_links.py | |
| rust-gate: | |
| name: Rust quality gate | |
| needs: [changes] | |
| if: needs.changes.outputs.rust == 'true' || github.event_name == 'workflow_dispatch' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - uses: taiki-e/install-action@v2 | |
| with: | |
| tool: nextest | |
| - name: cargo fmt + clippy + nextest (core crates) | |
| run: | | |
| ./scripts/rustfmt_check.sh | |
| cargo clippy -p quantwave-core -p quantwave-polars -p quantwave-backtest --all-targets -- -D warnings | |
| cargo nextest run -p quantwave-core | |
| cargo nextest run -p quantwave-polars | |
| cargo nextest run -p quantwave-backtest | |
| # nextest does not run doctests, so the documented examples -- including | |
| # the crate-level quick start -- were never compiled by CI. | |
| cargo test --doc -p quantwave-core -p quantwave-polars -p quantwave-backtest | |
| python-gold-parity: | |
| name: Python gold parity (${{ matrix.os }}) | |
| needs: [changes] | |
| if: needs.changes.outputs.python_gold == 'true' || github.event_name == 'workflow_dispatch' | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest] | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-python@v7 | |
| with: | |
| python-version: "3.12" | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Create venv and install build + test deps | |
| run: | | |
| python -m venv .venv | |
| source .venv/bin/activate | |
| pip install maturin pytest numpy polars | |
| - name: Build quantwave (editable) | |
| run: | | |
| source .venv/bin/activate | |
| maturin develop --release --manifest-path quantwave-py/Cargo.toml | |
| - name: Gold-standard streaming parity | |
| run: | | |
| source .venv/bin/activate | |
| python -m pytest tests/python/test_gold_parity.py -q | |
| - name: Polars .ta plugin surface (unified crate) | |
| run: | | |
| source .venv/bin/activate | |
| python -m pytest tests/python/plugins -q | |
| - name: Classic TA-Lib compatibility surface | |
| run: | | |
| source .venv/bin/activate | |
| python -m pytest tests/python/test_talib_surface.py tests/python/test_talib_map.py -q | |
| - name: Abstract introspection registry | |
| run: | | |
| source .venv/bin/activate | |
| python -m pytest tests/python/test_abstract_api.py -q | |
| - name: Options India analytics parity + docstrings | |
| run: | | |
| source .venv/bin/activate | |
| python -m pytest tests/options_india \ | |
| --doctest-modules quantwave-py/python/quantwave/polars.py -q | |
| deploy-docs: | |
| name: Deploy docs | |
| needs: [sanity] | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| env: | |
| DISABLE_MKDOCS_2_WARNING: "true" | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-python@v7 | |
| with: | |
| python-version: "3.12" | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: actions/cache@v6 | |
| with: | |
| path: .cache | |
| key: mkdocs-material-${{ runner.os }}-${{ hashFiles('requirements-docs.txt') }} | |
| restore-keys: mkdocs-material-${{ runner.os }}- | |
| - name: Install docs dependencies | |
| run: pip install -r requirements-docs.txt | |
| - name: Install quantwave from PyPI (notebook export) | |
| run: pip install quantwave || echo "PyPI wheel not yet available; notebook export may use fallbacks." | |
| - run: cargo run --package quantwave-xtask | |
| - run: python docs/export_notebooks.py | |
| - run: mkdocs gh-deploy --force |