Repository navigation
v5.0: modular refactor, integrated recorder, automated multi-Pi rollout, SpecKit + personas - #20
Merged
Merged
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Behavior-preserving AST-driven split into domain modules (config, receivers, streaming, epg, recordings, webui/*, http_proxy, app ...). Circular references resolved via function-local imports; build id from environment. Entry point: python -m e2proxy [--selfcheck]. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- e2proxy/extensions.py: route registry + extension lifecycle (open interface) - e2proxy/recorder: optional e2recorder port (EPG marks, settings tab) - tests: package/import guards, webui JS parse, HTTP smoke, regressions, recorder engine Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Dockerfile (ffmpeg baked in, build id from git sha), selftest.py - test.yml / build-deploy.yml per pi-ops template; deploy as matrix over deploy/targets.json - deploy/manual-deploy.sh replaces reload_e2proxy.sh (emergency path with selftest gate) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
A start-up run with the receiver switched off replaced a valid cache with an empty XMLTV; the guide stayed blank until the next successful run. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- a backend recording that stops before the broadcast ends was reported done and counted for keep_last (could delete a good older episode) - recorder remote-proxy and OpenWebif UA textareas inherited the 380px min-height of the JSON editor (found in UI screenshot review) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The Pis pull without credentials; check the pushed digest right after the build and point to the package settings. README: switch compose before the first pi-deploy run. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
e2proxy v5.0. The 14 k-line
e2proxy.pybecomes a modular package with an open extension interface. e2recorder is integrated as an optional extension, and rollouts to one or more Raspberry Pis are automated via the pi-ops standard. SpecKit is initialised, with a constitution and five reviewer personas.1. SpecKit, constitution, personas
.specify/memory/constitution.md: principles Reliable first · Slim · Fast & light on the Pi · Modular with open interfaces · Every bug becomes a test · Durable operations..github/agents/: DVB & Streaming, Raspberry Pi, Python developer, UI developer (screenshot verification), Documentation & QA (regression tests, minor/major decision, version bump, Help-page changelog).AGENTS.md,.github/copilot-instructions.md(pi-ops markers),specs/001-modular-refactor/(spec/plan/tasks).2. Modular refactor
e2proxy/package with one concern per module, started viapython -m e2proxy(--selfcheckstill works). The split was mechanical, done with an AST-based tool. Page/API parity was verified against the old monolith.e2proxy/extensions.py:@route(method, path, extension)+Extension(name, start, enabled). Routes of a disabled extension return 404. The handler dispatches to extensions first and falls back to the legacy routes.VERSION+branch.sha7, injected at image build time.3. Integrated recorder (optional, off by default)
e2proxy/recorder/(engine with injectable I/O, pure matching, atomic JSON store, routes, UI): about 1.2 k lines, vs. 4.3 k in the standalone service..ts+.nfo)series.json/recordings.jsonto/data/recorder/.4. Automated rollout, multi-Pi ready
Dockerfile(arm64, ffmpeg installed at build time instead ofapt-getat every start, HEALTHCHECK) andselftest.py(health, UI, WebUI self-check, libx264/aac transcode).test.ymlandbuild-deploy.ymlfollow the pi-ops templates. The deploy job is a matrix overdeploy/targets.json; the per-host steps are unchanged andfail-fast: falsekeeps one failing Pi from blocking the others.workflow_dispatchtakeshosts=all|none|a,b.deploy/resolve_targets.pyvalidates the targets file and sanitises the deploy user.reload_e2proxy.shis replaced bydeploy/manual-deploy.sh, an emergency path that only swaps the service after the selftest passes.Bugs found and fixed during review (each with a regression test)
Tests (108)
node --checkon every inline script of every page, with the recorder on and off./api/healthunder 1.5 s, unknown routes 404, recorder toggle.e2lengthMIN:SSruff,pytest,--selfcheck,actionlint,docker build+selftest.py(healthy).Persona review
/api/record/*path (shared tuner, profiles). Transcode codec path is checked in the selftest.mem_limitis not enforced on Pi OS without cgroup memory, so pi-deploy watches RSS.e2proxytostatus: active, install the deploy runner (deploy-e2proxy) onwien-streamer, retire thee2recorderinventory entry after migration.build-deploytemplate (this repo deviates from the template, as documented in the workflow header).e2proxyvisibility/access for the Pi.docker-compose.e2proxy.yml(image instead of mounted file) and copying the recorder JSON files (see README → Deployment).extensions; remove deade2probe is Nonebranches; slimmer ffmpeg image (currently about 830 MB).