🚀 Docker Build and Push / build-and-push (15) (push) Successful in 5m29s
🚀 Docker Build and Push / build-and-push (16) (push) Successful in 6m10s
🚀 Docker Build and Push / build-and-push (17) (push) Successful in 5m20s
🚀 Docker Build and Push / build-and-push (18) (push) Successful in 5m21s
Image - Étape `base` commune : tous les paquets sont mis à niveau (PostgreSQL à la dernière mineure, pgvector, Debian). L'image de base de VectorChord restait figée à la version de sa publication. - En-têtes du serveur épinglés sur la version du serveur installé. PG18 avait été retiré parce que TimescaleDB, compilé avec des en-têtes 18.6, était chargé par un serveur 18.3 (`undefined symbol: palloc0_mul`). - Sonde de santé avec l'utilisateur et la base du conteneur : en `postgres`, elle écrivait une erreur FATAL au journal dès que POSTGRES_USER était défini. - Label `base.name` corrigé : il reprenait la version du paquet au lieu de la version majeure. CI - PG18 ajouté à la matrice. - Exécution nocturne : apt est interrogé dans l'image publiée ; elle n'est reconstruite et republiée que s'il lui reste des mises à jour, sinon elle est seulement testée. Lancement manuel possible. - `docker-build.yml` supprimé : l'ancien workflow à actions externes tournait encore à chaque push, en double de `docker.yml`. - `paths-ignore` : un push de documentation seule ne lance pas la CI. - Labels `version`, `url` et `fr.killinger.apt-refresh`. Tests - `tests.sh`, la même commande en local et en CI : utilisateur et base autres que `postgres`, version majeure du serveur, présence des cinq extensions, redémarrage, et reprise d'une base créée par l'image publiée. Documentation - README en vitrine, CLAUDE.md, docs/architecture.md, docs/exploitation/publication.md, six décisions, docs/a-faire.md.
43 lines
2.1 KiB
Markdown
43 lines
2.1 KiB
Markdown
# 0005 — Mises à jour nocturnes, déclenchées par ce qu'apt propose
|
|
|
|
Complète [0002](0002-paquets-a-jour-et-en-tetes-du-serveur.md) et
|
|
[0004](0004-ci-sans-action-externe.md).
|
|
|
|
## Contexte
|
|
|
|
Les images ne changeaient qu'à un push. Entre deux, elles ne recevaient ni version mineure de
|
|
PostgreSQL ni correctif de sécurité. Le cache persistant du runner aggrave le problème : une
|
|
couche `apt-get upgrade` déjà construite n'est jamais rejouée. Reconstruire sans cache chaque
|
|
nuit recompilerait TimescaleDB quatre fois et republierait quatre images identiques aux
|
|
précédentes.
|
|
|
|
## Décision
|
|
|
|
- La CI tourne chaque nuit. Pour chaque version, elle tire l'image publiée et y simule
|
|
`apt-get upgrade --with-new-pkgs`.
|
|
- S'il reste des paquets à mettre à niveau, ou si l'image n'existe pas, elle construit avec
|
|
une nouvelle clé `APT_REFRESH`, teste et publie.
|
|
- Sinon elle ne construit ni ne publie : elle joue les tests sur l'image publiée.
|
|
- La clé d'une image est gardée dans son label `fr.killinger.apt-refresh`. Un push la
|
|
reprend quand l'image publiée est à jour, pour que le cache serve.
|
|
- Les versions de TimescaleDB et de VectorChord ne sont pas concernées
|
|
([0003](0003-versions-de-timescaledb-et-vectorchord-epinglees.md)).
|
|
|
|
## Conséquences
|
|
|
|
- Une version mineure de PostgreSQL ou un correctif Debian est publié la nuit qui suit son
|
|
arrivée dans apt, sans intervention.
|
|
- Une nuit sans mise à jour coûte une simulation apt et les tests, par version.
|
|
- L'état de référence est l'image publiée, pas le cache du runner : un cache perdu ne
|
|
provoque ni reconstruction ni publication inutiles.
|
|
- Tant qu'une reconstruction échoue aux tests, rien n'est publié et elle est retentée la nuit
|
|
suivante.
|
|
- La simulation et la construction utilisent la même commande apt : après une publication,
|
|
l'image n'a plus rien en attente et la nuit suivante ne reconstruit pas.
|
|
- Une republication de l'image de base sous la même étiquette n'est reprise qu'à la
|
|
prochaine reconstruction, par `--pull`.
|
|
|
|
## Attestée par
|
|
|
|
`.gitea/workflows/docker.yml` (étape « Check for updates ») ; `Dockerfile` (`APT_REFRESH`).
|