Skip to content

Build, base de donnees, uSync, deploiement

Le projet a deux scripts Cake distincts :

  • build.cake : dev/run local (Windows + SQL Server). Cible par defaut Review-App.
  • build-ci.cake : build CI dans le Dockerfile (Linux, sans SQL Server, sans dart-sdk, sans PowerShell). Cible par defaut Release-CI.

Cake local (build.cake)

Cible par defaut : Review-App (verifie l'environnement, restaure la base, compile, lance le site).

Cibles principales :

CibleRole
Review-AppDefaut : Check-Local-Environment + restore DB + compile + lancement .NET
Check-Local-EnvironmentVerifie la presence de CI_SQL_CONNECTION_STRING
Restore-DatabaseCreate-Virgin-Umbraco-Database + Recreate-User-Database + Execute-ScratchSQL-Database
Create-Virgin-Umbraco-DatabaseDrop/recreate la base, applique le schema db/umbraco_base-13.6.0.sql
Recreate-User-DatabaseCree le login/user applicatif umbuser-starterkitv4 + roles
Execute-ScratchSQL-DatabaseExecute les scripts SQL ordonnes de data/01.Scratch/**/*.sql
Postbuild / Postbuild-FilesCompile SCSS + copie vues, templates email, vues Forms, JS, mirror Umbraco vers l'hote
Compile-TypeScriptnpx tsc dans src/Nanoxi/TypeScript/
Sass-CompileCompile les SCSS (Dart Sass) vers wwwroot/design/{skin}
Restore-Javascript-LibrariesLibMan (bootstrap, jquery, popper, splide, micromodal, jquery-validate, ...) vers wwwroot/lib/
Watch / Watch-Sass / Watch-Javascript / Watch-Dotnet / Watch-ModifiedFileswatchers + recopie auto des SCSS/CSHTML/JS modifies
Publish-Dotnet-Releasedotnet publish -c release -o ../../tmp/output
Build-Docker-ImageTag registry.internal.spektrum-suisse.ch/starterkitv4-chezzen:{version} (version lue dans la DLL App.Core)
ReleasePublish + build/push image Docker
ReplaceSecretKeysInjecte 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 :

  1. Restore-Javascript-Libraries (LibMan -> wwwroot/lib)
  2. Compile-TypeScript-CI (npm ci + npx tsc dans src/Nanoxi/TypeScript)
  3. Sass-Compile-CI (sass installe globalement via npm ; compile tmp/sass-compile/{skin} -> wwwroot/design) ; depend de Prepare-VaryBySkin-Files (copie css/fonts/images/favicons de default vers le dossier de staging)
  4. Postbuild-Files-CI (copie vues App.Core, templates email App.Mail, vues Forms, scripts compiles dist/, mirror Custom/Umbraco)
  5. 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 par cake/Set-EnvironmentVariable.ps1 ; Cake ajoute Encrypt=False).
  • Base : umb-chezzen-prd-db, user applicatif umbuser-starterkitv4 (role db_owner).
  • Restore-Database : drop/recreate la base, applique db/umbraco_base-13.6.0.sql, cree l'utilisateur, puis execute tous les scripts data/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 sur package*.json), restaure l'outil Cake (couche cachee sur .config/dotnet-tools.json), copie la source, dotnet restore src/Umbraco/Umbraco.sln, puis dotnet cake build-ci.cake --target=Release-CI.
  • Stage runtime : mcr.microsoft.com/dotnet/aspnet:8.0, TZ Europe/Zurich. Copie tmp/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 par DashboardIntroApiController pour 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 (branche staging, automatique) -> tag d'image staging + SHA court.
  • deploy:production (branche master, manuel) -> tag prod + SHA court.
  • Chaque job : docker build (avec --build-arg GIT_COMMIT_COUNT/GIT_COMMIT_SHA) puis docker push (tag primaire + SHA).
  • GIT_DEPTH: 0 pour que git rev-list --count renvoie 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 composant sync-claude-docs).

Gotchas dev

  • Secrets : placeholders dans les appsettings.* (NANOXI_POSTMASER_PWD, RECAPTCHAV3_SECRETKEY, ...), injectes au CI via ReplaceSecretKeys. 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).

Contributors

No contributors

Changelog

No recent changes