No description
  • Python 58.8%
  • Dockerfile 41.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-11-03 22:36:41 +00:00
recipes Externaliser le build et le cycle de vie de l image asami-sentry 2026-11-03 22:09:28 +00:00
third_party/patches/sentry-mcp/0.42.0 Externaliser le build et le cycle de vie de l image asami-sentry 2026-11-03 22:09:28 +00:00
.gitignore Externaliser le build et le cycle de vie de l image asami-sentry 2026-11-03 22:09:28 +00:00
.gitlab-ci.yml Configurer la détection de secrets dans « .gitlab-ci.yml », en créant ce fichier s'il n'existe pas déjà 2026-11-03 22:48:19 +01:00
Dockerfile Externaliser le build et le cycle de vie de l image asami-sentry 2026-11-03 22:09:28 +00:00
README.md README : consigner la livraison 2026.11.3 (digest de l image publique) 2026-11-03 22:36:41 +00:00

asami-sentry

Image Docker autonome du serveur MCP Sentry d'Asami : @sentry/mcp-server 0.42.0 (source getsentry/toolkit, patch Asami « update-issue-structured »), compilé et servi depuis une base node:22.13.1-bookworm-slim.

Ce dépôt porte le cycle de vie distinct de l'image asami-sentry — externalisation du stage sentry-mcp-build du cœur Asami (carte Planka « asami-sentry : extraire sentry-mcp et node dans leur propre image », branche feature/lifecycle-v2). Sentry est une intégration externe désactivée par défaut dans Asami ; son image vit et se versionne ici, indépendamment des releases du cœur. Le code CORE/WMI (lancement, SecretRef, gates, télémétrie sentry-sdk) reste dans lodlp/asami/asami.

Pins

Composant Pin Preuve
Base (build + service) node:22.13.1-bookworm-slim stage qualifié du cœur (feature/lifecycle-v2, run #25/#26)
Source getsentry/toolkit tag 0.42.0, commit 54f66d8d77bdee0d036d4754806d782b58217ef7 MANIFEST, carte 1892205611702027586
Patch local third_party/patches/sentry-mcp/0.42.0/0001-update-issue-structured.patch — SHA-256 1962297d…cd2d8 vérifié à chaque build
Lockfile pnpm-lock.yaml — SHA-256 15fec7b2…bc2c2 vérifié à chaque build (clone + image finale)
pnpm 11.8.0 tarball, SRI sha512-wfXnxMsk…VfJg== vérifié avant installation
Node v22.13.1 (fourni par la base, /usr/local/bin/node) vérifié à chaque build

Provenance complète : third_party/patches/sentry-mcp/0.42.0/MANIFEST.md (inclus dans l'image en /opt/asami/sentry-mcp/ASAMI-PROVENANCE.md).

Politique

  • Fail-closed : toute dérive de source, d'empreinte de patch ou de lockfile fait échouer le build ; une montée de version (toolkit, patch, pnpm, node) est un rebuild candidat + requalification, jamais un auto-update.
  • Le conteneur servi n'effectue aucun téléchargement npm/Git et n'applique aucun patch : il ne contient que le résultat compilé et ses dépendances verrouillées.
  • Non-root : l'ASAMI_RUNTIME_UID/ASAMI_RUNTIME_GID (entiers positifs non nuls) sont obligatoires à la construction ; le conteneur tourne sous l'utilisateur asami.
  • Pas de ports publiés : le serveur parle MCP sur STDIO, sous supervision du CORE Asami.

Contrat avec le cœur Asami

Élément Valeur
Exécutable node /usr/local/bin/node (ENV SENTRY_NODE)
Point d'entrée serveur /opt/asami/sentry-mcp/dist/index.js (ENV SENTRY_ENTRYPOINT)

Côté cœur (branche feature/lifecycle-v2, reste à converger par le chantier lifecycle) : src/asami/core/sentry_launch.py doit consommer /usr/local/bin/node (ou une valeur configurable) au lieu de /opt/asami/sentry-node/bin/node ; le rôle sentry doit être ajouté à composition-manifest-v1.schema.json ; les étapes sentry-dist, COPY node, COPY sentry-mcp du Dockerfile cœur et le fichier resources/ci/sentry_mcp_*smoke.py peuvent être supprimés une fois cette image qualifiée. Le pin de production consommé par Asami provient du digest immuable de l'image publiée, jamais d'un tag flottant.

Build

Sur un Atelier provisionné (identité GitLab du projet) :

# 1. Stage de build seul (clone toolkit + pnpm, ~3 Go de couches de build)
docker build --target sentry-mcp-build -t asami-sentry:stage-c1 .

# 2. Smoke STDIO hors réseau sur le stage
python3 recipes/sentry_mcp_offline_smoke.py asami-sentry:stage-c1

# 3. Image de service (UID/GID non-root obligatoires)
docker build \
  --build-arg ASAMI_RUNTIME_UID=1000 --build-arg ASAMI_RUNTIME_GID=1000 \
  --build-arg ASAMI_GIT_COMMIT=$(git rev-parse HEAD) \
  --build-arg ASAMI_IMAGE_TAG=c1 \
  -t asami-sentry:c1 .

# 4. Smoke image finale (non-root, labels, intégrité, protocole MCP offline)
python3 recipes/sentry_image_smoke.py asami-sentry:c1 --expected-revision $(git rev-parse HEAD)

Les deux smokes doivent se terminer par SENTRY_MCP_OFFLINE/SENTRY_IMAGE_OFFLINE PASS. La qualification complète (schema, SecretRef, permissions des outils métier) appartient au cœur Asami et n'est pas couverte ici.

Cycle de vie du dépôt

  • Définition de l'image, recettes de build/smoke, et à terme publication au GitLab Container Registry de ce projet en référence/digest immuables — même frontière que lodlp/asami-tools/asami-browsers (§19.7 de la carte Explorations) : la construction d'Asami ne reconstruit jamais le serveur Sentry.
  • Les montées de version upstream (toolkit 0.42.x → suivants) : mise à jour des pins du Dockerfile + du patch (dans third_party/patches/sentry-mcp/<version>/), rebuild candidat, smokes, requalification.

Versionnage

Livraisons en CalVer date : YYYY.M.D (décision opérateur du 28 octobre 2026, alignée sur asami-browsers).

  • Un numéro = une livraison de contenu requalifié ; le tag git annoté et le tag d'image portent le même numéro ; suffixe incrémental .N pour plusieurs livraisons le même jour.
  • Un tag n'est jamais muté, latest n'existe pas : la référence canonique est le digest immuable de l'image publiée.
  • Tag annoté créé par l'agent : Tagger Ventoline <ventdunord@asami.rocks> (GIT.md §1.3).

Historique

  • 2026-11-03 : création du dépôt ; externalisation du build depuis lodlp/asami/asami feature/lifecycle-v2 (commit 55b9e681). Fichiers importés depuis le cœur : le patch épinglé et son MANIFEST (SHA vérifiés identiques), les étapes de build du stage sentry-mcp-build, et les deux smokes CI adaptés aux chemins de l'image autonome.
  • 2026-11-03 — livraison 2026.11.3 : première image publique registry.gitlab.com/lodlp/asami-tools/asami-sentry:2026.11.3, digest d'index immuable sha256:7416e4b92722cca96cc27d173764f398763785dc6855d1d8e115b92a1d5b3fdd, revision e20d4e6bf1aa8ee422c3e5f02074c97e2ac5cc52 (tag annoté git 2026.11.3). Smokes offline stage et image PASS sur ces bytes exacts ; index relu anonymement depuis Atelier-H2 et Terry, digest identique. Ce digest est la référence canonique à pinner par le CORE (lifecycle v2).