- Dockerfile 51.7%
- Python 40.5%
- Shell 7.8%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Le watchdog audio (ex decode-recovery) migre sur l image commune et a besoin du client mpc pour lire le socket MPD. Self-test build command -v mpc ; tests de contrat etendus ; console defaut ARG 0.2.0. pbx-metadata na rien a ajouter (stdlib pure). Assisted-By: Ventoline <ventdunord@lodlp.net> |
||
| tests | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| Dockerfile | ||
| Dockerfile.console | ||
| README.md | ||
| VERSION | ||
rcp-runtime
Image runtime commune des daemons Python de la pile radio-pelton : queue-manager, historyd, metadata, quality-improver, console. MPD et icecast restent des images tierces, hors périmètre. Dépôt dédié, versionné indépendamment des daemons.
Spécification et arbitrages opérateur : Chantier 5 : image runtime commune rcp-runtime. Procédure d'identité GitLab : Création d'une identité GitLab pour un nouveau dépôt. Carte mère : Console RCP V1.
Contrat de l'image
- Base alpine épinglée : 3.24.1 (même pin que les Dockerfiles daemons actuels).
- Contenu : python3, py3-mpd2, py3-pillow, tzdata, libmpdclient, libstdc++, mpc, libgcc, ashuffle compilé en stage de build épinglé par tag + commit court vérifié (v3.14.10, commit 56f20e3, pattern queue-manager).
- Runtime : USER 1000:100, PYTHONUNBUFFERED=1, PYTHONDONTWRITEBYTECODE=1.
- Aucun code applicatif embarqué : le code vient du bind-mount git-bind.
- Self-tests au build : parité python 3.14 (arbitrage opérateur du 10 nov. 2026 : alpine 3.24.1 livre 3.14.10, la console quitte python:3.13-alpine au cutover), imports sqlite3/mpd/PIL, ashuffle exécutable en non-root.
- Labels runtime uniquement (version runtime, alpine, python, ashuffle version
- commit, source-sha256). Aucun label de version de daemon.
Le self-test de parité python fait échouer le build en cas de mismatch : le pin de parité (3.14) ne se change qu'après arbitrage explicite opérateur. Constat du 10 nov. 2026 : alpine 3.24.1 livre python 3.14.10, les 4 daemons sont déjà en 3.14 ; la console (python:3.13-alpine) basculera à 3.14 au cutover de la couche fine.
Build (Terry, sudo)
cd /home/docker/radio-pelton/rcp-runtime-src
sudo docker build \
--build-arg RCP_RUNTIME_VERSION="$(cat VERSION)" \
--build-arg RCP_RUNTIME_SOURCE_SHA256="$(git archive --format=tar HEAD | sha256sum | cut -d' ' -f1)" \
-t rcp-runtime:"$(cat VERSION)" \
.
Couche console
Dockerfile.console est une couche fine FROM rcp-runtime : py3-pip + requirements figés, stage de build node pour le frontend (assets compilés dans l'image, hors montage, pattern actuel conservé), entrypoint conservé. Le contexte de build reste le checkout rcp-admin-src :
cd /home/docker/radio-pelton
sudo docker build \
--build-arg RCP_CONSOLE_RUNTIME_VERSION="$(grep '^__version__' rcp-admin-src/backend/rcp_admin/__init__.py | grep -o '[0-9][0-9.]*' | head -1)" \
--build-arg RCP_RUNTIME_IMAGE=rcp-runtime:"$(cat rcp-runtime-src/VERSION)" \
--build-arg RCP_RUNTIME_VERSION="$(cat rcp-runtime-src/VERSION)" \
-f rcp-runtime-src/Dockerfile.console \
-t rcp/console:"$(cat rcp-admin-src/VERSION)" \
rcp-admin-src
Bascule du version reporting
- La version déployée d'un daemon devient l'état de son checkout (git describe --exact-match sur HEAD, ou fichier VERSION), lue par le runner via le même canal vers le backend. Les labels d'image ne portent plus la version d'un daemon.
- deployed_version, latest_tag, up_to_date : contrats UI inchangés, seule la source change.
- /api/system expose en plus la version du runtime commun (une valeur unique, label radio-pelton.runtime.version).
Release d'un daemon après cutover
Swap de checkout + docker compose restart (pattern source-only release déjà prouvé). Plus aucun docker build par daemon. Bump du runtime : rebuild unique de rcp-runtime, rebuild de la couche console, puis recreate glissant des 5 services un par un.
Tests
sh tests/run_tests.sh
Tests de contrat en python stdlib (pins, absence de code applicatif, labels, self-tests, couche console, VERSION, README). Pas de pytest requis.
Versionnement
VERSION contient le semver du dépôt runtime, passé au build via RCP_RUNTIME_VERSION. source-sha256 = sha256 du git archive du HEAD construit, rejouable et déterministe.