Travail pratique
ID : A08-TP06.1
But du TP
- Prendre en main l'IDE IntelliJ IDEA
- Se familiariser avec l'utilisation du système de gestion de versions Git et la plateforme de gestion de projets GitLab
- Réaliser collaborativement un site web avec HTML et CSS
Travail à réaliser
Code style
Configurez les code styles pour HTML et CSS dans IntelliJ IDEA :
- Depuis l'écran d'accueil, cliquez sur
CustomizepuisAll settings….- Les réglages faits depuis l'écran d'accueil s'appliquent à tous les nouveaux projets.
- Dans la liste
Scheme, utilisez le schémaDefault, enregistré au niveau de l'IDE et valable pour tous vos projets, plutôt queProject, enregistré dans le dossier.ideadu projet.
- Configurez les divers paramètres relatifs aux code styles vus durant le cours sous
Editor→Code Style→HTMLet sousEditor→Code Style→Style Sheets→CSS.
Inspections du code
Configurez les inspections du code pour HTML et CSS dans IntelliJ IDEA :
- Depuis l'écran d'accueil, cliquez sur
CustomizepuisAll settings….- Dans la liste
Profile, utilisez le profilDefault, enregistré au niveau de l'IDE, plutôt queProject Default, enregistré dans le dossier.ideadu projet.
- Dans la liste
- Configurez les diverses inspections du code relatives aux langages HTML et CSS sous
Editor→Inspections.- Configurez tout ce qui peut vous être utile pour détecter les erreurs ou problèmes dans votre code source.
- Apprenez à utiliser ces aides et testez-les.
Sources :
Projet
- Clonez le projet du travail pratique qui se trouve sur GitLab, puis ouvrez-le dans IntelliJ IDEA.
- Installez les dépendances du projet déclarées dans le fichier
package.json(Prettier, Stylelint et ses extensions).
Prettier
Les réglages de Prettier dans IntelliJ IDEA sont propres à chaque projet : ceux du TP05.2 ne s'appliquent pas à ce nouveau projet.
- Configurez Prettier pour ce projet sous
Languages & Frameworks→JavaScript→Prettier:Automatic Prettier configuration→ 🔘 : IntelliJ IDEA utilise le paquetprettierdu dossiernode_moduleset la configuration du fichier.prettierrc.jsondu projet (optionsingleQuote: true).Run for files:→ ajoutez les extensionshtmletcssau motif (ex.{**/*,*}.{html,css,md,json}).Run on save→ ✅Run on paste→ ✅Prefer Prettier configuration to IDE code style→ ✅
Source : JetBrains - IntelliJ IDEA (Prettier)
Stylelint
La configuration de Stylelint se trouve dans le fichier .stylelintrc.json du projet : configuration standard (stylelint-config-standard), vérification du CSS contenu dans les fichiers HTML (stylelint-config-html) et ordre alphabétique des propriétés (stylelint-order).
- Activez et configurez Stylelint dans IntelliJ IDEA pour ce projet sous
Languages & Frameworks→Style Sheets→Stylelint:Enable→ ✅Stylelint package:→ le paquetstylelintdu dossiernode_modulesdu projet (normalement détecté automatiquement).Run for files:→{**/*,*}.{css,html}: par défaut, Stylelint ne vérifie que les fichiers CSS, et avechtml, il vérifie aussi le code CSS des fichiers HTML (ex. élément<style>).Run stylelint --fix on save→ ✅
- Testez la configuration : dans une feuille de style, écrivez une déclaration qui ne respecte pas les règles du cours (ex.
margin: 0px;oucolor: #FFFFFF;), puis vérifiez que Stylelint la signale ou la corrige à l'enregistrement.
Site web
- Implémentez une page web en vous basant sur le modèle
template.png, disponible sous forme d'image dans le dossier/web/template/img(aussi visible dans le navigateur avec la page/web/template/index.html).- Le but est que votre page web, avec un contenu personnalisé, soit identique (ou le plus proche possible) au modèle en termes de présentation, disposition, agencement, etc.
- Travaillez dans votre propre branche
feature(voir Workflow Git).
Spécifications
- La police de caractères à utiliser est Lato.
- Utilisez le service Google Fonts pour l'intégrer à votre page web : copiez le code d'intégration (embed code) proposé pour l'élément HTML
<link>(et non pour@import). - Sélectionnez les graisses nécessaires uniquement.
- Tous les titres sont en gras (niveau de graisse :
700). - Les paragraphes de texte dans les articles et dans la biographie ont une hauteur de ligne de
145%(1.45).
- Utilisez le service Google Fonts pour l'intégrer à votre page web : copiez le code d'intégration (embed code) proposé pour l'élément HTML
- Le contenu de la page a une largeur fixe de
1000px, marges intérieures (padding) comprises, et il est centré horizontalement : si la fenêtre est plus étroite, le navigateur affiche une barre de défilement horizontale. - Le lien
Accueil(en haut, à droite) permet de revenir sur la page d'accueil du site web (/web/index.html). - Pour le moment,
Autres pagesest un menu sans utilité mais avec un effet de survol qui met le texte en noir.- On implémentera un menu déroulant dans la partie 2 du travail pratique.
- La photo de profil est une image rectangulaire ou carrée : c'est avec CSS que vous l'afficherez en forme de disque.
- Rédigez votre biographie avec 3 éléments textuels séparés par des lignes horizontales.
- Créez 4 articles dans l'ordre du plus récent au plus ancien.
- Les catégories sont à droite de la date séparées par une barre verticale.
- Attention, utilisez des images rectangulaires (paysage) pour les articles (ça vous facilitera la mise en page pour la partie 2 du TP).
- Dans les articles, les liens
Lire la suite…ont un effet de survol qui met le texte en noir.- En cliquant sur ces liens, on peut accéder à l'article complet sur un site web externe qui s'ouvre automatiquement dans un nouvel onglet.
- Votre page web, vos images, votre feuille de style personnelle et toutes autres ressources se trouvent dans un dossier portant le nom d'utilisateur de votre compte HES-SO (8.8) à la racine du dossier
/web(qui est le répertoire à déployer sur votre serveur web).- Ex.
/web/joel.dacomo(page webindex.html) - Ex.
/web/joel.dacomo/css(feuille de style CSS) - Ex.
/web/joel.dacomo/img(images)
- Ex.
- Intégrez la feuille de style modern-normalize (qui se trouve sous
/web/css/modern-normalize.css) dans votre page web avec un élément<link>. - Sauf indication contraire, le texte est en noir.
- Sauf indication contraire, le texte a une taille de
14px. - Tous les liens et le menu
Autres pages, les dates et les catégories des articles ont la couleur#777. - Tous les liens et le menu
Autres pagesont un effet de survol (hover) qui met le texte en noir.
En-tête


- "Joël Dacomo" → Titre de niveau 1
- Taille de la police :
24px
- Taille de la police :
AccueiletAutres pages→ navigationAccueil→ lienAutres pages→ menu déroulant- Chaque élément ci-dessus a une marge à gauche de
25px
- La couleur de fond est
#fff - Il y a un espace automatique entre le titre et la navigation (en violet)
Contenu principal


- La bordure entre le contenu principal de la page et l'en-tête est de
1pxavec la couleur#e2e2e2 - La couleur de fond du contenu est
#fff - La couleur de fond extérieur est
#f0f0f0 - Il y a un espace de
30pxentre la biographie et la liste des articles (en violet)
Article


- La bordure est de
1pxavec la couleur#e2e2e2 - Les coins arrondis de l'article et de l'image ont un rayon de
5px - La couleur de fond du contenu est
#fff - La couleur de fond extérieur est
#f0f0f0 - Il y a un espacement de
30pxentre chaque article - Les dimensions de l'image sont
180pxen largeur et en hauteur - Il y a un espace de
20pxentre l'image et le contenu de l'article (en violet) - L'article est composé :
- D'un en-tête contenant le titre de niveau 2 ainsi que la date et la catégorie
- Le titre a une taille de
22px
- Le titre a une taille de
- D'un paragraphe contenant le texte de l'article
- D'un pied de page contenant le lien
Lire la suite…
- D'un en-tête contenant le titre de niveau 2 ainsi que la date et la catégorie
Biographie


- La bordure est de
1pxavec la couleur#e2e2e2 - Les coins arrondis ont un rayon de
5px - La couleur de fond du contenu est
#fff - Les dimensions de l'image sont
160pxen largeur et en hauteur - La biographie est composée :
- D'une photo de profil de l'auteur du blog
- D'un titre de niveau 2
- Le titre a une taille de
20px
- Le titre a une taille de
- De 3 paragraphes de texte séparés par une ligne horizontale
- La ligne de séparation fait
1pxde hauteur avec la couleur#e2e2e2
- La ligne de séparation fait
- Il y a un espace de
20pxentre la photo et le titre (en violet) - Il y a un espace de
10pxentre le titre et le 1er paragraphe - Il y a un espace de
10pxentre chaque paragraphe et la ligne de séparation
Pied de page


- La couleur de fond du contenu est
#000 - La couleur du texte est
#fff
Workflow Git
Utilisez le Feature Branch Workflow pour gérer les versions de votre code source et le partager entre vous : chaque page personnelle est développée dans sa propre branche, puis intégrée à la branche main par une merge request (MR) relue par une autre personne.
- Respectez l'ensemble des règles, vues en cours, relatives aux messages de commit, aux conventions de nommage des branches et à la numérotation des versions.
- La branche
mainest protégée : personne ne peut y faire depush, elle n'est modifiée que par la fusion d'une MR sur GitLab. - Une MR ne peut être fusionnée qu'après avoir été approuvée par une autre personne que son auteur (voir Approbation obligatoire).
- Le projet utilise la méthode de fusion "Merge commit with semi-linear history" : une MR ne peut être fusionnée que si sa branche est à jour par rapport à
main(voir Méthodes de fusion dans GitLab).
Organisation
- Classez les 9 personnes de la classe par ordre alphabétique des noms de famille.
- Chaque personne relit la MR de la personne qui la suit dans cette liste (la dernière relit la MR de la première).
- Choisissez ensemble la personne responsable de la release
0.5.0(voir Release ci-dessous) et communiquez votre choix sur le canal Teams du cours au plus tard le jeudi 5 novembre à 13h.- La MR de la release est relue et approuvée par les 8 autres personnes : chacune vérifie que sa ligne figure correctement dans le changelog.
Votre page personnelle
-
Mettez à jour votre branche
mainlocale, puis créez votre branchefeaturedepuis celle-ci (ex.feature/blog-joel.dacomo) :git switch main git fetch git rebase origin/main git switch -c feature/blog-joel.dacomo -
Réalisez votre page web dans cette branche, avec des commits réguliers, et envoyez la branche sur
origindès les premiers commits (git push -u origin feature/blog-joel.dacomo). - Dans la même branche, une fois la page terminée :
- Ajoutez un lien vers votre page personnelle dans la liste des blogs de la page d'accueil du site web
/web/index.html, après le lienTemplate, dans l'ordre alphabétique des noms de famille (ex.Dacomo Joël). - Ajoutez une ligne pour votre page dans la section
## [Unreleased]du fichierCHANGELOG.md(voir Changelog).
- Ajoutez un lien vers votre page personnelle dans la liste des blogs de la page d'accueil du site web
- Sur GitLab, créez une merge request de votre branche vers
main:- Titre clair et description de votre travail : la description est pré-remplie par le modèle de MR du projet, complétez-la et cochez chaque contrôle effectué.
- Personne qui relit votre MR dans le champ
Reviewer. - Option de suppression de la branche source après la fusion cochée, sans regrouper les commits (squash).
- Corrigez votre travail selon les commentaires de la relecture, dans de nouveaux commits sur la même branche, puis
push: la MR se met à jour automatiquement. -
Quand GitLab indique que votre branche n'est plus à jour par rapport à
main(une autre MR a été fusionnée entre-temps), mettez-la à jour avec unrebase(voir Mettre à jour la branche) :git fetch git rebase origin/main git push --force-with-lease- Toutes les MR modifient la liste des blogs de
/web/index.htmlet la section[Unreleased]deCHANGELOG.md: des conflits sont attendus. Résolvez-les en gardant les lignes des autres et la vôtre, dans l'ordre alphabétique pour la liste des blogs.
- Toutes les MR modifient la liste des blogs de
-
Après la fusion, nettoyez votre dépôt local (voir Nettoyer).
Relecture de la MR d'une autre personne
- Récupérez la branche de la MR et testez la page dans votre navigateur (
git fetch, puisgit switch feature/blog-<prénom.nom>). - Contrôlez les points suivants :
- La page respecte les spécifications de ce document et le modèle
- Le code HTML et CSS respecte le code style, sans erreur signalée par Stylelint, le Nu Html Checker et le CSS Validation Service
- Seuls le dossier personnel de l'auteur, sa ligne dans la liste des blogs de
/web/index.htmlet sa ligne dansCHANGELOG.mdsont modifiés (ongletChangesde la MR) - Les messages de commit respectent les règles vues en cours
- Laissez au moins un commentaire dans la MR (correction demandée, question ou remarque), sur la ligne concernée.
- Une fois les corrections faites et toutes les discussions résolues, approuvez la MR (
Approve), puis fusionnez-la (Merge) : GitLab bloque la fusion tant que la MR n'a pas été approuvée.- Si GitLab bloque la fusion parce que la branche n'est pas à jour, demandez à l'auteur de faire le
rebase(étape 6 ci-dessus), ou utilisez le boutonRebasede la MR s'il est proposé.
- Si GitLab bloque la fusion parce que la branche n'est pas à jour, demandez à l'auteur de faire le
Release
Dès que la 9e et dernière MR des pages personnelles est fusionnée, la personne responsable de la release publie la version 0.5.0, au plus tard le jeudi 5 novembre à 23h59 :
- Depuis la branche
mainà jour, créez la brancherelease/0.5.0.- Ce n'est pas une branche
releasede Gitflow : c'est une branche courte comme les autres, qui ne contient que la mise à jour du changelog.
- Ce n'est pas une branche
- Dans
CHANGELOG.md, transformez la section## [Unreleased]en section## [0.5.0] - <date du jour>(date au formatAAAA-MM-JJ), ajoutez une nouvelle section## [Unreleased]vide au-dessus, faites un commit etpushla branche. - Créez une MR vers
mainet indiquez les 8 autres personnes dans le champReviewer.- Les contrôles du modèle de MR concernent les pages personnelles : remplacez-les par un résumé de la version.
- Chaque personne vérifie la MR, en particulier sa ligne dans le changelog, puis l'approuve (
Approve). - Fusionnez-la vous-même (
Merge) uniquement une fois qu'elle a été approuvée par les 8 autres personnes (listeApproved byde la MR). - Une seule approbation manquante bloque la release : assurez-vous que chacun est disponible pour l'approuver avant l'échéance.
- Après la fusion, créez le tag annoté
v0.5.0sur le dernier commit demainet envoyez-le surorigin(voir Tags). - Sur GitLab, créez la release
v0.5.0à partir de ce tag (Deploy→Releases→New release), avec les notes de version reprises du changelog.
A la fin du travail pratique, seule la branche main doit exister sur origin (plus de branches feature ou release), avec le tag v0.5.0 et la release GitLab correspondante.
🚨 Aucun merge local dans main : toutes les fusions se font sur GitLab, par une merge request relue.
- Evitez de faire un
pullafin de ne pas générer demergeinutile : utilisezfetchpuisrebase. - Le
pushforcé (git push --force-with-lease) est autorisé uniquement sur votre propre branchefeature, après unrebase. Jamais sur une branche sur laquelle quelqu'un d'autre travaille. - Utilisez "interactive rebase" pour repositionner, modifier ou arranger vos commits dans votre branche
feature, si besoin, de préférence avant de demander la relecture. - Pour corriger une erreur ou un oubli dans le code déjà fusionné dans
main, créez une branchefix/…depuismainet une nouvelle MR (voir Corrections). - Organisez-vous entre vous pour que tout soit terminé à temps : relectures, corrections,
rebase, fusions et release prennent du temps. Ouvrez votre MR (éventuellement en brouillon) dès que possible.
Mise en production
- Déployez la dernière version du site web (le dossier
/webdu projet) sur votre serveur de production (VPS) avec l'URLhttps://tp06.apiXX.isc.heia-fr.ch(remplacezXXpar le numéro de votre serveur personnel).- La page d'accueil de nginx doit bien évidemment rester accessible avec l'URL
https://apiXX.isc.heia-fr.ch. - Le site web fait avec MkDocs doit aussi rester accessible avec l'URL
https://tp05.apiXX.isc.heia-fr.ch. - Par "dernière version du site web", on entend la version
0.5.0(tagv0.5.0de la branchemain), avec les 9 pages personnelles du blog.
- La page d'accueil de nginx doit bien évidemment rester accessible avec l'URL
Rendu du TP
Aucun rapport, manuel ou documentation n'est demandé pour ce travail pratique.
Echéances :
- Jeudi 5 novembre à 13h : le nom de la personne responsable de la release est communiqué sur le canal Teams du cours.
- Jeudi 5 novembre à 23h59 : toutes les MR sont fusionnées et la version
0.5.0est publiée (tagv0.5.0et release GitLab) par la personne responsable de la release. - Vendredi 6 novembre à 23h59 : chaque personne a mis en ligne la version
0.5.0du site web sur son VPS.
Le TP sera évalué, entre autres, sur les critères suivants :
- Respect de toutes les consignes de ce document
- Utilisation correcte du Feature Branch Workflow (branche, merge request, mise à jour par
rebase, fusion sur GitLab) - Relecture de la MR d'une autre personne : commentaires pertinents, approbation et fusion
- Commits respectant les règles vues ensemble
- Mises à jour correctes et pertinentes du changelog
- Numérotation correcte des versions, tag et release GitLab
- Disponibilité de la dernière version du site web sur votre VPS
- Code source de qualité respectant tous les thèmes vus durant le cours
- Résultat visuel identique ou le plus proche possible du modèle