No description
  • Dockerfile 51.7%
  • Python 40.5%
  • Shell 7.8%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Olivier Cortès 04999c11d4 rcp-runtime 0.2.0 : ajout de mpc pour audio-watchdog
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>
2026-11-10 04:12:14 +01:00
tests rcp-runtime 0.2.0 : ajout de mpc pour audio-watchdog 2026-11-10 04:12:14 +01:00
.gitignore Ignore les pyc du host 2026-11-10 00:15:52 +01:00
.gitlab-ci.yml Configurer la détection de secrets dans « .gitlab-ci.yml », en créant ce fichier s'il n'existe pas déjà 2026-11-10 00:05:01 +01:00
Dockerfile rcp-runtime 0.2.0 : ajout de mpc pour audio-watchdog 2026-11-10 04:12:14 +01:00
Dockerfile.console rcp-runtime 0.2.0 : ajout de mpc pour audio-watchdog 2026-11-10 04:12:14 +01:00
README.md rcp-runtime 0.2.0 : ajout de mpc pour audio-watchdog 2026-11-10 04:12:14 +01:00
VERSION rcp-runtime 0.2.0 : ajout de mpc pour audio-watchdog 2026-11-10 04:12:14 +01:00

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.