3 Commits

Author SHA1 Message Date
586ddceff6 mise à jour vers 0.8.7-beta
All checks were successful
Build & Push Images / build (brain) (push) Successful in 1m2s
Build & Push Images / build (core) (push) Successful in 1m38s
Build & Push Images / build-switcher (push) Successful in 20s
Build & Push Images / build (web) (push) Successful in 1m33s
2026-05-19 18:45:56 +02:00
4b9b7f0995 Mise à jour du switcher pour régler le soucis de switch entre stable et bêta
Some checks failed
E2E Tests / e2e (push) Has been cancelled
Build & Push Images / build (brain) (push) Successful in 1m5s
Build & Push Images / build (core) (push) Successful in 1m42s
Build & Push Images / build (web) (push) Successful in 1m38s
Build & Push Images / build-switcher (push) Successful in 1m48s
2026-05-19 18:36:00 +02:00
3d73b1e6a7 Mise à jour de la config du switcher pour prendre les crédit du GHCR + sh plus verbeux en cas de bugs
Some checks failed
E2E Tests / e2e (push) Failing after 19s
Build & Push Images / build (brain) (push) Successful in 59s
Build & Push Images / build (core) (push) Successful in 1m32s
Build & Push Images / build-switcher (push) Successful in 43s
Build & Push Images / build (web) (push) Successful in 1m36s
2026-05-19 18:25:54 +02:00
7 changed files with 50 additions and 28 deletions

View File

@@ -41,7 +41,7 @@ from app.infrastructure.onemin_adapter import OneMinAiLLMProvider
app = FastAPI( app = FastAPI(
title="LoreMind Brain", title="LoreMind Brain",
description="Backend IA pour la génération de contenu narratif.", description="Backend IA pour la génération de contenu narratif.",
version="0.8.5", version="0.8.7-beta",
) )

View File

@@ -14,7 +14,7 @@
<groupId>com.loremind</groupId> <groupId>com.loremind</groupId>
<artifactId>loremind-core</artifactId> <artifactId>loremind-core</artifactId>
<version>0.8.5</version> <version>0.8.7-beta</version>
<name>LoreMind Core</name> <name>LoreMind Core</name>
<description>Backend Core - Architecture Hexagonale</description> <description>Backend Core - Architecture Hexagonale</description>

View File

@@ -202,6 +202,10 @@ services:
- ${COMPOSE_PROJECT_DIR:-./}:/compose - ${COMPOSE_PROJECT_DIR:-./}:/compose
# Volume partage avec le Core pour la commande + le resultat. # Volume partage avec le Core pour la commande + le resultat.
- switcher-data:/data - switcher-data:/data
# Volume partage avec le Core + Watchtower : contient config.json avec
# les creds GHCR (ecrits par le Core a partir du token Patreon).
# Indispensable pour pull les images privees du canal beta.
- docker-config:/shared/docker
environment: environment:
# Repertoire interne ou trouver docker-compose.yml et .env. Bind au # Repertoire interne ou trouver docker-compose.yml et .env. Bind au
# volume ci-dessus (COMPOSE_PROJECT_DIR = repertoire d'install du host). # volume ci-dessus (COMPOSE_PROJECT_DIR = repertoire d'install du host).
@@ -210,6 +214,9 @@ services:
# le MEME stack que celui qui tourne (sinon il creerait un duplicate). # le MEME stack que celui qui tourne (sinon il creerait un duplicate).
# Doit matcher le `name:` (en V2.x) ou le nom du dossier du host. # Doit matcher le `name:` (en V2.x) ou le nom du dossier du host.
COMPOSE_PROJECT_NAME: ${COMPOSE_PROJECT_NAME:-loremind} COMPOSE_PROJECT_NAME: ${COMPOSE_PROJECT_NAME:-loremind}
# Indique au CLI Docker du switcher ou trouver config.json (auth GHCR
# pour les images privees beta). Meme mecanisme que sur Watchtower.
DOCKER_CONFIG: /shared/docker
restart: unless-stopped restart: unless-stopped
# Mises a jour automatiques des images core/brain/web. # Mises a jour automatiques des images core/brain/web.

View File

@@ -64,33 +64,44 @@ fi
export COMPOSE_PROJECT_NAME="${PROJECT_NAME}" export COMPOSE_PROJECT_NAME="${PROJECT_NAME}"
echo "→ Projet compose cible: ${PROJECT_NAME}" echo "→ Projet compose cible: ${PROJECT_NAME}"
# --- Mapping canal -> namespace -------------------------------------------- # --- Mapping canal -> (namespace, tag) -------------------------------------
# Le slash final est important : il est concatene avec le suffixe image # Le slash final du namespace est important : concatene avec le suffixe image
# (core/brain/web) dans le docker-compose.yml. # (core/brain/web) dans le docker-compose.yml.
# Cote tag : le workflow CI pousse :latest pour le canal stable, :beta pour
# le canal beta. Le switcher doit donc forcer ces deux variables ensemble.
case "${CHANNEL}" in case "${CHANNEL}" in
stable) NAMESPACE="igmlcreation/loremind-" ;; stable)
beta) NAMESPACE="igmlcreation/loremind-beta-" ;; NAMESPACE="igmlcreation/loremind-"
TAG="latest"
;;
beta)
NAMESPACE="igmlcreation/loremind-beta-"
TAG="beta"
;;
esac esac
# Helper : met a jour (ou ajoute) une variable key=value dans le .env.
update_env_var() {
local key="$1"
local value="$2"
if grep -q "^${key}=" "${ENV_FILE}"; then
# Sur Alpine, sed -i sans backup. Le pattern '/' dans la valeur impose
# un delimiter alternatif (|).
sed -i "s|^${key}=.*|${key}=${value}|" "${ENV_FILE}"
else
# Ligne absente → on l'ajoute en fin de fichier la premiere fois.
{
echo ""
echo "# Ajoute automatiquement par le switcher de canal LoreMind."
echo "${key}=${value}"
} >> "${ENV_FILE}"
fi
}
# --- Etape 1 : sed le .env ------------------------------------------------- # --- Etape 1 : sed le .env -------------------------------------------------
# On veut REMPLACER une ligne existante IMAGE_NAMESPACE=... ou AJOUTER echo "→ Mise a jour de IMAGE_NAMESPACE + TAG dans .env (canal: ${CHANNEL})"
# si absente. Cas typique : .env utilisateur peut avoir cette ligne ou non. update_env_var "IMAGE_NAMESPACE" "${NAMESPACE}"
# update_env_var "TAG" "${TAG}"
# Sed -i avec un pattern qui matche la ligne entiere. Si pas de match,
# on append.
echo "→ Mise a jour de IMAGE_NAMESPACE dans .env (canal: ${CHANNEL})"
if grep -q '^IMAGE_NAMESPACE=' "${ENV_FILE}"; then
# Sur Alpine, sed -i sans backup. Le pattern d'echappement '/' dans
# le namespace impose un delimiter alternatif (|).
sed -i "s|^IMAGE_NAMESPACE=.*|IMAGE_NAMESPACE=${NAMESPACE}|" "${ENV_FILE}"
else
# Ligne absente → on l'ajoute en fin de fichier avec un commentaire.
{
echo ""
echo "# Ajoute automatiquement par le switcher de canal LoreMind."
echo "IMAGE_NAMESPACE=${NAMESPACE}"
} >> "${ENV_FILE}"
fi
# --- Etape 2 : docker compose pull ----------------------------------------- # --- Etape 2 : docker compose pull -----------------------------------------
echo "→ Pull des nouvelles images (${NAMESPACE}*)" echo "→ Pull des nouvelles images (${NAMESPACE}*)"
@@ -109,4 +120,4 @@ docker compose up -d --no-deps core brain web
echo "" echo ""
echo "Switch vers le canal ${CHANNEL} termine avec succes." echo "Switch vers le canal ${CHANNEL} termine avec succes."
echo "Containers core/brain/web recrees avec ${NAMESPACE}*." echo "Containers core/brain/web recrees avec ${NAMESPACE}*:${TAG}."

View File

@@ -70,10 +70,14 @@ while true; do
# Lance le switch. On capture stdout+stderr et le code de sortie. # Lance le switch. On capture stdout+stderr et le code de sortie.
if output=$(/switcher/switch.sh "${channel}" 2>&1); then if output=$(/switcher/switch.sh "${channel}" 2>&1); then
log "Switch SUCCESS for id=${id} channel=${channel}" log "Switch SUCCESS for id=${id} channel=${channel}"
# Log la sortie sur plusieurs lignes pour faciliter le debug
# (ce qu'on voit en docker logs).
while IFS= read -r line; do log " | ${line}"; done <<< "${output}"
write_result "success" "${channel}" "${output}" "${id}" write_result "success" "${channel}" "${output}" "${id}"
else else
rc=$? rc=$?
log "Switch FAILED for id=${id} channel=${channel} rc=${rc}" log "Switch FAILED for id=${id} channel=${channel} rc=${rc}"
while IFS= read -r line; do log " | ${line}"; done <<< "${output}"
write_result "error" "${channel}" "${output}" "${id}" write_result "error" "${channel}" "${output}" "${id}"
fi fi

4
web/package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "loremind-web", "name": "loremind-web",
"version": "0.8.5", "version": "0.8.7-beta",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "loremind-web", "name": "loremind-web",
"version": "0.8.5", "version": "0.8.7-beta",
"dependencies": { "dependencies": {
"@angular/animations": "^17.0.0", "@angular/animations": "^17.0.0",
"@angular/common": "^17.0.0", "@angular/common": "^17.0.0",

View File

@@ -1,6 +1,6 @@
{ {
"name": "loremind-web", "name": "loremind-web",
"version": "0.8.5", "version": "0.8.7-beta",
"description": "LoreMind Frontend - Angular", "description": "LoreMind Frontend - Angular",
"scripts": { "scripts": {
"ng": "ng", "ng": "ng",