docs(guide): add per-component design page with mermaid diagrams #52
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
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| # Cancel an in-flight run of the same workflow on the same branch | |
| # when a new push arrives — prevents the queue from piling up when | |
| # the developer pushes several commits in a row and keeps the | |
| # actions-minute budget in check. | |
| concurrency: | |
| group: ci-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| lint: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.12" | |
| - run: pip install "ruff==0.15.10" # pinned to pre-commit hook version | |
| - run: ruff check . | |
| - run: ruff format --check . | |
| test: | |
| runs-on: ubuntu-latest | |
| # Only run the full 4-version Python matrix on PRs; the lint job | |
| # plus the single-version CI wheel build is enough for each push | |
| # to main. Saves ~15 runner-minutes per merge. | |
| if: github.event_name == 'pull_request' | |
| strategy: | |
| # One failing Python version shouldn't kill the other three — | |
| # we want to see the full picture on a PR. | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.10", "3.11", "3.12", "3.13"] | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install system deps | |
| run: sudo apt-get update && sudo apt-get install -y libsndfile1 portaudio19-dev | |
| - name: Install package with dev extras | |
| run: pip install -e ".[dev]" | |
| - run: pytest -m "not integration" | |
| build: | |
| runs-on: ubuntu-latest | |
| needs: [lint, test] | |
| # ``test`` is skipped on pushes to main — treat a skipped result | |
| # as success so the wheel build isn't transitively blocked. | |
| if: | | |
| !cancelled() && | |
| needs.lint.result == 'success' && | |
| (needs.test.result == 'success' || needs.test.result == 'skipped') | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.12" | |
| - run: pip install build | |
| - run: python -m build | |
| - uses: actions/upload-artifact@v6 | |
| with: | |
| name: dist | |
| path: dist/ |