Skip to content

chore(ci): bump actions/setup-node from 4 to 7 #154

chore(ci): bump actions/setup-node from 4 to 7

chore(ci): bump actions/setup-node from 4 to 7 #154

Workflow file for this run

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