Skip to content

Commit af6e463

Browse files
nrissclaude
andcommitted
refactor: remplacer fhir-package-installer par un warmup SUSHI+publisher
fhir-package-installer écrivait les packages dans /var/lib/.fhir/ (HOME incorrect pendant docker build) au lieu de /root/.fhir/packages/. Les packages n'étaient donc jamais utilisés ni indexés par le publisher. La nouvelle approche génère un sushi-config synthétique depuis fhir-packages.txt et lance SUSHI + le publisher pour télécharger tous les packages et créer leurs .index.db. Le publisher saute la phase "Generate OID index" si les .index.db existent déjà dans l'image. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent cd2557b commit af6e463

4 files changed

Lines changed: 45 additions & 30 deletions

File tree

Dockerfile

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -48,29 +48,26 @@ RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg \
4848

4949
RUN java -version && node --version && sushi --version && jekyll --version && dot -V && python3 --version
5050

51-
# Pré-chargement du cache FHIR via fhir-package-installer
52-
# Installe les packages listés dans fhir-packages.txt dans /root/.fhir/packages/
53-
WORKDIR /opt/fhir-setup
54-
RUN npm init -y && npm install fhir-package-installer
55-
COPY scripts/install-fhir-packages.mjs .
56-
COPY fhir-packages.txt .
57-
RUN node install-fhir-packages.mjs fhir-packages.txt
58-
5951
# Pré-télécharger le IG Publisher JAR (version latest au moment du build de l'image)
6052
RUN PUBLISHER_VERSION=$(curl -s https://api.github.com/repos/HL7/fhir-ig-publisher/releases/latest | jq -r '.tag_name') \
6153
&& wget -q "https://github.com/HL7/fhir-ig-publisher/releases/download/${PUBLISHER_VERSION}/publisher.jar" \
6254
-O /root/publisher.jar \
6355
&& echo "IG Publisher ${PUBLISHER_VERSION} pre-installed at /root/publisher.jar"
6456

65-
# Pré-génération des index OID (.oid-map-2.db) pour tous les packages baked dans l'image.
66-
# Le publisher scanne /root/.fhir/packages/ au démarrage quelle que soit l'IG traitée.
67-
# IG synthétique minimale : le build peut échouer après l'indexation (|| true).
68-
COPY scripts/synthetic-ig/ /tmp/synthetic-ig/
69-
RUN cd /tmp/synthetic-ig \
70-
&& HOME=/root sushi . \
71-
&& java -Xmx4096m -jar /root/publisher.jar -ig . -tx n/a 2>&1 \
72-
| grep -E "Generate OID|Error|Exception" \
57+
# Warmup : télécharge les packages FHIR listés dans fhir-packages.txt dans /root/.fhir/packages/
58+
# et génère les index de packages (.index.db) pour chacun via le publisher.
59+
# Remplace fhir-package-installer qui écrivait dans un HOME incorrect pendant le docker build.
60+
# fhir-packages.txt reste la source de vérité et le déclencheur de rebuild de l'image.
61+
WORKDIR /opt/warmup
62+
COPY fhir-packages.txt .
63+
COPY scripts/generate-warmup-config.mjs .
64+
COPY scripts/synthetic-ig/ig.ini ./synthetic-ig/
65+
RUN mkdir -p synthetic-ig/input/fsh \
66+
&& node generate-warmup-config.mjs fhir-packages.txt synthetic-ig/sushi-config.yaml
67+
RUN cd synthetic-ig \
68+
&& HOME=/root sushi . 2>&1 | tail -5 \
69+
&& HOME=/root java -Xmx4096m -jar /root/publisher.jar -ig . -tx n/a 2>&1 | tail -30 \
7370
|| true
74-
RUN rm -rf /tmp/synthetic-ig
71+
RUN rm -rf /opt/warmup
7572

7673
WORKDIR /workspace

scripts/generate-warmup-config.mjs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Génère un sushi-config.yaml de warmup à partir de fhir-packages.txt.
2+
// Pour les packages listés plusieurs fois (ex: hl7.fhir.fr.core 2.1.0 et 2.2.0),
3+
// conserve la dernière version rencontrée (la plus récente dans le fichier).
4+
import { readFileSync, writeFileSync } from 'fs';
5+
6+
const [,, inputFile, outputFile] = process.argv;
7+
const lines = readFileSync(inputFile, 'utf8').split('\n');
8+
const pkgs = {};
9+
for (const line of lines) {
10+
const trimmed = line.trim();
11+
if (!trimmed || trimmed.startsWith('#')) continue;
12+
const [id, version = 'current'] = trimmed.split(/\s+/);
13+
pkgs[id] = version;
14+
}
15+
const deps = Object.entries(pkgs).map(([id, v]) => ` ${id}: ${v}`).join('\n');
16+
const yaml = `id: oid-index-warmup
17+
canonical: https://example.org/oid-warmup
18+
name: OIDIndexWarmup
19+
status: draft
20+
version: 0.0.1
21+
fhirVersion: 4.0.1
22+
copyrightYear: 2026+
23+
releaseLabel: ci-build
24+
dependencies:
25+
${deps}
26+
`;
27+
writeFileSync(outputFile, yaml);
28+
console.log(`Warmup sushi-config généré avec ${Object.keys(pkgs).length} dépendances : ${Object.keys(pkgs).join(', ')}`);

scripts/install-fhir-packages.mjs

Lines changed: 0 additions & 13 deletions
This file was deleted.

scripts/synthetic-ig/ig.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[IG]
2+
ig = fsh-generated/resources/ImplementationGuide-oid-index-warmup.json
3+
template = fhir.base.template#current

0 commit comments

Comments
 (0)