🚀 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.
1.9 KiB
1.9 KiB
0002 — Paquets mis à niveau à la construction, en-têtes épinglés sur le serveur
Contexte
L'image de base n'est republiée qu'à chaque version de VectorChord. Entre deux, son PostgreSQL prend du retard sur les versions mineures et les correctifs de sécurité : une image de base contenait PostgreSQL 18.3 quand le dépôt PGDG en était à 18.6, avec une trentaine d'autres paquets en retard.
La compilation de TimescaleDB installe les en-têtes du serveur par apt, donc dans la
dernière version. Compilé avec des en-têtes 18.6 puis chargé par un serveur 18.3,
TimescaleDB échouait à la création de l'extension (undefined symbol: palloc0_mul), sans
erreur à la compilation. PostgreSQL 18 avait été retiré de la CI pour cette raison.
Décision
- Une étape
base, commune à la compilation et à l'image finale, met tous les paquets à niveau (apt-get upgrade --with-new-pkgs). Le serveur publié est donc à la dernière version mineure. - L'étape de compilation installe les en-têtes dans la version exacte du serveur installé,
lue par
dpkg-query, et non dans la dernière disponible. - La couche de mise à niveau porte une clé de cache, l'argument
APT_REFRESH.
Conséquences
- PostgreSQL 18 est de nouveau construit et publié.
- Serveur et en-têtes ne peuvent plus diverger : si la version voulue des en-têtes n'est plus dans le dépôt, la construction échoue au lieu de produire une image qui ne charge pas TimescaleDB.
- La variable d'environnement
PG_VERSIONhéritée de l'image de base n'est plus la version du serveur. - Sans changement de
APT_REFRESH, le cache garde la mise à niveau telle qu'elle a été faite : c'est la CI qui décide quand la rejouer (0005).
Attestée par
Dockerfile (étapes base et builder) ; commit dcf4169, qui avait retiré PostgreSQL 18.