chore(ci): bump actions/setup-node from 4 to 7 #154
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: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| lint: | |
| name: Lint and syntax check | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Set up Python | |
| uses: actions/setup-python@v7 | |
| with: | |
| python-version: "3.11" | |
| cache: pip | |
| - name: Install ruff | |
| run: pip install ruff==0.6.9 | |
| - name: Ruff check | |
| # See ruff.toml for the enabled rule set. Until the codebase is | |
| # cleaned up, the CI gate is intentionally narrow (syntax errors, | |
| # unused imports, undefined names). Style-only rules are off so | |
| # this doesn't go red on day one. | |
| run: ruff check . | |
| - name: Compile all Python files | |
| # Catches plain syntax errors in files that aren't normally | |
| # imported (install.sh-companion scripts, wifi_setup.py, etc). | |
| run: | | |
| python -m compileall -q . | |
| ui-gestures: | |
| name: UI gesture regression test | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-node@v7 | |
| with: | |
| node-version: "20" | |
| - name: Install jsdom | |
| run: npm install --no-save jsdom@25 | |
| - name: Now-playing footer gestures | |
| # Guards issue #44: a slider drag inside the footer must not be | |
| # read as a prev/next swipe. Runs the real handler source against | |
| # the real footer markup, both parsed out of templates/index.html. | |
| run: node tests/swipe-gestures.test.js | |
| - name: Resume point logic | |
| # Guards issue #74: when an album offers Resume, and what it says. | |
| run: node tests/resume-point.test.js | |
| - name: Live audio stall handling | |
| # Guards the looping reported on #49: a spent buffer must reconnect, | |
| # never replay itself. | |
| run: node tests/browser-stall.test.js | |
| import-smoke: | |
| name: Import smoke test | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| strategy: | |
| matrix: | |
| # 3.11 = Raspberry Pi OS bookworm, 3.13 = trixie (the target Pi). | |
| # Testing both catches dependency floors that drop an interpreter. | |
| python-version: ["3.11", "3.13"] | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Set up Python | |
| uses: actions/setup-python@v7 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: pip | |
| - name: System audio libs | |
| # PortAudio is needed for `sounddevice` to import cleanly on the | |
| # CI runner. We don't actually open a device here, just confirm | |
| # the modules load without raising. | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends \ | |
| libportaudio2 ffmpeg | |
| - name: Install Python deps | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -r requirements.txt | |
| - name: Import top-level modules | |
| # If a top-level import is broken (missing dep, wrong import | |
| # path), uvicorn would fail to start on the Pi. Catch it here. | |
| run: | | |
| python -c "import main; import player; import recorder; import catalog; import exporter" | |
| - name: Multi-listener behaviour | |
| # Guards issue #49: listener registry cleanup, sink join/leave, and | |
| # reaping of abandoned browser encoders. Needs the real deps, so it | |
| # runs here rather than in the lint job. | |
| run: python tests/test_multi_listener.py |