Compare commits
2 Commits
759e47fc1f
...
v0.8.6
| Author | SHA1 | Date | |
|---|---|---|---|
| 4b9b7f0995 | |||
| 3d73b1e6a7 |
@@ -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.6",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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.6</version>
|
||||||
<name>LoreMind Core</name>
|
<name>LoreMind Core</name>
|
||||||
<description>Backend Core - Architecture Hexagonale</description>
|
<description>Backend Core - Architecture Hexagonale</description>
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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}."
|
||||||
|
|||||||
@@ -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
4
web/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "loremind-web",
|
"name": "loremind-web",
|
||||||
"version": "0.8.5",
|
"version": "0.8.6",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "loremind-web",
|
"name": "loremind-web",
|
||||||
"version": "0.8.5",
|
"version": "0.8.6",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@angular/animations": "^17.0.0",
|
"@angular/animations": "^17.0.0",
|
||||||
"@angular/common": "^17.0.0",
|
"@angular/common": "^17.0.0",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "loremind-web",
|
"name": "loremind-web",
|
||||||
"version": "0.8.5",
|
"version": "0.8.6",
|
||||||
"description": "LoreMind Frontend - Angular",
|
"description": "LoreMind Frontend - Angular",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"ng": "ng",
|
"ng": "ng",
|
||||||
|
|||||||
Reference in New Issue
Block a user