Corrige la bascule du catalogue, detecte un changement de depot, compte les packs a l'import
This commit is contained in:
1 parent
469305b4a7
commit
c411f2933d
5 files changed
+116
-5
No files matched your search
@@ -40,6 +40,11 @@ jobs:
|
||||
- name: Interface
|
||||
run: sh tests/interface.sh
|
||||
|
||||
# La synchronisation du catalogue, sur un depot Git local : le defaut du
|
||||
# 11/09 annoncait des publications reussies sans jamais basculer le lien.
|
||||
- name: Synchronisation du catalogue
|
||||
run: sh tests/sync.sh
|
||||
|
||||
images:
|
||||
name: Images Harbor
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
@@ -3,6 +3,18 @@
|
||||
Format : [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/).
|
||||
Versionnement sémantique, comme décrit dans [docs/CONVENTIONS.md](docs/CONVENTIONS.md).
|
||||
|
||||
## 1.3.1
|
||||
|
||||
### Corrigé
|
||||
- Bascule du catalogue : `mv` vers un lien pointant sur un répertoire le suivait au lieu
|
||||
de le remplacer, et le site restait figé sur une ancienne révision pendant que la
|
||||
synchronisation annonçait des publications réussies
|
||||
- Un changement de dépôt du catalogue provoque désormais un nouveau clone
|
||||
|
||||
### Ajouté
|
||||
- Nombre de packs affiché dans le titre de la fenêtre d'import
|
||||
- Test de la synchronisation sur un dépôt Git local, exécuté par la CI
|
||||
|
||||
## 1.3.0
|
||||
|
||||
### Ajouté
|
||||
|
||||
+20
-4
@@ -19,7 +19,8 @@ if [ -z "${CATALOG_REPO:-}" ]; then
|
||||
while true; do sleep 3600; done
|
||||
fi
|
||||
|
||||
TRAVAIL=/tmp/depot
|
||||
# Emplacement du clone de travail, surchargeable pour les tests.
|
||||
TRAVAIL=${CATALOG_TRAVAIL:-/tmp/depot}
|
||||
TEMOIN=/tmp/derniere-revision-confirmee
|
||||
|
||||
# Previent l'application, et retient si elle a repondu. Tant que la reponse
|
||||
@@ -39,6 +40,13 @@ prevenir_application() {
|
||||
}
|
||||
|
||||
sync_une_fois() {
|
||||
# Un clone existant dont l'origine a change tirerait indefiniment depuis
|
||||
# l'ancien depot : on le refait plutot que de le mettre a jour.
|
||||
if [ -d "$TRAVAIL/.git" ]; then
|
||||
ORIGINE=$(git -C "$TRAVAIL" remote get-url origin 2>/dev/null || echo "")
|
||||
[ "$ORIGINE" = "$CATALOG_REPO" ] || rm -rf "$TRAVAIL"
|
||||
fi
|
||||
|
||||
if [ -d "$TRAVAIL/.git" ]; then
|
||||
git -C "$TRAVAIL" fetch --quiet --depth 1 origin "$CATALOG_BRANCH" || return 1
|
||||
git -C "$TRAVAIL" reset --quiet --hard "origin/$CATALOG_BRANCH" || return 1
|
||||
@@ -66,9 +74,17 @@ sync_une_fois() {
|
||||
cp -a "$SOURCE"/. "$CIBLE.partiel"/ || return 1
|
||||
mv "$CIBLE.partiel" "$CIBLE" || return 1
|
||||
|
||||
# Bascule atomique du lien, puis menage des anciennes revisions.
|
||||
ln -sfn "$CIBLE" "$CATALOG_DEST/actuel.neuf"
|
||||
mv -f "$CATALOG_DEST/actuel.neuf" "$CATALOG_DEST/actuel" || return 1
|
||||
# Bascule du lien. Surtout pas "mv vers actuel" : quand actuel est un lien
|
||||
# vers un repertoire, mv le suit et depose le fichier a l'interieur au lieu
|
||||
# de remplacer le lien. ln -sfn remplace le lien lui-meme, sans le suivre.
|
||||
ln -sfn "$CIBLE" "$CATALOG_DEST/actuel" || return 1
|
||||
rm -rf "$CATALOG_DEST"/rev-*/actuel.neuf "$CATALOG_DEST/actuel.neuf"
|
||||
|
||||
# Verification : sans elle, une bascule ratee passerait pour un succes.
|
||||
if [ "$(readlink "$CATALOG_DEST/actuel")" != "$CIBLE" ]; then
|
||||
echo "catalog-sync : la bascule du lien a echoue" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
ls -1dt "$CATALOG_DEST"/rev-* 2>/dev/null | tail -n +$((REVISIONS_CONSERVEES + 1)) | while read -r vieux; do
|
||||
rm -rf "$vieux"
|
||||
|
||||
@@ -628,8 +628,17 @@ function ouvrirModale(titre, construire) {
|
||||
|
||||
function fermerModale() { document.getElementById('modal').hidden = true; }
|
||||
|
||||
function titreCatalogue(packs) {
|
||||
return packs ? 'Importer un pack (' + packs.length + ')' : 'Importer un pack';
|
||||
}
|
||||
|
||||
function majTitreModale(texte) {
|
||||
var titre = document.getElementById('modal-titre');
|
||||
if (titre) titre.textContent = texte;
|
||||
}
|
||||
|
||||
function ouvrirCataloguePacks() {
|
||||
ouvrirModale('Importer un pack', function (corps) {
|
||||
ouvrirModale(titreCatalogue(packsCache), function (corps) {
|
||||
var recherche = elt('input', { type: 'text', placeholder: 'Filtrer par nom, technologie, plugin...' });
|
||||
corps.appendChild(recherche);
|
||||
var resultats = elt('div', { className: 'packs' });
|
||||
@@ -637,6 +646,13 @@ function ouvrirCataloguePacks() {
|
||||
|
||||
function afficher(packs) {
|
||||
resultats.innerHTML = '';
|
||||
if (Array.isArray(packs) && packsCache) {
|
||||
majTitreModale(
|
||||
packs.length === packsCache.length
|
||||
? titreCatalogue(packsCache)
|
||||
: 'Importer un pack (' + packs.length + ' sur ' + packsCache.length + ')'
|
||||
);
|
||||
}
|
||||
if (!Array.isArray(packs)) {
|
||||
resultats.appendChild(elt('div', {
|
||||
className: 'notice bad',
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
#!/bin/sh
|
||||
# Verifie la synchronisation du catalogue sur un vrai depot Git local.
|
||||
#
|
||||
# Le defaut corrige le 11/09/2026 ne se voyait qu'a la deuxieme revision : la
|
||||
# premiere bascule creait le lien, la seconde le suivait au lieu de le
|
||||
# remplacer, et le catalogue restait fige pendant que le script annoncait des
|
||||
# publications reussies. Ce test joue donc deux revisions.
|
||||
#
|
||||
# sh tests/sync.sh
|
||||
set -eu
|
||||
|
||||
TRAVAIL=$(mktemp -d /tmp/enclume-sync-XXXXXX)
|
||||
trap 'rm -rf "$TRAVAIL"' EXIT
|
||||
|
||||
DEPOT="$TRAVAIL/depot"
|
||||
DESTINATION="$TRAVAIL/catalogue"
|
||||
mkdir -p "$DEPOT/catalog/system" "$DESTINATION"
|
||||
|
||||
cd "$DEPOT"
|
||||
git init --quiet --initial-branch=main
|
||||
git config user.email "[email protected]"
|
||||
git config user.name "Essai"
|
||||
echo "premier: pack" > catalog/system/premier.yml
|
||||
git add -A && git commit --quiet -m "premiere revision"
|
||||
|
||||
cd - > /dev/null
|
||||
|
||||
lancer_un_cycle() {
|
||||
CATALOG_REPO="$DEPOT" CATALOG_DEST="$DESTINATION" CATALOG_BRANCH=main \
|
||||
CATALOG_SUBDIR=catalog SYNC_INTERVAL=1 RELOAD_URL="" \
|
||||
CATALOG_TRAVAIL="$TRAVAIL/clone" \
|
||||
timeout 20 sh docker/catalog-sync.sh > "$TRAVAIL/journal" 2>&1 || true
|
||||
}
|
||||
|
||||
echouer() {
|
||||
echo "ECHEC : $1"
|
||||
echo "--- journal ---"
|
||||
cat "$TRAVAIL/journal" 2>/dev/null || true
|
||||
echo "--- arborescence ---"
|
||||
ls -la "$DESTINATION"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Premiere revision
|
||||
lancer_un_cycle
|
||||
[ -L "$DESTINATION/actuel" ] || echouer "actuel n'est pas un lien symbolique"
|
||||
[ -f "$DESTINATION/actuel/system/premier.yml" ] || echouer "le premier pack n'est pas publie"
|
||||
|
||||
# Seconde revision : c'est ici que le defaut se manifestait
|
||||
cd "$DEPOT"
|
||||
echo "second: pack" > catalog/system/second.yml
|
||||
git add -A && git commit --quiet -m "seconde revision"
|
||||
ATTENDU=$(git rev-parse --short HEAD)
|
||||
cd - > /dev/null
|
||||
|
||||
lancer_un_cycle
|
||||
OBTENU=$(basename "$(readlink "$DESTINATION/actuel")")
|
||||
[ "$OBTENU" = "rev-$ATTENDU" ] || echouer "actuel pointe sur $OBTENU au lieu de rev-$ATTENDU"
|
||||
[ -f "$DESTINATION/actuel/system/second.yml" ] || echouer "le second pack n'est pas publie"
|
||||
[ -e "$DESTINATION/actuel/actuel.neuf" ] && echouer "un lien parasite a ete depose dans la revision"
|
||||
|
||||
echo "synchronisation : bascule correcte sur deux revisions successives"
|
||||
Reference in new issue
Block a user