Build, base de donnees, uSync, deploiement
Le projet a deux scripts Cake distincts :
build.cake: dev/run local (Windows + SQL Server). Cible par defautReview-App.build-ci.cake: build CI dans le Dockerfile (Linux, sans SQL Server, sans dart-sdk, sans PowerShell). Cible par defautRelease-CI.
Cake local (build.cake)
Cible par defaut : Review-App (verifie l'environnement, restaure la base, compile, lance le site).
Cibles principales :
| Cible | Role |
|---|---|
| Review-App | Defaut : Check-Local-Environment + restore DB + compile + lancement .NET |
| Check-Local-Environment | Verifie la presence de CI_SQL_CONNECTION_STRING |
| Restore-Database | Create-Virgin-Umbraco-Database + Recreate-User-Database + Execute-ScratchSQL-Database |
| Create-Virgin-Umbraco-Database | Drop/recreate la base, applique le schema db/umbraco_base-13.6.0.sql |
| Recreate-User-Database | Cree le login/user applicatif umbuser-starterkitv4 + roles |
| Execute-ScratchSQL-Database | Execute les scripts SQL ordonnes de data/01.Scratch/**/*.sql |
| Postbuild / Postbuild-Files | Compile SCSS + copie vues, templates email, vues Forms, JS, mirror Umbraco vers l'hote |
| Compile-TypeScript | npx tsc dans src/Nanoxi/TypeScript/ |
| Sass-Compile | Compile les SCSS (Dart Sass) vers wwwroot/design/{skin} |
| Restore-Javascript-Libraries | LibMan (bootstrap, jquery, popper, splide, micromodal, jquery-validate, ...) vers wwwroot/lib/ |
| Watch / Watch-Sass / Watch-Javascript / Watch-Dotnet / Watch-ModifiedFiles | watchers + recopie auto des SCSS/CSHTML/JS modifies |
| Publish-Dotnet-Release | dotnet publish -c release -o ../../tmp/output |
| Build-Docker-Image | Tag registry.internal.spektrum-suisse.ch/starterkitv4-chezzen:{version} (version lue dans la DLL App.Core) |
| Release | Publish + build/push image Docker |
| ReplaceSecretKeys | Injecte les variables CI/CD GitLab dans les appsettings (release) |
Variables de build (defauts) : target=Review-App, configuration=Release, environment=Development, umbracoVersion=13.6.0, skins = { "default" }.
Cake CI (build-ci.cake)
Cible par defaut : Release-CI, executee dans le stage build du Dockerfile. Chaine :
Restore-Javascript-Libraries(LibMan ->wwwroot/lib)Compile-TypeScript-CI(npm ci+npx tscdanssrc/Nanoxi/TypeScript)Sass-Compile-CI(sass installe globalement via npm ; compiletmp/sass-compile/{skin}->wwwroot/design) ; depend dePrepare-VaryBySkin-Files(copie css/fonts/images/favicons dedefaultvers le dossier de staging)Postbuild-Files-CI(copie vues App.Core, templates email App.Mail, vues Forms, scripts compiles dist/, mirrorCustom/Umbraco)Publish-Dotnet-Release(dotnet publish -c release -o ../../tmp/output --no-restore; le restore est fait dans une couche Docker separee)
Pas de Vite, pas de WebOptimizer cote build : WebOptimizer assemble/minifie a l'execution (declare dans Program.cs).
Base de donnees (dev local uniquement)
- Connexion via
CI_SQL_CONNECTION_STRING(definie parcake/Set-EnvironmentVariable.ps1; Cake ajouteEncrypt=False). - Base :
umb-chezzen-prd-db, user applicatifumbuser-starterkitv4(roledb_owner). Restore-Database: drop/recreate la base, appliquedb/umbraco_base-13.6.0.sql, cree l'utilisateur, puis execute tous les scriptsdata/01.Scratch/.data/01.Scratch/(structure de base, ordonnee) : 000.Language, 005.Custom, 010.BaseStoredProcedure, ElementType/DataType (013-030), 040.BaseMedia, 050.NanoxiTable, 070.Root, 075.Compositions, 076.Template, 091.Settings, 100.Autorisation, 210.I18n, 999.Users.- Le CI (Docker) ne touche pas a la base : il ne fait que compiler/publier.
uSync
Config Umbraco serialisee sous src/Umbraco/uSync/v9/ : ContentTypes, Content, DataTypes, Dictionary, Domains, Languages, Macros, Media, MediaTypes, MemberTypes, Templates. Sert de source de verite pour la config (document types, dictionnaire, domaines, langues). Les scripts data/01.Scratch/ contournent temporairement certains alias reserves Umbraco en conflit avec uSync (a nettoyer quand le workflow uSync sera mature).
Docker (Linux, multi-stage)
Dockerfile :
- Stage build :
mcr.microsoft.com/dotnet/sdk:8.0, TZ Europe/Zurich. Installe node 22, Dart Sass via npm (sass@1.97.3), restaure les deps TypeScript (couche cachee surpackage*.json), restaure l'outil Cake (couche cachee sur.config/dotnet-tools.json), copie la source,dotnet restore src/Umbraco/Umbraco.sln, puisdotnet cake build-ci.cake --target=Release-CI. - Stage runtime :
mcr.microsoft.com/dotnet/aspnet:8.0, TZ Europe/Zurich. Copietmp/output/.ENTRYPOINT ["dotnet", "Umbraco.dll"]. - Infos Git (
GIT_COMMIT_COUNT,GIT_COMMIT_SHA) passees en--build-arg, propagees en variables d'environnement runtime et lues parDashboardIntroApiControllerpour afficher la version sur le dashboard backoffice. - Volumes runtime (voir README) : media, Customer, ecatalogue(test), cfetes(test) montes depuis l'hote ; ports/env passes au
docker run.
CI/CD (GitLab)
.gitlab-ci.yml. Modele build & push image Docker (pas de pull/IIS). Stage deploy (runner linux).
- Image :
registry.internal.spektrum-suisse.ch/starterkitv4-chezzen. deploy:staging(branchestaging, automatique) -> tag d'imagestaging+ SHA court.deploy:production(branchemaster, manuel) -> tagprod+ SHA court.- Chaque job :
docker build(avec--build-arg GIT_COMMIT_COUNT/GIT_COMMIT_SHA) puisdocker push(tag primaire + SHA). GIT_DEPTH: 0pour quegit rev-list --countrenvoie le vrai nombre de commits.- Le deploiement effectif (pull de l'image sur le serveur cible) est gere hors GitLab (Watchtower / docker compose / orchestrateur infra).
- Le stage
docs(sync de la doc agent) est ajoute en parallele (voir le composantsync-claude-docs).
Gotchas dev
- Secrets : placeholders dans les
appsettings.*(NANOXI_POSTMASER_PWD,RECAPTCHAV3_SECRETKEY, ...), injectes au CI viaReplaceSecretKeys. Jamais committes en clair. - Ne pas editer les fichiers generes (
Views/,wwwroot/design|scripts|lib). - Ne pas melanger build local (
build.cake, Windows/SQL) et build CI (build-ci.cake, Docker/Linux).

