Skip to content

Workflows

Parcours dev - mise en place locale

  1. nvm use 22.12.0, puis cd src/Web et npm install.
  2. Base de donnees : par defaut Server=localhost\sqlexpress;Database=UmbracoBaseTemplate;User Id=dev;Password=dev. Override via appsettings.local.json (git-ignore) ou variable d'env. UpgradeUnattended=true cree/migre la base au boot.
  3. (Optionnel) SMTP local : docker run --rm -it -p 5000:80 -p 2525:25 rnwood/smtp4dev (UI sur http://localhost:5000).
  4. Backend : dotnet run --project src/Web/Web.csproj.
  5. Frontend en parallele : npm run dev (build + watch SCSS/JS, live-reload ; proxy / -> https://localhost:44360).
  6. Login backoffice rapide en DEBUG : GET /l connecte le premier utilisateur @spektrummedia.com.

Parcours dev - demarrer un projet aval depuis le template

upstream = ce repo template, origin = le repo du projet aval.

  1. Creer le repo GitLab (branche master, sans .gitignore).
  2. Cloner, creer develop et staging, les pousser.
  3. Lier et merger le template :
    bash
    git checkout develop
    git remote add upstream git@gitlab.internal.spektrum-suisse.ch:spektrum/umbraco-base-project.git
    git fetch upstream
    git merge upstream/v17 --allow-unrelated-histories
    # resoudre les conflits (garder la version du template)
    git commit -m "Merge upstream v17 into develop"
    git push origin develop
  4. Renommer UmbracoBaseTemplate.sln en <MonProjet>.sln.
  5. Configurer la base et renseigner UmbracoApplicationUrl.
  6. Merger develop -> staging -> master. Adapter le README aux specificites du projet.

Parcours dev - mise a jour depuis le template

bash
git checkout develop
git fetch upstream
git merge upstream/v17
git push origin develop

Parcours dev - ajouter une fonctionnalite

  • Service / composer / content finder / controller : voir ../architecture/patterns.md.
  • Document type : backoffice + uSync, voir ../modules/content-model.md.
  • Theme ou module JS : voir ../architecture/frontend-build.md.
  • Outil marketing : voir ../modules/cookies-marketing.md (consentement obligatoire).
  • Penser a mettre a jour la doc concernee (protocole dans le CLAUDE.md racine).

Régénérer les modèles ModelsBuilder

ModelsBuilder tourne en SourceCodeAuto : les classes de src/Web/umbraco/Models/*.generated.cs sont réécrites à chaque sauvegarde d'un content type dans le backoffice. C'est le seul déclencheur.

Piège : quand on ajoute un document type en écrivant directement le .config sous uSync/v17/, la régénération n'a pas lieu. uSync supprime les notifications de sauvegarde pendant son import au démarrage, donc rien ne prévient ModelsBuilder. Les modèles restent absents, et une vue Razor qui les référence ne compile pas.

Procédure

  1. dotnet run --project src/Web/Web.csproj. uSync importe les nouveaux types au démarrage.
  2. Backoffice -> Settings -> Document Types -> ouvrir le type concerné -> Save. Refaire pour chaque type ajouté ou modifié. Chaque sauvegarde réécrit les modèles.
  3. Vérifier les fichiers apparus dans src/Web/umbraco/Models/.
  4. dotnet build : les vues compilent désormais contre les modèles générés.

Si le build de l'étape 1 échoue parce que des vues référencent déjà des modèles inexistants, décommenter le bloc RazorCompileOnBuild / RazorCompileOnPublish = false dans src/Web/Web.csproj (il y est, en commentaire, prêt à servir), faire le cycle, puis le re-commenter. Laisser la compilation Razor désactivée supprimerait le seul garde-fou qui vérifie les vues au build.

Pour un agent

Un agent ne peut pas exécuter cette procédure : elle demande de lancer le site et de passer par le backoffice. Il doit s'arrêter et demander la régénération à l'utilisateur, jamais contourner en écrivant Model.Value<T>("alias"). Voir ../architecture/patterns.md, section "Accéder au contenu".

Contrôle après régénération

Ouvrir le .generated.cs et lire la ligne de déclaration de la classe :

csharp
public partial class HomePage : PublishedContentModel, ICookiesSettings, IPageSettings

Une composition manquante dans cette liste ne casse pas le build. Elle fait seulement remonter null au runtime aux helpers qui la cherchent (AncestorOrSelf<ISiteSettings>()), ce qui vide silencieusement un en-tête ou un pied de page. Vérifier la ligne, pas seulement que ça compile.

Parcours dev - release / deploiement

  1. CI : pipeline sur merge request vers master et commits sur master (build backend + frontend).
  2. Image Docker : docker build -t columbia-registry.spektrum.media/umb_<site>:<env> -f hosting/Dockerfile . puis docker push ; deploiement via docker-compose.yml adapte. Voir ../architecture/build-deploy.md.

Parcours editeur (backoffice Umbraco)

  • Backoffice en fr-FR par defaut. Contenu multilingue (langues fr, en-us livrees).
  • Pages : creer sous l'arbre de contenu (homePage en racine de site). Les pages portent la composition pageSettings (SEO, masquage sitemap).
  • Composer le contenu via les sections/elements de blocs (BlockGrid).
  • Reglages transverses : cookiesSettings (textes du popup cookies), marketingSettings (ID GA4).
  • Pages techniques : notFoundPage (404 par site), internalServerErrorPage (500).

Contributors

No contributors

Changelog

No recent changes