@hgdc/docs 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/package.json +1 -1
  2. package/src/build/content.ts +82 -0
  3. package/src/build/markdown.ts +10 -5
  4. package/src/components/Accordion.astro +3 -1
  5. package/src/components/Callout.astro +31 -0
  6. package/src/components/Card.astro +3 -1
  7. package/src/components/Check.astro +2 -3
  8. package/src/components/CodeGroup.astro +9 -1
  9. package/src/components/Danger.astro +2 -3
  10. package/src/components/Info.astro +2 -3
  11. package/src/components/Note.astro +2 -3
  12. package/src/components/Tip.astro +2 -3
  13. package/src/components/Warning.astro +2 -3
  14. package/src/core/feedback-api.ts +17 -7
  15. package/src/core/theme.ts +6 -3
  16. package/src/integration.ts +74 -16
  17. package/src/overrides/Assistant.astro +17 -39
  18. package/src/overrides/Footer.astro +27 -74
  19. package/src/overrides/Header.astro +92 -0
  20. package/src/overrides/Icon.astro +65 -0
  21. package/src/overrides/PageFrame.astro +55 -8
  22. package/src/overrides/PageSidebar.astro +7 -0
  23. package/src/overrides/PageTitle.astro +93 -62
  24. package/src/overrides/Search.astro +54 -0
  25. package/src/overrides/Sidebar.astro +89 -44
  26. package/src/overrides/SidebarList.astro +52 -0
  27. package/src/overrides/SiteFooter.astro +51 -0
  28. package/src/overrides/ThemeProvider.astro +23 -0
  29. package/src/overrides/ThemeToggle.astro +90 -0
  30. package/src/overrides/TwoColumnContent.astro +45 -0
  31. package/src/overrides/sections.ts +29 -0
  32. package/src/styles/theme.css +2137 -511
  33. package/src/widget/client.ts +51 -19
  34. package/src/widget/code.ts +218 -0
  35. package/src/widget/excerpt.ts +5 -0
  36. package/src/widget/search.ts +226 -0
  37. package/template/.astro/collections/docs.schema.json +3 -0
  38. package/template/.astro/content-assets.mjs +1 -4
  39. package/template/.astro/content-modules.mjs +35 -15
  40. package/template/.astro/data-store.json +1 -0
  41. package/template/.astro/settings.json +5 -0
  42. package/template/.build/.well-known/llms.txt +51 -34
  43. package/template/.build/404.html +16 -42
  44. package/template/.build/_astro/Assistant.astro_astro_type_script_index_0_lang.C1pz7yK1.js +4 -0
  45. package/template/.build/_astro/CodeGroup.astro_astro_type_script_index_0_lang.-eM8maAX.js +1 -0
  46. package/template/.build/_astro/Footer.astro_astro_type_script_index_0_lang.DzCnn3OT.js +1 -0
  47. package/template/.build/_astro/Search.astro_astro_type_script_index_0_lang.D7EcezBU.js +1 -0
  48. package/template/.build/_astro/code.smqv0zhe.js +9 -0
  49. package/template/.build/_astro/common.Dx3aBIS0.css +3 -0
  50. package/template/.build/_astro/{ec.8nqtp.css → ec.t9qpe.css} +1 -1
  51. package/template/.build/_astro/logo.BPu921Tp.svg +1 -0
  52. package/template/.build/_hgdc/corpus.json +1 -1
  53. package/template/.build/concepts/confidentialite/index.html +50 -0
  54. package/template/.build/concepts/confidentialite.md +38 -0
  55. package/template/.build/concepts/deploiements/index.html +106 -0
  56. package/template/.build/concepts/deploiements.md +70 -0
  57. package/template/.build/concepts/organisations-et-roles/index.html +83 -0
  58. package/template/.build/concepts/organisations-et-roles.md +39 -0
  59. package/template/.build/concepts/preversion/index.html +49 -0
  60. package/template/.build/concepts/preversion.md +52 -0
  61. package/template/.build/concepts/secrets-et-coffre/index.html +70 -0
  62. package/template/.build/concepts/secrets-et-coffre.md +54 -0
  63. package/template/.build/demarrer/depuis-github/index.html +34 -0
  64. package/template/.build/demarrer/depuis-github.md +68 -0
  65. package/template/.build/demarrer/premier-site/index.html +28 -0
  66. package/template/.build/demarrer/premier-site.md +94 -0
  67. package/template/.build/guides/brancher-un-domaine/index.html +91 -0
  68. package/template/.build/guides/brancher-un-domaine.md +81 -0
  69. package/template/.build/guides/cle-d-api/index.html +62 -0
  70. package/template/.build/guides/cle-d-api.md +78 -0
  71. package/template/.build/guides/depannage/index.html +64 -0
  72. package/template/.build/guides/depannage.md +69 -0
  73. package/template/.build/guides/deployer-depuis-github/index.html +45 -0
  74. package/template/.build/guides/deployer-depuis-github.md +70 -0
  75. package/template/.build/guides/deployer-un-framework/index.html +81 -0
  76. package/template/.build/guides/deployer-un-framework.md +74 -0
  77. package/template/.build/guides/github-actions-sans-application/index.html +53 -0
  78. package/template/.build/guides/github-actions-sans-application.md +95 -0
  79. package/template/.build/guides/inviter-une-personne/index.html +28 -0
  80. package/template/.build/guides/inviter-une-personne.md +38 -0
  81. package/template/.build/guides/lire-les-logs/index.html +37 -0
  82. package/template/.build/guides/lire-les-logs.md +48 -0
  83. package/template/.build/guides/migrer-depuis-vercel/index.html +25 -0
  84. package/template/.build/guides/migrer-depuis-vercel.md +51 -0
  85. package/template/.build/guides/monorepo/index.html +40 -0
  86. package/template/.build/guides/monorepo.md +42 -0
  87. package/template/.build/guides/revenir-en-arriere/index.html +39 -0
  88. package/template/.build/guides/revenir-en-arriere.md +50 -0
  89. package/template/.build/guides/site-statique/index.html +41 -0
  90. package/template/.build/guides/site-statique.md +59 -0
  91. package/template/.build/guides/synchroniser-doppler/index.html +46 -0
  92. package/template/.build/guides/synchroniser-doppler.md +63 -0
  93. package/template/.build/guides/variables-d-environnement/index.html +73 -0
  94. package/template/.build/guides/variables-d-environnement.md +92 -0
  95. package/template/.build/images/famille/account.svg +1 -0
  96. package/template/.build/images/famille/analytics.svg +1 -0
  97. package/template/.build/images/famille/docs.svg +1 -0
  98. package/template/.build/images/famille/host.svg +1 -0
  99. package/template/.build/images/famille/mail.svg +1 -0
  100. package/template/.build/images/famille/portal.svg +1 -0
  101. package/template/.build/images/famille/status.svg +1 -0
  102. package/template/.build/images/logo.svg +1 -0
  103. package/template/.build/index.html +30 -85
  104. package/template/.build/index.md +59 -21
  105. package/template/.build/llms-full.txt +2330 -514
  106. package/template/.build/llms.txt +51 -34
  107. package/template/.build/pagefind/fragment/fr-ch_16987e2.pf_fragment +0 -0
  108. package/template/.build/pagefind/fragment/fr-ch_2b4c97b.pf_fragment +0 -0
  109. package/template/.build/pagefind/fragment/fr-ch_3294a5c.pf_fragment +0 -0
  110. package/template/.build/pagefind/fragment/fr-ch_34858c9.pf_fragment +0 -0
  111. package/template/.build/pagefind/fragment/fr-ch_39ddba1.pf_fragment +0 -0
  112. package/template/.build/pagefind/fragment/fr-ch_4ab1899.pf_fragment +0 -0
  113. package/template/.build/pagefind/fragment/fr-ch_4d3a52a.pf_fragment +0 -0
  114. package/template/.build/pagefind/fragment/fr-ch_506c187.pf_fragment +0 -0
  115. package/template/.build/pagefind/fragment/fr-ch_5aa255a.pf_fragment +0 -0
  116. package/template/.build/pagefind/fragment/fr-ch_6841c7d.pf_fragment +0 -0
  117. package/template/.build/pagefind/fragment/fr-ch_6dc7a2d.pf_fragment +0 -0
  118. package/template/.build/pagefind/fragment/fr-ch_847edff.pf_fragment +0 -0
  119. package/template/.build/pagefind/fragment/fr-ch_8745af7.pf_fragment +0 -0
  120. package/template/.build/pagefind/fragment/fr-ch_8aac5e6.pf_fragment +0 -0
  121. package/template/.build/pagefind/fragment/fr-ch_916b233.pf_fragment +0 -0
  122. package/template/.build/pagefind/fragment/fr-ch_9fd014a.pf_fragment +0 -0
  123. package/template/.build/pagefind/fragment/fr-ch_a0808f8.pf_fragment +0 -0
  124. package/template/.build/pagefind/fragment/fr-ch_a4e1f69.pf_fragment +0 -0
  125. package/template/.build/pagefind/fragment/fr-ch_a80a53d.pf_fragment +0 -0
  126. package/template/.build/pagefind/fragment/fr-ch_a9e725b.pf_fragment +0 -0
  127. package/template/.build/pagefind/fragment/fr-ch_ac3f64c.pf_fragment +0 -0
  128. package/template/.build/pagefind/fragment/fr-ch_af292f1.pf_fragment +0 -0
  129. package/template/.build/pagefind/fragment/fr-ch_af3e716.pf_fragment +0 -0
  130. package/template/.build/pagefind/fragment/fr-ch_b0689a4.pf_fragment +0 -0
  131. package/template/.build/pagefind/fragment/fr-ch_baed996.pf_fragment +0 -0
  132. package/template/.build/pagefind/fragment/fr-ch_c89e27a.pf_fragment +0 -0
  133. package/template/.build/pagefind/fragment/fr-ch_cd6ca13.pf_fragment +0 -0
  134. package/template/.build/pagefind/fragment/fr-ch_d09af09.pf_fragment +0 -0
  135. package/template/.build/pagefind/fragment/fr-ch_d4bcea8.pf_fragment +0 -0
  136. package/template/.build/pagefind/fragment/fr-ch_dc2a134.pf_fragment +0 -0
  137. package/template/.build/pagefind/fragment/fr-ch_ded7ddc.pf_fragment +0 -0
  138. package/template/.build/pagefind/fragment/fr-ch_e2528cb.pf_fragment +0 -0
  139. package/template/.build/pagefind/fragment/fr-ch_e3cbb4e.pf_fragment +0 -0
  140. package/template/.build/pagefind/fragment/fr-ch_e7902d9.pf_fragment +0 -0
  141. package/template/.build/pagefind/fragment/fr-ch_f48ca47.pf_fragment +0 -0
  142. package/template/.build/pagefind/index/fr-ch_8a5f905.pf_index +0 -0
  143. package/template/.build/pagefind/index/fr-ch_fbd9c96.pf_index +0 -0
  144. package/template/.build/pagefind/pagefind-entry.json +1 -1
  145. package/template/.build/pagefind/pagefind.fr-ch_211aacbfa7f0e.pf_meta +0 -0
  146. package/template/.build/reference/api/deploiements/index.html +326 -0
  147. package/template/.build/reference/api/deploiements.md +170 -0
  148. package/template/.build/reference/api/erreurs/index.html +102 -0
  149. package/template/.build/reference/api/erreurs.md +50 -0
  150. package/template/.build/reference/api/fichiers/index.html +82 -0
  151. package/template/.build/reference/api/fichiers.md +62 -0
  152. package/template/.build/reference/api/introduction/index.html +126 -0
  153. package/template/.build/reference/api/introduction.md +84 -0
  154. package/template/.build/reference/api/projets/index.html +184 -0
  155. package/template/.build/reference/api/projets.md +102 -0
  156. package/template/.build/reference/api/utilisateur/index.html +96 -0
  157. package/template/.build/reference/api/utilisateur.md +89 -0
  158. package/template/.build/reference/api/variables/index.html +75 -0
  159. package/template/.build/reference/api/variables.md +58 -0
  160. package/template/.build/reference/cli/index.html +165 -82
  161. package/template/.build/reference/cli.md +159 -23
  162. package/template/.build/reference/compatibilite/index.html +196 -0
  163. package/template/.build/reference/compatibilite.md +64 -0
  164. package/template/.build/reference/domaines/index.html +171 -0
  165. package/template/.build/reference/domaines.md +76 -0
  166. package/template/.build/reference/limites/index.html +159 -0
  167. package/template/.build/reference/limites.md +56 -0
  168. package/template/.build/reference/variables/index.html +164 -0
  169. package/template/.build/reference/variables.md +63 -0
  170. package/template/.build/reference/vercel-json/index.html +65 -0
  171. package/template/.build/reference/vercel-json.md +51 -0
  172. package/template/node_modules/.vite/deps/_metadata.json +8 -8
  173. package/template/src/content.config.ts +8 -2
  174. package/src/overrides/SocialIcons.astro +0 -59
  175. package/template/.build/_astro/Assistant.astro_astro_type_script_index_0_lang.DWgmlr85.js +0 -4
  176. package/template/.build/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.C3fM4Kra.js +0 -1
  177. package/template/.build/_astro/Search.astro_astro_type_script_index_0_lang.g9hoxVJg.js +0 -1
  178. package/template/.build/_astro/TableOfContents.astro_astro_type_script_index_0_lang.BpJaGz7G.js +0 -1
  179. package/template/.build/_astro/common.CQYUsl_5.css +0 -3
  180. package/template/.build/_astro/logo-clair.BqNh6JNi.svg +0 -1
  181. package/template/.build/_astro/logo-sombre.BkgsFXxh.svg +0 -1
  182. package/template/.build/_astro/starlight-toc.D4UDIxQL.js +0 -1
  183. package/template/.build/_astro/ui-core.Clh5jUUO.js +0 -2
  184. package/template/.build/demarrer/premiere-doc/index.html +0 -84
  185. package/template/.build/demarrer/premiere-doc.md +0 -65
  186. package/template/.build/explications/donnees/index.html +0 -114
  187. package/template/.build/explications/donnees.md +0 -28
  188. package/template/.build/explications/fonctionnement/index.html +0 -92
  189. package/template/.build/explications/fonctionnement.md +0 -32
  190. package/template/.build/guides/agents/index.html +0 -118
  191. package/template/.build/guides/agents.md +0 -54
  192. package/template/.build/guides/assistant/index.html +0 -119
  193. package/template/.build/guides/assistant.md +0 -46
  194. package/template/.build/guides/composants/index.html +0 -97
  195. package/template/.build/guides/composants.md +0 -103
  196. package/template/.build/guides/ecrire/index.html +0 -115
  197. package/template/.build/guides/ecrire.md +0 -63
  198. package/template/.build/guides/elements/index.html +0 -1
  199. package/template/.build/guides/navigation/index.html +0 -89
  200. package/template/.build/guides/navigation.md +0 -63
  201. package/template/.build/guides/publier/index.html +0 -86
  202. package/template/.build/guides/publier.md +0 -65
  203. package/template/.build/guides/theme/index.html +0 -86
  204. package/template/.build/guides/theme.md +0 -33
  205. package/template/.build/images/favicon.svg +0 -1
  206. package/template/.build/images/logo-clair.svg +0 -1
  207. package/template/.build/images/logo-sombre.svg +0 -1
  208. package/template/.build/pagefind/fragment/fr-ch_148313b.pf_fragment +0 -0
  209. package/template/.build/pagefind/fragment/fr-ch_2a431a9.pf_fragment +0 -0
  210. package/template/.build/pagefind/fragment/fr-ch_35f556a.pf_fragment +0 -0
  211. package/template/.build/pagefind/fragment/fr-ch_456586a.pf_fragment +0 -0
  212. package/template/.build/pagefind/fragment/fr-ch_48ca71e.pf_fragment +0 -0
  213. package/template/.build/pagefind/fragment/fr-ch_4f8575c.pf_fragment +0 -0
  214. package/template/.build/pagefind/fragment/fr-ch_72b91f4.pf_fragment +0 -0
  215. package/template/.build/pagefind/fragment/fr-ch_8f256dd.pf_fragment +0 -0
  216. package/template/.build/pagefind/fragment/fr-ch_95a15cc.pf_fragment +0 -0
  217. package/template/.build/pagefind/fragment/fr-ch_aa80c55.pf_fragment +0 -0
  218. package/template/.build/pagefind/fragment/fr-ch_ab79738.pf_fragment +0 -0
  219. package/template/.build/pagefind/fragment/fr-ch_c589c2a.pf_fragment +0 -0
  220. package/template/.build/pagefind/fragment/fr-ch_dab8f5e.pf_fragment +0 -0
  221. package/template/.build/pagefind/fragment/fr-ch_de60b43.pf_fragment +0 -0
  222. package/template/.build/pagefind/fragment/fr-ch_e2c46e3.pf_fragment +0 -0
  223. package/template/.build/pagefind/index/fr-ch_c5ced52.pf_index +0 -0
  224. package/template/.build/pagefind/pagefind.fr-ch_8a246aa922758.pf_meta +0 -0
  225. package/template/.build/reference/api-assistant/index.html +0 -161
  226. package/template/.build/reference/api-assistant.md +0 -60
  227. package/template/.build/reference/docs-json/index.html +0 -216
  228. package/template/.build/reference/docs-json.md +0 -47
  229. package/template/.build/reference/mcp/index.html +0 -151
  230. package/template/.build/reference/mcp.md +0 -49
@@ -1,852 +1,2668 @@
1
- # Docs
1
+ # Host
2
2
 
3
- > Écrire une documentation en MDX, la publier avec Host et y brancher un assistant IA qui cite ses sources.
3
+ > Ton site en ligne, déployé à chaque modification.
4
4
 
5
5
  ---
6
6
 
7
- Source : /
7
+ Source : /docs/
8
8
 
9
- # Bienvenue dans Docs
9
+ # Host
10
10
 
11
- Docs transforme un dossier de pages MDX en site de documentation. Tu écris dans ton dépôt Git, Host publie le site à chaque push, et la console `docs.hgdc.ch` branche un assistant qui répond à tes visiteurs à partir de ta doc, et de rien d’autre.
11
+ Host déploie tes sites. Chaque modification donne une version en ligne, avec sa propre adresse, et la production reste sur ton domaine.
12
12
 
13
- [Ta première doc](/demarrer/premiere-doc/)
13
+ Tu gardes tes outils : la CLI Vercel, `vercel.json` et le format Build Output API. Seule l’adresse de l’API change.
14
14
 
15
- [Un dossier, un fichier `docs.json` et une page : ton site tourne en local en cinq minutes.](/demarrer/premiere-doc/)
15
+ ## Par où commencer
16
16
 
17
- [Publier avec Host](/guides/publier/)
17
+ [Mettre un premier site en ligne](/docs/demarrer/premier-site/)
18
18
 
19
- [Relie le dépôt à Host : chaque push met le site à jour.](/guides/publier/)
19
+ [Du compte à une preview, puis à la production, avec la CLI. Une quinzaine de minutes.](/docs/demarrer/premier-site/)
20
20
 
21
- [L'assistant IA](/guides/assistant/)
21
+ [Déployer depuis GitHub](/docs/demarrer/depuis-github/)
22
22
 
23
- [Il répond aux questions de tes visiteurs et cite les pages qu’il a utilisées.](/guides/assistant/)
23
+ [Importe un dépôt : chaque push construit le site et le publie.](/docs/demarrer/depuis-github/)
24
24
 
25
- [Pour les agents](/guides/agents/)
25
+ [Référence de la CLI](/docs/reference/cli/)
26
26
 
27
- [`llms.txt`, une version Markdown de chaque page et un serveur MCP en lecture.](/guides/agents/)
27
+ [Les commandes `deploy`, `build`, `pull` et `link`, avec leurs options.](/docs/reference/cli/)
28
28
 
29
- ## Ce que tu obtiens
29
+ [Référence de l'API](/docs/reference/api/introduction/)
30
30
 
31
- - **Un site rapide et lisible** : navigation par onglets et groupes, versions, mode clair et sombre, mise en page pensée pour le téléphone.
32
- - **La recherche** : `Ctrl K` sur chaque page, sans service externe. L’index est construit avec le site.
33
- - **Tes couleurs** : une couleur dans `docs.json` suffit. Le contraste des liens est ajusté pour rester lisible.
34
- - **Un assistant sourcé** : il cherche dans tes pages, répond en quelques phrases et renvoie vers les sections exactes. S’il ne trouve rien, il le dit.
35
- - **Une doc lisible par les IA** : `llms.txt`, `llms-full.txt`, un bouton « Copier pour un LLM » et un serveur MCP.
31
+ [Les endpoints compatibles Vercel, leurs paramètres et leurs réponses.](/docs/reference/api/introduction/)
36
32
 
37
- ## Compatible avec Mintlify
33
+ ## Ce que Host fait
38
34
 
39
- Le fichier `docs.json` reprend celui de Mintlify : nom, couleurs, logo, navigation en onglets, groupes et versions. Les composants les plus courants (`<Note>`, `<Steps>`, `<Card>`, `<Tabs>`…) fonctionnent sans import. Une doc Mintlify se reprend en général sans réécrire les pages.
35
+ - **Des sites statiques et des frameworks** : un dossier de fichiers, ou le résultat de `vercel build` pour Astro, Vite, Next.js, SvelteKit, Nuxt, TanStack Start et React Router. Voir [Compatibilité](/docs/reference/compatibilite/).
36
+ - **Une URL par version** : chaque déploiement a sa propre adresse, à faire valider avant de passer en production.
37
+ - **Un domaine à toi** : tu ajoutes ton domaine, Host vérifie qu’il t’appartient et obtient le certificat HTTPS. Voir [Brancher un domaine](/docs/guides/brancher-un-domaine/).
38
+ - **Des variables par environnement** : production, preview et développement, avec des variables sensibles jamais relues. Voir [Variables d’environnement](/docs/guides/variables-d-environnement/).
39
+ - **Une organisation et des rôles** : les membres se gèrent dans Account. Voir [Organisations et rôles](/docs/concepts/organisations-et-roles/).
40
40
 
41
- > **Tout reste en Suisse quand c'est possible**
41
+ ## Ce qui arrive en préversion
42
+
43
+ Le rendu à la demande (SSR), les routes d’API, le proxy, le runtime edge, l’ISR et les crons s’exécutent en préversion, organisation par organisation. Les fichiers statiques et les pages pré-rendues sont servis dans tous les cas. Le détail est sur [Préversion](/docs/concepts/preversion/).
44
+
45
+ ## Les autres produits de la famille
46
+
47
+ [Account](https://account.hgdc.ch/docs/)
48
+
49
+ [![](/docs/images/famille/account.svg)](https://account.hgdc.ch/docs/)
50
+
51
+ [Un seul compte pour toute la famille, avec « Se connecter avec HGDC ».](https://account.hgdc.ch/docs/)
52
+
53
+ [Mail](https://mail.hgdc.ch/docs/)
54
+
55
+ [![](/docs/images/famille/mail.svg)](https://mail.hgdc.ch/docs/)
56
+
57
+ [Tes e-mails, newsletters et formulaires, envoyés depuis ton adresse.](https://mail.hgdc.ch/docs/)
58
+
59
+ [Portal](https://portal.hgdc.ch/docs/)
60
+
61
+ [![](/docs/images/famille/portal.svg)](https://portal.hgdc.ch/docs/)
62
+
63
+ [Un espace partagé où ton client suit son projet, signe et paie.](https://portal.hgdc.ch/docs/)
64
+
65
+ [Status](https://status.hgdc.ch/docs/)
66
+
67
+ [![](/docs/images/famille/status.svg)](https://status.hgdc.ch/docs/)
68
+
69
+ [Surveillance de tes services, heartbeats et page de statut.](https://status.hgdc.ch/docs/)
70
+
71
+ [Analytics](https://analytics.hgdc.ch/docs/)
72
+
73
+ [![](/docs/images/famille/analytics.svg)](https://analytics.hgdc.ch/docs/)
74
+
75
+ [Tes visiteurs mesurés, sans cookies ni bannière.](https://analytics.hgdc.ch/docs/)
76
+
77
+ [Docs](https://docs.hgdc.ch/docs/)
78
+
79
+ [![](/docs/images/famille/docs.svg)](https://docs.hgdc.ch/docs/)
80
+
81
+ [Ta documentation en MDX, avec un assistant IA qui cite ses sources.](https://docs.hgdc.ch/docs/)
82
+
83
+ ---
84
+
85
+ Source : /docs/demarrer/premier-site/
86
+
87
+ # Mettre un premier site en ligne
88
+
89
+ À la fin de ce parcours, ton site répond sur une adresse de preview, puis sur une adresse de production. Tu auras créé une clé d’API, installé la CLI et déployé un dossier de fichiers, sans étape de build.
90
+
91
+ **Avant de commencer** : Node.js et npm, et un compte HGDC. Sans compte, la page [Demander un accès](https://host.hgdc.ch/acces) envoie ta demande à l’équipe, qui t’invite depuis Account.
92
+
93
+ 1. **Connecte-toi**
94
+
95
+ Ouvre [host.hgdc.ch](https://host.hgdc.ch) et clique **Se connecter avec HGDC**. Le même compte sert à Account, Mail et les autres produits de la famille.
96
+
97
+ Tu arrives sur le tableau de bord. Si tu n’as pas encore d’organisation, crée-la dans Account. Son slug apparaît dans l’adresse de l’app : `host.hgdc.ch/o/<slug>`.
98
+
99
+ **Vérification** : le tableau de bord affiche le nom de ton organisation.
100
+
101
+ 2. **Crée une clé d'API**
102
+
103
+ Dans ton organisation, ouvre l’onglet **Clés d’API** et crée une clé. Elle commence par `ah_` et ne s’affiche qu’une fois : copie-la tout de suite.
104
+
105
+ La clé remplace le mot de passe de la CLI. Le détail est dans [Clés d’API](/docs/guides/cle-d-api/).
106
+
107
+ **Vérification** : la clé apparaît dans la liste, avec le nom que tu lui as donné.
108
+
109
+ 3. **Installe la CLI Vercel**
110
+
111
+ ```bash
112
+ npm install --global vercel@63
113
+ ```
114
+
115
+ Host est testé avec la version 63 de la CLI. Une autre version peut fonctionner, mais ce n’est pas garanti.
116
+
117
+ **Vérification** : `vercel --version` affiche une version 63.x.
118
+
119
+ 4. **Donne la clé et l'adresse de l'API à la CLI**
120
+
121
+ Dans le terminal, exporte la clé, puis passe l’adresse de l’API à chaque commande avec `--api`. La CLI lit la clé dans `VERCEL_TOKEN`.
122
+
123
+ ```bash
124
+ export VERCEL_TOKEN=ah_…
125
+ vercel --api https://api.host.hgdc.ch whoami
126
+ ```
127
+
128
+ **Vérification** : la commande affiche ton identifiant, sans demander de connexion dans le navigateur. Pour ne pas retaper l’adresse, voir [Configurer la CLI](/docs/reference/cli/#configurer-la-cli).
129
+
130
+ 5. **Prépare un site**
131
+
132
+ Crée un dossier `mon-site` avec un fichier `index.html` à sa racine :
133
+
134
+ ```html
135
+ <!doctype html>
136
+ <html lang="fr">
137
+ <head>
138
+ <meta charset="utf-8" />
139
+ <title>Mon premier site</title>
140
+ </head>
141
+ <body>
142
+ <h1>Bonjour depuis Host</h1>
143
+ </body>
144
+ </html>
145
+ ```
146
+
147
+ **Vérification** : `index.html` se trouve directement dans `mon-site`, pas dans un sous-dossier.
148
+
149
+ 6. **Déploie une preview**
150
+
151
+ Depuis le dossier du site :
152
+
153
+ ```bash
154
+ cd mon-site
155
+ vercel --api https://api.host.hgdc.ch deploy
156
+ ```
157
+
158
+ Au premier envoi, la CLI crée le projet sous le nom du dossier et le relie au dossier dans `.vercel/project.json`. Elle affiche ensuite l’adresse du déploiement, de la forme `https://mon-site-abc123xyz.hgdc.cloud`.
159
+
160
+ **Vérification** : ouvre l’adresse affichée. La page « Bonjour depuis Host » s’affiche. Le déploiement apparaît aussi dans l’onglet **Déploiements** du projet, avec l’état **Prêt**.
161
+
162
+ 7. **Passe en production**
163
+
164
+ ```bash
165
+ vercel --api https://api.host.hgdc.ch deploy --prod
166
+ ```
167
+
168
+ Le déploiement devient la production du projet. La CLI affiche l’adresse de production du projet, `https://mon-site.hgdc.cloud`, qui suivra chaque mise en production. Les domaines de production du projet le servent aussi.
169
+
170
+ **Vérification** : l’onglet **Vue d’ensemble** du projet montre ce déploiement comme production.
171
+
172
+ ## Et après
173
+
174
+ - Pour mettre le site sur ton propre domaine, suis [Brancher un domaine](/docs/guides/brancher-un-domaine/).
175
+ - Pour déployer à chaque `git push`, suis [Déployer depuis GitHub](/docs/demarrer/depuis-github/).
176
+
177
+ ## Si ça ne marche pas
178
+
179
+ - La CLI répond `403` : la clé est mal copiée, ou elle ne commence pas par `ah_`. Voir [Dépannage](/docs/guides/depannage/#la-cli-renvoie-403).
180
+ - La page affiche `404` : le dossier envoyé n’a pas d’`index.html` à sa racine.
181
+
182
+ ---
183
+
184
+ Source : /docs/demarrer/depuis-github/
185
+
186
+ # Déployer un site depuis GitHub
187
+
188
+ Dans ce parcours, tu importes un dépôt GitHub dans Host. À la fin, un `git push` sur la branche principale met ton site en production, et chaque autre branche reçoit sa propre preview.
189
+
190
+ **Avant de commencer** :
191
+
192
+ - un compte HGDC et une organisation dans Account ;
193
+ - un dépôt GitHub avec un site qui se construit (Astro, Vite, Next.js ou un site statique) ;
194
+ - le droit d’écriture (push) sur ce dépôt. Un dépôt où tu n’as que la lecture ne s’importe pas.
195
+
196
+ 1. **Ouvre un nouveau projet**
197
+
198
+ Dans ton organisation, clique **Nouveau projet**, puis **Importer depuis GitHub**.
199
+
200
+ **Vérification** : la liste des dépôts accessibles s’affiche, ou Host te propose d’installer l’app GitHub.
201
+
202
+ 2. **Installe l'app GitHub**
203
+
204
+ Installe l’app **Host** sur ton compte GitHub ou sur celui de ton organisation. Tu peux la limiter à quelques dépôts.
205
+
206
+ L’app ne demande que les droits dont le workflow a besoin. Le détail est dans [Déployer depuis GitHub](/docs/guides/deployer-depuis-github/).
207
+
208
+ **Vérification** : le dépôt choisi apparaît dans la liste de Host.
209
+
210
+ 3. **Choisis le dépôt et vérifie les réglages**
211
+
212
+ Sélectionne le dépôt. Host lit le projet et propose le framework, les commandes d’installation et de build, la version de Node.js et la branche de production.
213
+
214
+ Si le site est dans un sous-dossier ou dans un monorepo, choisis le dossier de l’app. Voir [Monorepo et sous-dossier](/docs/guides/monorepo/).
215
+
216
+ **Vérification** : le framework détecté correspond à ton site. Corrige les réglages qui ne correspondent pas.
217
+
218
+ 4. **Fusionne la PR d'installation**
219
+
220
+ L’import ouvre une pull request qui ajoute le fichier `.github/workflows/hgdc-host.yml` et pose le secret `HGDC_HOST_TOKEN` dans le dépôt. Relis-la, puis fusionne-la sur la branche principale.
221
+
222
+ Le secret est une clé limitée à ce projet. Elle ne peut ni créer de projet ni lire les autres.
223
+
224
+ **Vérification** : la PR est fusionnée, et le fichier `hgdc-host.yml` existe sur la branche principale.
225
+
226
+ 5. **Pousse une modification**
227
+
228
+ Modifie une page du site, puis pousse-la sur la branche principale :
229
+
230
+ ```bash
231
+ git add .
232
+ git commit -m "docs: ajoute une page de test"
233
+ git push
234
+ ```
235
+
236
+ **Vérification** : l’onglet **Déploiements** du projet affiche un déploiement en cours, puis **Prêt**. L’adresse de production affiche la modification.
237
+
238
+ 6. **Ouvre une preview**
239
+
240
+ Crée une branche, pousse-la, puis ouvre une pull request sur la branche principale. Host construit la branche et publie une preview.
241
+
242
+ **Vérification** : le commit affiche le statut du déploiement avec son lien. La preview répond sur son adresse `hgdc.cloud`.
243
+
244
+ ## Et après
245
+
246
+ - Pour mettre le site sur ton domaine, suis [Brancher un domaine](/docs/guides/brancher-un-domaine/).
247
+ - Pour les variables de build, comme une clé publique ou l’adresse d’une API, suis [Variables d’environnement](/docs/guides/variables-d-environnement/).
248
+ - Pour comprendre ce qui se passe à chaque push, lis [Déploiements](/docs/concepts/deploiements/).
249
+
250
+ ## Si ça ne marche pas
251
+
252
+ - Le build n’apparaît pas après le push : vérifie que la PR d’installation est fusionnée. Voir [Dépannage](/docs/guides/depannage/#le-build-github-est-absent).
253
+ - Le build échoue : ouvre le déploiement dans Host, la sortie du build y est affichée en direct.
254
+
255
+ ---
256
+
257
+ Source : /docs/guides/cle-d-api/
258
+
259
+ # Créer et révoquer une clé d'API
260
+
261
+ Une clé d’API authentifie la CLI et l’API. Ce guide crée une clé, la range au bon endroit, puis la révoque.
262
+
263
+ **Résultat attendu** : une clé qui commence par `ah_`, visible dans la liste **Clés actives** de ton organisation, et révocable depuis la liste.
264
+
265
+ **Avant de commencer** : être admin ou propriétaire de l’organisation. Les membres ne voient pas l’onglet **Clés d’API**.
266
+
267
+ ## Créer une clé
268
+
269
+ 1. **Ouvre l'onglet Clés d'API**
270
+
271
+ Dans ton organisation, ouvre **Clés d’API**, puis clique **Créer une clé**.
272
+
273
+ 2. **Donne-lui un nom parlant**
274
+
275
+ Choisis un nom qui dit où la clé sert, par exemple `Poste de Léa` ou `CI GitHub`. Il t’aidera à savoir quelle clé révoquer.
276
+
277
+ 3. **Copie la clé tout de suite**
278
+
279
+ La fenêtre **Nouvelle clé d’API** affiche la clé complète une seule fois. Clique **Copier la clé** et range-la dans un gestionnaire de mots de passe.
280
+
281
+ Host ne garde qu’une empreinte de la clé. Si tu la perds, aucune copie n’est possible : crée une nouvelle clé et révoque l’ancienne.
282
+
283
+ **Vérification** : la clé apparaît dans **Clés actives** avec son nom et la date de création.
284
+
285
+ ## Choisir la bonne portée
286
+
287
+ | Sorte de clé | Qui la crée | Ce qu’elle peut faire |
288
+ | ------------------ | -------------------------------------------- | ---------------------------------------------------------------- |
289
+ | Clé d’organisation | Un admin ou un propriétaire, dans la console | Tous les projets de l’organisation, et créer de nouveaux projets |
290
+ | Clé de projet | L’app GitHub, à l’import d’un dépôt | Un seul projet. Tout autre projet répond `404` |
291
+
292
+ Pour ton poste de développement, prends une clé d’organisation. Pour un dépôt, laisse l’app GitHub poser sa clé de projet.
293
+
294
+ > **Attention**
295
+ >
296
+ > Une clé d’organisation lit les variables non sensibles de tous les projets avec `vercel pull`. Ne la mets jamais dans un dépôt, ni dans du code envoyé au navigateur.
297
+
298
+ ## Utiliser la clé
299
+
300
+ La CLI lit la clé dans la variable `VERCEL_TOKEN`, qui évite de l’écrire dans l’historique du shell :
301
+
302
+ ```bash
303
+ export VERCEL_TOKEN=ah_…
304
+ vercel --api https://api.host.hgdc.ch deploy
305
+ ```
306
+
307
+ Pour une requête HTTP, envoie-la dans l’en-tête `Authorization` :
308
+
309
+ ```bash
310
+ curl https://api.host.hgdc.ch/v2/user \
311
+ -H "Authorization: Bearer $VERCEL_TOKEN"
312
+ ```
313
+
314
+ ## Révoquer une clé
315
+
316
+ 1. **Repère la clé**
317
+
318
+ Dans **Clés actives**, regarde la date de **Dernière utilisation**. Une clé inutilisée depuis longtemps peut être révoquée sans risque.
319
+
320
+ 2. **Révoque-la**
321
+
322
+ Clique **Révoquer la clé**, puis confirme.
323
+
324
+ **Vérification** : la clé disparaît de **Clés actives**. Une requête avec cette clé répond `403` avec le code `forbidden`.
325
+
326
+ Une clé cesse aussi de fonctionner quand la personne qui l’a créée quitte l’organisation dans Account. Une clé n’expire pas d’elle-même.
327
+
328
+ ## Si ça ne marche pas
329
+
330
+ - La CLI répond `403`, avec le message « Clé d’API absente ou invalide » : la clé est mal copiée, ou elle a été révoquée. Voir [Dépannage](/docs/guides/depannage/#la-cli-renvoie-403).
331
+ - Le message « Cette clé est limitée à un autre projet » apparaît : tu utilises la clé d’un dépôt pour un autre projet. Crée une clé d’organisation.
332
+
333
+ ## Voir aussi
334
+
335
+ - [Clés d’API et sécurité](/docs/concepts/secrets-et-coffre/) : ce que Host garde et ce qu’il ne garde pas.
336
+ - [Référence de l’API](/docs/reference/api/introduction/#authentification) : l’en-tête, la portée et les limites.
337
+
338
+ ---
339
+
340
+ Source : /docs/guides/deployer-depuis-github/
341
+
342
+ # Déployer depuis GitHub
343
+
344
+ L’intégration GitHub construit ton site dans GitHub Actions, sur les minutes de ton compte, et publie le résultat. Chaque push sur la branche principale part en production. Chaque autre branche reçoit une preview.
345
+
346
+ **Résultat attendu** : un push déclenche un build visible dans Host, avec sa sortie en direct, puis un déploiement **Prêt**.
347
+
348
+ **Avant de commencer** : un dépôt où tu as le droit d’écriture, et un site qui se construit avec une commande de build.
349
+
350
+ ## Importer un dépôt
351
+
352
+ 1. **Installe l'app GitHub**
353
+
354
+ Dans **Nouveau projet**, choisis **Importer depuis GitHub** et installe l’app **Host** sur ton compte GitHub ou sur celui de ton organisation. Tu peux la restreindre à certains dépôts.
355
+
356
+ Host s’en sert pour lire la liste des dépôts, ouvrir la pull request d’installation et déclencher les builds.
357
+
358
+ 2. **Choisis le dépôt**
359
+
360
+ Seuls les dépôts où tu peux pousser apparaissent. Un dépôt où tu n’as que la lecture ne s’importe pas : l’import ouvre une pull request et pose un secret dans le dépôt.
361
+
362
+ 3. **Vérifie les réglages détectés**
363
+
364
+ Host propose le framework, les commandes d’installation et de build, la version de Node.js et la branche de production. Corrige ce qui ne correspond pas avant de continuer.
365
+
366
+ Pour un site dans un sous-dossier, voir [Monorepo et sous-dossier](/docs/guides/monorepo/).
367
+
368
+ 4. **Fusionne la pull request**
369
+
370
+ L’import ouvre une pull request qui ajoute `.github/workflows/hgdc-host.yml` et pose le secret `HGDC_HOST_TOKEN`.
371
+
372
+ **Vérification** : une fois la PR fusionnée, un push sur la branche principale déclenche un build.
373
+
374
+ ## Ce que fait le workflow
375
+
376
+ 1. Il annonce le build à Host. Le déploiement apparaît dans la console dès le début, avec sa sortie en direct.
377
+ 2. Il restaure le cache du run précédent : `node_modules` tant que ton fichier de verrouillage ne change pas, le cache de ton framework et la CLI Vercel.
378
+ 3. Il lance `vercel pull` pour récupérer les réglages et les variables, puis `vercel build`.
379
+ 4. Il envoie le résultat avec `vercel deploy --prebuilt`, avec `--prod` sur la branche de production.
380
+ 5. En cas d’échec ou d’annulation, il le signale. Le déploiement passe à **Erreur** ou **Annulé**.
381
+
382
+ Deux pushes sur la même branche : le premier build est annulé au profit du second. Le premier build d’une branche remplit le cache, les suivants vont plus vite.
383
+
384
+ Pour repartir d’un cache propre, supprime les caches `hgdc-host-*` dans l’onglet **Actions** du dépôt.
385
+
386
+ ## Déployer sans pousser
387
+
388
+ Dans Host, deux actions relancent un build sans nouveau commit :
389
+
390
+ - **Déployer en production** lance le workflow sur la branche de production.
391
+ - **Redéployer**, sur un déploiement, reconstruit le même commit avec les variables d’aujourd’hui.
392
+
393
+ Le build passe par GitHub Actions, comme pour un push.
394
+
395
+ ## Mettre le workflow à jour
396
+
397
+ Quand Host fait évoluer son workflow, l’onglet **Git** du projet propose **Mettre à jour le workflow**. Host ouvre une pull request qui remplace le fichier. Fusionne-la, puis déploie.
398
+
399
+ ## Débrancher le dépôt
400
+
401
+ Dans l’onglet **Git**, **Débrancher** révoque la clé posée dans le dépôt. Les pushes suivants n’arrivent plus à Host. Supprime ensuite le fichier `.github/workflows/hgdc-host.yml` du dépôt. Les dépôts branchés avant le changement de nom gardent `.github/workflows/smartflow-host.yml` et le secret `SMARTFLOW_HOST_TOKEN` : ils continuent de fonctionner, sans rien changer de ton côté.
402
+
403
+ Les variables du projet restent en place, devenues manuelles. Aucun build ne les perd d’un coup.
404
+
405
+ > **Astuce**
406
+ >
407
+ > Tu préfères écrire ton propre workflow ? Voir [GitHub Actions sans l’application](/docs/guides/github-actions-sans-application/).
408
+
409
+ ## Si ça ne marche pas
410
+
411
+ Voir [Dépannage](/docs/guides/depannage/#le-build-github-est-absent) pour le build qui n’apparaît pas, et la sortie du run dans l’onglet **Actions** du dépôt pour le build qui échoue.
412
+
413
+ ---
414
+
415
+ Source : /docs/guides/github-actions-sans-application/
416
+
417
+ # Déployer avec GitHub Actions, sans l'application
418
+
419
+ Tu préfères garder la main sur ton workflow, ou tu utilises une autre CI ? L’app GitHub n’est pas nécessaire : la CLI suffit. Ce guide met en place un workflow qui construit et déploie à chaque push.
420
+
421
+ **Résultat attendu** : un push sur la branche principale publie en production, et un push sur une autre branche publie une preview.
422
+
423
+ **Ce que tu perds par rapport à l’app** : le déploiement n’apparaît dans Host qu’à l’envoi, sans sortie de build en direct, et le statut du commit n’est pas mis à jour.
424
+
425
+ ## Relier le dossier au projet
426
+
427
+ 1. **Lance un premier déploiement en local**
428
+
429
+ Depuis le dossier du projet, avec ta clé d’organisation :
430
+
431
+ ```bash
432
+ export VERCEL_TOKEN=ah_…
433
+ vercel --api https://api.host.hgdc.ch deploy --yes
434
+ ```
435
+
436
+ La commande crée `.vercel/project.json`, qui contient `orgId` et `projectId`.
437
+
438
+ **Vérification** : le fichier `.vercel/project.json` existe, et le projet apparaît dans Host.
439
+
440
+ 2. **Ajoute les secrets au dépôt**
441
+
442
+ Dans le dépôt GitHub, ouvre **Settings → Secrets and variables → Actions** et crée trois secrets :
443
+
444
+ | Secret | Valeur |
445
+ | ------------------- | ----------------------------------------------- |
446
+ | `VERCEL_TOKEN` | Une clé d’API `ah_…` d’organisation |
447
+ | `VERCEL_ORG_ID` | La valeur `orgId` de `.vercel/project.json` |
448
+ | `VERCEL_PROJECT_ID` | La valeur `projectId` de `.vercel/project.json` |
449
+
450
+ Ne mets ni la clé ni les identifiants dans le fichier de workflow.
451
+
452
+ 3. **Ajoute le workflow**
453
+
454
+ Crée `.github/workflows/deploy.yml` :
455
+
456
+ ```yaml
457
+ name: Déploiement
458
+
459
+ on:
460
+ push:
461
+ branches: [main]
462
+ pull_request:
463
+
464
+ permissions:
465
+ contents: read
466
+
467
+ env:
468
+ VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
469
+ VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
470
+ VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
471
+ API: https://api.host.hgdc.ch
472
+
473
+ jobs:
474
+ deploy:
475
+ runs-on: ubuntu-latest
476
+ steps:
477
+ - uses: actions/checkout@v7
478
+ - uses: actions/setup-node@v7
479
+ with:
480
+ node-version: 24
481
+ - run: npm install --global vercel@63
482
+ - name: Production
483
+ if: github.ref == 'refs/heads/main'
484
+ run: |
485
+ vercel pull --yes --environment=production --api "$API"
486
+ vercel build --prod --api "$API"
487
+ vercel deploy --prebuilt --prod --api "$API"
488
+ - name: Preview
489
+ if: github.ref != 'refs/heads/main'
490
+ run: |
491
+ vercel pull --yes --environment=preview --api "$API"
492
+ vercel build --api "$API"
493
+ vercel deploy --prebuilt --api "$API"
494
+ ```
495
+
496
+ La CLI lit `VERCEL_TOKEN`, `VERCEL_ORG_ID` et `VERCEL_PROJECT_ID` dans l’environnement. Le projet n’a pas besoin d’un dossier `.vercel` dans le dépôt.
497
+
498
+ Adapte `node-version` à la version de Node.js de ton projet. Pour un site qui n’a pas de build, supprime les étapes `vercel build`.
499
+
500
+ **Vérification** : le run **Déploiement** apparaît dans l’onglet **Actions**, et son job se termine en vert. Le déploiement apparaît dans le projet Host.
501
+
502
+ ## Variables sensibles
503
+
504
+ Une variable sensible n’est livrée qu’à une clé limitée au projet, celle que pose l’app GitHub. Avec une clé d’organisation, `vercel pull` ne la récupère pas.
505
+
506
+ Si ton build a besoin d’un secret, passe-le par un secret du dépôt, puis expose-le au build avec `env:`. Ne le mets pas dans une variable publique du projet. Voir [Secrets et coffre](/docs/concepts/secrets-et-coffre/).
507
+
508
+ ## Si ça ne marche pas
509
+
510
+ - Le job échoue sur `vercel pull` avec un `403` : la clé `VERCEL_TOKEN` est mal copiée ou révoquée. Voir [Dépannage](/docs/guides/depannage/#la-cli-renvoie-403).
511
+ - Le job tourne, mais aucun déploiement n’apparaît : vérifie que `VERCEL_PROJECT_ID` et `VERCEL_ORG_ID` viennent bien de `.vercel/project.json`.
512
+
513
+ ---
514
+
515
+ Source : /docs/guides/deployer-un-framework/
516
+
517
+ # Déployer un framework
518
+
519
+ Host sert ce que `vercel build` produit : les fichiers statiques, les pages pré-rendues et, en préversion, les fonctions Node. Tu construis en local ou en CI, puis tu envoies le résultat. Les sources de ton projet ne sont jamais servies.
520
+
521
+ **Résultat attendu** : un déploiement **Prêt** dont la page affiche ton site construit.
522
+
523
+ **Avant de commencer** : une commande de build qui fonctionne sur ton poste, et une clé d’API dans `VERCEL_TOKEN`. Pour la liste des frameworks et de ce qui est servi pour chacun, voir [Compatibilité](/docs/reference/compatibilite/).
524
+
525
+ ## Construire puis envoyer
526
+
527
+ 1. **Construis le projet**
528
+
529
+ Depuis le dossier du projet :
530
+
531
+ ```bash
532
+ export VERCEL_TOKEN=ah_…
533
+ vercel --api https://api.host.hgdc.ch build
534
+ ```
535
+
536
+ La commande détecte le framework, installe les dépendances, lance le build, et écrit le résultat dans `.vercel/output`. Elle télécharge aussi les variables de l’environnement visé. Voir [vercel build](/docs/reference/cli/#vercel-build).
537
+
538
+ **Vérification** : le dossier `.vercel/output/static` contient les fichiers de ton site.
539
+
540
+ 2. **Envoie le résultat**
541
+
542
+ ```bash
543
+ vercel --api https://api.host.hgdc.ch deploy --prebuilt
544
+ ```
545
+
546
+ L’option `--prebuilt` envoie `.vercel/output` tel quel, sans reconstruire.
547
+
548
+ **Vérification** : l’adresse du déploiement répond avec ton site, et le déploiement passe à **Prêt**.
549
+
550
+ 3. **Passe en production**
551
+
552
+ Utilise la même cible des deux côtés. Pour la production :
553
+
554
+ ```bash
555
+ vercel --api https://api.host.hgdc.ch build --prod
556
+ vercel --api https://api.host.hgdc.ch deploy --prebuilt --prod
557
+ ```
558
+
559
+ > **Attention**
560
+ >
561
+ > La CLI refuse l’envoi si la cible du build et celle du déploiement ne correspondent pas. Une preview se construit sans `--prod`, et se déploie sans `--prod`.
562
+
563
+ ## Ce qui est servi, par framework
564
+
565
+ | Framework | Servi tel quel | Préversion |
566
+ | -------------------------- | ---------------------------------------- | ------------------------------------------------------------------------- |
567
+ | Astro | Les pages générées | Rendu à la demande, routes d’API, middleware, ISR |
568
+ | Vite (React, Vue, Svelte…) | Le build de l’application | |
569
+ | SvelteKit | Les pages pré-rendues | Rendu à la demande, routes d’API, actions de formulaire, ISR |
570
+ | Nuxt | Les pages générées | Rendu à la demande, routes d’API, middleware serveur, ISR |
571
+ | TanStack Start | Les pages pré-rendues | |
572
+ | React Router | Les pages pré-rendues | |
573
+ | Next.js | Les pages pré-rendues et leur navigation | Rendu à la demande, routes d’API, Server Actions, proxy, ISR, routes edge |
574
+
575
+ Le tableau complet, avec les fonctions de la plateforme, est dans [Compatibilité](/docs/reference/compatibilite/).
576
+
577
+ ## Next.js
578
+
579
+ - `next/image` sert l’image d’origine, sans redimensionnement. Optimise tes images avant le build.
580
+ - La page `not-found` sert de 404.
581
+ - Une page rendue à la demande, une route d’API ou une Server Action tourne dans une fonction. Elle demande la préversion, voir [Préversion](/docs/concepts/preversion/).
582
+
583
+ ## Un site de documentation
584
+
585
+ Un dossier avec un `docs.json` et le paquet `@hgdc/docs` dans son `package.json` est reconnu comme une documentation, sans `vercel.json`. Le build lance `hgdc-docs build` et publie le dossier `dist`. Les pages `.md` sont servies en `text/markdown`.
586
+
587
+ ## Si ça ne marche pas
588
+
589
+ - Le déploiement répond `404` : la sortie de build ne contient pas de `index.html` à la racine, ou le dossier de sortie est faux. Voir [Dépannage](/docs/guides/depannage/#mon-site-affiche-404).
590
+ - Une page répond `501` : le rendu à la demande n’est pas encore ouvert à ton organisation. Pré-rends la page, ou consulte [Préversion](/docs/concepts/preversion/).
591
+
592
+ ---
593
+
594
+ Source : /docs/guides/site-statique/
595
+
596
+ # Déployer un site statique
597
+
598
+ Un site statique est un dossier de fichiers déjà prêts : HTML, CSS, JavaScript et images. Aucun build n’est nécessaire. Une seule commande suffit.
599
+
600
+ **Résultat attendu** : une adresse de production qui sert ton dossier, avec une page 404 personnalisée si tu en fournis une.
601
+
602
+ **Avant de commencer** : une clé d’API dans `VERCEL_TOKEN`, et un dossier qui contient un `index.html` à sa racine.
603
+
604
+ ## Déployer le dossier
605
+
606
+ ```bash
607
+ cd mon-site
608
+ vercel --api https://api.host.hgdc.ch deploy --prod
609
+ ```
610
+
611
+ Le premier déploiement crée le projet, sous le nom du dossier, et relie le dossier au projet. Les suivants republient ce qui a changé : un fichier déjà connu de l’organisation n’est jamais renvoyé.
612
+
613
+ **Vérification** : l’adresse de production répond avec `index.html`.
614
+
615
+ ## Structure attendue
616
+
617
+ ```text
618
+ mon-site/
619
+ ├── index.html
620
+ ├── a-propos.html
621
+ ├── 404.html
622
+ ├── styles.css
623
+ └── images/
624
+ └── logo.svg
625
+ ```
626
+
627
+ - Le dossier doit contenir un `index.html` à sa racine.
628
+ - Un dossier qui ressemble à des sources, avec un `package.json` mais sans `index.html`, est refusé. Construis-le avec `vercel build` et envoie-le avec `--prebuilt`. Voir [Déployer un framework](/docs/guides/deployer-un-framework/).
629
+ - Les fichiers et dossiers cachés, comme `.env` ou `.git`, ne sont jamais servis.
630
+ - `404.html` sert de page d’erreur.
631
+
632
+ ## Servir un sous-dossier
633
+
634
+ Si les fichiers à publier sont dans un sous-dossier, comme `public/` ou `dist/`, lance la commande depuis ce sous-dossier (`cd dist`, puis `deploy`). Avec un projet relié à GitHub, indique le dossier de sortie dans les réglages de build du projet.
635
+
636
+ ## URL propres et redirections
637
+
638
+ Ajoute un `vercel.json` à la racine du dossier pour servir `/a-propos` sans `.html`, ou pour rediriger une ancienne adresse :
639
+
640
+ ```json
641
+ {
642
+ "cleanUrls": true,
643
+ "redirects": [
644
+ { "source": "/ancienne-page", "destination": "/a-propos", "permanent": true }
645
+ ]
646
+ }
647
+ ```
648
+
649
+ Toutes les options sont dans [vercel.json](/docs/reference/vercel-json/).
650
+
651
+ ## Si ça ne marche pas
652
+
653
+ - Le site répond `404` : le dossier envoyé n’a pas d’`index.html` à sa racine. Voir [Dépannage](/docs/guides/depannage/#mon-site-affiche-404).
654
+ - `/a-propos` répond `404` alors que `a-propos.html` existe : active `cleanUrls` dans `vercel.json`.
655
+
656
+ ---
657
+
658
+ Source : /docs/guides/monorepo/
659
+
660
+ # Déployer une app dans un monorepo
661
+
662
+ Ton site peut vivre dans un sous-dossier, comme `apps/web` ou `site/`, dans un dépôt qui contient d’autres applications. Indique à Host le dossier racine du projet : c’est là que le build s’exécute.
663
+
664
+ **Résultat attendu** : le build s’exécute depuis le dossier de ton app, et seule cette app est publiée.
665
+
666
+ ## Détection à l’import
667
+
668
+ À l’import GitHub, Host lit tout le dépôt et cherche les dossiers qui contiennent un `package.json`, jusqu’à quatre niveaux de profondeur. Il préfère, dans l’ordre :
669
+
670
+ 1. un framework reconnu ;
671
+ 2. un dossier qui a un script `build` ;
672
+ 3. un nom usuel : `web`, `site`, `www`, `frontend`, `app`, `landing`, `marketing` ;
673
+ 4. le dossier le moins profond.
674
+
675
+ La racine d’un monorepo, avec un champ `workspaces`, un `pnpm-workspace.yaml`, un `turbo.json` ou un `nx.json`, n’est jamais choisie seule. Si le dépôt contient plusieurs applications, choisis celle à déployer. Les dossiers `node_modules`, `dist`, `build` et les caches sont ignorés.
676
+
677
+ Pour changer le dossier après l’import, modifie le **dossier racine** dans les réglages du projet.
678
+
679
+ ## Le fichier de verrouillage
680
+
681
+ Dans un monorepo, le fichier de verrouillage, comme `pnpm-lock.yaml` ou `bun.lock`, est souvent à la racine. Il compte pour toutes les applications : la commande d’installation suit le gestionnaire qu’il désigne.
682
+
683
+ ## Plusieurs sites dans un dépôt
684
+
685
+ Importe le dépôt une fois par site, en choisissant à chaque fois un dossier différent. Chaque projet a ses domaines, ses variables et son historique.
686
+
687
+ ## Avec la CLI
688
+
689
+ Lance la CLI depuis le dossier de l’app :
690
+
691
+ ```bash
692
+ cd apps/web
693
+ vercel --api https://api.host.hgdc.ch deploy
694
+ ```
695
+
696
+ Avec `vercel build` et `--prebuilt`, la même règle s’applique : construis depuis le dossier de l’app. Voir [Déployer un framework](/docs/guides/deployer-un-framework/).
697
+
698
+ ## Si ça ne marche pas
699
+
700
+ - Le build ne trouve pas tes dépendances : ton dossier est sans doute le mauvais. Vérifie que le dossier racine contient le `package.json` de l’app, et que le fichier de verrouillage est bien à la racine du dépôt.
701
+ - Host propose la racine du monorepo : choisis le dossier de l’application, pas la racine.
702
+
703
+ ---
704
+
705
+ Source : /docs/guides/brancher-un-domaine/
706
+
707
+ # Brancher un domaine
708
+
709
+ Ce guide sert ton site sur `www.exemple.ch` ou `exemple.ch`. Host vérifie que le domaine est à toi, attend que le trafic arrive, puis obtient le certificat HTTPS.
710
+
711
+ **Résultat attendu** : le domaine affiche le statut **Vérifié** et le certificat HTTPS, et ton site répond sur ce domaine.
712
+
713
+ **Avant de commencer** :
714
+
715
+ - un projet déployé en production ;
716
+ - l’accès à la zone DNS du domaine chez ton hébergeur. Le DNS d’Infomaniak, de Cloudflare ou d’un autre hébergeur fonctionne de la même façon.
717
+
718
+ 1. **Ajoute le domaine au projet**
719
+
720
+ Dans le projet, ouvre l’onglet **Domaines** et clique **Ajouter un domaine**. Saisis le nom, par exemple `www.exemple.ch` ou `exemple.ch`.
721
+
722
+ Choisis ce que le domaine sert, dans **Mise en ligne du domaine** :
723
+
724
+ - la production, pour le site principal ;
725
+ - une branche, par exemple `staging.exemple.ch` pour la branche `staging` ;
726
+ - une redirection vers un autre domaine du même projet.
727
+
728
+ Pour un domaine racine, la case **Ajouter aussi [www](http://www).** crée `www` en redirection permanente vers le domaine racine.
729
+
730
+ **Vérification** : le domaine apparaît dans la liste avec le statut **En attente des DNS**.
731
+
732
+ 2. **Prouve que le domaine est à toi**
733
+
734
+ Chez ton hébergeur DNS, crée un enregistrement **TXT** avec le nom et la valeur affichés sous **Prouver que le domaine est à toi (TXT)**.
735
+
736
+ Le nom commence toujours par `_agenthost.`, suivi du domaine. Certains hébergeurs ajoutent le domaine tout seul : saisis alors seulement la partie avant le domaine, par exemple `_agenthost.www`.
737
+
738
+ 3. **Dirige le trafic vers Host**
739
+
740
+ Sous **Diriger le trafic vers Host**, crée l’enregistrement indiqué :
741
+
742
+ | Domaine | Type | Nom | Valeur |
743
+ | ------------------------------------------ | --------- | ----- | --------------------------------------- |
744
+ | Sous-domaine, par exemple `www.exemple.ch` | **CNAME** | `www` | La cible affichée dans la console |
745
+ | Domaine racine, `exemple.ch` | **A** | `@` | L’adresse IPv4 affichée dans la console |
746
+
747
+ Un CNAME ne peut pas être posé sur la racine d’un domaine. Pour un domaine racine, utilise donc le A.
748
+
749
+ > **Attention**
750
+ >
751
+ > Supprime les anciens enregistrements A, AAAA ou CNAME qui pointent vers un autre hébergeur sur le même nom. Un enregistrement qui reste peut masquer le nouveau.
752
+
753
+ 4. **Attends la vérification**
754
+
755
+ Host revérifie le domaine toutes les 15 minutes tant qu’il n’est pas vérifié. Clique **Vérifier** pour lancer la vérification tout de suite.
756
+
757
+ Chaque étape s’affiche : la preuve TXT, le trafic, puis le certificat.
758
+
759
+ **Vérification** : le statut passe à **Vérifié**, puis le certificat HTTPS apparaît avec sa date d’échéance.
760
+
761
+ Ouvre le domaine dans un navigateur : ton site répond en HTTPS.
762
+
763
+ ## Ce que tu n’as pas à faire
764
+
765
+ - Téléverser un certificat. Host le demande dès que le domaine est vérifié, et le renouvelle seul.
766
+ - Redéployer. Un domaine de production sert le dernier déploiement de production prêt.
767
+
768
+ ## Statuts d’un domaine
769
+
770
+ | Statut | Signification |
771
+ | --------------------------- | ----------------------------------------------------------------------------------- |
772
+ | **En attente des DNS** | La preuve TXT ou le trafic manque encore. Le domaine n’est pas servi. |
773
+ | **Vérifié** | La preuve est là et le trafic arrive. Le domaine est servi. |
774
+ | **Ne pointe pas vers nous** | La preuve TXT est là, mais le trafic n’arrive pas à Host. Corrige le CNAME ou le A. |
775
+
776
+ Un domaine vérifié est revérifié chaque jour. Si la preuve TXT disparaît, une seconde vérification a lieu une heure plus tard. Si elle échoue aussi, le domaine repasse en attente et n’est plus servi. Garde donc le TXT en place.
777
+
778
+ ## Si ça ne marche pas
779
+
780
+ - Le domaine reste **En attente des DNS** : vérifie le nom du TXT, qui doit commencer par `_agenthost.`. Un ancien enregistrement peut aussi retarder la propagation. Voir [Dépannage](/docs/guides/depannage/#mon-domaine-reste-en-attente).
781
+ - Host refuse le nom avec « Ce domaine appartient à la plateforme » : les domaines de Host et ceux de la plateforme de déploiement ne peuvent pas être utilisés comme domaine client.
782
+ - Le certificat n’est pas encore émis : attends que le statut soit **Vérifié**, puis patiente quelques minutes. Si l’erreur « Le certificat HTTPS n’a pas encore pu être émis » persiste, écris à <support@hgdc.ch>.
783
+
784
+ ## Voir aussi
785
+
786
+ - [Domaines : référence](/docs/reference/domaines/) : les enregistrements, les codes de redirection et les limites.
787
+ - [Migrer depuis Vercel](/docs/guides/migrer-depuis-vercel/) : changer le DNS sans coupure.
788
+
789
+ ---
790
+
791
+ Source : /docs/guides/variables-d-environnement/
792
+
793
+ # Gérer les variables d'environnement
794
+
795
+ Les variables d’environnement passent des réglages à ton build : l’adresse d’une API, un identifiant public, une clé de service. Ce guide les ajoute, les rend sensibles si besoin, et les applique à ton site.
796
+
797
+ **Résultat attendu** : une variable visible dans l’onglet **Variables d’environnement** du projet, utilisée par le prochain build de l’environnement visé.
798
+
799
+ **Avant de commencer** : être membre de l’organisation. Modifier une variable demande le rôle membre ou plus.
800
+
801
+ ## Ajouter une variable
802
+
803
+ 1. **Ouvre Ajouter**
804
+
805
+ Dans l’onglet **Variables d’environnement** du projet, clique **Ajouter**.
806
+
807
+ 2. **Remplis le nom et la valeur**
808
+
809
+ Le nom ne contient que des lettres, des chiffres et `_`, et ne commence pas par un chiffre. Il fait 256 caractères au plus. Les noms qui commencent par `VERCEL_` ou `AGENTHOST_` sont réservés à la plateforme.
810
+
811
+ La valeur fait 64 Ko au plus. Une note facultative rappelle à quoi sert la variable : 500 caractères au plus.
812
+
813
+ 3. **Choisis les environnements**
814
+
815
+ Chaque variable vise un ou plusieurs environnements :
816
+
817
+ | Environnement | Utilisé par |
818
+ | ----------------- | ------------------------------------------------------------------------ |
819
+ | **Production** | Les builds de production, avec `vercel build --prod` |
820
+ | **Preview** | Les builds de preview, donc toutes les branches autres que la production |
821
+ | **Développement** | `vercel pull` depuis ton poste |
822
+
823
+ Un même nom peut exister une fois par environnement, avec une valeur différente. Par exemple, `API_URL` pointe vers l’API de production en production, et vers l’API de test en preview.
824
+
825
+ 4. **Ou colle un fichier .env**
826
+
827
+ Colle le contenu d’un fichier `.env` dans le champ du nom : chaque ligne devient une variable.
828
+
829
+ ```text
830
+ PUBLIC_API_URL=https://api.exemple.ch
831
+ PUBLIC_ANALYTICS_ID=abc123
832
+ ```
833
+
834
+ **Vérification** : chaque variable apparaît dans la liste, avec ses environnements.
835
+
836
+ ## Marquer une variable comme sensible
837
+
838
+ Une clé secrète ou un mot de passe se déclare **sensible**. Une variable sensible :
839
+
840
+ - ne s’affiche plus jamais après l’enregistrement, ni dans la console ni dans la CLI. Tu peux seulement la remplacer ;
841
+ - vise la production ou la preview, jamais le développement ;
842
+ - n’est livrée qu’au build du dépôt GitHub, par la clé limitée au projet que pose l’app GitHub. Un `vercel pull` depuis ton poste ne la télécharge pas.
843
+
844
+ Pour une valeur sensible utilisée par un build hors GitHub, voir [GitHub Actions sans l’application](/docs/guides/github-actions-sans-application/#variables-sensibles).
845
+
846
+ > **Attention**
847
+ >
848
+ > Tout ce que le build écrit dans les fichiers du site est public. Une variable lue dans le navigateur, comme celles qui commencent par `PUBLIC_`, `VITE_` ou `NEXT_PUBLIC_`, ne doit jamais contenir un secret, sensible ou non.
849
+
850
+ ## Appliquer un changement
851
+
852
+ Une variable est lue au build. Les déploiements déjà en ligne gardent les valeurs de leur propre build, et une modification ne les touche pas.
853
+
854
+ - Pour un projet relié à GitHub, clique **Redéployer la production** pour relancer le build avec les valeurs actuelles.
855
+ - Pour un projet déployé avec la CLI, relance le déploiement de production depuis ton dossier ou ta CI :
856
+
857
+ ```bash
858
+ vercel --api https://api.host.hgdc.ch pull --environment=production
859
+ vercel --api https://api.host.hgdc.ch build --prod
860
+ vercel --api https://api.host.hgdc.ch deploy --prebuilt --prod
861
+ ```
862
+
863
+ L’onglet signale une variable modifiée depuis le dernier build de production.
864
+
865
+ **Vérification** : le nouveau déploiement de production affiche la nouvelle valeur. Le déploiement précédent ne la montre pas.
866
+
867
+ ## Récupérer les variables sur ton poste
868
+
869
+ ```bash
870
+ vercel --api https://api.host.hgdc.ch pull
871
+ ```
872
+
873
+ Par défaut, la commande télécharge l’environnement **Développement** dans `.vercel/.env.development.local`. Ajoute `--environment=preview` ou `--environment=production` pour un autre environnement. Le dossier `.vercel` est ajouté au `.gitignore` : ne le commite pas.
874
+
875
+ ## Si ça ne marche pas
876
+
877
+ - Une variable sensible n’apparaît pas dans `vercel pull` : c’est voulu. Utilise une valeur de développement, dans une variable non sensible visant l’environnement Développement.
878
+ - Le site n’a pas changé après la modification : le déploiement n’a pas été relancé. Voir [Appliquer un changement](#appliquer-un-changement).
879
+ - La variable ne peut pas être créée : son nom est réservé, ou sa valeur dépasse 64 Ko. Voir [Variables : référence](/docs/reference/variables/).
880
+
881
+ ## Voir aussi
882
+
883
+ - [Secrets et coffre](/docs/concepts/secrets-et-coffre/) : comment les valeurs sont chiffrées et qui peut les lire.
884
+ - [Synchroniser depuis Doppler](/docs/guides/synchroniser-doppler/) : garder les secrets dans Doppler.
885
+
886
+ ---
887
+
888
+ Source : /docs/guides/synchroniser-doppler/
889
+
890
+ # Synchroniser les variables depuis Doppler
891
+
892
+ Si tes secrets vivent déjà dans Doppler, relie une de tes configs à un environnement du projet. Doppler reste la source de vérité : chaque changement arrive dans Host sans copie à la main.
893
+
894
+ **Résultat attendu** : les variables de la config apparaissent dans l’environnement choisi, avec le badge **Doppler**, et ne se modifient plus que dans Doppler.
895
+
896
+ **Avant de commencer** : un projet Host, et un compte Doppler avec accès à la config à synchroniser.
897
+
898
+ ## Relier une config
899
+
900
+ 1. **Crée un jeton de service dans Doppler**
901
+
902
+ Dans Doppler, ouvre la config, par exemple `prd`, onglet **Access**, et génère un jeton de service en lecture seule. Il commence par `dp.st.`.
903
+
904
+ 2. **Relie la config au projet**
905
+
906
+ Dans l’onglet **Variables d’environnement** du projet, section **Synchroniser depuis Doppler**, clique **Relier une config Doppler**. Choisis l’environnement, nomme la config, puis colle le jeton.
907
+
908
+ Host essaie le jeton, le chiffre et ne l’affiche plus jamais. La première synchronisation part tout de suite.
909
+
910
+ **Vérification** : les variables de la config apparaissent avec le badge **Doppler**.
911
+
912
+ 3. **Ajoute le webhook dans Doppler**
913
+
914
+ Host affiche une adresse et un secret de signature, une seule fois. Dans Doppler, ouvre **Webhooks**, ajoute un webhook avec cette adresse, coche la config et colle le secret.
915
+
916
+ Chaque changement est alors signé, puis appliqué en quelques secondes.
917
+
918
+ **Vérification** : modifie une valeur de test dans Doppler. Elle apparaît dans Host en quelques secondes.
919
+
920
+ ## Ce qui est synchronisé
921
+
922
+ - Toutes les variables de la config, sauf les métadonnées de Doppler, comme `DOPPLER_PROJECT` ou `DOPPLER_CONFIG`.
923
+ - Les noms réservés, qui commencent par `VERCEL_` ou `AGENTHOST_`, ne sont pas synchronisés. Les valeurs de plus de 64 Ko non plus. La console les signale.
924
+ - 300 variables au plus par config.
925
+ - En production et en preview, les variables sont **sensibles** : elles ne descendent pas sur un poste par `vercel pull`. En développement, elles sont ordinaires. Voir [Variables](/docs/guides/variables-d-environnement/#marquer-une-variable-comme-sensible).
926
+
927
+ ## Ce qui se passe quand une valeur change
928
+
929
+ - Une variable retirée de Doppler disparaît du projet au passage suivant.
930
+ - Une config devenue vide d’un coup ne retire rien : la console signale l’erreur. C’est une protection contre un accident de configuration.
931
+ - Une variable manuelle du même nom, sur le même environnement, l’emporte et n’est jamais écrasée. La console liste ces noms : supprime la variable manuelle pour que Doppler prenne le relais.
932
+ - Sans webhook, ou si un appel se perd, la synchronisation repasse toute seule toutes les six heures. Clique **Synchroniser** pour la lancer tout de suite.
933
+
934
+ ## Redéployer à chaque changement
935
+
936
+ Pour un projet relié à GitHub et la config de production, active **Redéployer la production à chaque changement**. Quand une valeur change dans Doppler, le workflow du dépôt reconstruit la production avec les nouvelles valeurs.
937
+
938
+ Une synchronisation sans changement ne redéploie rien.
939
+
940
+ ## Débrancher
941
+
942
+ **Débrancher** garde les variables dans le projet, redevenues manuelles. Aucun build ne les perd d’un coup. Retire ensuite le webhook et révoque le jeton dans Doppler.
943
+
944
+ > **Astuce**
945
+ >
946
+ > Le jeton de service et le secret du webhook sont chiffrés, liés au projet, et ne sont jamais renvoyés. Si tu perds le secret, clique **Générer un nouveau secret** sous l’adresse du webhook, puis remplace-le dans Doppler.
947
+
948
+ ## Si ça ne marche pas
949
+
950
+ - La synchronisation affiche une erreur à la connexion : le jeton n’est pas un jeton de service de la config, ou il est révoqué. Crée-en un nouveau.
951
+ - Une variable n’arrive pas : elle porte un nom réservé, ou sa valeur dépasse 64 Ko. Vérifie la liste signalée dans la console.
952
+ - Le webhook ne déclenche rien : vérifie que l’adresse et le secret collés dans Doppler sont ceux affichés à la création du webhook. Sinon, génère un nouveau secret.
953
+
954
+ ---
955
+
956
+ Source : /docs/guides/revenir-en-arriere/
957
+
958
+ # Revenir en arrière, redéployer ou annuler
959
+
960
+ Une mise en production s’est mal passée ? Ce guide remet en ligne une version précédente, relance un build, ou annule un déploiement en cours. Aucune de ces actions ne demande de nouveau commit.
961
+
962
+ **Résultat attendu** : ton domaine de production sert la version choisie, ou le déploiement en cours s’arrête.
963
+
964
+ **Avant de commencer** : une version précédente **Prête**. Un déploiement en erreur ne peut pas redevenir la production.
965
+
966
+ ## Revenir à une version précédente
967
+
968
+ 1. **Ouvre la liste des déploiements**
969
+
970
+ Dans le projet, ouvre l’onglet **Déploiements**. Chaque ligne montre l’état, la cible et le commit, quand il est connu.
971
+
972
+ 2. **Choisis la version à remettre en ligne**
973
+
974
+ Ouvre un déploiement de production précédent, qui est **Prêt**, puis clique **Revenir en arrière**.
975
+
976
+ Le retour est immédiat : aucun build ne tourne.
977
+
978
+ 3. **Vérifie le site**
979
+
980
+ **Vérification** : tes domaines de production répondent avec la version choisie. L’onglet **Vue d’ensemble** l’affiche comme production.
981
+
982
+ Le déploiement remis en ligne garde les variables qu’il a reçues à son build. Une variable modifiée depuis ne s’y applique pas. Pour appliquer une variable à la version remise en ligne, reconstruis-la : la section **Redéployer** plus bas explique comment.
983
+
984
+ ## Mettre une preview en production
985
+
986
+ Depuis la page d’une preview prête, clique **Mettre en production**. Cette preview sert alors tes domaines de production, avec les variables de preview qu’elle a reçues. La console te le rappelle avant de confirmer.
987
+
988
+ Utilise cette action pour valider une version sur son adresse de preview, puis la passer en production sans la reconstruire.
989
+
990
+ ## Redéployer
991
+
992
+ Redéployer reconstruit une version avec les variables d’aujourd’hui :
993
+
994
+ - **Projet relié à GitHub** : reconstruit le même commit dans GitHub Actions, avec les variables actuelles. Le bouton **Redéployer la production** le fait pour la production.
995
+ - **Projet envoyé par la CLI** : republie les fichiers du déploiement choisi, sans rien reconstruire. Pour une nouvelle version, relance `vercel deploy`.
996
+
997
+ ## Annuler un déploiement
998
+
999
+ Un déploiement **En file** ou **En cours de build** peut être annulé, avec **Annuler**. Un déploiement **Prêt** ne s’annule pas : reviens en arrière à la place.
1000
+
1001
+ **Vérification** : le déploiement passe à **Annulé**, et la production n’a pas changé.
1002
+
1003
+ ## Si ça ne marche pas
1004
+
1005
+ - **Revenir en arrière** est absent : le déploiement n’est pas **Prêt**, ou il n’est pas de production.
1006
+ - Le site répond encore avec l’ancienne version : le cache de ton navigateur ou de ton réseau peut retenir la page. Recharge la page sans cache, puis patiente quelques minutes.
1007
+ - Pour comprendre le cycle de vie d’un déploiement, lis [Déploiements](/docs/concepts/deploiements/).
1008
+
1009
+ ---
1010
+
1011
+ Source : /docs/guides/inviter-une-personne/
1012
+
1013
+ # Inviter une personne dans une organisation
1014
+
1015
+ Les membres d’une organisation se gèrent dans Account, pas dans Host. Ce guide invite une personne, puis vérifie qu’elle accède aux projets.
1016
+
1017
+ **Résultat attendu** : la personne se connecte à Host, voit l’organisation et ses projets, avec le rôle que tu lui as donné.
1018
+
1019
+ **Avant de commencer** : être propriétaire ou admin de l’organisation dans Account. Les rôles sont décrits dans [Organisations et rôles](/docs/concepts/organisations-et-roles/).
1020
+
1021
+ 1. **Invite depuis Account**
1022
+
1023
+ Ouvre la page de ton organisation dans [Account](https://account.hgdc.ch). Invite la personne par son adresse e-mail, et choisis son rôle : **membre**, **admin** ou **propriétaire**.
1024
+
1025
+ **Vérification** : l’invitation apparaît dans la liste des invitations en attente d’Account.
1026
+
1027
+ 2. **La personne se connecte**
1028
+
1029
+ La personne se connecte à Host avec **Se connecter avec HGDC**, avec la même adresse e-mail vérifiée. Son compte est lié à l’organisation, et ses projets restent en place.
1030
+
1031
+ Une personne qui n’a pas encore de compte demande d’abord un accès sur la page **Demander un accès** de Host. L’invitation suit.
1032
+
1033
+ 3. **Vérifie l'accès**
1034
+
1035
+ Demande à la personne d’ouvrir son tableau de bord.
1036
+
1037
+ **Vérification** : elle voit ton organisation dans le sélecteur de la barre latérale, et les projets qu’elle peut voir. Un membre n’a pas accès à l’onglet **Clés d’API**.
1038
+
1039
+ ## Changer un rôle ou retirer une personne
1040
+
1041
+ Modifie le rôle ou retire la personne dans Account. Host ne garde pas sa propre liste de membres : la liste affichée dans Host est une copie en lecture seule, mise à jour à la prochaine connexion de la personne.
1042
+
1043
+ Une session dure 7 jours au plus, sans prolongation. Un changement de rôle ou un retrait peut donc prendre effet jusqu’à la prochaine connexion, au plus tard à la fin de la session.
1044
+
1045
+ Les clés d’API créées par une personne cessent de fonctionner quand elle quitte l’organisation. Révoque-les si tu veux agir tout de suite. Voir [Créer et révoquer une clé d’API](/docs/guides/cle-d-api/).
1046
+
1047
+ ## Si ça ne marche pas
1048
+
1049
+ - L’organisation n’apparaît pas pour la personne : vérifie que l’adresse e-mail de l’invitation est la même que celle de son compte HGDC, et qu’elle est vérifiée.
1050
+ - La personne ne peut pas faire une action : son rôle ne le permet pas (voir le tableau des rôles). Vérifie son rôle dans Account.
1051
+
1052
+ ---
1053
+
1054
+ Source : /docs/guides/lire-les-logs/
1055
+
1056
+ # Lire les logs
1057
+
1058
+ Les logs répondent à deux questions : qu’est-ce que les visiteurs ont reçu, et qu’est-ce qui s’est passé pendant le build. Ce guide montre où les trouver et comment les filtrer.
1059
+
1060
+ **Résultat attendu** : tu identifies la requête ou la ligne de build à l’origine d’un problème.
1061
+
1062
+ ## Les requêtes servies
1063
+
1064
+ 1. **Ouvre l'onglet Logs du projet**
1065
+
1066
+ Les requêtes apparaissent en direct. Pour chacune, tu vois l’heure, le statut HTTP, la méthode, le domaine, le chemin, la durée de traitement et la taille de la réponse.
1067
+
1068
+ 2. **Isole les erreurs**
1069
+
1070
+ Clique **Erreur** pour ne garder que les réponses `5xx`. Clique **Alerte** pour les réponses `4xx`. La recherche lit le chemin et le domaine.
1071
+
1072
+ 3. **Garde la vue à jour**
1073
+
1074
+ **Suivre** garde les dernières requêtes en vue. Sous la liste, un compteur donne le nombre de réponses par classe : 2xx, 3xx, 4xx et 5xx.
1075
+
1076
+ 4. **Copie ce qui t'intéresse**
1077
+
1078
+ **Tout copier** copie toutes les requêtes reçues, une par ligne. L’icône de copie ne copie que les lignes affichées.
1079
+
1080
+ Les requêtes ne gardent ni adresse IP, ni en-têtes, ni paramètres d’URL (la partie après `?`). Elles disparaissent après trois jours. Voir [Confidentialité](/docs/concepts/confidentialite/).
1081
+
1082
+ ## La sortie d’un build
1083
+
1084
+ La page de chaque déploiement affiche la sortie du build : installation, `vercel build`, puis publication.
1085
+
1086
+ - Avec l’intégration GitHub, les lignes arrivent en direct pendant le build.
1087
+ - Cherche dans les lignes, ou filtre les erreurs et les alertes.
1088
+ - Ouvre le run GitHub Actions pour la sortie complète, si ton build passe par GitHub.
1089
+ - **Tout copier** copie la sortie entière. L’icône de copie ne copie que les lignes affichées.
1090
+
1091
+ ## Suivre un déploiement depuis le terminal
1092
+
1093
+ `vercel deploy` suit la publication jusqu’à la fin, pendant 9 minutes au plus, puis rend la main :
1094
+
1095
+ ```bash
1096
+ vercel --api https://api.host.hgdc.ch deploy --prod
1097
+ ```
1098
+
1099
+ ## Si ça ne marche pas
1100
+
1101
+ - Un build n’a pas de sortie : il est peut-être en file, ou il a été annulé avant de démarrer. Vérifie l’état du déploiement.
1102
+ - Un problème de page n’apparaît pas dans les logs de requêtes : les requêtes sont gardées trois jours seulement. Reproduis le problème, puis regarde tout de suite.
1103
+ - Pour une erreur de build, commence par la première ligne d’erreur du filtre **Erreur**, puis remonte la sortie jusqu’à elle. Voir [Dépannage](/docs/guides/depannage/).
1104
+
1105
+ ---
1106
+
1107
+ Source : /docs/guides/migrer-depuis-vercel/
1108
+
1109
+ # Migrer un projet depuis Vercel
1110
+
1111
+ Host reprend les outils que tu utilises déjà : la CLI Vercel, `vercel.json` et le format Build Output API. Migrer revient à recréer le projet, reprendre ses variables, puis changer le DNS.
1112
+
1113
+ **Résultat attendu** : ton domaine sert le site depuis Host, et le projet Vercel n’envoie plus de déploiement.
1114
+
1115
+ **Avant de commencer** : vérifie que ton site n’utilise que des fonctions prises en charge. Les fonctions, le runtime edge, l’ISR et les crons sont en préversion, voir [Compatibilité](/docs/reference/compatibilite/).
1116
+
1117
+ 1. **Crée le projet sur Host**
1118
+
1119
+ Importe le dépôt depuis GitHub, voir [Déployer depuis GitHub](/docs/guides/deployer-depuis-github/). Ou lance `vercel deploy` depuis le dossier du projet avec une clé Host.
1120
+
1121
+ Supprime d’abord le dossier `.vercel` s’il existe : il pointe vers le projet Vercel.
1122
+
1123
+ ```bash
1124
+ rm -rf .vercel
1125
+ vercel --api https://api.host.hgdc.ch deploy
1126
+ ```
1127
+
1128
+ **Vérification** : un déploiement de preview est **Prêt**.
1129
+
1130
+ 2. **Reprends les variables**
1131
+
1132
+ Sur Vercel, `vercel env pull .env.production --environment=production` écrit les variables lisibles dans un fichier.
1133
+
1134
+ Colle le contenu de ce fichier dans **Ajouter**, dans l’onglet **Variables d’environnement** de Host, en choisissant l’environnement Production. Les variables marquées « Sensitive » sur Vercel ne se relisent pas : saisis-les à nouveau.
1135
+
1136
+ **Vérification** : le nombre de variables correspond à celui de Vercel.
1137
+
1138
+ 3. **Vérifie la preview**
1139
+
1140
+ Ouvre l’adresse du déploiement et parcours le site : pages, redirections, page 404 et ressources.
1141
+
1142
+ **Vérification** : aucune page ne répond `404` ou `501` de façon inattendue.
1143
+
1144
+ 4. **Ajoute le domaine et change le DNS**
1145
+
1146
+ Ajoute le domaine au projet, pose le TXT de propriété, puis remplace les enregistrements qui pointaient vers Vercel par le CNAME ou le A indiqué. Le détail est dans [Brancher un domaine](/docs/guides/brancher-un-domaine/).
1147
+
1148
+ 5. **Retire le projet de Vercel**
1149
+
1150
+ Une fois le trafic arrivé et le certificat émis, débranche le dépôt côté Vercel. Tu évites ainsi deux déploiements à chaque push.
1151
+
1152
+ > **Astuce**
1153
+ >
1154
+ > Pose d’abord le TXT : il ne change rien au trafic. Ne change le CNAME ou le A que quand le domaine est prêt côté Host. Baisse le TTL de l’enregistrement quelques heures avant la bascule, pour revenir vite en arrière si besoin.
1155
+
1156
+ ## Si ça ne marche pas
1157
+
1158
+ - La preview affiche une page `501` : une fonction n’est pas encore ouverte à ton organisation. Voir [Préversion](/docs/concepts/preversion/).
1159
+ - Le site répond encore depuis Vercel : le DNS n’est pas propagé, ou un ancien enregistrement subsiste. Voir [Dépannage](/docs/guides/depannage/#mon-domaine-reste-en-attente).
1160
+
1161
+ ---
1162
+
1163
+ Source : /docs/guides/depannage/
1164
+
1165
+ # Dépannage
1166
+
1167
+ Ce guide liste les problèmes fréquents, classés par symptôme. Chaque section donne les causes probables, dans l’ordre où les vérifier.
1168
+
1169
+ Si rien ne correspond, écris à <support@hgdc.ch> avec l’adresse du déploiement concerné.
1170
+
1171
+ ## La CLI renvoie 403
1172
+
1173
+ La clé est absente, mal copiée, révoquée, ou elle appartient à une organisation qui n’existe plus.
1174
+
1175
+ - Vérifie qu’elle commence par `ah_` et qu’elle est passée par `VERCEL_TOKEN` ou `--token`.
1176
+ - Vérifie qu’elle n’a pas été révoquée dans **Clés actives**. Une clé cesse aussi de fonctionner quand la personne qui l’a créée quitte l’organisation.
1177
+ - Vérifie que `--api https://api.host.hgdc.ch` est présent. Sans lui, la CLI parle à Vercel, pas à Host.
1178
+
1179
+ Le message « Cette clé est limitée à un autre projet » signifie que tu utilises la clé posée dans un dépôt pour un autre projet. Crée une clé d’organisation, voir [Créer et révoquer une clé d’API](/docs/guides/cle-d-api/).
1180
+
1181
+ ## La CLI affiche missing_files
1182
+
1183
+ C’est normal : Host demande les fichiers qu’il n’a pas encore, la CLI les envoie puis rappelle l’API. Si l’erreur persiste, un fichier n’a pas pu partir : il dépasse 20 Mo, ou le réseau a coupé. Relance le déploiement.
1184
+
1185
+ ## vercel login ne fonctionne pas
1186
+
1187
+ C’est voulu : la connexion passe toujours par une clé d’API. Exporte la clé dans `VERCEL_TOKEN`, puis lance la commande avec `--api`, voir [Configurer la CLI](/docs/reference/cli/#configurer-la-cli).
1188
+
1189
+ ## Le build GitHub est absent
1190
+
1191
+ Un push ne déclenche aucun build dans Host.
1192
+
1193
+ - La pull request d’installation est-elle fusionnée sur la branche poussée ? Le fichier `.github/workflows/hgdc-host.yml` doit exister sur cette branche.
1194
+ - Ouvre l’onglet **Actions** du dépôt : le run y apparaît, avec son erreur.
1195
+ - Le secret `HGDC_HOST_TOKEN` manque ou a été supprimé. Débranche le dépôt, puis relie-le pour poser un nouveau secret.
1196
+ - Le projet a été importé avant une évolution du workflow. Utilise **Mettre à jour le workflow** dans l’onglet **Git**.
1197
+
1198
+ ## Mon site affiche 404
1199
+
1200
+ - Le dossier envoyé n’a pas d’`index.html` à sa racine, ou le dossier de sortie configuré est faux. Voir [Déployer un site statique](/docs/guides/site-statique/).
1201
+ - La page est rendue à la demande, et l’exécution des fonctions n’est pas encore ouverte à ton organisation : la page répond alors `501`. Pré-rends-la, ou consulte [Préversion](/docs/concepts/preversion/).
1202
+ - Sans `cleanUrls`, `/a-propos` ne trouve pas `a-propos.html`. Ajoute `"cleanUrls": true` à `vercel.json`.
1203
+ - La page de déploiement liste les fichiers et les fonctions ignorés à la publication, avec un avertissement. Vérifie-la.
1204
+
1205
+ ## Mon domaine reste en attente
1206
+
1207
+ - Vérifie le nom du TXT : `_agenthost.` suivi de ton domaine, pas `_agenthost` seul. Certains hébergeurs ajoutent le domaine tout seul : saisis alors seulement `_agenthost.www` pour `www.exemple.ch`.
1208
+ - Pour un domaine racine, il faut un enregistrement A, pas un CNAME.
1209
+ - Un ancien enregistrement A ou AAAA vers un autre hébergeur peut masquer le nouveau : supprime-le.
1210
+ - La propagation peut prendre quelques heures. Clique **Vérifier**, ou attends la vérification automatique, toutes les 15 minutes.
1211
+
1212
+ Tu peux contrôler les enregistrements depuis un terminal :
1213
+
1214
+ ```bash
1215
+ dig +short TXT _agenthost.www.exemple.ch
1216
+ dig +short CNAME www.exemple.ch
1217
+ ```
1218
+
1219
+ Voir [Brancher un domaine](/docs/guides/brancher-un-domaine/).
1220
+
1221
+ ## Ma variable sensible n’apparaît pas dans vercel pull
1222
+
1223
+ C’est voulu : une variable sensible ne part que vers le build du dépôt, par la clé limitée au projet. Depuis ton poste, utilise une valeur de développement, dans une variable non sensible visant l’environnement Développement. Voir [Variables d’environnement](/docs/guides/variables-d-environnement/).
1224
+
1225
+ ## Une fonction répond 501
1226
+
1227
+ Le rendu à la demande, les routes d’API et les Server Actions sont en préversion. L’exécution est ouverte organisation par organisation. Les pages statiques et pré-rendues de ton site restent en ligne. Voir [Préversion](/docs/concepts/preversion/).
1228
+
1229
+ ## Le build échoue
1230
+
1231
+ - Ouvre le déploiement : la sortie du build est affichée, avec la première erreur. Voir [Lire les logs](/docs/guides/lire-les-logs/).
1232
+ - Reproduis le build sur ton poste avec `vercel build`, puis vérifie que la version de Node.js du projet correspond à celle de ton poste.
1233
+ - Une variable manque au build : ajoute-la à l’environnement visé, voir [Variables d’environnement](/docs/guides/variables-d-environnement/).
1234
+
1235
+ ---
1236
+
1237
+ Source : /docs/reference/cli/
1238
+
1239
+ # CLI
1240
+
1241
+ Host accepte la CLI Vercel officielle, version 63. Cette page décrit les commandes prises en charge, leurs options et ce qui n’est pas encore pris en charge.
1242
+
1243
+ ## Configurer la CLI
1244
+
1245
+ Host n’utilise pas la connexion par navigateur de la CLI. Chaque commande reçoit l’adresse de l’API par `--api` et la clé par la variable `VERCEL_TOKEN`.
1246
+
1247
+ ```bash
1248
+ npm install --global vercel@63
1249
+ export VERCEL_TOKEN=ah_…
1250
+ vercel --api https://api.host.hgdc.ch deploy
1251
+ ```
1252
+
1253
+ Pour ne pas retaper l’adresse, crée un alias dans ton profil de shell :
1254
+
1255
+ ```bash
1256
+ # ~/.bashrc ou ~/.zshrc
1257
+ alias vh="vercel --api https://api.host.hgdc.ch"
1258
+
1259
+ # Ensuite
1260
+ vh deploy --prod
1261
+ ```
1262
+
1263
+ En PowerShell, dans `$PROFILE` :
1264
+
1265
+ ```powershell
1266
+ function vh { vercel --api https://api.host.hgdc.ch @args }
1267
+ ```
1268
+
1269
+ > **Attention**
42
1270
  >
43
- > Le site est servi par Host. Les questions des visiteurs sont gardées 90 jours au plus. Voir [Données et confidentialité](/explications/donnees/).
1271
+ > Sans `--api`, la CLI parle à Vercel. Si une commande te demande de te connecter dans le navigateur, vérifie que l’option est bien présente.
1272
+
1273
+ ### Options globales
1274
+
1275
+ | Option | Valeur | Rôle |
1276
+ | --------- | ------ | -------------------------------------------------------------------------------------------- |
1277
+ | `--api` | URL | Adresse de l’API : `https://api.host.hgdc.ch` |
1278
+ | `--token` | `ah_…` | Clé d’API. Préfère la variable `VERCEL_TOKEN`, qui n’apparaît pas dans l’historique du shell |
1279
+
1280
+ ### Ce qui n’est pas pris en charge
1281
+
1282
+ | Commande ou option | État |
1283
+ | ------------------- | -------------------------------------------------------------------------------------------- |
1284
+ | `vercel login` | Non : la connexion passe par la clé |
1285
+ | `vercel env` | Pas encore : gère les variables dans la console |
1286
+ | `vercel domains` | Pas encore : gère les domaines dans la console |
1287
+ | `vercel logs` | Pas encore : les logs sont dans la console |
1288
+ | `vercel alias` | Pas encore : utilise la console, voir [Revenir en arrière](/docs/guides/revenir-en-arriere/) |
1289
+ | `--scope`, `--team` | Ignorés : l’organisation vient de la clé |
1290
+
1291
+ ## vercel deploy
1292
+
1293
+ Envoie un dossier, ou un build déjà construit, et crée un déploiement. Sans option, la commande crée une preview. Avec `--prod`, elle part en production.
1294
+
1295
+ ```bash
1296
+ # Preview du dossier courant
1297
+ vercel --api https://api.host.hgdc.ch deploy
44
1298
 
45
- ---
1299
+ # Production
1300
+ vercel --api https://api.host.hgdc.ch deploy --prod
1301
+ ```
46
1302
 
47
- Source : /demarrer/premiere-doc/
1303
+ Dans un script, l’adresse du déploiement est écrite seule sur la sortie standard :
48
1304
 
49
- # Ta première doc en cinq minutes
1305
+ ```bash
1306
+ URL=$(vercel --api https://api.host.hgdc.ch deploy --yes)
1307
+ echo "Preview : $URL"
1308
+ ```
50
1309
 
51
- Il te faut Node.js 22 ou plus récent, ou Bun. Tout le reste s’installe avec le paquet `@hgdc/docs`.
1310
+ | Option | Rôle |
1311
+ | --------------------- | ------------------------------------------------------------------------------------------- |
1312
+ | `--prod` | Déploie en production |
1313
+ | `--prebuilt` | Envoie `.vercel/output`, produit par `vercel build`, sans reconstruire |
1314
+ | `--yes` | Répond oui à toutes les questions : relie le dossier et crée le projet. Indispensable en CI |
1315
+ | `--cwd <chemin>` | Dossier à déployer, s’il n’est pas le dossier courant |
1316
+ | `--meta <clé=valeur>` | Métadonnée attachée au déploiement |
52
1317
 
53
- 1. **Créer le dossier**
1318
+ La commande affiche l’adresse du déploiement, suit la publication, puis rend la main quand le déploiement est prêt ou en erreur. Le suivi dure 9 minutes au plus.
54
1319
 
55
- Un dépôt Git à part, ou un dossier `docs/` dans le dépôt de ton produit.
1320
+ Pour un framework, construis d’abord avec `vercel build`, puis envoie le résultat avec `--prebuilt`. Utilise la même cible des deux côtés : `build --prod` avec `deploy --prebuilt --prod`, ou aucune des deux pour une preview. Sinon, la CLI refuse l’envoi.
56
1321
 
57
- ```bash
58
- mkdir docs && cd docs
59
- npm init -y
60
- npm install --save-dev @hgdc/docs
61
- ```
1322
+ ## vercel build
62
1323
 
63
- 2. **Écrire docs.json**
1324
+ Construit le projet en local ou en CI, au format Build Output API. Le résultat va dans `.vercel/output`, prêt pour `vercel deploy --prebuilt`.
64
1325
 
65
- À la racine du dossier. Seuls `name` et `navigation` sont obligatoires.
1326
+ ```bash
1327
+ # Build de preview
1328
+ vercel --api https://api.host.hgdc.ch build
66
1329
 
67
- ```json
68
- {
69
- "name": "Documentation Acme",
70
- "colors": { "primary": "#0f766e" },
71
- "navigation": {
72
- "groups": [{ "group": "Démarrer", "pages": ["index", "installation"] }]
73
- }
74
- }
75
- ```
1330
+ # Build de production
1331
+ vercel --api https://api.host.hgdc.ch build --prod
1332
+ ```
76
1333
 
77
- 3. **Écrire les pages**
1334
+ Avant de construire, la commande télécharge les variables de l’environnement visé : preview par défaut, production avec `--prod`. Une variable sensible n’est pas téléchargée depuis un poste, seulement depuis le build du dépôt GitHub.
78
1335
 
79
- Une page par entrée de la navigation : `index.mdx` et `installation.mdx`. Chaque page commence par un titre.
1336
+ | Option | Rôle |
1337
+ | ---------------- | ------------------------------------------------------------------------- |
1338
+ | `--prod` | Construit pour la production, avec les variables de production |
1339
+ | `--yes` | Télécharge les réglages du projet sans rien demander. Indispensable en CI |
1340
+ | `--cwd <chemin>` | Dossier du projet, s’il n’est pas le dossier courant |
80
1341
 
81
- ```mdx
82
- ---
83
- title: Installation
84
- description: Installer Acme en deux minutes.
85
- ---
1342
+ ## vercel pull
86
1343
 
87
- Lance la commande suivante :
88
- ```
1344
+ Télécharge les réglages du projet et les variables d’un environnement. `vercel build` s’en sert ensuite.
89
1345
 
90
- 4. **Voir le site**
1346
+ ```bash
1347
+ # Variables de développement, par défaut
1348
+ vercel --api https://api.host.hgdc.ch pull
91
1349
 
92
- Ajoute les scripts dans `package.json`, puis lance `npm run dev`.
1350
+ # Variables de preview ou de production
1351
+ vercel --api https://api.host.hgdc.ch pull --environment=preview
1352
+ vercel --api https://api.host.hgdc.ch pull --environment=production
1353
+ ```
93
1354
 
94
- ```json
95
- {
96
- "scripts": {
97
- "dev": "hgdc-docs dev",
98
- "build": "hgdc-docs build"
99
- }
100
- }
101
- ```
1355
+ Les variables sont écrites dans `.vercel/.env.<environnement>.local`. La CLI ajoute ce dossier au `.gitignore` : ne le commite pas.
102
1356
 
103
- Le site s’ouvre sur `http://localhost:4321` et se recharge à chaque modification.
1357
+ | Option | Valeur | Rôle |
1358
+ | ---------------- | ---------------------------------------- | ---------------------------------------------------- |
1359
+ | `--environment` | `development`, `preview` ou `production` | Environnement à lire. Par défaut : `development` |
1360
+ | `--yes` | | Relie le dossier sans rien demander |
1361
+ | `--cwd <chemin>` | | Dossier du projet, s’il n’est pas le dossier courant |
104
1362
 
105
- > **Note**
106
- >
107
- > `hgdc-docs build` écrit le site dans `dist/`. Ajoute `dist/` et `.hgdc-docs/` à ton `.gitignore`.
1363
+ Ce que reçoit la commande dépend de la clé :
108
1364
 
109
- ## Et ensuite
1365
+ | Clé | Variables normales | Variables sensibles |
1366
+ | ------------------------------------- | ------------------ | ------------------- |
1367
+ | Clé d’organisation | Oui | Non |
1368
+ | Clé de projet, posée par l’app GitHub | Oui | Oui |
110
1369
 
111
- - [Publier avec Host](/guides/publier/) pour mettre le site en ligne.
112
- - [Écrire en MDX](/guides/ecrire/) pour les titres, les liens, les images et le code.
113
- - [docs.json](/reference/docs-json/) pour toutes les options.
1370
+ ## vercel link
114
1371
 
115
- ---
1372
+ Relie un dossier local à un projet. Les autres commandes savent ensuite à quel projet s’adresser.
116
1373
 
117
- Source : /guides/publier/
1374
+ ```bash
1375
+ vercel --api https://api.host.hgdc.ch link
118
1376
 
119
- # Publier avec Host
1377
+ # Sans question, avec le nom du dossier
1378
+ vercel --api https://api.host.hgdc.ch link --yes
1379
+ ```
120
1380
 
121
- Host construit ton site à chaque push et le sert depuis son serveur. La console `docs.hgdc.ch` relit ensuite le site publié pour indexer l’assistant.
1381
+ La liaison est écrite dans `.vercel/project.json`, qui contient `orgId` et `projectId`. Le premier `link` ou `deploy` sur un nom inconnu crée le projet, sous le nom du dossier.
122
1382
 
123
- ## Mettre la doc en ligne
1383
+ | Option | Rôle |
1384
+ | ----------------- | ------------------------------------------------------------------------ |
1385
+ | `--yes` | Relie le dossier sans rien demander, et crée le projet s’il n’existe pas |
1386
+ | `--project <nom>` | Nom du projet à relier, s’il n’est pas celui du dossier |
1387
+ | `--cwd <chemin>` | Dossier à relier, s’il n’est pas le dossier courant |
124
1388
 
125
- 1. **Importer le dépôt**
1389
+ En CI, sans dossier `.vercel`, donne les deux identifiants par variables d’environnement, avec la clé :
126
1390
 
127
- Dans Host, crée un projet à partir de ton dépôt GitHub. Host reconnaît une doc Docs (un `docs.json` et le paquet `@hgdc/docs` dans `package.json`) : il la construit avec `hgdc-docs build` et publie le dossier `dist/`. Aucun fichier de configuration à ajouter.
1391
+ ```bash
1392
+ export VERCEL_ORG_ID=…
1393
+ export VERCEL_PROJECT_ID=…
1394
+ export VERCEL_TOKEN=ah_…
1395
+ vercel --api https://api.host.hgdc.ch deploy --prod --yes
1396
+ ```
128
1397
 
129
- 2. **Fusionner la pull request de Host**
1398
+ `VERCEL_ORG_ID` est la valeur renvoyée par [GET /v2/user](/docs/reference/api/utilisateur/). Le workflow posé par l’app GitHub contient déjà les bonnes valeurs.
130
1399
 
131
- Host propose une pull request qui ajoute son workflow de déploiement. Fusionne-la : la doc part en production.
1400
+ Pour délier un dossier, supprime son dossier `.vercel`. Le prochain déploiement te redemandera le projet.
132
1401
 
133
- 3. **Pousser**
1402
+ ## Voir aussi
134
1403
 
135
- Chaque push sur la branche principale publie le site en production. Les autres branches ont leur préversion.
1404
+ - [Référence de l’API](/docs/reference/api/introduction/) : les mêmes opérations, sans la CLI.
1405
+ - [Compatibilité](/docs/reference/compatibilite/) : la liste des fonctions de la CLI et de la plateforme.
136
1406
 
137
- ## Activer Docs
1407
+ ---
138
1408
 
139
- 1. **Cliquer sur « Activer Docs »**
1409
+ Source : /docs/reference/variables/
140
1410
 
141
- Sur la vue d’ensemble du projet dans Host, la carte **Assistant et recherche avec Docs** propose **Activer Docs**. Host crée le projet dans la console, dans la même organisation. Il faut être admin de l’organisation, et la doc doit déjà être en production.
1411
+ # Variables d'environnement
142
1412
 
143
- 2. **Publier une fois de plus**
1413
+ Cette page donne les règles qui s’appliquent aux variables d’environnement. Pour les gérer pas à pas, voir [Gérer les variables](/docs/guides/variables-d-environnement/).
144
1414
 
145
- Pousse une modification. Ce build reçoit l’identifiant du projet de la console : le site le porte sans que tu le recopies dans `docs.json`.
1415
+ ## Nom
146
1416
 
147
- 3. **Laisser faire**
1417
+ | Règle | Valeur |
1418
+ | -------------------- | ------------------------------------------------- |
1419
+ | Caractères autorisés | Lettres, chiffres et `_` |
1420
+ | Premier caractère | Une lettre ou `_`, pas un chiffre |
1421
+ | Longueur | 256 caractères au plus |
1422
+ | Noms réservés | Ceux qui commencent par `VERCEL_` ou `AGENTHOST_` |
148
1423
 
149
- À chaque mise en production, Host prévient la console, qui relit `/_hgdc/corpus.json` et indexe les pages en quelques secondes. La carte de Host affiche **Docs est activé** et mène à la console. En plus, la console relit le site tous les quarts d’heure : un appel perdu se rattrape seul.
1424
+ Un même nom peut exister une fois par environnement.
150
1425
 
151
- > **Note**
152
- >
153
- > Le projet apparaît dans la console dès que tu t’y connectes avec ton compte HGDC. Ses réglages (domaines, assistant) s’y changent comme pour n’importe quel projet.
1426
+ ## Valeur et note
154
1427
 
155
- ## Ton domaine
1428
+ | Champ | Limite |
1429
+ | ------ | ---------------------- |
1430
+ | Valeur | 64 Ko au plus |
1431
+ | Note | 500 caractères au plus |
156
1432
 
157
- Le domaine se branche dans Host, comme pour n’importe quel site : Host annonce la nouvelle adresse à la console à la mise en production suivante. Si la doc répond sur plusieurs adresses (`docs.acme.ch` et `aide.acme.ch`), ajoute les autres dans **Réglages › Domaines** : l’assistant ne répond qu’aux pages servies par ces adresses.
1433
+ ## Environnements
158
1434
 
159
- ## Relier un projet existant
1435
+ | Environnement | Utilisé par | Télécharge avec `vercel pull` |
1436
+ | ------------- | ---------------------------------------------------------- | ----------------------------- |
1437
+ | Production | `vercel build --prod`, les déploiements de production | `--environment=production` |
1438
+ | Preview | Les builds de toutes les branches autres que la production | `--environment=preview` |
1439
+ | Développement | Ton poste de développement | Par défaut, sans option |
160
1440
 
161
- Le dossier `dist/` est un site statique, il se dépose chez n’importe quel hébergeur. Hors de Host, ou pour un projet créé directement dans la console, relie la doc à la main.
1441
+ ## Variables fournies par la plateforme
162
1442
 
163
- 1. **Créer le projet dans la console**
1443
+ Host ajoute ces variables au build, sans que tu les crées :
164
1444
 
165
- Sur `docs.hgdc.ch`, ouvre ton organisation, puis **Nouveau projet**. Donne l’adresse de production du site, par exemple `https://docs.acme.ch`.
1445
+ | Variable | Valeur |
1446
+ | ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
1447
+ | `VERCEL_PROJECT_PRODUCTION_URL` | Le domaine de production du projet, sans `https://`, à défaut son adresse de production `<projet>.hgdc.cloud`. Toujours présente, en preview aussi |
166
1448
 
167
- 2. **Copier l'identifiant dans docs.json**
1449
+ Les noms `VERCEL_` sont réservés : tu ne peux pas en créer, et une variable du projet du même nom n’écrase pas celle de la plateforme.
168
1450
 
169
- La console affiche une ligne à copier. Ajoute-la dans `docs.json`, puis publie :
1451
+ ## Variables sensibles
170
1452
 
171
- ```json
172
- { "project": "k57a8m2x9q4n1b3c5d7e9f0g2h4j6k8m" }
173
- ```
1453
+ | Propriété | Comportement |
1454
+ | -------------- | ------------------------------------------------------------------------------------------------------------------------------- |
1455
+ | Affichage | Jamais affichée après l’enregistrement, ni dans la console ni dans la CLI. Elle peut seulement être remplacée |
1456
+ | Environnements | Production ou preview uniquement. Jamais le développement |
1457
+ | Téléchargement | Livrée uniquement au build du dépôt GitHub, par une clé limitée au projet. Absente de `vercel pull` avec une clé d’organisation |
174
1458
 
175
- Sans cet identifiant, le site fonctionne mais l’assistant reste caché, et la console refuse d’indexer un site qui ne porte pas le sien.
1459
+ ## Synchronisation avec Doppler
176
1460
 
177
- 3. **Synchroniser**
1461
+ | Règle | Valeur |
1462
+ | --------------------------- | ----------------------------------------------------------- |
1463
+ | Variables par configuration | 300 au plus |
1464
+ | Métadonnées Doppler | Exclues : `DOPPLER_PROJECT`, `DOPPLER_CONFIG` et similaires |
1465
+ | Noms réservés | Ignorés |
1466
+ | Valeurs de plus de 64 Ko | Ignorées et signalées |
1467
+ | Synchronisation de secours | Toutes les six heures, sans webhook |
178
1468
 
179
- Clique sur **Synchroniser** dans l’aperçu du projet. La console lit `/_hgdc/corpus.json` sur ton site et indexe chaque page, puis relit le site tous les quarts d’heure.
1469
+ Voir [Synchroniser depuis Doppler](/docs/guides/synchroniser-doppler/).
180
1470
 
181
- > **Adresse publique seulement**
182
- >
183
- > La console n’accepte qu’une adresse `https://` avec un nom de domaine public. Elle ne suit pas les redirections : donne l’adresse finale du site.
1471
+ ## Ce que le site publie
1472
+
1473
+ Tout ce que le build écrit dans les fichiers du site est public. Une variable lue dans le navigateur, comme celles qui commencent par `PUBLIC_`, `VITE_` ou `NEXT_PUBLIC_`, ne doit jamais contenir un secret.
184
1474
 
185
1475
  ---
186
1476
 
187
- Source : /guides/ecrire/
1477
+ Source : /docs/reference/domaines/
188
1478
 
189
- # Écrire en MDX
1479
+ # Domaines
190
1480
 
191
- Chaque page est un fichier `.mdx` (ou `.md`) : du Markdown, plus des composants. Le chemin du fichier donne l’adresse de la page : `guides/publier.mdx` devient `/guides/publier/`.
1481
+ Cette page donne les valeurs exactes des enregistrements, les statuts et les règles de propriété. Pour brancher un domaine pas à pas, voir [Brancher un domaine](/docs/guides/brancher-un-domaine/).
192
1482
 
193
- ## Métadonnées
1483
+ ## Enregistrements DNS
194
1484
 
195
- Le haut de la page, entre deux lignes `---`, décrit la page.
1485
+ Deux enregistrements, chez ton hébergeur DNS : un TXT de preuve, et un trafic qui arrive sur Host.
196
1486
 
197
- ```mdx
198
- ---
199
- title: Publier avec Host
200
- sidebarTitle: Publier
201
- description: Mettre la doc en ligne et brancher l'assistant.
202
- ---
203
- ```
1487
+ | Enregistrement | Nom | Valeur | Quand |
1488
+ | -------------- | ---------------------- | --------------------------------------- | --------------------------------------------- |
1489
+ | **TXT** | `_agenthost.<domaine>` | Le jeton affiché dans la console | Toujours : prouve que le domaine t’appartient |
1490
+ | **CNAME** | `<sous-domaine>` | La cible affichée dans la console | Pour un sous-domaine, comme `www` |
1491
+ | **A** | `<domaine racine>` | L’adresse IPv4 affichée dans la console | Pour un domaine racine, comme `exemple.ch` |
204
1492
 
205
- | Champ | Rôle |
206
- | -------------- | ---------------------------------------------------------------------------- |
207
- | `title` | Titre de la page, obligatoire. Aussi le titre de l’onglet du navigateur. |
208
- | `sidebarTitle` | Libellé plus court dans la barre latérale. |
209
- | `description` | Une phrase. Reprise par les moteurs de recherche, `llms.txt` et l’assistant. |
1493
+ Le CNAME ne peut pas être posé sur la racine d’un domaine : le DNS l’interdit. Pour un domaine racine, utilise le A.
210
1494
 
211
- ## Titres et sections
1495
+ Les valeurs peuvent changer. La console affiche toujours les valeurs à utiliser : suis-les plutôt qu’une valeur copiée d’une ancienne page.
212
1496
 
213
- Commence les sections à `##`. Chaque titre reçoit une ancre (`#publier-avec-host`) : c’est elle que l’assistant cite dans ses sources. Un titre clair donne donc une source claire.
1497
+ ## Statuts
214
1498
 
215
- > **Astuce**
216
- >
217
- > Une section par question qu’on te pose. L’assistant découpe la doc par titre : une section courte et nommée simplement est retrouvée plus souvent.
1499
+ | Statut | Signification | Servi ? |
1500
+ | --------------------------- | ------------------------------------------------- | ------- |
1501
+ | **En attente des DNS** | Le TXT ou le trafic manque | Non |
1502
+ | **Vérifié** | Le TXT est là et le trafic arrive | Oui |
1503
+ | **Ne pointe pas vers nous** | Le TXT est là, mais le trafic n’arrive pas à Host | Non |
218
1504
 
219
- ## Liens
1505
+ Un domaine vérifié est revérifié chaque jour. Si le TXT disparaît, une seconde vérification a lieu une heure plus tard. Si elle échoue aussi, le domaine repasse en attente et n’est plus servi.
220
1506
 
221
- Les liens internes s’écrivent avec le chemin de la page : `[Publier](/guides/publier/)`. Pour une section : `[le domaine](/guides/publier/#ton-domaine)`.
1507
+ La vérification se relance toutes les 15 minutes tant que le domaine n’est pas vérifié. **Vérifier** la relance tout de suite.
222
1508
 
223
- ## Images
1509
+ ## Certificat HTTPS
224
1510
 
225
- Range les images dans `images/`, `img/`, `logo/`, `assets/` ou `static/`, et cite-les avec un chemin qui commence par `/`. Seuls les médias de ces dossiers, le logo et le favicon de `docs.json`, et tout le dossier `public/` (servi à la racine) sont publiés : un fichier oublié ailleurs dans le dépôt ne part jamais en ligne.
1511
+ Dès qu’un domaine est **Vérifié**, Host demande un certificat HTTPS. Le certificat affiche sa date d’échéance dans la console, et se renouvelle seul. Un certificat n’est émis que pour un domaine vérifié.
226
1512
 
227
- ```mdx
228
- ![Le tableau de bord](/images/tableau-de-bord.png)
229
- ```
1513
+ ## Usages
230
1514
 
231
- Pour une légende, entoure l’image d’un cadre :
1515
+ | Usage | Ce qui est servi |
1516
+ | ----------- | --------------------------------------------------------------------------------- |
1517
+ | Production | Le dernier déploiement de production prêt |
1518
+ | Branche | La dernière preview prête de la branche choisie, par exemple `staging.exemple.ch` |
1519
+ | Redirection | Un autre domaine du même projet, chemin conservé |
232
1520
 
233
- ```mdx
234
- <Frame caption="Le tableau de bord après la première publication">
235
- ![Le tableau de bord](/images/tableau-de-bord.png)
236
- </Frame>
237
- ```
1521
+ Une redirection vise un domaine du même projet qui sert un site. Une redirection ne peut pas pointer vers une autre redirection.
238
1522
 
239
- ## Code
1523
+ Pour un domaine racine, la case **Ajouter aussi [www](http://www).** crée `www` en redirection permanente vers le domaine racine.
240
1524
 
241
- Les blocs de code sont colorés et ont un bouton Copier. Indique le langage après les trois accents graves :
1525
+ ## Codes de redirection
242
1526
 
243
- ````mdx
244
- ```bash
245
- npm run build
1527
+ | Code | Type | Méthode conservée |
1528
+ | ----- | ----------------------- | ----------------- |
1529
+ | `308` | Permanente (par défaut) | Oui |
1530
+ | `301` | Permanente | Non |
1531
+ | `307` | Temporaire | Oui |
1532
+ | `302` | Temporaire | Non |
1533
+
1534
+ Préfère `308` ou `307` : elles conservent la méthode et le corps de la requête.
1535
+
1536
+ ## Propriété
1537
+
1538
+ - La preuve TXT l’emporte. Une revendication non prouvée par une autre organisation ne bloque pas le propriétaire réel : l’organisation qui pose le TXT obtient le domaine.
1539
+ - Deux TXT prouvés en même temps : le premier prouvé garde le domaine.
1540
+ - Les noms de la plateforme ne peuvent pas être ajoutés comme domaine client : Host répond « Ce domaine appartient à la plateforme. »
1541
+
1542
+ ## Limites
1543
+
1544
+ | Limite | Valeur |
1545
+ | ----------------------------------------- | ------------------------------------ |
1546
+ | Domaines par organisation | 50 |
1547
+ | Vérifications de domaine | 20 par minute, avec des rafales de 5 |
1548
+ | Revendications concurrentes d’un même nom | 10 au plus |
1549
+
1550
+ Voir [Limites](/docs/reference/limites/).
1551
+
1552
+ ## Propagation DNS
1553
+
1554
+ Un enregistrement neuf peut mettre de quelques minutes à quelques heures à apparaître. La vérification interroge des résolveurs DNS publics. Si aucun résolveur ne répond, le statut ne change pas.
1555
+
1556
+ ---
1557
+
1558
+ Source : /docs/reference/vercel-json/
1559
+
1560
+ # vercel.json
1561
+
1562
+ Host applique le routage de ton site comme Vercel. Pour un site statique sans build, il lit `vercel.json` à la racine du dossier envoyé. Pour un site construit avec `vercel build`, il lit `.vercel/output/config.json`. Les options décrites ici sont converties par la bibliothèque de routage de Vercel, avec les mêmes règles.
1563
+
1564
+ ## Options prises en charge
1565
+
1566
+ | Option | Effet |
1567
+ | --------------- | -------------------------------------------------------------------------- |
1568
+ | `cleanUrls` | Sert `/a-propos` pour `a-propos.html`, sans extension |
1569
+ | `trailingSlash` | Ajoute ou retire la barre oblique finale, par redirection |
1570
+ | `redirects` | Redirige un chemin vers un autre, avec le code 301, 302, 307 ou 308 |
1571
+ | `rewrites` | Sert un autre fichier, ou une URL externe, sans changer l’adresse affichée |
1572
+ | `headers` | Ajoute des en-têtes de réponse à certains chemins |
1573
+ | `routes` | Le format de routes historique de Vercel, pour les cas avancés |
1574
+
1575
+ Chaque liste (`redirects`, `rewrites`, `headers`, `routes`) accepte 1024 entrées au plus.
1576
+
1577
+ ## Exemple
1578
+
1579
+ ```json
1580
+ {
1581
+ "cleanUrls": true,
1582
+ "redirects": [
1583
+ { "source": "/blog/:slug", "destination": "/articles/:slug", "permanent": true }
1584
+ ],
1585
+ "headers": [
1586
+ {
1587
+ "source": "/assets/(.*)",
1588
+ "headers": [
1589
+ { "key": "Cache-Control", "value": "public, max-age=31536000, immutable" }
1590
+ ]
1591
+ }
1592
+ ]
1593
+ }
246
1594
  ```
247
- ````
248
1595
 
249
- ## Ce qui n’est pas publié
1596
+ ## Build Output API
1597
+
1598
+ Pour un site envoyé avec `vercel deploy --prebuilt`, Host lit `.vercel/output/config.json` (version 3) et sert le dossier `.vercel/output/static`. Les routes passent par les mêmes phases que chez Vercel : routes principales, système de fichiers, `miss`, `rewrite`, puis `error`.
1599
+
1600
+ Les conditions `has` et `missing` sont prises en compte. Elles portent sur l’hôte, un en-tête, un cookie ou un paramètre.
1601
+
1602
+ ## Ce qui est filtré
250
1603
 
251
- Les fichiers qui commencent par `_` (comme `_brouillon.mdx`), `README.md`, `CHANGELOG.md` et les dossiers `node_modules`, `dist` ou cachés ne deviennent pas des pages.
1604
+ - Les en-têtes `set-cookie` d’une route ne sont pas servis.
1605
+ - Les fichiers et dossiers qui commencent par un point (`.env`, `.git`) ne sont jamais servis. Seul `.well-known` fait exception.
1606
+ - Une expression régulière jugée dangereuse ou trop longue fait échouer la publication. Le message désigne la route en cause. Un exemple de motif dangereux : des quantificateurs imbriqués, comme `(a+)+`.
1607
+
1608
+ ## Pages introuvables
1609
+
1610
+ Un fichier `404.html` à la racine du site sert de page d’erreur. Sans lui, Host affiche sa propre page 404.
252
1611
 
253
1612
  ---
254
1613
 
255
- Source : /guides/composants/
1614
+ Source : /docs/reference/compatibilite/
1615
+
1616
+ # Compatibilité avec Vercel
1617
+
1618
+ Host implémente la partie de l’API Vercel qu’utilise la CLI pour relier un projet, récupérer ses variables, construire et déployer. La CLI officielle, version 63, est la référence de test.
1619
+
1620
+ Cette page dit ce qui marche aujourd’hui. Elle distingue trois états :
1621
+
1622
+ - **Pris en charge** : utilisable en production.
1623
+ - **En préversion** : utilisable, mais ouvert organisation par organisation. Une organisation qui n’en profite pas encore reçoit une réponse `501`.
1624
+ - **Pas encore** : absent de Host pour le moment.
1625
+
1626
+ ## Commandes de la CLI
1627
+
1628
+ | Commande | État |
1629
+ | ---------------------------------------------- | --------------------------------------------------------------------- |
1630
+ | `vercel deploy`, avec `--prod` et `--prebuilt` | Pris en charge |
1631
+ | `vercel build` | Pris en charge : télécharge les variables de l’environnement visé |
1632
+ | `vercel pull` | Pris en charge : réglages et variables |
1633
+ | `vercel link` | Pris en charge |
1634
+ | `vercel login` | Non : la connexion passe par la clé, dans `VERCEL_TOKEN` ou `--token` |
1635
+ | `vercel env` | Pas encore : gère les variables dans la console |
1636
+ | `vercel domains` | Pas encore : gère les domaines dans la console |
1637
+ | `vercel logs` | Pas encore : les logs sont dans la console |
1638
+ | `vercel env add` | Pas encore : ajoute les variables dans la console |
1639
+
1640
+ ## Fonctions de la plateforme
1641
+
1642
+ | Fonction | État |
1643
+ | ------------------------------------------------------ | ---------------------------------------------------------------------- |
1644
+ | Fichiers statiques, Build Output API v3 | Pris en charge |
1645
+ | Routage de `vercel.json` et de `config.json` | Pris en charge, voir [vercel.json](/docs/reference/vercel-json/) |
1646
+ | Pages pré-rendues de Next.js | Prises en charge |
1647
+ | Draft mode | Pris en charge |
1648
+ | Domaines, redirections, certificats | Pris en charge |
1649
+ | Réécritures vers une URL externe | Prises en charge |
1650
+ | Variables d’environnement, variables sensibles | Prises en charge |
1651
+ | Rendu à la demande (SSR), routes d’API, Server Actions | En préversion : fonctions Node, ouvertes organisation par organisation |
1652
+ | Proxy (ex-middleware) et middleware Node.js | En préversion |
1653
+ | Fonctions et middleware en runtime edge | En préversion |
1654
+ | ISR (régénération incrémentale) | En préversion : cache par serveur, vidé à son redémarrage |
1655
+ | Optimisation d’images | Pas encore : l’image d’origine est servie, sans redimensionnement |
1656
+ | Crons | En préversion : production seulement, avec `CRON_SECRET` |
1657
+
1658
+ Le détail du fonctionnement de la préversion est dans [Préversion et rendu à la demande](/docs/concepts/preversion/).
1659
+
1660
+ ## Frameworks
1661
+
1662
+ | Framework | Ce qui est servi | Commande de build |
1663
+ | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
1664
+ | Site statique (HTML, CSS, JS) | Le dossier tel quel | Aucune : `vercel deploy` |
1665
+ | Astro | Les pages générées, et en préversion le rendu à la demande, les routes d’API, le middleware et l’ISR | `vercel build` |
1666
+ | Vite (React, Vue, Svelte…) | Le build de l’application | `vercel build` |
1667
+ | SvelteKit | Les pages pré-rendues, et en préversion le rendu à la demande, les routes d’API, les actions de formulaire et l’ISR | `vercel build` |
1668
+ | Nuxt | Les pages générées, et en préversion le rendu à la demande, les routes d’API, le middleware serveur et l’ISR | `vercel build` |
1669
+ | TanStack Start | Les pages pré-rendues | `vercel build` |
1670
+ | React Router | Les pages pré-rendues | `vercel build` |
1671
+ | Next.js | Les pages pré-rendues et leur navigation, et en préversion le rendu à la demande, les routes d’API, le proxy, l’ISR et les routes en runtime edge | `vercel build` |
1672
+ | Documentation `@hgdc/docs` | Le site de documentation, chaque page en Markdown (`.md`), `llms.txt` et le corpus de l’assistant | `hgdc-docs build` |
1673
+
1674
+ Pour tout framework, la séquence est la même : construis, puis envoie le résultat avec `--prebuilt`. Voir [Déployer un framework](/docs/guides/deployer-un-framework/).
1675
+
1676
+ ## Ce que cette page ne couvre pas
1677
+
1678
+ - Ce qui n’est pas listé ici n’est pas garanti. Ne suppose pas qu’une fonctionnalité de Vercel marche sur Host sans l’avoir testée.
1679
+ - Les limites chiffrées, comme la taille des fichiers ou les débits, sont sur [Limites](/docs/reference/limites/).
256
1680
 
257
- # Composants
1681
+ ---
258
1682
 
259
- Ces composants s’utilisent directement dans une page `.mdx`, sans `import`. Ils portent les mêmes noms que chez Mintlify.
1683
+ Source : /docs/reference/limites/
260
1684
 
261
- ## Encadrés
1685
+ # Limites
262
1686
 
263
- > **Note**
264
- >
265
- > Une information utile à côté du texte.
1687
+ Ces limites protègent la plateforme et les autres organisations. Une requête qui dépasse une limite de débit reçoit `429` avec le code `rate_limited`. Attends quelques secondes, puis réessaie.
266
1688
 
267
- > **Astuce**
268
- >
269
- > Un conseil qui fait gagner du temps.
1689
+ Besoin d’une limite plus haute ? Écris à <support@hgdc.ch>.
270
1690
 
271
- > **Attention**
272
- >
273
- > Un piège à éviter.
1691
+ ## Déploiements et fichiers
274
1692
 
275
- > **Danger**
276
- >
277
- > Une action qui détruit des données.
1693
+ | Limite | Valeur |
1694
+ | ---------------------------------------------------------- | ------------------------------------------------------------ |
1695
+ | Taille d’un fichier | 20 Mo |
1696
+ | Fichiers inclus directement dans la requête de déploiement | 20 Mo au total. Au-delà, envoie les fichiers par `/v2/files` |
1697
+ | Fichiers par déploiement | 15 000 |
1698
+ | Déploiements par organisation | 60 par heure, avec des rafales de 10 |
1699
+ | Suivi de la publication par la CLI | 9 minutes au plus par connexion |
278
1700
 
279
- ```mdx
280
- <Note>Une information utile à côté du texte.</Note>
281
- <Tip title="Astuce">Un conseil qui fait gagner du temps.</Tip>
282
- <Warning>Un piège à éviter.</Warning>
283
- <Danger>Une action qui détruit des données.</Danger>
284
- ```
1701
+ ## Fonctions (préversion)
285
1702
 
286
- `<Info>` et `<Check>` existent aussi. Chacun accepte un `title`.
1703
+ | Limite | Valeur |
1704
+ | ---------------------------------------- | ------------------------------------------------------- |
1705
+ | Mémoire par fonction | 512 Mo par défaut, 1 Go au plus |
1706
+ | Durée par requête | 30 secondes par défaut, 60 secondes au plus |
1707
+ | Première requête après une période calme | Quelques secondes, le temps de démarrer l’environnement |
287
1708
 
288
- ## Étapes
1709
+ La durée peut être réglée par fonction avec `maxDuration`, dans la limite de 60 secondes. Voir [Préversion](/docs/concepts/preversion/).
289
1710
 
290
- 1. **Installer**
1711
+ ## API
291
1712
 
292
- Ajoute le paquet.
1713
+ | Limite | Valeur | Compté par |
1714
+ | ------------------------------- | ------------------------------------------- | ------------ |
1715
+ | Requêtes à l’API | 600 par minute, avec des rafales de 120 | Clé d’API |
1716
+ | Envoi de fichiers (`/v2/files`) | 6 000 par minute, avec des rafales de 3 000 | Clé d’API |
1717
+ | Vérifications de domaine | 20 par minute, avec des rafales de 5 | Organisation |
293
1718
 
294
- 2. **Configurer**
1719
+ Les rafales sont le nombre de requêtes acceptées d’un coup, avant que la limite par minute ne s’applique.
295
1720
 
296
- Écris `docs.json`.
1721
+ ## Projets, domaines et variables
297
1722
 
298
- ```mdx
299
- <Steps>
300
- <Step title="Installer">Ajoute le paquet.</Step>
301
- <Step title="Configurer">Écris `docs.json`.</Step>
302
- </Steps>
303
- ```
1723
+ | Limite | Valeur |
1724
+ | --------------------------------------------------------------------------------- | -------------- |
1725
+ | Domaines par organisation | 50 |
1726
+ | Nom d’une variable | 256 caractères |
1727
+ | Valeur d’une variable | 64 Ko |
1728
+ | Note d’une variable | 500 caractères |
1729
+ | Variables synchronisées par configuration Doppler | 300 |
1730
+ | Entrées par liste de `vercel.json` (`redirects`, `rewrites`, `headers`, `routes`) | 1024 |
304
1731
 
305
- ## Cartes
1732
+ ## Journaux
306
1733
 
307
- [Avec un lien](/guides/publier/)
1734
+ | Limite | Valeur |
1735
+ | ------------------------------------ | ------------------------- |
1736
+ | Conservation des logs des requêtes | 3 jours |
1737
+ | Lignes de logs de requêtes affichées | 1000 au plus |
1738
+ | Conservation des logs de build | Tant que le projet existe |
308
1739
 
309
- [Toute la carte est cliquable.](/guides/publier/)
1740
+ Les minutes de GitHub Actions dépendent de ton compte GitHub, pas de Host.
310
1741
 
311
- Sans lien
1742
+ ---
312
1743
 
313
- Pour présenter une idée.
1744
+ Source : /docs/reference/api/introduction/
314
1745
 
315
- ```mdx
316
- <CardGroup cols={2}>
317
- <Card title="Avec un lien" href="/guides/publier/">Toute la carte est cliquable.</Card>
318
- <Card title="Sans lien">Pour présenter une idée.</Card>
319
- </CardGroup>
320
- ```
1746
+ # Introduction à l'API
321
1747
 
322
- `cols` va de 1 à 4. Sur téléphone, les cartes passent l’une sous l’autre.
1748
+ L’API de Host reprend le sous-ensemble de l’API Vercel qu’utilise la CLI pour relier un dossier, construire et déployer. Elle accepte du JSON, renvoie du JSON, et s’authentifie par une clé d’API.
323
1749
 
324
- ## Onglets
1750
+ Utilise l’API si tu écris ton propre outil. Pour déployer depuis un poste ou une CI, la [CLI](/docs/reference/cli/) suffit.
325
1751
 
326
- ```bash
327
- npm install --save-dev @hgdc/docs
328
- ```
1752
+ ## Adresse de base
329
1753
 
330
- ```bash
331
- bun add --dev @hgdc/docs
1754
+ ```text
1755
+ https://api.host.hgdc.ch
332
1756
  ```
333
1757
 
334
- ```mdx
335
- <Tabs>
336
- <Tab title="npm">…</Tab>
337
- <Tab title="Bun">…</Tab>
338
- </Tabs>
339
- ```
1758
+ Toutes les requêtes passent en HTTPS.
1759
+
1760
+ ## Authentification
340
1761
 
341
- ## Accordéons
1762
+ Envoie ta clé dans l’en-tête `Authorization`. Les clés commencent par `ah_` et se créent dans l’onglet **Clés d’API** de l’organisation. Voir [Créer et révoquer une clé d’API](/docs/guides/cle-d-api/).
342
1763
 
343
- Faut-il un compte HGDC pour écrire ?
1764
+ ```http
1765
+ Authorization: Bearer ah_…
1766
+ ```
344
1767
 
345
- Non. Le site se construit sans compte. Le compte sert à la console : publication suivie et assistant.
1768
+ ```bash
1769
+ curl https://api.host.hgdc.ch/v2/user \
1770
+ -H "Authorization: Bearer $VERCEL_TOKEN"
1771
+ ```
346
1772
 
347
- Puis-je garder mes composants Mintlify ?
1773
+ Il existe deux sortes de clés :
348
1774
 
349
- Ceux de cette page, oui. Les autres s’affichent comme du texte : remplace-les ou écris-nous.
1775
+ | Clé | Portée | Variables sensibles |
1776
+ | --------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------ |
1777
+ | Clé d’organisation, créée par un admin ou un propriétaire | Tous les projets de l’organisation, création de projets comprise | Jamais renvoyées |
1778
+ | Clé de projet, posée par l’app GitHub dans le dépôt | Ce seul projet. Tout autre projet répond `404` | Renvoyées, pour le build |
350
1779
 
351
- ```mdx
352
- <AccordionGroup>
353
- <Accordion title="Question">Réponse.</Accordion>
354
- </AccordionGroup>
355
- ```
1780
+ > **Attention**
1781
+ >
1782
+ > Une clé donne accès aux variables d’environnement de tes projets. Garde-la dans un gestionnaire de secrets, jamais dans le code ni dans le navigateur.
356
1783
 
357
- ## Dans le Markdown publié
1784
+ ## L’organisation vient de la clé
358
1785
 
359
- Chaque composant a une forme Markdown : un encadré devient une citation qui commence par son titre en gras, une étape devient un élément de liste numérotée. C’est cette forme que lisent l’assistant, `llms.txt` et les outils d’IA.
1786
+ Chaque clé appartient à une organisation, et chaque requête s’exécute dans cette organisation. Un identifiant d’organisation dans l’URL, ou un paramètre `teamId` ou `slug`, que la CLI ajoute parfois, est ignoré.
360
1787
 
361
- ---
1788
+ ## Versions dans le chemin
362
1789
 
363
- Source : /guides/navigation/
1790
+ Les chemins gardent les numéros de version de l’API Vercel, comme `/v2`, `/v9` ou `/v13`, pour que la CLI fonctionne sans modification. Plusieurs versions d’un même endpoint renvoient la même réponse : `/v9/projects` et `/v10/projects` par exemple.
364
1791
 
365
- # Navigation, onglets et versions
1792
+ ## Pagination
366
1793
 
367
- La navigation se décrit dans `docs.json`, sous `navigation`. Choisis **une** forme : `pages`, `groups`, `tabs` ou `versions`.
1794
+ Les listes ne sont pas paginées. Elles renvoient un objet `pagination` pour la compatibilité, avec `next` toujours à `null`.
368
1795
 
369
- ## Pages et groupes
1796
+ ## Limites de débit
370
1797
 
371
- Pour une petite doc, une liste de groupes suffit. Un groupe peut contenir d’autres groupes.
1798
+ Chaque clé dispose de 600 requêtes par minute, avec des rafales de 120. L’envoi de fichiers a son propre budget : 6 000 par minute, avec des rafales de 3 000.
1799
+
1800
+ Au-delà, l’API répond `429` avec le code `rate_limited` :
372
1801
 
373
1802
  ```json
374
1803
  {
375
- "navigation": {
376
- "groups": [
377
- { "group": "Démarrer", "pages": ["index", "installation"] },
378
- {
379
- "group": "Guides",
380
- "pages": ["guides/facturer", { "group": "Avancé", "expanded": false, "pages": ["guides/webhooks"] }]
381
- }
382
- ]
1804
+ "error": {
1805
+ "code": "rate_limited",
1806
+ "message": "Trop de requêtes, réessaie dans un instant."
383
1807
  }
384
1808
  }
385
1809
  ```
386
1810
 
387
- Une page s’écrit sans extension ni `/` au début : `guides/facturer` pour `guides/facturer.mdx`. Une page citée mais absente fait échouer le build, avec la liste de ce qui manque.
1811
+ La réponse porte un en-tête `retry-after` quand l’attente est connue. La création de déploiements est aussi limitée par organisation : voir [Limites](/docs/reference/limites/).
1812
+
1813
+ ## Endpoints
1814
+
1815
+ | Méthode | Chemin | Rôle |
1816
+ | ------- | ----------------------------------------------------------------- | ------------------------------------- |
1817
+ | `GET` | [`/v2/user`](/docs/reference/api/utilisateur/) | Personne qui a créé la clé |
1818
+ | `GET` | [`/v2/teams`](/docs/reference/api/utilisateur/) | Organisation de la clé |
1819
+ | `GET` | [`/v2/teams/:idOrSlug`](/docs/reference/api/utilisateur/) | Lire l’organisation |
1820
+ | `GET` | [`/v9/projects`](/docs/reference/api/projets/) | Lister les projets |
1821
+ | `GET` | [`/v9/projects/:idOrName`](/docs/reference/api/projets/) | Lire un projet |
1822
+ | `POST` | [`/v11/projects`](/docs/reference/api/projets/) | Créer un projet |
1823
+ | `POST` | [`/v2/files`](/docs/reference/api/fichiers/) | Envoyer un fichier |
1824
+ | `POST` | [`/v13/deployments`](/docs/reference/api/deploiements/) | Créer un déploiement |
1825
+ | `GET` | [`/v13/deployments/:id`](/docs/reference/api/deploiements/) | Lire un déploiement |
1826
+ | `GET` | [`/v3/deployments/:id/events`](/docs/reference/api/deploiements/) | Suivre les logs |
1827
+ | `GET` | [`/v3/env/pull/:project/:target`](/docs/reference/api/variables/) | Lire les variables d’un environnement |
1828
+
1829
+ Les erreurs et leurs codes sont sur [Erreurs](/docs/reference/api/erreurs/).
1830
+
1831
+ ---
1832
+
1833
+ Source : /docs/reference/api/erreurs/
388
1834
 
389
- ## Onglets
1835
+ # Erreurs de l'API
390
1836
 
391
- Au-delà d’une vingtaine de pages, sépare les grandes parties en onglets : guides, référence, explications. Les onglets s’affichent en haut de la barre latérale ; chacun a ses propres groupes.
1837
+ Une erreur répond avec un statut HTTP `4xx` ou `5xx`, et un objet `error`. Le champ `code` est stable : teste-le dans ton code. Le champ `message` est en français et s’affiche à une personne.
392
1838
 
393
1839
  ```json
394
1840
  {
395
- "navigation": {
396
- "tabs": [
397
- { "tab": "Guides", "groups": [{ "group": "Démarrer", "pages": ["index"] }] },
398
- { "tab": "Référence", "groups": [{ "group": "API", "pages": ["reference/api"] }] }
399
- ]
1841
+ "error": {
1842
+ "code": "not_found",
1843
+ "message": "Projet introuvable."
400
1844
  }
401
1845
  }
402
1846
  ```
403
1847
 
404
- > **Astuce**
405
- >
406
- > Cette doc suit le découpage Diataxis : des guides pour faire, une référence pour vérifier, des explications pour comprendre.
1848
+ ## Codes
1849
+
1850
+ | Statut | Code | Cause | Que faire |
1851
+ | ------ | ----------------------- | -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
1852
+ | `400` | `bad_request` | Corps ou paramètre invalide. Le message nomme le champ en cause | Corrige la requête |
1853
+ | `400` | `missing_files` | Des fichiers du déploiement ne sont pas encore envoyés. La réponse liste leurs empreintes dans `missing` | Envoie-les par [`/v2/files`](/docs/reference/api/fichiers/), puis recrée le déploiement |
1854
+ | `400` | `invalid_digest` | Le contenu envoyé ne correspond pas à l’empreinte annoncée | Recalcule le SHA1 du fichier |
1855
+ | `403` | `forbidden` | Clé absente, inconnue ou révoquée. Ou clé de projet utilisée pour un autre projet | Vérifie la clé et sa portée |
1856
+ | `404` | `not_found` | Ressource introuvable, ou hors de la portée de la clé | Vérifie l’identifiant ou le nom |
1857
+ | `409` | `conflict` | Un projet porte déjà ce nom | Choisis un autre nom, ou utilise le projet existant |
1858
+ | `409` | `deployment_closed` | Le déploiement a été annulé ou a échoué : rien n’est publié | Crée un nouveau déploiement |
1859
+ | `413` | `file_too_large` | Un fichier dépasse 20 Mo | Allège le fichier, ou sers-le autrement |
1860
+ | `413` | `payload_too_large` | Les fichiers inclus dans le corps dépassent 20 Mo au total | Envoie-les par [`/v2/files`](/docs/reference/api/fichiers/) |
1861
+ | `429` | `rate_limited` | Trop de requêtes pour cette clé | Attends un instant, puis réessaie |
1862
+ | `500` | `internal_server_error` | Erreur de la plateforme. Elle est signalée automatiquement | Réessaie. Si elle persiste, écris à <support@hgdc.ch> |
407
1863
 
408
- ## Versions
1864
+ Toutes les routes peuvent répondre `403 forbidden`, `429 rate_limited` et `500 internal_server_error`.
409
1865
 
410
- Quand ton produit garde plusieurs versions en service, chacune peut avoir sa doc. Le visiteur passe de l’une à l’autre avec un menu en haut de la barre latérale.
1866
+ Le message d’une erreur `500` ne donne jamais de détail technique. Ne compte pas sur son texte, seulement sur son code.
1867
+
1868
+ ## Le cas de missing_files
1869
+
1870
+ `missing_files` n’est pas une panne : c’est l’étape normale d’un déploiement. La CLI la traite toute seule. Si tu écris ton propre client, voici la réponse :
411
1871
 
412
1872
  ```json
413
1873
  {
414
- "navigation": {
415
- "versions": [
416
- { "version": "v2", "default": true, "groups": [{ "group": "Démarrer", "pages": ["index"] }] },
417
- { "version": "v1", "groups": [{ "group": "Démarrer", "pages": ["v1/index"] }] }
1874
+ "error": {
1875
+ "code": "missing_files",
1876
+ "message": "Fichiers à envoyer avant de créer le déploiement.",
1877
+ "missing": [
1878
+ "2ef7bde608ce5404e97d5f042f95f89f1c232871"
418
1879
  ]
419
1880
  }
420
1881
  }
421
1882
  ```
422
1883
 
423
- La version par défaut est celle que lisent l’assistant en priorité et l’index `llms.txt`. Les autres y figurent dans une section « Optional ».
1884
+ Envoie chaque fichier listé, puis renvoie exactement la même requête de [création de déploiement](/docs/reference/api/deploiements/).
424
1885
 
425
- ## Précédent et suivant
1886
+ ---
426
1887
 
427
- En bas de chaque page, les liens Précédent et Suivant suivent l’ordre de la navigation, sans sortir de l’onglet ouvert.
1888
+ Source : /docs/reference/api/utilisateur/
428
1889
 
429
- ---
1890
+ # Lire le propriétaire de la clé et l'organisation
430
1891
 
431
- Source : /guides/theme/
1892
+ Ces trois endpoints disent qui utilise la clé, et dans quelle organisation elle travaille. La CLI les appelle au premier contact.
432
1893
 
433
- # Thème et logo
1894
+ ## GET `/v2/user`
434
1895
 
435
- Le site suit la DA de HGDC par défaut : gris neutres, coins arrondis, Inter pour le texte. Tu changes trois choses : la couleur, le logo et le favicon.
1896
+ Renvoie la personne qui a créé la clé.
436
1897
 
437
- ## Couleur
1898
+ ```bash
1899
+ curl https://api.host.hgdc.ch/v2/user \
1900
+ -H "Authorization: Bearer $VERCEL_TOKEN"
1901
+ ```
1902
+
1903
+ Réponse `200` :
438
1904
 
439
1905
  ```json
440
- { "colors": { "primary": "#0f766e" } }
1906
+ {
1907
+ "user": {
1908
+ "id": "u1a2b3c4d5",
1909
+ "uid": "u1a2b3c4d5",
1910
+ "email": "camille@atelier.ch",
1911
+ "name": "Camille Rochat",
1912
+ "username": "atelier",
1913
+ "defaultTeamId": "k57a1b2c3d4e5f6g7h8j9k0m1n",
1914
+ "version": "northstar"
1915
+ }
1916
+ }
441
1917
  ```
442
1918
 
443
- La couleur sert aux liens, à l’onglet actif et aux renvois de l’assistant. Sa teinte est gardée ; sa luminosité est ajustée pour que les liens restent lisibles (contraste de 4,5:1 au moins), en clair comme en sombre.
1919
+ | Champ | Type | Description |
1920
+ | -------------------- | -------- | --------------------------------------------------------------------------- |
1921
+ | `user.id` | `string` | Identifiant de la personne. `uid` porte la même valeur |
1922
+ | `user.email` | `string` | Adresse e-mail de la personne, tant qu’elle est membre de l’organisation |
1923
+ | `user.name` | `string` | Nom affiché de la personne. À défaut, l’adresse e-mail |
1924
+ | `user.username` | `string` | Slug de l’organisation de la clé |
1925
+ | `user.defaultTeamId` | `string` | Identifiant de l’organisation de la clé. C’est la valeur de `VERCEL_ORG_ID` |
1926
+ | `user.version` | `string` | Valeur fixe : `northstar` |
444
1927
 
445
- Pour une couleur différente en mode sombre, ajoute `"dark": "#5eead4"`.
1928
+ Erreurs : `403 forbidden` si l’organisation de la clé n’existe plus.
446
1929
 
447
- > **Note**
448
- >
449
- > Dans la console, **Réglages › Thème** montre l’effet d’une couleur en clair et en sombre, son contraste sur un fond blanc, et prépare la ligne à copier dans `docs.json`.
1930
+ ## GET `/v2/teams`
450
1931
 
451
- ## Logo
1932
+ Renvoie l’organisation de la clé. La liste ne contient jamais qu’une seule organisation : une clé n’ouvre qu’une organisation.
1933
+
1934
+ ```bash
1935
+ curl https://api.host.hgdc.ch/v2/teams \
1936
+ -H "Authorization: Bearer $VERCEL_TOKEN"
1937
+ ```
1938
+
1939
+ Réponse `200` :
452
1940
 
453
1941
  ```json
454
- { "logo": { "light": "/images/logo-clair.svg", "dark": "/images/logo-sombre.svg" } }
1942
+ {
1943
+ "teams": [
1944
+ {
1945
+ "id": "k57a1b2c3d4e5f6g7h8j9k0m1n",
1946
+ "slug": "atelier",
1947
+ "name": "Atelier Rochat",
1948
+ "avatar": null,
1949
+ "membership": { "role": "OWNER" }
1950
+ }
1951
+ ],
1952
+ "pagination": { "count": 1, "next": null, "prev": null }
1953
+ }
455
1954
  ```
456
1955
 
457
- Le chemin part de la racine du dossier de la doc. Un SVG carré ou large, de 32 pixels de haut environ, rend le mieux. Une seule image : `"logo": "/images/logo.svg"`.
1956
+ > **Note**
1957
+ >
1958
+ > `membership.role` vaut toujours `OWNER` pour la CLI, quel que soit le rôle réel de la personne. Les vrais rôles se gèrent dans Account, voir [Organisations et rôles](/docs/concepts/organisations-et-roles/).
1959
+
1960
+ ## GET `/v2/teams/:idOrSlug`
458
1961
 
459
- ## Favicon
1962
+ Renvoie l’organisation seule, sans liste. Le paramètre est l’identifiant ou le slug de l’organisation de la clé.
460
1963
 
461
- ```json
462
- { "favicon": "/images/favicon.svg" }
1964
+ ```bash
1965
+ curl https://api.host.hgdc.ch/v2/teams/atelier \
1966
+ -H "Authorization: Bearer $VERCEL_TOKEN"
463
1967
  ```
464
1968
 
465
- Sans favicon, le site n’en annonce pas d’autre que `/favicon.svg` s’il existe.
1969
+ Toute autre organisation répond `404 not_found`. Les deux routes répondent aussi sous `/v1`.
466
1970
 
467
- ---
1971
+ ## Erreurs
1972
+
1973
+ | Statut | Code | Cause |
1974
+ | ------ | ----------- | ------------------------------------------------------------------------------ |
1975
+ | `403` | `forbidden` | Pour `/v2/user` : l’organisation de la clé n’existe plus |
1976
+ | `404` | `not_found` | Pour `/v2/teams/:idOrSlug` : l’organisation demandée n’est pas celle de la clé |
468
1977
 
469
- Source : /guides/assistant/
1978
+ Voir la liste complète sur [Erreurs](/docs/reference/api/erreurs/).
470
1979
 
471
- # L'assistant IA
1980
+ ---
472
1981
 
473
- L’assistant ajoute un bouton **Demander à l’IA** en bas à droite de chaque page, et `Ctrl I` l’ouvre au clavier. Le visiteur pose sa question ; l’assistant cherche dans ta doc et répond en quelques phrases, avec des renvois numérotés vers les sections utilisées.
1982
+ Source : /docs/reference/api/projets/
474
1983
 
475
- ## D’où viennent les réponses
1984
+ # Projets
476
1985
 
477
- 1. La question est cherchée dans les pages publiées de ta doc, et seulement là.
478
- 2. Les passages les plus proches sont donnés au modèle Claude, avec une consigne : répondre à partir de ces passages, citer chaque affirmation, ne rien inventer.
479
- 3. Seuls les passages réellement cités deviennent des sources sous la réponse.
1986
+ Un projet correspond à un site. Il a ses variables, ses domaines et son historique de déploiements.
480
1987
 
481
- Si rien dans la doc ne correspond, l’assistant répond qu’il ne trouve pas, sans appeler le modèle. Une réponse sans aucune source est traitée de la même façon.
1988
+ ## GET `/v9/projects`
482
1989
 
483
- > **Les réponses restent générées par IA**
484
- >
485
- > Le widget le rappelle sous chaque échange. Une source citée se vérifie en un clic.
1990
+ Liste les projets de l’organisation. Avec une clé de projet, la liste ne contient que ce projet. La liste compte 100 projets au plus.
486
1991
 
487
- ## Activer et désactiver
1992
+ ```bash
1993
+ curl https://api.host.hgdc.ch/v9/projects \
1994
+ -H "Authorization: Bearer $VERCEL_TOKEN"
1995
+ ```
488
1996
 
489
- L’assistant est actif dès que `docs.json` porte l’identifiant `project` et que la console a indexé le site. Pour le couper :
1997
+ Réponse `200` :
1998
+
1999
+ ```json
2000
+ {
2001
+ "projects": [
2002
+ {
2003
+ "id": "j97d3k2m8x1q4p6s7t9v0w2y5z",
2004
+ "name": "site-atelier",
2005
+ "accountId": "k57a1b2c3d4e5f6g7h8j9k0m1n",
2006
+ "framework": "astro",
2007
+ "rootDirectory": null,
2008
+ "buildCommand": null,
2009
+ "installCommand": null,
2010
+ "outputDirectory": null,
2011
+ "nodeVersion": "24.x",
2012
+ "createdAt": 1760259600000,
2013
+ "updatedAt": 1760259600000
2014
+ }
2015
+ ],
2016
+ "pagination": { "count": 1, "next": null, "prev": null }
2017
+ }
2018
+ ```
490
2019
 
491
- - dans la console, **Assistant › Assistant sur le site** (effet immédiat) ;
492
- - ou dans `docs.json`, `"assistant": { "enabled": false }` (au prochain build).
2020
+ Le même endpoint répond aussi sous `/v10/projects`.
493
2021
 
494
- ## Quota
2022
+ ## GET `/v9/projects/:idOrName`
495
2023
 
496
- Chaque organisation dispose d’un nombre de questions par mois, toutes docs confondues : 500 dans l’offre de départ. La console affiche la consommation. Au-delà, l’assistant répond qu’il a atteint sa limite, et HGDC relève le plafond sur demande.
2024
+ Lit un projet, par son identifiant ou son nom, sans tenir compte de la casse.
497
2025
 
498
- Pour éviter qu’un seul visiteur ou un script épuise le quota, chaque visiteur a droit à 6 questions par minute et 40 par jour, et chaque doc à 30 par minute et 200 par jour. HGDC relève le plafond journalier d’une doc sur demande.
2026
+ ```bash
2027
+ curl https://api.host.hgdc.ch/v9/projects/site-atelier \
2028
+ -H "Authorization: Bearer $VERCEL_TOKEN"
2029
+ ```
499
2030
 
500
- ## Tester et lire le journal
2031
+ Réponse `200` : l’objet projet, décrit ci-dessous. Les routes `/v9` et `/v10` renvoient la même réponse.
501
2032
 
502
- En haut de la page **Assistant**, les 30 derniers jours : nombre de questions, part de réponses sourcées, et les **questions sans réponse**, regroupées et classées de la plus posée à la moins posée. Chacune ouvre le journal filtré : c’est la liste des pages à écrire.
2033
+ | Erreur | Code | Cause |
2034
+ | ------ | ----------- | --------------------------------------------------------------------------------- |
2035
+ | `404` | `not_found` | Aucun projet de ce nom dans l’organisation, ou projet hors de la portée de la clé |
503
2036
 
504
- **Assistant › Tester l’assistant** pose une question comme un visiteur. Le **journal** garde les questions des 90 derniers jours avec leur état :
2037
+ ## POST `/v11/projects`
505
2038
 
506
- | État | Ce que ça veut dire |
507
- | -------- | ----------------------------------------------------------------- |
508
- | Répondu | L’assistant a répondu en citant la doc. |
509
- | Hors doc | Rien dans la doc ne répond. Souvent une page à écrire. |
510
- | Erreur | Le modèle n’a pas répondu ; le visiteur a été invité à réessayer. |
2039
+ Crée un projet. Tu peux aussi t’en passer : le premier déploiement sur un nom inconnu crée le projet.
511
2040
 
512
- Au-dessus du journal, cherche une question par ses mots, ou filtre par état : **État › Hors doc** ne garde que les questions sans réponse. Les filtres restent dans l’adresse de la page : tu peux la garder en favori ou l’envoyer à un collègue.
2041
+ ```bash
2042
+ curl -X POST https://api.host.hgdc.ch/v11/projects \
2043
+ -H "Authorization: Bearer $VERCEL_TOKEN" \
2044
+ -H "Content-Type: application/json" \
2045
+ -d '{"name":"site-atelier","framework":"astro"}'
2046
+ ```
513
2047
 
514
- > **Astuce**
515
- >
516
- > Lis les questions « hors doc » une fois par semaine : c’est la liste des pages qui manquent, écrite par tes visiteurs.
2048
+ | Champ | Type | Requis | Description |
2049
+ | ----------- | ------------------ | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
2050
+ | `name` | `string` | Oui | Nom du projet, 100 caractères au plus. Il devient le nom dans l’URL, en minuscules |
2051
+ | `framework` | `string` ou `null` | Non | `nextjs`, `astro`, `vite`, `sveltekit`, `nuxt`, `tanstack-start` ou `react-router`. Une autre valeur, ou `null`, enregistre un site sans framework |
2052
+
2053
+ Réponse `200` : l’objet projet créé.
2054
+
2055
+ | Erreur | Code | Cause |
2056
+ | ------ | ------------- | -------------------------------------------------- |
2057
+ | `400` | `bad_request` | Nom absent ou trop long |
2058
+ | `403` | `forbidden` | La clé est limitée à un projet : elle ne crée rien |
2059
+ | `409` | `conflict` | Un projet porte déjà ce nom |
2060
+
2061
+ ## L’objet projet
2062
+
2063
+ | Champ | Type | Description |
2064
+ | -------------------- | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
2065
+ | `id` | `string` | Identifiant du projet. C’est la valeur de `VERCEL_PROJECT_ID` |
2066
+ | `name` | `string` | Nom du projet, dans l’URL de la console |
2067
+ | `accountId` | `string` | Identifiant de l’organisation propriétaire |
2068
+ | `framework` | `string` ou `null` | Framework enregistré, ou `null` pour un site sans framework |
2069
+ | `rootDirectory` | `string` ou `null` | Dossier de l’app dans le dépôt, pour un monorepo |
2070
+ | `buildCommand` | `string` ou `null` | Commande de build imposée. `null` : celle détectée par `vercel build` |
2071
+ | `installCommand` | `string` ou `null` | Commande d’installation imposée |
2072
+ | `outputDirectory` | `string` ou `null` | Dossier de sortie imposé |
2073
+ | `nodeVersion` | `"22.x"` ou `"24.x"` | Version de Node.js du build |
2074
+ | `createdAt` | `number` | Date de création, en millisecondes depuis l’époque Unix |
2075
+ | `updatedAt` | `number` | Même valeur que `createdAt` |
2076
+ | `link` | `object` | Présent seulement pour un projet relié à GitHub : `type` (`github`), `repo` (`propriétaire/dépôt`) et `productionBranch` |
2077
+ | `alias` | `object[]` | Adresse de production du projet : `domain` (`<projet>.hgdc.cloud`), `target` (`PRODUCTION`), `environment` (`production`), `createdAt`, `deployment` (`null`). Les domaines personnalisés n’y figurent pas |
2078
+ | `targets.production` | `object` | Présent une fois une production en ligne : le déploiement servi, avec `id`, `url`, `alias` (`["<projet>.hgdc.cloud"]`), `aliasAssigned` (moment de la mise en ligne), `readyState`, `createdAt`, `readyAt` et `meta`. `targets` vaut `{}` avant la première production |
2079
+
2080
+ Pour un projet dont le framework n’est pas reconnu, `framework` vaut `null`.
2081
+
2082
+ ## Voir aussi
2083
+
2084
+ - [Déploiements](/docs/reference/api/deploiements/) : créer un déploiement pour ce projet.
2085
+ - [Erreurs](/docs/reference/api/erreurs/) : la liste des codes.
517
2086
 
518
2087
  ---
519
2088
 
520
- Source : /guides/agents/
2089
+ Source : /docs/reference/api/deploiements/
2090
+
2091
+ # Déploiements
2092
+
2093
+ Un déploiement est une version figée de ton site, avec sa propre adresse. Créer un déploiement est l’appel central de `vercel deploy`.
2094
+
2095
+ ## Déroulement d’une création
521
2096
 
522
- # llms.txt et MCP
2097
+ 1. Envoie la liste des fichiers avec leur empreinte SHA1.
2098
+ 2. Si des fichiers manquent, l’API répond `400 missing_files`, avec leurs empreintes dans `missing`. Envoie-les par [`/v2/files`](/docs/reference/api/fichiers/).
2099
+ 3. Renvoie exactement la même requête. Elle crée le déploiement.
523
2100
 
524
- Les assistants de code et les agents lisent la documentation pour écrire du code juste. Docs leur donne trois portes d’entrée, sans rien à configurer.
2101
+ Les petits fichiers peuvent aussi être inclus directement dans le corps, dans le champ `data`, sans passer par `/v2/files`. La limite de 20 Mo vaut alors pour l’ensemble des fichiers inclus.
525
2102
 
526
- ## llms.txt
2103
+ ## POST `/v13/deployments`
527
2104
 
528
- Chaque site publie à sa racine :
2105
+ ```bash
2106
+ curl -X POST https://api.host.hgdc.ch/v13/deployments \
2107
+ -H "Authorization: Bearer $VERCEL_TOKEN" \
2108
+ -H "Content-Type: application/json" \
2109
+ -d '{
2110
+ "name": "site-atelier",
2111
+ "target": "production",
2112
+ "files": [
2113
+ { "file": "index.html", "data": "<h1>Bonjour</h1>" }
2114
+ ]
2115
+ }'
2116
+ ```
529
2117
 
530
- - `/llms.txt` : l’index de la doc au format [llmstxt.org](https://llmstxt.org), une ligne par page avec sa description, rangées par onglet et par groupe. Le même fichier répond aussi sur `/.well-known/llms.txt`.
531
- - `/llms-full.txt` : toute la doc en un seul fichier Markdown.
2118
+ ### Corps
532
2119
 
533
- ## Une page en Markdown
2120
+ | Champ | Type | Requis | Description |
2121
+ | --------------------------- | ------------------------ | ----------------------- | -------------------------------------------------------------------------------------------------------------------------- |
2122
+ | `name` | `string` | Si `project` est absent | Nom du projet. Le projet est créé s’il n’existe pas |
2123
+ | `project` | `string` | Non | Identifiant ou nom du projet. Prioritaire sur `name` |
2124
+ | `target` | `"production"` ou `null` | Non | `production` pour la production. Toute autre valeur crée une preview |
2125
+ | `files` | `object[]` | Oui | Fichiers du déploiement, 15 000 au plus. Voir ci-dessous |
2126
+ | `projectSettings.framework` | `string` ou `null` | Non | Framework, enregistré si le déploiement crée le projet |
2127
+ | `gitMetadata` | `object` | Non | `commitRef` (branche), `commitSha` et `commitMessage`, affichés dans la console |
2128
+ | `meta` | `Record<string, string>` | Non | Métadonnées libres. `githubCommitRef`, `githubCommitSha` et `githubCommitMessage` remplacent `gitMetadata` quand il manque |
534
2129
 
535
- Chaque page existe aussi en Markdown à la même adresse suivie de `.md` : `/guides/publier.md` pour `/guides/publier/`. Les pages l’annoncent dans leur `<head>` avec `rel="alternate"`.
2130
+ Chaque élément de `files` prend l’une de ces formes :
536
2131
 
537
- En haut de chaque page, **Copier pour un LLM** copie ce Markdown. Le menu à côté ouvre la page dans Claude ou ChatGPT, ou affiche le Markdown.
2132
+ - `{ "file", "sha", "size" }` : chemin relatif, empreinte SHA1 et taille en octets, pour un fichier déjà envoyé par `/v2/files` ;
2133
+ - `{ "file", "data", "encoding" }` : contenu inclus. `encoding` vaut `utf-8` (par défaut) ou `base64`.
538
2134
 
539
- ## Serveur MCP
2135
+ `mode` (permissions Unix) est accepté et conservé. Un dossier vide, `{ "file", "mode" }`, est ignoré.
540
2136
 
541
- Chaque projet a un serveur MCP en lecture seule. L’adresse est dans l’aperçu du projet, dans la console :
2137
+ ### Réponse
542
2138
 
543
- ```text
544
- https://docs.hgdc.ch/mcp/<identifiant du projet>
545
- ```
2139
+ Réponse `200` : l’objet déploiement. Le déploiement naît le plus souvent à l’état `QUEUED`. Suis-le avec `GET /v13/deployments/:id`, plus bas sur cette page, ou avec le flux de logs `GET /v3/deployments/:id/events`.
2140
+
2141
+ ### Erreurs
2142
+
2143
+ | Statut | Code | Cause |
2144
+ | ------ | ------------------- | ------------------------------------------------------------------ |
2145
+ | `400` | `bad_request` | Corps invalide, ou nom de projet absent. Le message nomme le champ |
2146
+ | `400` | `missing_files` | Des fichiers sont à envoyer avant de créer le déploiement |
2147
+ | `403` | `forbidden` | La clé est limitée à un autre projet |
2148
+ | `409` | `deployment_closed` | Le déploiement a été annulé ou a échoué : rien n’est publié |
2149
+ | `413` | `payload_too_large` | Les fichiers inclus dépassent 20 Mo au total |
2150
+
2151
+ ## GET `/v13/deployments/:id`
546
2152
 
547
- Dans Claude Code :
2153
+ Lit un déploiement.
548
2154
 
549
2155
  ```bash
550
- claude mcp add --transport http acme-docs https://docs.hgdc.ch/mcp/<identifiant du projet>
2156
+ curl https://api.host.hgdc.ch/v13/deployments/jd7f2k9m3x8q1p5s6t4v0w7y2z \
2157
+ -H "Authorization: Bearer $VERCEL_TOKEN"
551
2158
  ```
552
2159
 
553
- Dans Cursor (`.cursor/mcp.json`) :
2160
+ Réponse `200` :
554
2161
 
555
2162
  ```json
556
- { "mcpServers": { "acme-docs": { "url": "https://docs.hgdc.ch/mcp/<identifiant du projet>" } } }
2163
+ {
2164
+ "id": "jd7f2k9m3x8q1p5s6t4v0w7y2z",
2165
+ "uid": "jd7f2k9m3x8q1p5s6t4v0w7y2z",
2166
+ "url": "site-atelier-h3k9x2.hgdc.cloud",
2167
+ "name": "site-atelier",
2168
+ "projectId": "j97d3k2m8x1q4p6s7t9v0w2y5z",
2169
+ "ownerId": "k57a1b2c3d4e5f6g7h8j9k0m1n",
2170
+ "readyState": "READY",
2171
+ "status": "READY",
2172
+ "target": "production",
2173
+ "type": "LAMBDAS",
2174
+ "createdAt": 1760259600000,
2175
+ "buildingAt": 1760259601000,
2176
+ "ready": 1760259604000,
2177
+ "alias": ["site-atelier.hgdc.cloud"],
2178
+ "aliasAssigned": true,
2179
+ "aliasAssignedAt": 1760259604000,
2180
+ "aliasError": null,
2181
+ "errorMessage": null,
2182
+ "inspectorUrl": "https://host.hgdc.ch/atelier/site-atelier/deployments/jd7f2k9m3x8q1p5s6t4v0w7y2z",
2183
+ "meta": {
2184
+ "branch": "main",
2185
+ "commitSha": "4c3e2f1a9b8d7c6e5f4a3b2c1d0e9f8a7b6c5d4e",
2186
+ "commitMessage": "Nouvelle page Tarifs"
2187
+ },
2188
+ "creator": { "uid": "u1a2b3c4d5" }
2189
+ }
557
2190
  ```
558
2191
 
559
- Dans VS Code (`.vscode/mcp.json`) :
2192
+ | Champ | Type | Description |
2193
+ | ----------------- | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
2194
+ | `id` | `string` | Identifiant du déploiement. `uid` porte la même valeur |
2195
+ | `url` | `string` | Adresse du déploiement, sans `https://`. Elle reste valable tant que le déploiement existe |
2196
+ | `name` | `string` | Nom du projet |
2197
+ | `projectId` | `string` | Identifiant du projet |
2198
+ | `ownerId` | `string` | Identifiant de l’organisation |
2199
+ | `readyState` | `string` | État : `QUEUED`, `BUILDING`, `READY`, `ERROR` ou `CANCELED`. `status` porte la même valeur |
2200
+ | `target` | `"production"` ou `null` | `production`, ou `null` pour une preview |
2201
+ | `createdAt` | `number` | Date de création, en millisecondes |
2202
+ | `buildingAt` | `number` | Début du traitement, en millisecondes |
2203
+ | `ready` | `number` ou `null` | Fin du traitement. `null` tant que le déploiement n’est pas prêt |
2204
+ | `alias` | `string[]` | Adresse de production du projet (`<projet>.hgdc.cloud`), une fois un déploiement de production prêt. Vide pour une preview. La CLI l’affiche sur la ligne « Aliased » |
2205
+ | `aliasAssigned` | `boolean` | `true` quand le déploiement est prêt |
2206
+ | `aliasAssignedAt` | `number` ou `null` | Moment où l’adresse de production lui a été attribuée. `null` pour une preview |
2207
+ | `aliasError` | `null` | Toujours `null` |
2208
+ | `errorMessage` | `string` ou `null` | Cause de l’échec, quand `readyState` vaut `ERROR` |
2209
+ | `inspectorUrl` | `string` | Page du déploiement dans la console |
2210
+ | `type` | `"LAMBDAS"` | Valeur fixe, pour la CLI |
2211
+ | `meta` | `object` | Informations Git connues : `branch`, `commitSha`, `commitMessage` |
2212
+ | `creator.uid` | `string` | Personne qui a créé la clé utilisée |
2213
+
2214
+ ### Attendre la fin
2215
+
2216
+ Pour attendre qu’un déploiement soit prêt, interroge cet endpoint toutes les secondes jusqu’à `READY`, `ERROR` ou `CANCELED`. Tu peux aussi ouvrir le flux `GET /v3/deployments/:id/events` décrit plus bas, qui se ferme tout seul à la fin.
2217
+
2218
+ | Erreur | Code | Cause |
2219
+ | ------ | ----------- | ----------------------------------------------------------------------------- |
2220
+ | `404` | `not_found` | Déploiement inconnu, d’une autre organisation, ou hors de la portée de la clé |
2221
+
2222
+ ## GET `/v3/deployments/:id/events`
2223
+
2224
+ Renvoie les logs de build d’un déploiement, un événement JSON par ligne (NDJSON). Avec `follow=1`, la connexion reste ouverte et reçoit les nouvelles lignes au fil de l’eau.
560
2225
 
561
- ```json
562
- { "servers": { "acme-docs": { "type": "http", "url": "https://docs.hgdc.ch/mcp/<identifiant du projet>" } } }
2226
+ ```bash
2227
+ curl -N "https://api.host.hgdc.ch/v3/deployments/jd7f2k9m3x8q1p5s6t4v0w7y2z/events?follow=1" \
2228
+ -H "Authorization: Bearer $VERCEL_TOKEN"
563
2229
  ```
564
2230
 
565
- L’aperçu du projet donne ces lignes déjà remplies. Le serveur reste ouvert quand l’assistant du site est coupé : il ne fait que chercher, sans modèle.
2231
+ | Paramètre | Valeur | Rôle |
2232
+ | --------- | ------ | --------------------------------------------------------------------------- |
2233
+ | `follow` | `1` | Garde la connexion ouverte jusqu’à la fin du déploiement, 9 minutes au plus |
566
2234
 
567
- Le serveur propose trois outils :
2235
+ Le type de réponse est `application/x-ndjson`. Chaque ligne de log ressemble à ceci :
568
2236
 
569
- | Outil | Rôle |
570
- | ------------- | -------------------------------------------------------------------------------------------- |
571
- | `search_docs` | Cherche dans la doc et rend les passages les plus proches, avec l’adresse de chaque section. |
572
- | `get_page` | Rend une page complète en Markdown, à partir de son chemin. |
573
- | `list_pages` | Liste les pages avec leur titre et leur chemin. |
2237
+ ```json
2238
+ {"type":"stdout","created":1760259601000,"date":1760259601000,"deploymentId":"jd7f2k9m3x8q1p5s6t4v0w7y2z","id":"l3k…","text":"Publication de 42 fichiers","payload":{"id":"l3k…","text":"Publication de 42 fichiers","date":1760259601000,"deploymentId":"jd7f2k9m3x8q1p5s6t4v0w7y2z"}}
2239
+ ```
574
2240
 
575
- Le détail du protocole est dans la [référence MCP](/reference/mcp/).
2241
+ | Champ | Type | Description |
2242
+ | --------- | ------------------------ | ------------------------------------------------------------------ |
2243
+ | `type` | `"stdout"` ou `"stderr"` | `stderr` pour une ligne d’erreur |
2244
+ | `text` | `string` | Texte de la ligne |
2245
+ | `date` | `number` | Date de la ligne, en millisecondes. `created` porte la même valeur |
2246
+ | `payload` | `object` | Les mêmes champs, au format historique de la CLI |
576
2247
 
577
- ---
2248
+ Une fois le déploiement terminé, une dernière ligne donne son état, puis le flux se ferme :
2249
+
2250
+ ```json
2251
+ {"type":"state","event":"state","date":1760259604000,"payload":{"value":"READY"}}
2252
+ ```
578
2253
 
579
- Source : /reference/docs-json/
2254
+ Les lignes du build GitHub Actions ne sont pas renvoyées ici : elles sont dans le run GitHub, et la console les affiche sur la page du déploiement.
580
2255
 
581
- # docs.json
2256
+ Le même endpoint répond aussi sous `/v3/now/deployments/:id/events`.
582
2257
 
583
- `docs.json` vit à la racine du dossier de la doc. Il reprend le format de Mintlify : les champs que Docs ne gère pas sont acceptés et ignorés. Pour l’autocomplétion dans ton éditeur, ajoute `"$schema": "https://docs.hgdc.ch/docs.schema.json"`.
2258
+ | Erreur | Code | Cause |
2259
+ | ------ | ----------- | --------------------------------------------------- |
2260
+ | `404` | `not_found` | Déploiement inconnu, ou hors de la portée de la clé |
584
2261
 
585
- ## Champs
2262
+ ---
586
2263
 
587
- | Champ | Type | Obligatoire | Rôle |
588
- | -------------------- | --------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
589
- | `name` | texte | oui | Nom de la doc, en tête du site et dans `llms.txt`. 80 caractères au plus. |
590
- | `description` | texte | non | Une phrase de présentation. |
591
- | `navigation` | objet | oui | Pages, groupes, onglets ou versions. Voir [Navigation](/guides/navigation/). |
592
- | `project` | texte | non | Identifiant du projet dans la console. Active l’assistant et l’indexation. |
593
- | `language` | `fr`, `en`, `de`, `it` | non | Langue de l’interface du site. `fr` par défaut. |
594
- | `base` | texte | non | Sous-chemin où la doc est servie, par exemple `/docs` quand ton application la publie derrière un proxy (`https://app.acme.ch/docs`). Liens, images, recherche, `llms.txt` et pages `.md` le portent ; le site est écrit dans `dist/docs/`. Écris tes liens depuis la racine de la doc (`/guides/publier/`) : le sous-chemin est ajouté au build. |
595
- | `colors.primary` | couleur `#rrggbb` | non | Couleur des liens et des éléments actifs. |
596
- | `colors.dark` | couleur `#rrggbb` | non | La même, en mode sombre. |
597
- | `logo` | chemin, ou `{ light, dark }` | non | Logo affiché en tête. |
598
- | `favicon` | chemin | non | Icône de l’onglet du navigateur. |
599
- | `navbar.links` | liste de `{ label, href }` | non | Jusqu’à 5 liens dans la barre du haut (adresses complètes). |
600
- | `navbar.primary` | `{ label, href }` | non | Bouton mis en avant à droite de la barre du haut. |
601
- | `footer.socials` | objet | non | Liens vers tes réseaux : `linkedin`, `github`, `gitlab`, `x`, `youtube`, `instagram`, `facebook`, `discord`, `mastodon`, `bluesky`, `website`. |
602
- | `redirects` | liste de `{ source, destination, permanent }` | non | Anciennes adresses qui mènent aux nouvelles. `source` est un chemin du site (`/guides/ancien`), `destination` un chemin ou une adresse `https://`. `permanent: false` pour une redirection temporaire. 500 au plus. |
603
- | `assistant.enabled` | oui / non | non | `false` cache l’assistant du site. |
604
- | `assistant.endpoint` | adresse | non | API de l’assistant, à ne changer que pour un environnement de test. |
2264
+ Source : /docs/reference/api/fichiers/
605
2265
 
606
- ## Navigation
2266
+ # Envoyer un fichier
607
2267
 
608
- Quatre formes, une seule à la fois :
2268
+ Un fichier s’envoie par son empreinte SHA1. Host ne stocke jamais deux fois le même contenu pour une organisation : tu n’envoies que les fichiers que [Créer un déploiement](/docs/reference/api/deploiements/) signale comme manquants.
609
2269
 
610
- | Forme | Exemple |
611
- | ---------- | --------------------------------------------------------- |
612
- | `pages` | `["index", "installation"]` |
613
- | `groups` | `[{ "group": "Démarrer", "pages": ["index"] }]` |
614
- | `tabs` | `[{ "tab": "Guides", "groups": [...] }]` |
615
- | `versions` | `[{ "version": "v2", "default": true, "groups": [...] }]` |
2270
+ ## POST `/v2/files`
616
2271
 
617
- Un groupe accepte `expanded: false` pour être replié par défaut, et peut contenir des groupes.
2272
+ ```bash
2273
+ SHA=$(sha1sum index.html | cut -d' ' -f1)
2274
+ curl -X POST https://api.host.hgdc.ch/v2/files \
2275
+ -H "Authorization: Bearer $VERCEL_TOKEN" \
2276
+ -H "x-vercel-digest: $SHA" \
2277
+ -H "Content-Type: application/octet-stream" \
2278
+ --data-binary @index.html
2279
+ ```
618
2280
 
619
- ## Erreurs
2281
+ En Node.js, calcule l’empreinte avant l’envoi :
620
2282
 
621
- Un `docs.json` invalide fait échouer le build avec la liste des problèmes, par exemple :
2283
+ ```javascript
2284
+ import { createHash } from "node:crypto"
2285
+ import { readFile } from "node:fs/promises"
622
2286
 
623
- ```text
624
- docs.json invalide :
625
- - colors.primary : couleur attendue au format #rrggbb
626
- - navigation : utiliser une seule forme parmi versions, tabs, groups ou pages
627
- ```
2287
+ const bytes = await readFile("index.html")
2288
+ const sha = createHash("sha1").update(bytes).digest("hex")
628
2289
 
629
- ---
2290
+ await fetch("https://api.host.hgdc.ch/v2/files", {
2291
+ method: "POST",
2292
+ headers: {
2293
+ Authorization: `Bearer ${process.env.VERCEL_TOKEN}`,
2294
+ "x-vercel-digest": sha,
2295
+ "Content-Type": "application/octet-stream",
2296
+ },
2297
+ body: bytes,
2298
+ })
2299
+ ```
630
2300
 
631
- Source : /reference/cli/
2301
+ ### En-têtes
632
2302
 
633
- # La commande hgdc-docs
2303
+ | En-tête | Valeur | Requis |
2304
+ | ----------------- | -------------------------------------------------------- | ------------------------------------- |
2305
+ | `Authorization` | `Bearer ah_…` | Oui |
2306
+ | `x-vercel-digest` | Empreinte SHA1 du contenu, en hexadécimal, 40 caractères | Oui. `x-now-digest` est aussi accepté |
2307
+ | `Content-Type` | `application/octet-stream` | Recommandé |
634
2308
 
635
- `hgdc-docs` est installée avec le paquet `@hgdc/docs`. Elle se lance depuis le dossier de la doc, ou avec le chemin du dossier en argument.
2309
+ ### Corps
636
2310
 
637
- ## Commandes
2311
+ Le contenu brut du fichier, 20 Mo au plus.
638
2312
 
639
- | Commande | Effet |
640
- | ------------------- | ---------------------------------------------------------------------------------------------------------- |
641
- | `hgdc-docs dev` | Site local sur `http://localhost:4321`, rechargé à chaque modification. |
642
- | `hgdc-docs build` | Site statique dans `dist/`, avec la recherche, `llms.txt`, les pages Markdown et le corpus de l’assistant. |
643
- | `hgdc-docs preview` | Sert le dernier build, pour vérifier avant de pousser. |
2313
+ ### Réponse
644
2314
 
645
- Options : `--port 4000` change le port de `dev` et `preview`, `--help` affiche l’aide.
2315
+ Réponse `200` avec un objet vide, `{}`.
646
2316
 
647
- ## Variables d’environnement
2317
+ ### Erreurs
648
2318
 
649
- | Variable | Rôle |
650
- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
651
- | `HGDC_DOCS_SITE` | Adresse publique du site (`https://docs.acme.ch`). Rend les liens de `llms.txt` absolus et produit le sitemap. Sur Host, l’adresse de production est reprise seule. |
652
- | `HGDC_DOCS_OUT` | Dossier de sortie, `dist/` par défaut. |
653
- | `HGDC_DOCS_API` | API de l’assistant, `https://docs.hgdc.ch` par défaut. |
2319
+ | Statut | Code | Cause |
2320
+ | ------ | ---------------- | ---------------------------------------------------------------------- |
2321
+ | `400` | `bad_request` | En-tête `x-vercel-digest` absent ou mal formé |
2322
+ | `400` | `invalid_digest` | Le contenu ne correspond pas à l’empreinte annoncée. Recalcule le SHA1 |
2323
+ | `413` | `file_too_large` | Le fichier dépasse 20 Mo |
654
2324
 
655
- ## Ce que contient dist/
2325
+ ## Limites
656
2326
 
657
- | Fichier | Contenu |
658
- | --------------------------------------------------- | -------------------------------------------------------------- |
659
- | `index.html`, `<page>/index.html` | Les pages du site. |
660
- | `<page>.md` | Chaque page en Markdown. |
661
- | `llms.txt`, `llms-full.txt`, `.well-known/llms.txt` | L’index et la doc complète pour les agents. |
662
- | `pagefind/` | L’index de la recherche. |
663
- | `_hgdc/corpus.json` | Le contenu publié, lu par la console pour indexer l’assistant. |
2327
+ L’envoi de fichiers a son propre débit : 6 000 par minute, avec des rafales de 3 000 par clé. Un site Next.js compte souvent des milliers de fichiers : envoie-les en parallèle, mais sans dépasser ce débit. Voir [Limites](/docs/reference/limites/).
664
2328
 
665
2329
  ---
666
2330
 
667
- Source : /reference/api-assistant/
2331
+ Source : /docs/reference/api/variables/
668
2332
 
669
- # API de l'assistant
2333
+ # Lire les variables d'un environnement
670
2334
 
671
- Le widget du site appelle une seule route. Tu peux l’appeler toi-même pour intégrer l’assistant dans ton application, depuis une page servie par une adresse déclarée dans la console.
2335
+ Cet endpoint renvoie les variables d’un environnement, au format attendu par `vercel pull` et `vercel build`. Les valeurs sont renvoyées déchiffrées : elles ne doivent jamais partir vers le navigateur.
672
2336
 
673
- ## Requête
2337
+ ## GET `/v3/env/pull/:project/:target`
674
2338
 
675
- ```http
676
- POST https://docs.hgdc.ch/api/v1/ask
677
- Content-Type: application/json
678
- Origin: https://docs.acme.ch
2339
+ ```bash
2340
+ curl https://api.host.hgdc.ch/v3/env/pull/site-atelier/production \
2341
+ -H "Authorization: Bearer $VERCEL_TOKEN"
679
2342
  ```
680
2343
 
681
- ```json
682
- {
683
- "project": "k57a8m2x9q4n1b3c5d7e9f0g2h4j6k8m",
684
- "question": "Comment publier ma doc ?",
685
- "page": "/guides/publier/",
686
- "previous": ["j97f2k8m1q4n6b3c5d7e9f0g2h4j6k8m"]
687
- }
2344
+ ```bash
2345
+ # Équivalent avec la CLI
2346
+ vercel --api https://api.host.hgdc.ch pull --environment=production
688
2347
  ```
689
2348
 
690
- | Champ | Rôle |
691
- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
692
- | `project` | Identifiant du projet. |
693
- | `question` | 2 à 1 000 caractères. |
694
- | `page` | Chemin de la page ouverte. Ses passages sont légèrement favorisés. |
695
- | `previous` | Les `id` des réponses précédentes de la conversation, 3 au plus. L’assistant relit lui-même ce qu’il a répondu, dans les deux dernières heures. |
2349
+ ### Paramètres de chemin
2350
+
2351
+ | Paramètre | Type | Requis | Description |
2352
+ | --------- | ---------------------------------------------- | ------ | ----------------------------------------- |
2353
+ | `project` | `string` | Oui | Identifiant ou nom du projet |
2354
+ | `target` | `"production"`, `"preview"` ou `"development"` | Non | Environnement. Par défaut : `development` |
696
2355
 
697
- L’en-tête `Origin` doit être l’adresse du site ou un des domaines déclarés dans **Réglages › Domaines**. Chaque visiteur a droit à 6 questions par minute et 100 par jour.
2356
+ ### Réponse
698
2357
 
699
- ## Réponse
2358
+ Réponse `200` :
700
2359
 
701
2360
  ```json
702
2361
  {
703
- "id": "j97f…",
704
- "status": "answered",
705
- "answer": "Importe le dépôt dans Host[^1], puis synchronise le projet dans la console[^2].",
706
- "sources": [
707
- { "n": 1, "title": "Publier avec Host", "section": "Avec Host", "url": "https://docs.acme.ch/guides/publier/#avec-host" },
708
- { "n": 2, "title": "Publier avec Host", "section": "Relier la console", "url": "https://docs.acme.ch/guides/publier/#relier-la-console" }
709
- ]
2362
+ "env": {
2363
+ "PUBLIC_API_URL": "https://api.atelier.ch",
2364
+ "CONTACT_EMAIL": "bonjour@atelier.ch"
2365
+ },
2366
+ "buildEnv": {
2367
+ "PUBLIC_API_URL": "https://api.atelier.ch",
2368
+ "CONTACT_EMAIL": "bonjour@atelier.ch"
2369
+ }
710
2370
  }
711
2371
  ```
712
2372
 
713
- `answer` est du Markdown simple ; `[^n]` renvoie à la source `n`. `status` vaut `no_answer` quand la doc ne répond pas : `sources` est alors vide.
2373
+ `env` et `buildEnv` contiennent les mêmes variables. Si le projet a un domaine de production, `VERCEL_PROJECT_PRODUCTION_URL` figure aussi dans la réponse. Voir [Variables : référence](/docs/reference/variables/#variables-fournies-par-la-plateforme).
2374
+
2375
+ La réponse n’est jamais mise en cache : elle porte `cache-control: no-store`.
2376
+
2377
+ ## Variables sensibles
2378
+
2379
+ Une variable sensible n’est renvoyée qu’à une clé limitée au projet, celle que l’app GitHub pose dans le dépôt. Avec une clé d’organisation, elle est absente de la réponse.
2380
+
2381
+ Chaque lecture d’une variable par une clé est consignée dans le journal du coffre, sans la valeur. Voir [Secrets et coffre](/docs/concepts/secrets-et-coffre/).
714
2382
 
715
2383
  ## Erreurs
716
2384
 
717
- | Code HTTP | `error.code` | Quand |
718
- | --------- | -------------------- | --------------------------------------------------- |
719
- | 400 | `invalid_request` | Corps illisible ou question trop courte. |
720
- | 403 | `origin_not_allowed` | La page n’est pas servie par une adresse du projet. |
721
- | 403 | `assistant_disabled` | L’assistant est coupé dans la console. |
722
- | 404 | `project_not_found` | Identifiant inconnu. |
723
- | 409 | `not_indexed` | Le site n’a pas encore été synchronisé. |
724
- | 429 | `rate_limited` | Trop de questions en une minute. |
725
- | 429 | `quota_exceeded` | Le quota mensuel de l’organisation est atteint. |
726
- | 503 | `unavailable` | Le modèle ne répond pas. Réessayer plus tard. |
2385
+ | Statut | Code | Cause |
2386
+ | ------ | ------------- | ---------------------------------------------- |
2387
+ | `400` | `bad_request` | Environnement inconnu |
2388
+ | `404` | `not_found` | Projet inconnu, ou hors de la portée de la clé |
727
2389
 
728
- Chaque erreur porte aussi `error.message`, une phrase en français à montrer telle quelle.
2390
+ Voir la liste complète sur [Erreurs](/docs/reference/api/erreurs/).
729
2391
 
730
2392
  ---
731
2393
 
732
- Source : /reference/mcp/
2394
+ Source : /docs/concepts/deploiements/
733
2395
 
734
- # Serveur MCP
2396
+ # Déploiements
735
2397
 
736
- Le serveur suit le [Model Context Protocol](https://modelcontextprotocol.io), transport Streamable HTTP, sans session : chaque requête est indépendante.
2398
+ Un déploiement est une version figée de ton site. Il ne change plus après sa publication : une nouvelle version crée un nouveau déploiement, avec sa propre adresse.
737
2399
 
738
- ```text
739
- POST https://docs.hgdc.ch/mcp/<identifiant du projet>
740
- Content-Type: application/json
741
- Accept: application/json, text/event-stream
742
- ```
2400
+ Cette page explique ce modèle. Pour les actions pas à pas, voir [Revenir en arrière, redéployer ou annuler](/docs/guides/revenir-en-arriere/).
743
2401
 
744
- Il répond en JSON (`application/json`), jamais en flux. `GET` et `DELETE` répondent 405. Versions du protocole acceptées : `2025-11-25`, `2025-06-18`, `2025-03-26`.
2402
+ ## Preview et production
745
2403
 
746
- ## Méthodes
2404
+ Chaque déploiement est soit une **preview**, soit une **production**.
747
2405
 
748
- | Méthode | Réponse |
749
- | ------------ | --------------------------------------------------------- |
750
- | `initialize` | Nom du serveur, capacités (`tools`) et consignes d’usage. |
751
- | `ping` | Objet vide. |
752
- | `tools/list` | Les trois outils ci-dessous. |
753
- | `tools/call` | Le résultat de l’outil, en texte. |
2406
+ | Cible | Créée par | Servie sur |
2407
+ | ---------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
2408
+ | Preview | `vercel deploy`, ou une branche autre que la production | Son adresse de déploiement, et les domaines de branche qui la suivent |
2409
+ | Production | `vercel deploy --prod`, ou la branche de production | Son adresse de déploiement, l’adresse de production du projet et ses domaines de production |
754
2410
 
755
- Une notification (message sans `id`) reçoit un 202 sans corps.
2411
+ Avec l’intégration GitHub, la branche de production part en production, et toutes les autres en preview. Le dernier déploiement de production prêt est celui que servent tes domaines de production.
756
2412
 
757
- ## Outils
2413
+ ## Adresse de production
758
2414
 
759
- ### search_docs
2415
+ Chaque projet reçoit à sa création une adresse qui suit toujours sa production, de la forme `https://<projet>.hgdc.cloud`. C’est l’équivalent de `<projet>.vercel.app`.
760
2416
 
761
- | Paramètre | Type | Rôle |
762
- | --------- | -------------- | --------------------------------- |
763
- | `query` | texte | Question ou mots-clés. |
764
- | `limit` | entier, 1 à 10 | Nombre de passages, 5 par défaut. |
2417
+ - Elle ne change jamais : ni à une nouvelle mise en production, ni si tu renommes le projet.
2418
+ - Elle sert le déploiement de production du moment. Une nouvelle production ou un retour arrière la déplace tout de suite, sans nouveau certificat ni réglage DNS.
2419
+ - Si `<projet>` est déjà pris par une autre organisation, l’adresse devient `<projet>-<organisation>.hgdc.cloud`. La console affiche celle de ton projet dans la carte de production, sous **Domaines**.
2420
+ - Elle n’est pas indexée par les moteurs de recherche. Pour un site public, branche ton propre domaine : voir [Brancher un domaine](/docs/guides/brancher-un-domaine/).
765
2421
 
766
- Rend les passages trouvés, chacun avec son titre, sa section, son adresse et son texte.
2422
+ Donne cette adresse à un outil qui doit toujours viser ta production : un proxy, une sonde de disponibilité, une console Docs. Elle est aussi la valeur de `VERCEL_PROJECT_PRODUCTION_URL` tant que le projet n’a pas de domaine.
767
2423
 
768
- ### get_page
2424
+ ## Adresse de déploiement
769
2425
 
770
- | Paramètre | Type | Rôle |
771
- | --------- | ----- | ---------------------------------------------------------------- |
772
- | `path` | texte | Chemin de la page (`/guides/publier/`), ou son adresse complète. |
2426
+ Chaque déploiement reçoit une adresse unique, de la forme `https://<projet>-<suffixe>.hgdc.cloud`. Elle reste valable tant que le déploiement existe.
773
2427
 
774
- Rend la page en Markdown, précédée de son adresse.
2428
+ Partage cette adresse pour faire valider une version avant de la passer en production. Une preview se valide ainsi, sans toucher au site en ligne.
775
2429
 
776
- ### list_pages
2430
+ ## Statuts
777
2431
 
778
- Sans paramètre. Rend la liste des pages publiées.
2432
+ | Statut | Libellé dans la console | Signification |
2433
+ | ---------- | ----------------------- | ---------------------------------------------------------------------------- |
2434
+ | `QUEUED` | En file | Le déploiement attend son tour de publication |
2435
+ | `BUILDING` | Build en cours | Le build tourne dans la CI, ou les fichiers sont en cours de publication |
2436
+ | `READY` | Prêt | Le site est en ligne sur son adresse |
2437
+ | `ERROR` | Erreur | Le build ou la publication a échoué. La cause est sur la page du déploiement |
2438
+ | `CANCELED` | Annulé | Annulé dans la console, ou dans GitHub Actions |
779
2439
 
780
- ## Limites
2440
+ Pour corriger une version en ligne, déploie une nouvelle version : elle reçoit son propre déploiement et sa propre adresse.
2441
+
2442
+ ## Vue d’ensemble du projet
2443
+
2444
+ La vue d’ensemble montre le déploiement de production : un aperçu du site, son adresse, l’adresse de production du projet et ses domaines, le commit et son auteur. Le projet reprend le favicon de son site.
2445
+
2446
+ Les previews actives listent la dernière adresse de chaque branche.
2447
+
2448
+ ## Revenir en arrière
2449
+
2450
+ Revenir en arrière remet en ligne un déploiement de production précédent, tout de suite et sans nouveau build. L’adresse de production et les domaines le servent aussitôt. Seul un déploiement **prêt** peut passer en production.
781
2451
 
782
- Le serveur est public et en lecture seule : il ne donne accès qu’à ce que le site publie déjà. Chaque projet accepte 300 requêtes par minute, chaque visiteur 60. Au-delà, la réponse est un 429.
2452
+ Le déploiement remis en ligne garde les variables qu’il a reçues à son build. Une variable modifiée depuis ne s’y applique pas.
2453
+
2454
+ ## Redéployer
2455
+
2456
+ - Projet relié à GitHub : reconstruit le même commit, avec les variables d’aujourd’hui.
2457
+ - Projet envoyé par la CLI : republie les fichiers du déploiement choisi, sans rien reconstruire. Pour une nouvelle version, relance `vercel deploy`.
2458
+
2459
+ ## Annuler
2460
+
2461
+ Un déploiement **en file** ou **en cours de build** peut être annulé. Un déploiement prêt ne s’annule pas : reviens en arrière à la place.
2462
+
2463
+ ## Logs de build
2464
+
2465
+ La page de chaque déploiement affiche la sortie du build, en direct pendant le build avec l’intégration GitHub. Voir [Lire les logs](/docs/guides/lire-les-logs/).
783
2466
 
784
2467
  ---
785
2468
 
786
- Source : /explications/fonctionnement/
2469
+ Source : /docs/concepts/organisations-et-roles/
787
2470
 
788
- # Comment ça marche
2471
+ # Organisations et rôles
789
2472
 
790
- Docs tient en trois pièces : un modèle de site, Host qui le publie, et la console qui l’indexe pour l’assistant.
2473
+ Une organisation regroupe des personnes, des projets et des clés d’API. Tu peux appartenir à plusieurs organisations, et passer de l’une à l’autre depuis la barre latérale, ou avec `Ctrl+K`.
791
2474
 
792
- ## 1. Le modèle de site
2475
+ L’organisation se crée et se gère dans Account. Son slug apparaît dans l’adresse de l’app : `host.hgdc.ch/o/<slug>/…`.
793
2476
 
794
- Le paquet `@hgdc/docs` contient un site Astro Starlight complet. `hgdc-docs build` lit ton `docs.json`, prend tes pages MDX et construit un site statique. Rien ne tourne côté serveur : le site est rapide et ne tombe pas en panne avec la console.
2477
+ ## Rôles
795
2478
 
796
- Pendant le build, chaque page est aussi convertie en Markdown à partir du HTML final. Les composants sont donc déjà rendus : ce que lit un agent est exactement ce que voit un visiteur.
2479
+ | Action | Propriétaire | Admin | Membre |
2480
+ | ------------------------------------------------------------------ | ------------ | ----- | ------ |
2481
+ | Voir les projets, déploiements et logs | Oui | Oui | Oui |
2482
+ | Voir les noms des variables | Oui | Oui | Oui |
2483
+ | Voir les valeurs des variables non sensibles | Oui | Oui | Oui |
2484
+ | Créer et déployer des projets, gérer les variables et les domaines | Oui | Oui | Oui |
2485
+ | Créer et révoquer des clés d’API | Oui | Oui | Non |
2486
+ | Supprimer un projet | Oui | Oui | Non |
2487
+ | Gérer l’organisation elle-même, dans Account | Oui | Non | Non |
797
2488
 
798
- ## 2. La publication par Host
2489
+ Une valeur sensible ne s’affiche jamais, quel que soit le rôle. Voir [Secrets et coffre](/docs/concepts/secrets-et-coffre/).
799
2490
 
800
- Host lance le build dans GitHub Actions à chaque push, puis sert le dossier `dist/` sur ton domaine. La doc est une source comme une autre : préversion par branche, retour arrière, domaine.
2491
+ Le rôle lecture seule n’existe plus : les anciens membres en lecture seule sont passés membres.
801
2492
 
802
- ## 3. L’indexation par la console
2493
+ ## Inviter et retirer
803
2494
 
804
- La console relit `/_hgdc/corpus.json` sur le site publié : tous les quarts d’heure, ou quand tu cliques sur **Synchroniser**. Elle vérifie que le corpus porte bien l’identifiant du projet, puis :
2495
+ Les invitations, les membres et les rôles se gèrent dans Account, pas dans Host. Le guide pas à pas est sur [Inviter une personne](/docs/guides/inviter-une-personne/).
805
2496
 
806
- 1. découpe chaque page en passages, un par section (titre `##` ou plus fin) ;
807
- 2. compare avec l’index existant, passage par passage : seuls les passages nouveaux sont traités ;
808
- 3. calcule leur représentation vectorielle (embedding), qui permet de retrouver une reformulation ;
809
- 4. supprime les passages qui ne sont plus publiés.
2497
+ Quand une personne rejoint l’organisation, elle se connecte avec son compte HGDC, avec la même adresse e-mail vérifiée. Son compte est lié, et ses projets restent en place.
810
2498
 
811
- Un build identique au précédent ne change rien à l’index.
2499
+ ## Membres dans Host
812
2500
 
813
- ## 4. La réponse
2501
+ Host affiche la liste des membres en lecture seule, avec un bouton vers Account. Un changement fait dans Account arrive dans Host à la prochaine connexion de la personne. Une session dure 7 jours au plus, sans prolongation.
814
2502
 
815
- Une question passe par deux recherches : par mots (les termes exacts, comme `docs.json`) et par sens (les reformulations). Les deux classements sont fusionnés, les six meilleurs passages sont donnés au modèle Claude, qui répond en citant ceux qu’il utilise.
2503
+ ## Quitter ou être retiré
816
2504
 
817
- > **Note**
818
- >
819
- > L’index d’un projet est fermé aux autres : une recherche ne voit que les passages de son propre projet, vérifiés deux fois.
2505
+ Quand une personne quitte l’organisation, les clés d’API qu’elle a créées cessent de fonctionner. Les projets, les déploiements et les variables restent dans l’organisation.
2506
+
2507
+ ## Les clés d’API et l’organisation
2508
+
2509
+ Une clé d’API appartient à une organisation. L’organisation vient toujours de la clé : une option `--scope` ou `--team` de la CLI est ignorée. Voir [Clés d’API](/docs/guides/cle-d-api/).
2510
+
2511
+ ---
2512
+
2513
+ Source : /docs/concepts/secrets-et-coffre/
2514
+
2515
+ # Secrets et coffre
2516
+
2517
+ Les valeurs de tes variables sont des secrets : mots de passe, clés de service, jetons. Host les garde dans un coffre, les chiffre, et ne les renvoie jamais en clair à quiconque n’en a pas besoin.
2518
+
2519
+ Cette page explique le modèle. Pour les règles chiffrées, voir [Variables : référence](/docs/reference/variables/).
2520
+
2521
+ ## Le coffre
2522
+
2523
+ - Chaque organisation a sa propre clé de chiffrement, AES-GCM 256 bits.
2524
+ - Cette clé est elle-même chiffrée par une clé maîtresse, gardée hors de la base de données.
2525
+ - Chaque valeur est liée à son projet. Une valeur recopiée dans un autre projet ne se déchiffre pas.
2526
+
2527
+ ## Qui lit quoi
2528
+
2529
+ | Donnée | Qui la voit |
2530
+ | ---------------------------------- | -------------------------------------------------------------------- |
2531
+ | Nom d’une variable | Tous les membres de l’organisation |
2532
+ | Valeur d’une variable non sensible | Tous les membres de l’organisation |
2533
+ | Valeur d’une variable sensible | Personne, après l’enregistrement. Elle peut seulement être remplacée |
2534
+
2535
+ Une variable sensible ne part que vers le build du dépôt GitHub, par une clé limitée au projet. Un `vercel pull` depuis un poste de développement ne la télécharge pas.
2536
+
2537
+ ## Le journal du coffre
2538
+
2539
+ Le journal, en bas de l’onglet **Variables d’environnement**, garde les 50 derniers gestes sur le coffre :
2540
+
2541
+ - qui a créé, modifié ou supprimé une variable ;
2542
+ - qui a affiché une valeur non sensible ;
2543
+ - quelle clé d’API a téléchargé les variables, avec `vercel pull` ou un build ;
2544
+ - quand Doppler a synchronisé une valeur.
2545
+
2546
+ Le journal ne garde jamais une valeur.
2547
+
2548
+ ## Les clés d’API
2549
+
2550
+ Host ne garde qu’une empreinte SHA-256 de chaque clé d’API. La clé complète ne s’affiche qu’une fois, à sa création. Si tu la perds, aucune copie n’est possible : crée une nouvelle clé, puis révoque l’ancienne.
2551
+
2552
+ Une clé posée dans un dépôt GitHub ne donne accès qu’à son projet. Une clé d’organisation donne accès à tous les projets de l’organisation, avec les variables non sensibles.
2553
+
2554
+ ## Les secrets des intégrations
2555
+
2556
+ Les jetons Doppler et les secrets des webhooks sont chiffrés de la même façon, et ne sont jamais renvoyés par la console ni par l’API. Chaque webhook Doppler est vérifié par sa signature HMAC.
2557
+
2558
+ ## Ce que le site publie
2559
+
2560
+ Le coffre protège les valeurs dans Host. Il ne protège pas un secret qui finit dans le site. Tout ce que le build écrit dans les fichiers du site est public, même si la variable d’origine était sensible.
2561
+
2562
+ Une variable lue dans le navigateur, comme celles qui commencent par `PUBLIC_`, `VITE_` ou `NEXT_PUBLIC_`, ne doit jamais contenir un secret.
2563
+
2564
+ ## Voir aussi
2565
+
2566
+ - [Gérer les variables d’environnement](/docs/guides/variables-d-environnement/)
2567
+ - [Synchroniser depuis Doppler](/docs/guides/synchroniser-doppler/)
2568
+ - [Confidentialité](/docs/concepts/confidentialite/)
2569
+
2570
+ ---
2571
+
2572
+ Source : /docs/concepts/preversion/
2573
+
2574
+ # Préversion et rendu à la demande
2575
+
2576
+ Host sert toujours les fichiers statiques et les pages pré-rendues. Les fonctions, c’est-à-dire le rendu à la demande, les routes d’API, les Server Actions, le proxy, le runtime edge, l’ISR et les crons, sont en préversion. Cette page explique comment elles se comportent, et ce que tu observes.
2577
+
2578
+ ## Ce qui est en ligne dans tous les cas
2579
+
2580
+ Un site construit avec `vercel build` produit deux sortes de contenu :
2581
+
2582
+ - les fichiers statiques et les pages pré-rendues au build. Ils sont servis dès le déploiement, sans fonction ;
2583
+ - les pages et les routes qui ont besoin d’une fonction. Elles passent par l’exécution en préversion.
2584
+
2585
+ Une organisation qui n’a pas encore accès à l’exécution des fonctions voit ses pages statiques en ligne normalement. Seule une adresse qui demande une fonction répond `501`, avec le message « Rendu à la demande pas encore servi ».
2586
+
2587
+ ## Ouvert organisation par organisation
2588
+
2589
+ L’exécution des fonctions est ouverte organisation par organisation. Si une de tes adresses répond `501`, demande l’activation à <support@hgdc.ch>, avec le nom de ton organisation.
2590
+
2591
+ ## Comportement des fonctions
2592
+
2593
+ - Chaque déploiement a son environnement d’exécution, isolé des autres, avec les variables de son environnement.
2594
+ - Une fonction dispose de 512 Mo de mémoire par défaut, et de 1 Go au plus.
2595
+ - Une requête dure 30 secondes au plus par défaut. Tu peux allonger jusqu’à 60 secondes avec `maxDuration`.
2596
+ - Après une période sans trafic, l’environnement s’arrête. La première requête suivante prend quelques secondes ; les suivantes sont immédiates.
2597
+
2598
+ ## Runtime edge
2599
+
2600
+ Une fonction marquée `runtime: "edge"` tourne dans un contexte isolé, avec les API Web, comme chez Vercel.
2601
+
2602
+ ## ISR
2603
+
2604
+ Une page avec une durée de revalidation est rendue une fois, puis gardée. Une fois la durée écoulée, elle est régénérée en arrière-plan. Le visiteur reçoit toujours une réponse immédiate.
2605
+
2606
+ Le cache de l’ISR est tenu en mémoire par serveur. Il repart à vide quand le serveur redémarre : la page suivante est rendue à nouveau.
2607
+
2608
+ ## Crons
2609
+
2610
+ Les `crons` de `vercel.json` appellent leur chemin en GET, à l’heure indiquée en UTC, sur le déploiement de production uniquement. Un déploiement de preview n’a jamais de cron.
2611
+
2612
+ Si tu définis la variable `CRON_SECRET` pour la production, chaque appel porte `Authorization: Bearer <CRON_SECRET>`. Vérifie cet en-tête dans ta route avant d’agir.
2613
+
2614
+ ## Proxy et middleware
2615
+
2616
+ Le proxy, anciennement middleware, et le middleware Node.js s’exécutent en préversion, comme les fonctions.
2617
+
2618
+ ## Pour une page qui ne peut pas attendre
2619
+
2620
+ Si une page a besoin d’une fonction alors que l’exécution n’est pas encore ouverte à ton organisation, tu peux la pré-rendre au build. Elle est alors servie comme une page statique.
2621
+
2622
+ ## Voir aussi
2623
+
2624
+ - [Compatibilité](/docs/reference/compatibilite/) : la liste complète, fonction par fonction.
2625
+ - [Limites](/docs/reference/limites/) : mémoire, durée et débits.
820
2626
 
821
2627
  ---
822
2628
 
823
- Source : /explications/donnees/
2629
+ Source : /docs/concepts/confidentialite/
2630
+
2631
+ # Sécurité et confidentialité
2632
+
2633
+ Cette page décrit ce que Host fait pour protéger tes projets, tes secrets, les sites qu’il sert et les visiteurs de ces sites. Elle ne remplace pas ton analyse de risque. Pour une question précise sur le traitement de tes données personnelles, écris à <support@hgdc.ch>.
824
2634
 
825
- # Données et confidentialité
2635
+ ## Accès
826
2636
 
827
- ## Ce qui est stocké
2637
+ - La connexion passe uniquement par HGDC. Host ne garde aucun mot de passe.
2638
+ - Chaque action vérifie ton rôle dans l’organisation : propriétaire, admin ou membre. Voir [Organisations et rôles](/docs/concepts/organisations-et-roles/).
2639
+ - Une clé d’API ne donne accès qu’à une organisation. Une clé posée dans un dépôt ne donne accès qu’à son projet.
2640
+ - Les dépôts GitHub ne s’importent que si tu as le droit d’écriture. L’app GitHub ne demande que les droits dont le workflow a besoin.
828
2641
 
829
- | Donnée | Où | Durée |
830
- | ------------------------------------------------ | ------------------ | ------------------------------ |
831
- | Pages publiées, en Markdown, et passages indexés | Base de la console | Tant que le projet existe |
832
- | Questions des visiteurs, réponses, sources | Base de la console | 90 jours |
833
- | Consommation mensuelle de l’assistant | Base de la console | Tant que l’organisation existe |
2642
+ ## Secrets
834
2643
 
835
- La console ne stocke ni l’adresse IP ni l’identité des visiteurs. L’IP sert seulement, le temps de la requête, à limiter le nombre de questions par minute.
2644
+ - Les valeurs des variables sont chiffrées dans un coffre. Chaque organisation a sa propre clé. Voir [Secrets et coffre](/docs/concepts/secrets-et-coffre/).
2645
+ - Les clés d’API ne sont stockées que sous forme d’empreinte SHA-256. La clé complète ne s’affiche qu’une fois.
2646
+ - Une variable sensible ne se relit jamais après l’enregistrement, et ne part que vers le build du dépôt.
2647
+ - Le journal du coffre garde qui a créé, modifié, lu ou téléchargé une variable. Il ne garde jamais la valeur.
836
2648
 
837
- ## Qui traite quoi
2649
+ ## Sites servis
838
2650
 
839
- - **Le site** est servi par Host.
840
- - **La recherche du site** tourne dans le navigateur du visiteur : aucune requête ne part.
841
- - **Les embeddings** des passages et des questions sont calculés par Mistral AI, dans l’Union européenne.
842
- - **Les réponses** sont rédigées par Claude, le modèle d’Anthropic, appelé directement ou par OpenRouter. La question et les passages trouvés lui sont envoyés.
2651
+ - HTTPS partout, avec un certificat automatique pour chaque domaine vérifié. Un certificat n’est émis que pour un domaine vérifié.
2652
+ - Chaque réponse porte l’en-tête `X-Content-Type-Options: nosniff`.
2653
+ - Les fichiers cachés, comme `.env` ou `.git`, ne sont jamais servis, sauf `.well-known`.
2654
+ - Les configurations et les sources d’un framework ne sont jamais servies. Seul le résultat du build l’est.
843
2655
 
844
- Sans clé d’embeddings, la recherche de l’assistant reste en plein texte : rien ne part chez Mistral.
2656
+ ## Données et journaux
845
2657
 
846
- ## Ce que voit l’assistant
2658
+ - Les logs des requêtes ne gardent ni adresse IP, ni en-têtes, ni paramètres d’URL. Ils disparaissent après trois jours.
2659
+ - Les logs de build restent tant que le projet existe.
2660
+ - Les valeurs des variables ne figurent dans aucun journal.
847
2661
 
848
- Uniquement ce que ton site publie : il lit le corpus du site public. Une page qui n’est pas publiée n’existe pas pour lui. Il ne peut ni naviguer sur le web, ni agir : il lit des passages et écrit une réponse.
2662
+ ## Signaler une faille
849
2663
 
850
- ## Supprimer
2664
+ Tu penses avoir trouvé une faille ? Écris à <support@hgdc.ch>, avec les étapes pour la reproduire. Pour rester dans le cadre de la divulgation responsable :
851
2665
 
852
- Supprimer un projet dans la console efface son index, ses pages et son journal. Le site publié et ton dépôt ne sont pas touchés.
2666
+ - n’accède pas aux données d’une autre organisation, même pour démontrer la faille ;
2667
+ - ne teste pas la charge de la plateforme ;
2668
+ - ne publie pas la faille avant qu’elle soit corrigée.