@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
@@ -0,0 +1,45 @@
1
+ <!DOCTYPE html><html lang="fr-CH" dir="ltr" data-theme="dark" data-has-toc data-has-sidebar class="astro-mxbotnn6"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Déployer depuis GitHub | Host</title><style>:root{--sl-color-accent-low:#172544;--sl-color-accent:#4b8eff;--sl-color-accent-high:#87d3ff;--hgdc-on-accent:#000000;}:root:not([data-hd-theme="dark"]){--sl-color-accent-low:#dcf1ff;--sl-color-accent:#194ff7;--sl-color-accent-high:#0400bf;--hgdc-on-accent:#ffffff;}</style><link rel="shortcut icon" href="/docs/images/logo.svg" type="image/svg+xml"/><meta name="generator" content="Astro v7.3.8"/><meta name="generator" content="Starlight v0.42.6"/><meta property="og:title" content="Déployer depuis GitHub"/><meta property="og:type" content="article"/><meta property="og:locale" content="fr-CH"/><meta property="og:description" content="Importe un dépôt, suis chaque build dans Host et mets le workflow à jour quand Host le fait évoluer."/><meta property="og:site_name" content="Host"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="Importe un dépôt, suis chaque build dans Host et mets le workflow à jour quand Host le fait évoluer."/><link rel="alternate" type="text/markdown" href="/docs/guides/deployer-depuis-github.md"><link rel="describedby" type="text/markdown" href="/docs/llms.txt"><script>
2
+ ;(() => {
3
+ let stored = null
4
+ try {
5
+ stored = localStorage.getItem("starlight-theme")
6
+ } catch {}
7
+ const dark =
8
+ stored === "dark" || (stored === "auto" && matchMedia("(prefers-color-scheme: dark)").matches)
9
+ const theme = dark ? "dark" : "light"
10
+ document.documentElement.dataset.theme = theme
11
+ document.documentElement.dataset.hdTheme = theme
12
+ window.StarlightThemeProvider = { updatePickers() {} }
13
+ })()
14
+ </script><link rel="stylesheet" href="/docs/_astro/print.ehPL0gv-.css" media="print"><link rel="stylesheet" href="/docs/_astro/common.Dx3aBIS0.css"><style>@layer starlight.components{svg:where(.astro-lgqmsw3b){color:var(--sl-icon-color);font-size:var(--sl-icon-size,1em);width:1em;height:1em;overflow:visible}}
15
+ @layer starlight.components{starlight-tabs:where(.astro-a5blunwz){display:block}.tablist-wrapper:where(.astro-a5blunwz){overflow-x:auto}:where(.astro-a5blunwz)[role=tablist]{border-bottom:2px solid var(--sl-color-gray-5);padding:0;list-style:none;display:flex}.tab:where(.astro-a5blunwz){display:flex}.tab:where(.astro-a5blunwz)>:where(.astro-a5blunwz)[role=tab]{--sl-tab-color-border:var(--sl-color-gray-5);line-height:var(--sl-line-height-headings);box-shadow:0 2px 0 var(--sl-tab-color-border);color:var(--sl-color-gray-3);outline-offset:var(--sl-outline-offset-inside);overflow-wrap:initial;align-items:center;gap:.5rem;padding:.275rem 1.25rem;text-decoration:none;display:flex}.tab:where(.astro-a5blunwz) :where(.astro-a5blunwz)[role=tab][aria-selected=true]{--sl-tab-color-border:var(--sl-color-text-accent);color:var(--sl-color-white);font-weight:600}.tablist-wrapper:where(.astro-a5blunwz)~[role=tabpanel]{margin-top:1rem}}
16
+ </style><script type="module" src="/docs/_astro/page.cNngjUgL.js"></script></head><body class="astro-mxbotnn6"><a class="sl-skip-link astro-k4td3kwj" href="#_top">Aller au contenu</a><div class="hd-page"><header class="hd-topbar"><div class="hd-header"><div class="hd-header__start"><button type="button" class="hd-icon-button hd-menu-button" popovertarget="starlight__sidebar" aria-label="Menu de la documentation" aria-controls="starlight__sidebar"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 7h16M4 12h16M4 17h10"></path></svg></button><a class="hd-brand" href="/docs/"><span class="hd-brand__mark"><img class="hd-brand__light" src="/docs/images/logo.svg" alt="" width="24" height="24"><img class="hd-brand__dark" src="/docs/images/logo.svg" alt="" width="24" height="24"></span><span class="hd-brand__name">Host</span></a></div><div class="hd-header__end"><hd-search data-base="/docs" data-assistant><button type="button" class="hd-search-trigger" data-open aria-haspopup="dialog" aria-label="Rechercher (Ctrl K)"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M11 18a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm5-2 4 4"></path></svg><span class="hd-search-trigger__label">Rechercher</span><kbd class="hd-kbd" data-shortcut>Ctrl K</kbd></button><dialog class="hd-palette" aria-label="Rechercher dans la documentation"><div class="hd-palette__box"><div class="hd-palette__field"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M11 18a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm5-2 4 4"></path></svg><input type="search" data-input placeholder="Rechercher dans la documentation" autocomplete="off" spellcheck="false" role="combobox" aria-expanded="false" aria-controls="hd-palette-results" aria-autocomplete="list"><button type="button" class="hd-kbd hd-kbd--button" data-close>Échap</button></div><div class="hd-palette__results" id="hd-palette-results" role="listbox" aria-label="Résultats" data-results></div><p class="hd-palette__status" data-status role="status">Tape un mot pour chercher dans les pages.</p><footer class="hd-palette__hints" aria-hidden="true"><span><kbd class="hd-kbd">↑</kbd><kbd class="hd-kbd">↓</kbd> Choisir</span><span><kbd class="hd-kbd">↵</kbd> Ouvrir</span><span><kbd class="hd-kbd">Échap</kbd> Fermer</span></footer></div></dialog></hd-search><script type="module" src="/docs/_astro/Search.astro_astro_type_script_index_0_lang.D7EcezBU.js"></script><button type="button" class="hd-icon-button" data-hgdc-ask aria-label="Demander à l'assistant" title="Demander à l'assistant (Ctrl I)"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3.5 13.6 8a3 3 0 0 0 1.9 1.9L20 11.5l-4.5 1.6a3 3 0 0 0-1.9 1.9L12 19.5 10.4 15a3 3 0 0 0-1.9-1.9L4 11.5 8.5 9.9A3 3 0 0 0 10.4 8ZM19 3v3M20.5 4.5h-3"></path></svg></button><button type="button" class="hd-icon-button hd-theme-button" data-hd-theme-toggle aria-label="Passer au thème sombre"><svg class="hd-icon hd-theme-button__moon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 14.5A8 8 0 1 1 9.5 4a6.5 6.5 0 0 0 10.5 10.5Z"></path></svg><svg class="hd-icon hd-theme-button__sun" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM12 2.5v2M12 19.5v2M4.6 4.6 6 6M18 18l1.4 1.4M2.5 12h2M19.5 12h2M4.6 19.4 6 18M18 6l1.4-1.4"></path></svg></button><script type="module">var e=`starlight-theme`,t=()=>{try{return localStorage.getItem(e)||`light`}catch{return`light`}},n=()=>matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`,r=t=>{try{localStorage.setItem(e,t)}catch{}let r=t===`auto`?n():t;document.documentElement.dataset.theme=r,document.documentElement.dataset.hdTheme=r,i()},i=()=>{let e=t(),n=document.documentElement.dataset.theme===`dark`;for(let e of document.querySelectorAll(`[data-hd-theme-toggle]`))e.setAttribute(`aria-label`,n?`Passer au thème clair`:`Passer au thème sombre`);for(let t of document.querySelectorAll(`[data-hd-theme]`)){let n=t.dataset.hdTheme===e;t.setAttribute(`aria-checked`,String(n)),t.tabIndex=n?0:-1}};for(let e of document.querySelectorAll(`[data-hd-theme-toggle]`))e.addEventListener(`click`,()=>r(document.documentElement.dataset.theme===`dark`?`light`:`dark`));for(let e of document.querySelectorAll(`.hd-theme-choice`)){let t=[...e.querySelectorAll(`[data-hd-theme]`)];for(let e of t)e.addEventListener(`click`,()=>r(e.dataset.hdTheme));e.addEventListener(`keydown`,e=>{let n=e.key===`ArrowRight`||e.key===`ArrowDown`?1:e.key===`ArrowLeft`||e.key===`ArrowUp`?-1:0;if(!n)return;e.preventDefault();let i=t.findIndex(e=>e.getAttribute(`aria-checked`)===`true`),a=t[(i+n+t.length)%t.length];r(a.dataset.hdTheme),a.focus()})}matchMedia(`(prefers-color-scheme: light)`).addEventListener(`change`,()=>{t()===`auto`&&r(`auto`)}),i();</script></div></div></header><nav class="hd-sidebar" aria-label="Navigation de la documentation"><script type="module">for(let e of document.querySelectorAll(`[data-hgdc-version]`))e.addEventListener(`change`,()=>window.location.assign(e.value));var e=document.querySelector(`.sidebar-pane`);if(e){let t=`hd-sidebar-scroll`;try{let n=Number(sessionStorage.getItem(t));n&&(e.scrollTop=n)}catch{}let n=e.querySelector(`[aria-current="page"]`);if(n){let t=e.getBoundingClientRect(),r=n.getBoundingClientRect();(r.top<t.top||r.bottom>t.bottom)&&n.scrollIntoView({block:`center`})}addEventListener(`pagehide`,()=>{try{sessionStorage.setItem(t,String(e.scrollTop))}catch{}})}</script><hd-sidebar-pane popover="auto" id="starlight__sidebar" class="sidebar-pane"><div class="hd-sidebar__content"><div class="hd-mobile-only hd-sidebar-head"><a class="hd-brand" href="/docs/"><span class="hd-brand__name">Host</span></a><button type="button" class="hd-icon-button" popovertarget="starlight__sidebar" popovertargetaction="hide" aria-label="Fermer le menu"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M6 6l12 12M18 6 6 18"></path></svg></button></div><ul class="hd-nav hd-nav--depth-0"><li class="hd-nav__group"><p class="hd-nav__heading">Démarrer</p><ul class="hd-nav hd-nav--depth-1"><li><a href="/docs/" class="hd-nav__link"><span>Accueil</span></a></li><li><a href="/docs/demarrer/premier-site/" class="hd-nav__link"><span>Premier site</span></a></li><li><a href="/docs/demarrer/depuis-github/" class="hd-nav__link"><span>Depuis GitHub</span></a></li></ul></li><li class="hd-nav__group"><p class="hd-nav__heading">Guides</p><ul class="hd-nav hd-nav--depth-1"><li><a href="/docs/guides/cle-d-api/" class="hd-nav__link"><span>Clés d&#39;API</span></a></li><li><a href="/docs/guides/deployer-depuis-github/" class="hd-nav__link" aria-current="page"><span>Depuis GitHub</span></a></li><li><a href="/docs/guides/github-actions-sans-application/" class="hd-nav__link"><span>GitHub Actions sans l&#39;app</span></a></li><li><a href="/docs/guides/deployer-un-framework/" class="hd-nav__link"><span>Un framework</span></a></li><li><a href="/docs/guides/site-statique/" class="hd-nav__link"><span>Site statique</span></a></li><li><a href="/docs/guides/monorepo/" class="hd-nav__link"><span>Monorepo</span></a></li><li><a href="/docs/guides/brancher-un-domaine/" class="hd-nav__link"><span>Brancher un domaine</span></a></li><li><a href="/docs/guides/variables-d-environnement/" class="hd-nav__link"><span>Variables</span></a></li><li><a href="/docs/guides/synchroniser-doppler/" class="hd-nav__link"><span>Doppler</span></a></li><li><a href="/docs/guides/revenir-en-arriere/" class="hd-nav__link"><span>Revenir en arrière</span></a></li><li><a href="/docs/guides/inviter-une-personne/" class="hd-nav__link"><span>Inviter une personne</span></a></li><li><a href="/docs/guides/lire-les-logs/" class="hd-nav__link"><span>Lire les logs</span></a></li><li><a href="/docs/guides/migrer-depuis-vercel/" class="hd-nav__link"><span>Migrer depuis Vercel</span></a></li><li><a href="/docs/guides/depannage/" class="hd-nav__link"><span>Dépannage</span></a></li></ul></li><li class="hd-nav__group"><p class="hd-nav__heading">Référence</p><ul class="hd-nav hd-nav--depth-1"><li><a href="/docs/reference/cli/" class="hd-nav__link"><span>CLI</span></a></li><li><a href="/docs/reference/variables/" class="hd-nav__link"><span>Variables</span></a></li><li><a href="/docs/reference/domaines/" class="hd-nav__link"><span>Domaines</span></a></li><li><a href="/docs/reference/vercel-json/" class="hd-nav__link"><span>vercel.json</span></a></li><li><a href="/docs/reference/compatibilite/" class="hd-nav__link"><span>Compatibilité</span></a></li><li><a href="/docs/reference/limites/" class="hd-nav__link"><span>Limites</span></a></li><li><details class="hd-nav__fold" open><summary class="hd-nav__link"><span>API</span><svg class="hd-icon hd-nav__chevron" aria-hidden="true" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="m9 6 6 6-6 6"></path></svg></summary><ul class="hd-nav hd-nav--depth-2"><li><a href="/docs/reference/api/introduction/" class="hd-nav__link"><span>Introduction</span></a></li><li><a href="/docs/reference/api/erreurs/" class="hd-nav__link"><span>Erreurs</span></a></li><li><a href="/docs/reference/api/utilisateur/" class="hd-nav__link"><span>Utilisateur et organisation</span></a></li><li><a href="/docs/reference/api/projets/" class="hd-nav__link"><span>Projets</span></a></li><li><a href="/docs/reference/api/deploiements/" class="hd-nav__link"><span>Déploiements</span></a></li><li><a href="/docs/reference/api/fichiers/" class="hd-nav__link"><span>Envoyer un fichier</span></a></li><li><a href="/docs/reference/api/variables/" class="hd-nav__link"><span>Variables</span></a></li></ul></details></li></ul></li><li class="hd-nav__group"><p class="hd-nav__heading">Concepts</p><ul class="hd-nav hd-nav--depth-1"><li><a href="/docs/concepts/deploiements/" class="hd-nav__link"><span>Déploiements</span></a></li><li><a href="/docs/concepts/organisations-et-roles/" class="hd-nav__link"><span>Organisations et rôles</span></a></li><li><a href="/docs/concepts/secrets-et-coffre/" class="hd-nav__link"><span>Secrets et coffre</span></a></li><li><a href="/docs/concepts/preversion/" class="hd-nav__link"><span>Préversion</span></a></li><li><a href="/docs/concepts/confidentialite/" class="hd-nav__link"><span>Sécurité et confidentialité</span></a></li></ul></li></ul><div class="hd-mobile-only hd-sidebar-footer"><div class="hd-theme-choice" role="radiogroup" aria-label="Thème"><button type="button" role="radio" aria-checked="false" data-hd-theme="auto" aria-label="Système" title="Système"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 5h16a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1Zm4 15h8m-4-3v3"></path></svg></button><button type="button" role="radio" aria-checked="false" data-hd-theme="light" aria-label="Clair" title="Clair"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM12 2.5v2M12 19.5v2M4.6 4.6 6 6M18 18l1.4 1.4M2.5 12h2M19.5 12h2M4.6 19.4 6 18M18 6l1.4-1.4"></path></svg></button><button type="button" role="radio" aria-checked="false" data-hd-theme="dark" aria-label="Sombre" title="Sombre"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 14.5A8 8 0 1 1 9.5 4a6.5 6.5 0 0 0 10.5 10.5Z"></path></svg></button></div></div></div></hd-sidebar-pane></nav><div class="hd-main-frame main-frame"><script type="module">var e=document.getElementById(`starlight__sidebar`),t=e?.querySelector(`sl-sidebar-state-persist`),n=`sl-sidebar-state`,r=()=>{let r=[],i=t?.dataset.hash||``;try{let e=sessionStorage.getItem(n),t=JSON.parse(e||`{}`);Array.isArray(t.open)&&t.hash===i&&(r=t.open)}catch{}return{hash:i,open:r,scroll:e?.scrollTop||0}},i=e=>{try{sessionStorage.setItem(n,JSON.stringify(e))}catch{}},a=()=>i(r()),o=(e,t)=>{let n=r();n.open[t]=e,i(n)};t?.addEventListener(`click`,e=>{if(!(e.target instanceof Element))return;let t=e.target.closest(`summary`)?.closest(`details`);if(!t)return;let n=t.querySelector(`sl-sidebar-restore`),r=parseInt(n?.dataset.index||``);isNaN(r)||o(!t.open,r)}),addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&a()});</script><div class="hd-columns hd-columns--toc"><div class="hd-columns__main main-pane"><main data-pagefind-body class="astro-mxbotnn6" lang="fr-CH" dir="ltr"><div class="content-panel astro-64cflj2q"><div class="sl-container astro-64cflj2q"><div class="hd-title not-content"><p class="hd-eyebrow" data-pagefind-meta="section">Guides</p><div class="hd-title__row"><h1 id="_top">Déployer depuis GitHub</h1><div class="hd-page-actions" data-hgdc-skip data-pagefind-ignore><div class="hd-split"><button type="button" class="hd-split__main" data-hgdc-copy="/docs/guides/deployer-depuis-github.md"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M9 9h10a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V10a1 1 0 0 1 1-1Zm-4 6H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5"></path></svg><span data-label>Copier la page</span></button><details class="hd-menu"><summary class="hd-split__more" aria-label="Autres formats de la page"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"></path></svg></summary><ul class="hd-menu__list"><li><button type="button" data-hgdc-copy-item><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M9 9h10a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V10a1 1 0 0 1 1-1Zm-4 6H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5"></path></svg><span><strong>Copier la page</strong><small>En Markdown, pour un LLM</small></span></button></li><li><a href="/docs/guides/deployer-depuis-github.md"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6h16a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1Zm3 9V9l2.5 3L12 9v6m5-6v6m-2-2 2 2 2-2"></path></svg><span><strong>Voir en Markdown</strong><small>La page en texte brut</small></span></a></li><li><a data-hgdc-open="claude" href="https://claude.ai/new" target="_blank" rel="noopener"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M7 17 17 7M8 7h9v9"></path></svg><span><strong>Ouvrir dans Claude</strong><small>Poser une question sur cette page</small></span></a></li><li><a data-hgdc-open="chatgpt" href="https://chatgpt.com/" target="_blank" rel="noopener"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M7 17 17 7M8 7h9v9"></path></svg><span><strong>Ouvrir dans ChatGPT</strong><small>Poser une question sur cette page</small></span></a></li><li><a href="/docs/llms.txt"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8Zm0 0v5h5M9 13h6m-6 4h4"></path></svg><span><strong>llms.txt</strong><small>L'index de la doc pour les agents</small></span></a></li></ul></details></div><span class="sr-only" role="status" aria-live="polite" data-hgdc-copy-status></span></div></div><p class="hd-lead">Importe un dépôt, suis chaque build dans Host et mets le workflow à jour quand Host le fait évoluer.</p></div><script type="module">var e=document.querySelector(`[data-hgdc-copy-status]`),t=document.querySelector(`[data-hgdc-copy]`);async function n(){if(!t)return;let n=t.querySelector(`[data-label]`),r=t=>{n.textContent=t,e&&(e.textContent=t),setTimeout(()=>n.textContent=`Copier la page`,2e3)};try{let e=await fetch(t.dataset.hgdcCopy);if(!e.ok)throw Error(String(e.status));await navigator.clipboard.writeText(await e.text()),r(`Page copiée`)}catch{r(`Copie impossible`)}}if(t?.addEventListener(`click`,()=>void n()),document.querySelector(`[data-hgdc-copy-item]`)?.addEventListener(`click`,()=>{document.querySelector(`.hd-menu`).open=!1,n()}),t){let e=`Lis ${new URL(t.dataset.hgdcCopy,location.href).href} et réponds à mes questions sur cette page.`;for(let t of document.querySelectorAll(`[data-hgdc-open]`))t.href=`${t.dataset.hgdcOpen===`claude`?`https://claude.ai/new`:`https://chatgpt.com/`}?q=${encodeURIComponent(e)}`}for(let e of document.querySelectorAll(`.hd-menu`))document.addEventListener(`click`,t=>{e.open&&!e.contains(t.target)&&(e.open=!1)}),e.addEventListener(`keydown`,t=>{t.key===`Escape`&&e.open&&(t.stopPropagation(),e.open=!1,e.querySelector(`summary`)?.focus())});</script></div></div><div class="content-panel astro-64cflj2q"><div class="sl-container astro-64cflj2q"><div class="sl-markdown-content"><p>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.</p>
17
+ <p><strong>Résultat attendu</strong> : un push déclenche un build visible dans Host, avec sa sortie en direct, puis un déploiement <strong>Prêt</strong>.</p>
18
+ <p><strong>Avant de commencer</strong> : un dépôt où tu as le droit d’écriture, et un site qui se construit avec une commande de build.</p>
19
+ <h2 id="importer-un-dépôt">Importer un dépôt</h2>
20
+ <ol class="hgdc-steps"><li class="hgdc-step"><p class="hgdc-step__title">Installe l&#39;app GitHub</p><div class="hgdc-step__body"><p>Dans <strong>Nouveau projet</strong>, choisis <strong>Importer depuis GitHub</strong> et installe l’app <strong>Host</strong> sur ton compte GitHub ou sur celui de ton organisation. Tu peux la restreindre à certains dépôts.</p><p>Host s’en sert pour lire la liste des dépôts, ouvrir la pull request d’installation et déclencher les builds.</p></div></li><li class="hgdc-step"><p class="hgdc-step__title">Choisis le dépôt</p><div class="hgdc-step__body"><p>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.</p></div></li><li class="hgdc-step"><p class="hgdc-step__title">Vérifie les réglages détectés</p><div class="hgdc-step__body"><p>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.</p><p>Pour un site dans un sous-dossier, voir <a href="/docs/guides/monorepo/">Monorepo et sous-dossier</a>.</p></div></li><li class="hgdc-step"><p class="hgdc-step__title">Fusionne la pull request</p><div class="hgdc-step__body"><p>L’import ouvre une pull request qui ajoute <code>.github/workflows/hgdc-host.yml</code> et pose le secret <code>HGDC_HOST_TOKEN</code>.</p><p><strong>Vérification</strong> : une fois la PR fusionnée, un push sur la branche principale déclenche un build.</p></div></li></ol>
21
+ <h2 id="ce-que-fait-le-workflow">Ce que fait le workflow</h2>
22
+ <ol>
23
+ <li>Il annonce le build à Host. Le déploiement apparaît dans la console dès le début, avec sa sortie en direct.</li>
24
+ <li>Il restaure le cache du run précédent : <code>node_modules</code> tant que ton fichier de verrouillage ne change pas, le cache de ton framework et la CLI Vercel.</li>
25
+ <li>Il lance <code>vercel pull</code> pour récupérer les réglages et les variables, puis <code>vercel build</code>.</li>
26
+ <li>Il envoie le résultat avec <code>vercel deploy --prebuilt</code>, avec <code>--prod</code> sur la branche de production.</li>
27
+ <li>En cas d’échec ou d’annulation, il le signale. Le déploiement passe à <strong>Erreur</strong> ou <strong>Annulé</strong>.</li>
28
+ </ol>
29
+ <p>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.</p>
30
+ <p>Pour repartir d’un cache propre, supprime les caches <code>hgdc-host-*</code> dans l’onglet <strong>Actions</strong> du dépôt.</p>
31
+ <h2 id="déployer-sans-pousser">Déployer sans pousser</h2>
32
+ <p>Dans Host, deux actions relancent un build sans nouveau commit :</p>
33
+ <ul>
34
+ <li><strong>Déployer en production</strong> lance le workflow sur la branche de production.</li>
35
+ <li><strong>Redéployer</strong>, sur un déploiement, reconstruit le même commit avec les variables d’aujourd’hui.</li>
36
+ </ul>
37
+ <p>Le build passe par GitHub Actions, comme pour un push.</p>
38
+ <h2 id="mettre-le-workflow-à-jour">Mettre le workflow à jour</h2>
39
+ <p>Quand Host fait évoluer son workflow, l’onglet <strong>Git</strong> du projet propose <strong>Mettre à jour le workflow</strong>. Host ouvre une pull request qui remplace le fichier. Fusionne-la, puis déploie.</p>
40
+ <h2 id="débrancher-le-dépôt">Débrancher le dépôt</h2>
41
+ <p>Dans l’onglet <strong>Git</strong>, <strong>Débrancher</strong> révoque la clé posée dans le dépôt. Les pushes suivants n’arrivent plus à Host. Supprime ensuite le fichier <code>.github/workflows/hgdc-host.yml</code> du dépôt. Les dépôts branchés avant le changement de nom gardent <code>.github/workflows/smartflow-host.yml</code> et le secret <code>SMARTFLOW_HOST_TOKEN</code> : ils continuent de fonctionner, sans rien changer de ton côté.</p>
42
+ <p>Les variables du projet restent en place, devenues manuelles. Aucun build ne les perd d’un coup.</p>
43
+ <aside class="hd-callout" data-tone="tip" aria-label="Astuce"><svg class="hd-icon hd-callout__icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18h6m-5 3h4M12 3a6 6 0 0 0-3.6 10.8c.5.4.6.8.6 1.2v.5h6V15c0-.4.2-.8.6-1.2A6 6 0 0 0 12 3Z"></path></svg><div class="hd-callout__body"><p>Tu préfères écrire ton propre workflow ? Voir <a href="/docs/guides/github-actions-sans-application/">GitHub Actions sans l’application</a>.</p></div></aside>
44
+ <h2 id="si-ça-ne-marche-pas">Si ça ne marche pas</h2>
45
+ <p>Voir <a href="/docs/guides/depannage/#le-build-github-est-absent">Dépannage</a> pour le build qui n’apparaît pas, et la sortie du run dans l’onglet <strong>Actions</strong> du dépôt pour le build qui échoue.</p></div><hgdc-feedback class="hgdc-feedback not-content" data-endpoint="https://docs.hgdc.ch/api/v1/feedback" data-project="js743wp3001k1jvrdad0fwcjx18gc789" data-pagefind-ignore="true"><div data-step="ask"><p class="hgdc-feedback__question">Cette page t'a aidé ?</p><div class="hgdc-feedback__choices"><button type="button" data-helpful="true"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M7 10v11M15 5.9 14 10h5.8a2 2 0 0 1 1.9 2.5l-2.3 7A2 2 0 0 1 17.5 21H4a1 1 0 0 1-1-1v-9a1 1 0 0 1 1-1h2.8a2 2 0 0 0 1.8-1.1L12 2a3.1 3.1 0 0 1 3 3.9Z"></path></svg>Oui</button><button type="button" data-helpful="false"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M17 14V3M9 18.1 10 14H4.2a2 2 0 0 1-1.9-2.5l2.3-7A2 2 0 0 1 6.5 3H20a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1h-2.8a2 2 0 0 0-1.8 1.1L12 22a3.1 3.1 0 0 1-3-3.9Z"></path></svg>Non</button></div></div><form data-step="comment" hidden><label for="hgdc-feedback-comment">Qu'est-ce qui manquait ou pourrait être plus clair ? (facultatif)</label><textarea id="hgdc-feedback-comment" name="comment" rows="3" maxlength="1000"></textarea><div class="hgdc-feedback__choices"><button type="submit">Envoyer</button><button type="button" data-skip>Passer</button></div></form><p data-step="done" class="hgdc-feedback__done" role="status" hidden>Merci, c'est noté.</p></hgdc-feedback><nav class="hd-pagination not-content" aria-label="Pages voisines" data-pagefind-ignore><a class="hd-pagination__link" href="/docs/guides/cle-d-api/" rel="prev"><span class="hd-pagination__hint"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="m15 6-6 6 6 6"></path></svg>Précédent</span><span class="hd-pagination__title">Clés d&#39;API</span></a><a class="hd-pagination__link hd-pagination__link--next" href="/docs/guides/github-actions-sans-application/" rel="next"><span class="hd-pagination__hint">Suivant<svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="m9 6 6 6-6 6"></path></svg></span><span class="hd-pagination__title">GitHub Actions sans l&#39;app</span></a></nav><script type="module" src="/docs/_astro/Footer.astro_astro_type_script_index_0_lang.DzCnn3OT.js"></script></div></div></main><form class="hd-askbar" data-askbar data-pagefind-ignore><label class="sr-only" for="hd-askbar-input">Pose une question à l'assistant</label><input id="hd-askbar-input" data-askbar-input type="text" maxlength="1000" placeholder="Pose une question…" autocomplete="off"><kbd class="hd-kbd" data-shortcut aria-hidden="true">Ctrl I</kbd><button type="submit" class="hd-send" aria-label="Envoyer la question"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19V5m-6 6 6-6 6 6"></path></svg></button></form></div><aside class="hd-columns__toc" aria-label="Sur cette page"><div class="hd-toc-scroll"><starlight-toc data-min-h="2" data-max-h="3"><nav aria-labelledby="starlight__on-this-page"><h2 id="starlight__on-this-page">Sur cette page</h2><ul class="astro-jxyovztp" style="--depth: 0;"><li style="--depth: 0;" class="astro-jxyovztp"><a href="#_top" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Vue d’ensemble</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#importer-un-dépôt" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Importer un dépôt</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#ce-que-fait-le-workflow" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Ce que fait le workflow</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#déployer-sans-pousser" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Déployer sans pousser</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#mettre-le-workflow-à-jour" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Mettre le workflow à jour</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#débrancher-le-dépôt" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Débrancher le dépôt</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#si-ça-ne-marche-pas" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Si ça ne marche pas</span></a></li></ul></nav></starlight-toc><script type="module">var e=`_top`,t=class extends HTMLElement{_current=this.querySelector(`a[aria-current="true"]`);minH=parseInt(this.dataset.minH||`2`,10);maxH=parseInt(this.dataset.maxH||`3`,10);tocHeadingSelector=`h1#${e},:where(${[...Array.from({length:1+this.maxH-this.minH}).map((e,t)=>`h${this.minH+t}`)].join()})[id]`;set current(e){e!==this._current&&(this._current&&this._current.removeAttribute(`aria-current`),e.setAttribute(`aria-current`,`true`),this._current=e)}onIdle=e=>(window.requestIdleCallback||(e=>setTimeout(e,1)))(e);constructor(){super(),this.onIdle(()=>this.init())}init=()=>{let t=[...this.querySelectorAll(`a`)],n=e=>e.matches(this.tocHeadingSelector),r=t=>{for(;t;){if(t.matches(`.sl-markdown-content, main > *`))return document.getElementById(e);if(n(t))return t;let r=t.querySelector(this.tocHeadingSelector);if(r)return r;let i=t.previousElementSibling;for(;i?.lastElementChild;)i=i.lastElementChild;t=i??t.parentElement}return null},i=e=>{for(let{isIntersecting:n,target:i}of e){if(!n)continue;let e=r(i);if(!e)continue;let a=t.find(t=>t.hash===`#`+encodeURIComponent(e.id));if(a){this.current=a;break}}},a=document.querySelectorAll([`main :where(${this.tocHeadingSelector})`,`main :where(${this.tocHeadingSelector}, .sl-heading-wrapper) ~ *:not(:has(${this.tocHeadingSelector}))`,`main .sl-markdown-content > *:not(:has(${this.tocHeadingSelector}))`,`main > *:not(:has(${this.tocHeadingSelector}))`].join()),o,s=()=>{o||(o=new IntersectionObserver(i,{rootMargin:this.getRootMargin()}),a.forEach(e=>o.observe(e)))};s();let c;window.addEventListener(`resize`,()=>{o&&=(o.disconnect(),void 0),clearTimeout(c),c=setTimeout(()=>this.onIdle(s),200)})};getRootMargin(){let e=(document.querySelector(`header`)?.getBoundingClientRect().height||0)+(this.querySelector(`summary`)?.getBoundingClientRect().height||0)+32;return`-${e}px 0% ${e+53-document.documentElement.clientHeight}px`}};customElements.define(`starlight-toc`,t);</script></div></aside></div><footer class="hd-site-footer" data-pagefind-ignore><div class="hd-site-footer__row"><a class="hd-brand hd-brand--footer" href="/docs/"><span class="hd-brand__mark"><img class="hd-brand__light" src="/docs/images/logo.svg" alt="" width="20" height="20" loading="lazy"><img class="hd-brand__dark" src="/docs/images/logo.svg" alt="" width="20" height="20" loading="lazy"></span><span class="hd-brand__name">Host</span></a></div><div class="hd-site-footer__row hd-site-footer__row--meta"><p>Ton site en ligne, déployé à chaque modification.</p><div class="hd-theme-choice" role="radiogroup" aria-label="Thème"><button type="button" role="radio" aria-checked="false" data-hd-theme="auto" aria-label="Système" title="Système"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 5h16a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1Zm4 15h8m-4-3v3"></path></svg></button><button type="button" role="radio" aria-checked="false" data-hd-theme="light" aria-label="Clair" title="Clair"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM12 2.5v2M12 19.5v2M4.6 4.6 6 6M18 18l1.4 1.4M2.5 12h2M19.5 12h2M4.6 19.4 6 18M18 6l1.4-1.4"></path></svg></button><button type="button" role="radio" aria-checked="false" data-hd-theme="dark" aria-label="Sombre" title="Sombre"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 14.5A8 8 0 1 1 9.5 4a6.5 6.5 0 0 0 10.5 10.5Z"></path></svg></button></div></div></footer></div><hgdc-assistant data-endpoint="https://docs.hgdc.ch/api/v1/ask" data-project="js743wp3001k1jvrdad0fwcjx18gc789" data-name="Host"><section class="hgdc-panel" role="dialog" aria-modal="false" aria-labelledby="hgdc-assistant-title" data-panel inert><div class="hgdc-panel__grip" aria-hidden="true"></div><header class="hgdc-panel__header"><h2 id="hgdc-assistant-title"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3.5 13.6 8a3 3 0 0 0 1.9 1.9L20 11.5l-4.5 1.6a3 3 0 0 0-1.9 1.9L12 19.5 10.4 15a3 3 0 0 0-1.9-1.9L4 11.5 8.5 9.9A3 3 0 0 0 10.4 8ZM19 3v3M20.5 4.5h-3"></path></svg>Assistant</h2><div class="hgdc-panel__tools"><button type="button" class="hd-icon-button" data-reset aria-label="Nouvelle conversation" title="Nouvelle conversation" hidden><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 12a8 8 0 1 0 2.3-5.7M4 4v4h4"></path></svg></button><button type="button" class="hd-icon-button" data-close aria-label="Fermer l'assistant" title="Fermer (Échap)"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M6 6l12 12M18 6 6 18"></path></svg></button></div></header><div class="hgdc-panel__body" data-log aria-live="polite"><div class="hgdc-empty" data-empty><p class="hgdc-empty__title">Pose ta question sur Host.</p><p>Je cherche dans les pages de cette documentation et je cite mes sources. Si la réponse n'y est pas, je te le dis.</p></div></div><form class="hgdc-panel__form" data-form><label class="sr-only" for="hgdc-question">Ta question</label><textarea id="hgdc-question" data-input rows="1" maxlength="1000" placeholder="Pose une question…" required></textarea><button type="submit" class="hd-send" data-send aria-label="Envoyer la question"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19V5m-6 6 6-6 6 6"></path></svg></button></form><p class="hgdc-panel__note">Réponses générées par IA (Claude, d'Anthropic), à vérifier. Les questions sont conservées 90 jours pour améliorer cette documentation.</p></section></hgdc-assistant><script type="module" src="/docs/_astro/Assistant.astro_astro_type_script_index_0_lang.C1pz7yK1.js"></script></div><script type="module">var e=class extends HTMLElement{connectedCallback(){let e=matchMedia(`(min-width: 50em)`),t=()=>{e.matches&&this.matches(`:popover-open`)&&this.hidePopover(),this.popover=e.matches?null:`auto`};t(),e.addEventListener(`change`,t),this.addEventListener(`toggle`,e=>{let t=e.newState===`open`;for(let e of document.querySelectorAll(`.hd-main-frame, .hd-askbar`))e.toggleAttribute(`inert`,t);document.documentElement.toggleAttribute(`data-hd-menu`,t)}),this.addEventListener(`click`,e=>{e.target.closest(`a`)&&this.matches(`:popover-open`)&&this.hidePopover()})}};customElements.define(`hd-sidebar-pane`,e);</script></body></html>
@@ -0,0 +1,70 @@
1
+ # Déployer depuis GitHub
2
+
3
+ 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.
4
+
5
+ **Résultat attendu** : un push déclenche un build visible dans Host, avec sa sortie en direct, puis un déploiement **Prêt**.
6
+
7
+ **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.
8
+
9
+ ## Importer un dépôt
10
+
11
+ 1. **Installe l'app GitHub**
12
+
13
+ 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.
14
+
15
+ Host s’en sert pour lire la liste des dépôts, ouvrir la pull request d’installation et déclencher les builds.
16
+
17
+ 2. **Choisis le dépôt**
18
+
19
+ 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.
20
+
21
+ 3. **Vérifie les réglages détectés**
22
+
23
+ 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.
24
+
25
+ Pour un site dans un sous-dossier, voir [Monorepo et sous-dossier](/docs/guides/monorepo/).
26
+
27
+ 4. **Fusionne la pull request**
28
+
29
+ L’import ouvre une pull request qui ajoute `.github/workflows/hgdc-host.yml` et pose le secret `HGDC_HOST_TOKEN`.
30
+
31
+ **Vérification** : une fois la PR fusionnée, un push sur la branche principale déclenche un build.
32
+
33
+ ## Ce que fait le workflow
34
+
35
+ 1. Il annonce le build à Host. Le déploiement apparaît dans la console dès le début, avec sa sortie en direct.
36
+ 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.
37
+ 3. Il lance `vercel pull` pour récupérer les réglages et les variables, puis `vercel build`.
38
+ 4. Il envoie le résultat avec `vercel deploy --prebuilt`, avec `--prod` sur la branche de production.
39
+ 5. En cas d’échec ou d’annulation, il le signale. Le déploiement passe à **Erreur** ou **Annulé**.
40
+
41
+ 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.
42
+
43
+ Pour repartir d’un cache propre, supprime les caches `hgdc-host-*` dans l’onglet **Actions** du dépôt.
44
+
45
+ ## Déployer sans pousser
46
+
47
+ Dans Host, deux actions relancent un build sans nouveau commit :
48
+
49
+ - **Déployer en production** lance le workflow sur la branche de production.
50
+ - **Redéployer**, sur un déploiement, reconstruit le même commit avec les variables d’aujourd’hui.
51
+
52
+ Le build passe par GitHub Actions, comme pour un push.
53
+
54
+ ## Mettre le workflow à jour
55
+
56
+ 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.
57
+
58
+ ## Débrancher le dépôt
59
+
60
+ 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é.
61
+
62
+ Les variables du projet restent en place, devenues manuelles. Aucun build ne les perd d’un coup.
63
+
64
+ > **Astuce**
65
+ >
66
+ > Tu préfères écrire ton propre workflow ? Voir [GitHub Actions sans l’application](/docs/guides/github-actions-sans-application/).
67
+
68
+ ## Si ça ne marche pas
69
+
70
+ 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.
@@ -0,0 +1,81 @@
1
+ <!DOCTYPE html><html lang="fr-CH" dir="ltr" data-theme="dark" data-has-toc data-has-sidebar class="astro-mxbotnn6"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Déployer un framework | Host</title><style>:root{--sl-color-accent-low:#172544;--sl-color-accent:#4b8eff;--sl-color-accent-high:#87d3ff;--hgdc-on-accent:#000000;}:root:not([data-hd-theme="dark"]){--sl-color-accent-low:#dcf1ff;--sl-color-accent:#194ff7;--sl-color-accent-high:#0400bf;--hgdc-on-accent:#ffffff;}</style><link rel="shortcut icon" href="/docs/images/logo.svg" type="image/svg+xml"/><meta name="generator" content="Astro v7.3.8"/><meta name="generator" content="Starlight v0.42.6"/><meta property="og:title" content="Déployer un framework"/><meta property="og:type" content="article"/><meta property="og:locale" content="fr-CH"/><meta property="og:description" content="Construis ton site avec vercel build, puis envoie le résultat. Astro, Vite, Next.js, SvelteKit, Nuxt et les autres."/><meta property="og:site_name" content="Host"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="Construis ton site avec vercel build, puis envoie le résultat. Astro, Vite, Next.js, SvelteKit, Nuxt et les autres."/><link rel="alternate" type="text/markdown" href="/docs/guides/deployer-un-framework.md"><link rel="describedby" type="text/markdown" href="/docs/llms.txt"><script>
2
+ ;(() => {
3
+ let stored = null
4
+ try {
5
+ stored = localStorage.getItem("starlight-theme")
6
+ } catch {}
7
+ const dark =
8
+ stored === "dark" || (stored === "auto" && matchMedia("(prefers-color-scheme: dark)").matches)
9
+ const theme = dark ? "dark" : "light"
10
+ document.documentElement.dataset.theme = theme
11
+ document.documentElement.dataset.hdTheme = theme
12
+ window.StarlightThemeProvider = { updatePickers() {} }
13
+ })()
14
+ </script><link rel="stylesheet" href="/docs/_astro/print.ehPL0gv-.css" media="print"><link rel="stylesheet" href="/docs/_astro/common.Dx3aBIS0.css"><style>@layer starlight.components{svg:where(.astro-lgqmsw3b){color:var(--sl-icon-color);font-size:var(--sl-icon-size,1em);width:1em;height:1em;overflow:visible}}
15
+ @layer starlight.components{starlight-tabs:where(.astro-a5blunwz){display:block}.tablist-wrapper:where(.astro-a5blunwz){overflow-x:auto}:where(.astro-a5blunwz)[role=tablist]{border-bottom:2px solid var(--sl-color-gray-5);padding:0;list-style:none;display:flex}.tab:where(.astro-a5blunwz){display:flex}.tab:where(.astro-a5blunwz)>:where(.astro-a5blunwz)[role=tab]{--sl-tab-color-border:var(--sl-color-gray-5);line-height:var(--sl-line-height-headings);box-shadow:0 2px 0 var(--sl-tab-color-border);color:var(--sl-color-gray-3);outline-offset:var(--sl-outline-offset-inside);overflow-wrap:initial;align-items:center;gap:.5rem;padding:.275rem 1.25rem;text-decoration:none;display:flex}.tab:where(.astro-a5blunwz) :where(.astro-a5blunwz)[role=tab][aria-selected=true]{--sl-tab-color-border:var(--sl-color-text-accent);color:var(--sl-color-white);font-weight:600}.tablist-wrapper:where(.astro-a5blunwz)~[role=tabpanel]{margin-top:1rem}}
16
+ </style><script type="module" src="/docs/_astro/page.cNngjUgL.js"></script></head><body class="astro-mxbotnn6"><a class="sl-skip-link astro-k4td3kwj" href="#_top">Aller au contenu</a><div class="hd-page"><header class="hd-topbar"><div class="hd-header"><div class="hd-header__start"><button type="button" class="hd-icon-button hd-menu-button" popovertarget="starlight__sidebar" aria-label="Menu de la documentation" aria-controls="starlight__sidebar"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 7h16M4 12h16M4 17h10"></path></svg></button><a class="hd-brand" href="/docs/"><span class="hd-brand__mark"><img class="hd-brand__light" src="/docs/images/logo.svg" alt="" width="24" height="24"><img class="hd-brand__dark" src="/docs/images/logo.svg" alt="" width="24" height="24"></span><span class="hd-brand__name">Host</span></a></div><div class="hd-header__end"><hd-search data-base="/docs" data-assistant><button type="button" class="hd-search-trigger" data-open aria-haspopup="dialog" aria-label="Rechercher (Ctrl K)"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M11 18a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm5-2 4 4"></path></svg><span class="hd-search-trigger__label">Rechercher</span><kbd class="hd-kbd" data-shortcut>Ctrl K</kbd></button><dialog class="hd-palette" aria-label="Rechercher dans la documentation"><div class="hd-palette__box"><div class="hd-palette__field"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M11 18a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm5-2 4 4"></path></svg><input type="search" data-input placeholder="Rechercher dans la documentation" autocomplete="off" spellcheck="false" role="combobox" aria-expanded="false" aria-controls="hd-palette-results" aria-autocomplete="list"><button type="button" class="hd-kbd hd-kbd--button" data-close>Échap</button></div><div class="hd-palette__results" id="hd-palette-results" role="listbox" aria-label="Résultats" data-results></div><p class="hd-palette__status" data-status role="status">Tape un mot pour chercher dans les pages.</p><footer class="hd-palette__hints" aria-hidden="true"><span><kbd class="hd-kbd">↑</kbd><kbd class="hd-kbd">↓</kbd> Choisir</span><span><kbd class="hd-kbd">↵</kbd> Ouvrir</span><span><kbd class="hd-kbd">Échap</kbd> Fermer</span></footer></div></dialog></hd-search><script type="module" src="/docs/_astro/Search.astro_astro_type_script_index_0_lang.D7EcezBU.js"></script><button type="button" class="hd-icon-button" data-hgdc-ask aria-label="Demander à l'assistant" title="Demander à l'assistant (Ctrl I)"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3.5 13.6 8a3 3 0 0 0 1.9 1.9L20 11.5l-4.5 1.6a3 3 0 0 0-1.9 1.9L12 19.5 10.4 15a3 3 0 0 0-1.9-1.9L4 11.5 8.5 9.9A3 3 0 0 0 10.4 8ZM19 3v3M20.5 4.5h-3"></path></svg></button><button type="button" class="hd-icon-button hd-theme-button" data-hd-theme-toggle aria-label="Passer au thème sombre"><svg class="hd-icon hd-theme-button__moon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 14.5A8 8 0 1 1 9.5 4a6.5 6.5 0 0 0 10.5 10.5Z"></path></svg><svg class="hd-icon hd-theme-button__sun" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM12 2.5v2M12 19.5v2M4.6 4.6 6 6M18 18l1.4 1.4M2.5 12h2M19.5 12h2M4.6 19.4 6 18M18 6l1.4-1.4"></path></svg></button><script type="module">var e=`starlight-theme`,t=()=>{try{return localStorage.getItem(e)||`light`}catch{return`light`}},n=()=>matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`,r=t=>{try{localStorage.setItem(e,t)}catch{}let r=t===`auto`?n():t;document.documentElement.dataset.theme=r,document.documentElement.dataset.hdTheme=r,i()},i=()=>{let e=t(),n=document.documentElement.dataset.theme===`dark`;for(let e of document.querySelectorAll(`[data-hd-theme-toggle]`))e.setAttribute(`aria-label`,n?`Passer au thème clair`:`Passer au thème sombre`);for(let t of document.querySelectorAll(`[data-hd-theme]`)){let n=t.dataset.hdTheme===e;t.setAttribute(`aria-checked`,String(n)),t.tabIndex=n?0:-1}};for(let e of document.querySelectorAll(`[data-hd-theme-toggle]`))e.addEventListener(`click`,()=>r(document.documentElement.dataset.theme===`dark`?`light`:`dark`));for(let e of document.querySelectorAll(`.hd-theme-choice`)){let t=[...e.querySelectorAll(`[data-hd-theme]`)];for(let e of t)e.addEventListener(`click`,()=>r(e.dataset.hdTheme));e.addEventListener(`keydown`,e=>{let n=e.key===`ArrowRight`||e.key===`ArrowDown`?1:e.key===`ArrowLeft`||e.key===`ArrowUp`?-1:0;if(!n)return;e.preventDefault();let i=t.findIndex(e=>e.getAttribute(`aria-checked`)===`true`),a=t[(i+n+t.length)%t.length];r(a.dataset.hdTheme),a.focus()})}matchMedia(`(prefers-color-scheme: light)`).addEventListener(`change`,()=>{t()===`auto`&&r(`auto`)}),i();</script></div></div></header><nav class="hd-sidebar" aria-label="Navigation de la documentation"><script type="module">for(let e of document.querySelectorAll(`[data-hgdc-version]`))e.addEventListener(`change`,()=>window.location.assign(e.value));var e=document.querySelector(`.sidebar-pane`);if(e){let t=`hd-sidebar-scroll`;try{let n=Number(sessionStorage.getItem(t));n&&(e.scrollTop=n)}catch{}let n=e.querySelector(`[aria-current="page"]`);if(n){let t=e.getBoundingClientRect(),r=n.getBoundingClientRect();(r.top<t.top||r.bottom>t.bottom)&&n.scrollIntoView({block:`center`})}addEventListener(`pagehide`,()=>{try{sessionStorage.setItem(t,String(e.scrollTop))}catch{}})}</script><hd-sidebar-pane popover="auto" id="starlight__sidebar" class="sidebar-pane"><div class="hd-sidebar__content"><div class="hd-mobile-only hd-sidebar-head"><a class="hd-brand" href="/docs/"><span class="hd-brand__name">Host</span></a><button type="button" class="hd-icon-button" popovertarget="starlight__sidebar" popovertargetaction="hide" aria-label="Fermer le menu"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M6 6l12 12M18 6 6 18"></path></svg></button></div><ul class="hd-nav hd-nav--depth-0"><li class="hd-nav__group"><p class="hd-nav__heading">Démarrer</p><ul class="hd-nav hd-nav--depth-1"><li><a href="/docs/" class="hd-nav__link"><span>Accueil</span></a></li><li><a href="/docs/demarrer/premier-site/" class="hd-nav__link"><span>Premier site</span></a></li><li><a href="/docs/demarrer/depuis-github/" class="hd-nav__link"><span>Depuis GitHub</span></a></li></ul></li><li class="hd-nav__group"><p class="hd-nav__heading">Guides</p><ul class="hd-nav hd-nav--depth-1"><li><a href="/docs/guides/cle-d-api/" class="hd-nav__link"><span>Clés d&#39;API</span></a></li><li><a href="/docs/guides/deployer-depuis-github/" class="hd-nav__link"><span>Depuis GitHub</span></a></li><li><a href="/docs/guides/github-actions-sans-application/" class="hd-nav__link"><span>GitHub Actions sans l&#39;app</span></a></li><li><a href="/docs/guides/deployer-un-framework/" class="hd-nav__link" aria-current="page"><span>Un framework</span></a></li><li><a href="/docs/guides/site-statique/" class="hd-nav__link"><span>Site statique</span></a></li><li><a href="/docs/guides/monorepo/" class="hd-nav__link"><span>Monorepo</span></a></li><li><a href="/docs/guides/brancher-un-domaine/" class="hd-nav__link"><span>Brancher un domaine</span></a></li><li><a href="/docs/guides/variables-d-environnement/" class="hd-nav__link"><span>Variables</span></a></li><li><a href="/docs/guides/synchroniser-doppler/" class="hd-nav__link"><span>Doppler</span></a></li><li><a href="/docs/guides/revenir-en-arriere/" class="hd-nav__link"><span>Revenir en arrière</span></a></li><li><a href="/docs/guides/inviter-une-personne/" class="hd-nav__link"><span>Inviter une personne</span></a></li><li><a href="/docs/guides/lire-les-logs/" class="hd-nav__link"><span>Lire les logs</span></a></li><li><a href="/docs/guides/migrer-depuis-vercel/" class="hd-nav__link"><span>Migrer depuis Vercel</span></a></li><li><a href="/docs/guides/depannage/" class="hd-nav__link"><span>Dépannage</span></a></li></ul></li><li class="hd-nav__group"><p class="hd-nav__heading">Référence</p><ul class="hd-nav hd-nav--depth-1"><li><a href="/docs/reference/cli/" class="hd-nav__link"><span>CLI</span></a></li><li><a href="/docs/reference/variables/" class="hd-nav__link"><span>Variables</span></a></li><li><a href="/docs/reference/domaines/" class="hd-nav__link"><span>Domaines</span></a></li><li><a href="/docs/reference/vercel-json/" class="hd-nav__link"><span>vercel.json</span></a></li><li><a href="/docs/reference/compatibilite/" class="hd-nav__link"><span>Compatibilité</span></a></li><li><a href="/docs/reference/limites/" class="hd-nav__link"><span>Limites</span></a></li><li><details class="hd-nav__fold" open><summary class="hd-nav__link"><span>API</span><svg class="hd-icon hd-nav__chevron" aria-hidden="true" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="m9 6 6 6-6 6"></path></svg></summary><ul class="hd-nav hd-nav--depth-2"><li><a href="/docs/reference/api/introduction/" class="hd-nav__link"><span>Introduction</span></a></li><li><a href="/docs/reference/api/erreurs/" class="hd-nav__link"><span>Erreurs</span></a></li><li><a href="/docs/reference/api/utilisateur/" class="hd-nav__link"><span>Utilisateur et organisation</span></a></li><li><a href="/docs/reference/api/projets/" class="hd-nav__link"><span>Projets</span></a></li><li><a href="/docs/reference/api/deploiements/" class="hd-nav__link"><span>Déploiements</span></a></li><li><a href="/docs/reference/api/fichiers/" class="hd-nav__link"><span>Envoyer un fichier</span></a></li><li><a href="/docs/reference/api/variables/" class="hd-nav__link"><span>Variables</span></a></li></ul></details></li></ul></li><li class="hd-nav__group"><p class="hd-nav__heading">Concepts</p><ul class="hd-nav hd-nav--depth-1"><li><a href="/docs/concepts/deploiements/" class="hd-nav__link"><span>Déploiements</span></a></li><li><a href="/docs/concepts/organisations-et-roles/" class="hd-nav__link"><span>Organisations et rôles</span></a></li><li><a href="/docs/concepts/secrets-et-coffre/" class="hd-nav__link"><span>Secrets et coffre</span></a></li><li><a href="/docs/concepts/preversion/" class="hd-nav__link"><span>Préversion</span></a></li><li><a href="/docs/concepts/confidentialite/" class="hd-nav__link"><span>Sécurité et confidentialité</span></a></li></ul></li></ul><div class="hd-mobile-only hd-sidebar-footer"><div class="hd-theme-choice" role="radiogroup" aria-label="Thème"><button type="button" role="radio" aria-checked="false" data-hd-theme="auto" aria-label="Système" title="Système"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 5h16a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1Zm4 15h8m-4-3v3"></path></svg></button><button type="button" role="radio" aria-checked="false" data-hd-theme="light" aria-label="Clair" title="Clair"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM12 2.5v2M12 19.5v2M4.6 4.6 6 6M18 18l1.4 1.4M2.5 12h2M19.5 12h2M4.6 19.4 6 18M18 6l1.4-1.4"></path></svg></button><button type="button" role="radio" aria-checked="false" data-hd-theme="dark" aria-label="Sombre" title="Sombre"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 14.5A8 8 0 1 1 9.5 4a6.5 6.5 0 0 0 10.5 10.5Z"></path></svg></button></div></div></div></hd-sidebar-pane></nav><div class="hd-main-frame main-frame"><script type="module">var e=document.getElementById(`starlight__sidebar`),t=e?.querySelector(`sl-sidebar-state-persist`),n=`sl-sidebar-state`,r=()=>{let r=[],i=t?.dataset.hash||``;try{let e=sessionStorage.getItem(n),t=JSON.parse(e||`{}`);Array.isArray(t.open)&&t.hash===i&&(r=t.open)}catch{}return{hash:i,open:r,scroll:e?.scrollTop||0}},i=e=>{try{sessionStorage.setItem(n,JSON.stringify(e))}catch{}},a=()=>i(r()),o=(e,t)=>{let n=r();n.open[t]=e,i(n)};t?.addEventListener(`click`,e=>{if(!(e.target instanceof Element))return;let t=e.target.closest(`summary`)?.closest(`details`);if(!t)return;let n=t.querySelector(`sl-sidebar-restore`),r=parseInt(n?.dataset.index||``);isNaN(r)||o(!t.open,r)}),addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&a()});</script><div class="hd-columns hd-columns--toc"><div class="hd-columns__main main-pane"><main data-pagefind-body class="astro-mxbotnn6" lang="fr-CH" dir="ltr"><div class="content-panel astro-64cflj2q"><div class="sl-container astro-64cflj2q"><div class="hd-title not-content"><p class="hd-eyebrow" data-pagefind-meta="section">Guides</p><div class="hd-title__row"><h1 id="_top">Déployer un framework</h1><div class="hd-page-actions" data-hgdc-skip data-pagefind-ignore><div class="hd-split"><button type="button" class="hd-split__main" data-hgdc-copy="/docs/guides/deployer-un-framework.md"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M9 9h10a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V10a1 1 0 0 1 1-1Zm-4 6H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5"></path></svg><span data-label>Copier la page</span></button><details class="hd-menu"><summary class="hd-split__more" aria-label="Autres formats de la page"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"></path></svg></summary><ul class="hd-menu__list"><li><button type="button" data-hgdc-copy-item><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M9 9h10a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V10a1 1 0 0 1 1-1Zm-4 6H4.5A1.5 1.5 0 0 1 3 13.5v-9A1.5 1.5 0 0 1 4.5 3h9A1.5 1.5 0 0 1 15 4.5V5"></path></svg><span><strong>Copier la page</strong><small>En Markdown, pour un LLM</small></span></button></li><li><a href="/docs/guides/deployer-un-framework.md"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6h16a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1Zm3 9V9l2.5 3L12 9v6m5-6v6m-2-2 2 2 2-2"></path></svg><span><strong>Voir en Markdown</strong><small>La page en texte brut</small></span></a></li><li><a data-hgdc-open="claude" href="https://claude.ai/new" target="_blank" rel="noopener"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M7 17 17 7M8 7h9v9"></path></svg><span><strong>Ouvrir dans Claude</strong><small>Poser une question sur cette page</small></span></a></li><li><a data-hgdc-open="chatgpt" href="https://chatgpt.com/" target="_blank" rel="noopener"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M7 17 17 7M8 7h9v9"></path></svg><span><strong>Ouvrir dans ChatGPT</strong><small>Poser une question sur cette page</small></span></a></li><li><a href="/docs/llms.txt"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8Zm0 0v5h5M9 13h6m-6 4h4"></path></svg><span><strong>llms.txt</strong><small>L'index de la doc pour les agents</small></span></a></li></ul></details></div><span class="sr-only" role="status" aria-live="polite" data-hgdc-copy-status></span></div></div><p class="hd-lead">Construis ton site avec vercel build, puis envoie le résultat. Astro, Vite, Next.js, SvelteKit, Nuxt et les autres.</p></div><script type="module">var e=document.querySelector(`[data-hgdc-copy-status]`),t=document.querySelector(`[data-hgdc-copy]`);async function n(){if(!t)return;let n=t.querySelector(`[data-label]`),r=t=>{n.textContent=t,e&&(e.textContent=t),setTimeout(()=>n.textContent=`Copier la page`,2e3)};try{let e=await fetch(t.dataset.hgdcCopy);if(!e.ok)throw Error(String(e.status));await navigator.clipboard.writeText(await e.text()),r(`Page copiée`)}catch{r(`Copie impossible`)}}if(t?.addEventListener(`click`,()=>void n()),document.querySelector(`[data-hgdc-copy-item]`)?.addEventListener(`click`,()=>{document.querySelector(`.hd-menu`).open=!1,n()}),t){let e=`Lis ${new URL(t.dataset.hgdcCopy,location.href).href} et réponds à mes questions sur cette page.`;for(let t of document.querySelectorAll(`[data-hgdc-open]`))t.href=`${t.dataset.hgdcOpen===`claude`?`https://claude.ai/new`:`https://chatgpt.com/`}?q=${encodeURIComponent(e)}`}for(let e of document.querySelectorAll(`.hd-menu`))document.addEventListener(`click`,t=>{e.open&&!e.contains(t.target)&&(e.open=!1)}),e.addEventListener(`keydown`,t=>{t.key===`Escape`&&e.open&&(t.stopPropagation(),e.open=!1,e.querySelector(`summary`)?.focus())});</script></div></div><div class="content-panel astro-64cflj2q"><div class="sl-container astro-64cflj2q"><div class="sl-markdown-content"><p>Host sert ce que <code>vercel build</code> 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.</p>
17
+ <p><strong>Résultat attendu</strong> : un déploiement <strong>Prêt</strong> dont la page affiche ton site construit.</p>
18
+ <p><strong>Avant de commencer</strong> : une commande de build qui fonctionne sur ton poste, et une clé d’API dans <code>VERCEL_TOKEN</code>. Pour la liste des frameworks et de ce qui est servi pour chacun, voir <a href="/docs/reference/compatibilite/">Compatibilité</a>.</p>
19
+ <h2 id="construire-puis-envoyer">Construire puis envoyer</h2>
20
+ <ol class="hgdc-steps"><li class="hgdc-step"><p class="hgdc-step__title">Construis le projet</p><div class="hgdc-step__body"><p>Depuis le dossier du projet :</p><div class="expressive-code"><link rel="stylesheet" href="/docs/_astro/ec.t9qpe.css"><script type="module" src="/docs/_astro/ec.0vx5m.js"></script><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#CA212D;--1:#FF7B72">export</span><span style="--0:#1F2328;--1:#E6EDF3"> VERCEL_TOKEN</span><span style="--0:#CA212D;--1:#FF7B72">=</span><span style="--0:#1F2328;--1:#E6EDF3">ah_…</span></div></div><div class="ec-line"><div class="code"><span style="--0:#953800;--1:#FFA657">vercel</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0550AE;--1:#79C0FF">--api</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0A3069;--1:#A5D6FF">https://api.host.hgdc.ch</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0A3069;--1:#A5D6FF">build</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copier dans le presse-papiers" data-copied="Copié !" data-code="export VERCEL_TOKEN=ah_…vercel --api https://api.host.hgdc.ch build"><div></div></button></div></figure></div><p>La commande détecte le framework, installe les dépendances, lance le build, et écrit le résultat dans <code>.vercel/output</code>. Elle télécharge aussi les variables de l’environnement visé. Voir <a href="/docs/reference/cli/#vercel-build">vercel build</a>.</p><p><strong>Vérification</strong> : le dossier <code>.vercel/output/static</code> contient les fichiers de ton site.</p></div></li><li class="hgdc-step"><p class="hgdc-step__title">Envoie le résultat</p><div class="hgdc-step__body"><div class="expressive-code"><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#953800;--1:#FFA657">vercel</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0550AE;--1:#79C0FF">--api</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0A3069;--1:#A5D6FF">https://api.host.hgdc.ch</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0A3069;--1:#A5D6FF">deploy</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0550AE;--1:#79C0FF">--prebuilt</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copier dans le presse-papiers" data-copied="Copié !" data-code="vercel --api https://api.host.hgdc.ch deploy --prebuilt"><div></div></button></div></figure></div><p>L’option <code>--prebuilt</code> envoie <code>.vercel/output</code> tel quel, sans reconstruire.</p><p><strong>Vérification</strong> : l’adresse du déploiement répond avec ton site, et le déploiement passe à <strong>Prêt</strong>.</p></div></li><li class="hgdc-step"><p class="hgdc-step__title">Passe en production</p><div class="hgdc-step__body"><p>Utilise la même cible des deux côtés. Pour la production :</p><div class="expressive-code"><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#953800;--1:#FFA657">vercel</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0550AE;--1:#79C0FF">--api</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0A3069;--1:#A5D6FF">https://api.host.hgdc.ch</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0A3069;--1:#A5D6FF">build</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0550AE;--1:#79C0FF">--prod</span></div></div><div class="ec-line"><div class="code"><span style="--0:#953800;--1:#FFA657">vercel</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0550AE;--1:#79C0FF">--api</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0A3069;--1:#A5D6FF">https://api.host.hgdc.ch</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0A3069;--1:#A5D6FF">deploy</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0550AE;--1:#79C0FF">--prebuilt</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0550AE;--1:#79C0FF">--prod</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copier dans le presse-papiers" data-copied="Copié !" data-code="vercel --api https://api.host.hgdc.ch build --prodvercel --api https://api.host.hgdc.ch deploy --prebuilt --prod"><div></div></button></div></figure></div><aside class="hd-callout" data-tone="warning" aria-label="Attention"><svg class="hd-icon hd-callout__icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 9.5v4M12 17h.01M10.3 4.2 2.6 17.5A2 2 0 0 0 4.3 20.5h15.4a2 2 0 0 0 1.7-3L13.7 4.2a2 2 0 0 0-3.4 0Z"></path></svg><div class="hd-callout__body"><p>La CLI refuse l’envoi si la cible du build et celle du déploiement ne correspondent pas. Une preview se construit sans <code>--prod</code>, et se déploie sans <code>--prod</code>.</p></div></aside></div></li></ol>
21
+ <h2 id="ce-qui-est-servi-par-framework">Ce qui est servi, par framework</h2>
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+ <div class="hd-table"><table><thead><tr><th>Framework</th><th>Servi tel quel</th><th>Préversion</th></tr></thead><tbody><tr><td>Astro</td><td>Les pages générées</td><td>Rendu à la demande, routes d’API, middleware, ISR</td></tr><tr><td>Vite (React, Vue, Svelte…)</td><td>Le build de l’application</td><td></td></tr><tr><td>SvelteKit</td><td>Les pages pré-rendues</td><td>Rendu à la demande, routes d’API, actions de formulaire, ISR</td></tr><tr><td>Nuxt</td><td>Les pages générées</td><td>Rendu à la demande, routes d’API, middleware serveur, ISR</td></tr><tr><td>TanStack Start</td><td>Les pages pré-rendues</td><td></td></tr><tr><td>React Router</td><td>Les pages pré-rendues</td><td></td></tr><tr><td>Next.js</td><td>Les pages pré-rendues et leur navigation</td><td>Rendu à la demande, routes d’API, Server Actions, proxy, ISR, routes edge</td></tr></tbody></table></div>
68
+ <p>Le tableau complet, avec les fonctions de la plateforme, est dans <a href="/docs/reference/compatibilite/">Compatibilité</a>.</p>
69
+ <h2 id="nextjs">Next.js</h2>
70
+ <ul>
71
+ <li><code>next/image</code> sert l’image d’origine, sans redimensionnement. Optimise tes images avant le build.</li>
72
+ <li>La page <code>not-found</code> sert de 404.</li>
73
+ <li>Une page rendue à la demande, une route d’API ou une Server Action tourne dans une fonction. Elle demande la préversion, voir <a href="/docs/concepts/preversion/">Préversion</a>.</li>
74
+ </ul>
75
+ <h2 id="un-site-de-documentation">Un site de documentation</h2>
76
+ <p>Un dossier avec un <code>docs.json</code> et le paquet <code>@hgdc/docs</code> dans son <code>package.json</code> est reconnu comme une documentation, sans <code>vercel.json</code>. Le build lance <code>hgdc-docs build</code> et publie le dossier <code>dist</code>. Les pages <code>.md</code> sont servies en <code>text/markdown</code>.</p>
77
+ <h2 id="si-ça-ne-marche-pas">Si ça ne marche pas</h2>
78
+ <ul>
79
+ <li>Le déploiement répond <code>404</code> : la sortie de build ne contient pas de <code>index.html</code> à la racine, ou le dossier de sortie est faux. Voir <a href="/docs/guides/depannage/#mon-site-affiche-404">Dépannage</a>.</li>
80
+ <li>Une page répond <code>501</code> : le rendu à la demande n’est pas encore ouvert à ton organisation. Pré-rends la page, ou consulte <a href="/docs/concepts/preversion/">Préversion</a>.</li>
81
+ </ul></div><hgdc-feedback class="hgdc-feedback not-content" data-endpoint="https://docs.hgdc.ch/api/v1/feedback" data-project="js743wp3001k1jvrdad0fwcjx18gc789" data-pagefind-ignore="true"><div data-step="ask"><p class="hgdc-feedback__question">Cette page t'a aidé ?</p><div class="hgdc-feedback__choices"><button type="button" data-helpful="true"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M7 10v11M15 5.9 14 10h5.8a2 2 0 0 1 1.9 2.5l-2.3 7A2 2 0 0 1 17.5 21H4a1 1 0 0 1-1-1v-9a1 1 0 0 1 1-1h2.8a2 2 0 0 0 1.8-1.1L12 2a3.1 3.1 0 0 1 3 3.9Z"></path></svg>Oui</button><button type="button" data-helpful="false"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M17 14V3M9 18.1 10 14H4.2a2 2 0 0 1-1.9-2.5l2.3-7A2 2 0 0 1 6.5 3H20a1 1 0 0 1 1 1v9a1 1 0 0 1-1 1h-2.8a2 2 0 0 0-1.8 1.1L12 22a3.1 3.1 0 0 1-3-3.9Z"></path></svg>Non</button></div></div><form data-step="comment" hidden><label for="hgdc-feedback-comment">Qu'est-ce qui manquait ou pourrait être plus clair ? (facultatif)</label><textarea id="hgdc-feedback-comment" name="comment" rows="3" maxlength="1000"></textarea><div class="hgdc-feedback__choices"><button type="submit">Envoyer</button><button type="button" data-skip>Passer</button></div></form><p data-step="done" class="hgdc-feedback__done" role="status" hidden>Merci, c'est noté.</p></hgdc-feedback><nav class="hd-pagination not-content" aria-label="Pages voisines" data-pagefind-ignore><a class="hd-pagination__link" href="/docs/guides/github-actions-sans-application/" rel="prev"><span class="hd-pagination__hint"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="m15 6-6 6 6 6"></path></svg>Précédent</span><span class="hd-pagination__title">GitHub Actions sans l&#39;app</span></a><a class="hd-pagination__link hd-pagination__link--next" href="/docs/guides/site-statique/" rel="next"><span class="hd-pagination__hint">Suivant<svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="m9 6 6 6-6 6"></path></svg></span><span class="hd-pagination__title">Site statique</span></a></nav><script type="module" src="/docs/_astro/Footer.astro_astro_type_script_index_0_lang.DzCnn3OT.js"></script></div></div></main><form class="hd-askbar" data-askbar data-pagefind-ignore><label class="sr-only" for="hd-askbar-input">Pose une question à l'assistant</label><input id="hd-askbar-input" data-askbar-input type="text" maxlength="1000" placeholder="Pose une question…" autocomplete="off"><kbd class="hd-kbd" data-shortcut aria-hidden="true">Ctrl I</kbd><button type="submit" class="hd-send" aria-label="Envoyer la question"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19V5m-6 6 6-6 6 6"></path></svg></button></form></div><aside class="hd-columns__toc" aria-label="Sur cette page"><div class="hd-toc-scroll"><starlight-toc data-min-h="2" data-max-h="3"><nav aria-labelledby="starlight__on-this-page"><h2 id="starlight__on-this-page">Sur cette page</h2><ul class="astro-jxyovztp" style="--depth: 0;"><li style="--depth: 0;" class="astro-jxyovztp"><a href="#_top" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Vue d’ensemble</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#construire-puis-envoyer" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Construire puis envoyer</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#ce-qui-est-servi-par-framework" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Ce qui est servi, par framework</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#nextjs" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Next.js</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#un-site-de-documentation" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Un site de documentation</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#si-ça-ne-marche-pas" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Si ça ne marche pas</span></a></li></ul></nav></starlight-toc><script type="module">var e=`_top`,t=class extends HTMLElement{_current=this.querySelector(`a[aria-current="true"]`);minH=parseInt(this.dataset.minH||`2`,10);maxH=parseInt(this.dataset.maxH||`3`,10);tocHeadingSelector=`h1#${e},:where(${[...Array.from({length:1+this.maxH-this.minH}).map((e,t)=>`h${this.minH+t}`)].join()})[id]`;set current(e){e!==this._current&&(this._current&&this._current.removeAttribute(`aria-current`),e.setAttribute(`aria-current`,`true`),this._current=e)}onIdle=e=>(window.requestIdleCallback||(e=>setTimeout(e,1)))(e);constructor(){super(),this.onIdle(()=>this.init())}init=()=>{let t=[...this.querySelectorAll(`a`)],n=e=>e.matches(this.tocHeadingSelector),r=t=>{for(;t;){if(t.matches(`.sl-markdown-content, main > *`))return document.getElementById(e);if(n(t))return t;let r=t.querySelector(this.tocHeadingSelector);if(r)return r;let i=t.previousElementSibling;for(;i?.lastElementChild;)i=i.lastElementChild;t=i??t.parentElement}return null},i=e=>{for(let{isIntersecting:n,target:i}of e){if(!n)continue;let e=r(i);if(!e)continue;let a=t.find(t=>t.hash===`#`+encodeURIComponent(e.id));if(a){this.current=a;break}}},a=document.querySelectorAll([`main :where(${this.tocHeadingSelector})`,`main :where(${this.tocHeadingSelector}, .sl-heading-wrapper) ~ *:not(:has(${this.tocHeadingSelector}))`,`main .sl-markdown-content > *:not(:has(${this.tocHeadingSelector}))`,`main > *:not(:has(${this.tocHeadingSelector}))`].join()),o,s=()=>{o||(o=new IntersectionObserver(i,{rootMargin:this.getRootMargin()}),a.forEach(e=>o.observe(e)))};s();let c;window.addEventListener(`resize`,()=>{o&&=(o.disconnect(),void 0),clearTimeout(c),c=setTimeout(()=>this.onIdle(s),200)})};getRootMargin(){let e=(document.querySelector(`header`)?.getBoundingClientRect().height||0)+(this.querySelector(`summary`)?.getBoundingClientRect().height||0)+32;return`-${e}px 0% ${e+53-document.documentElement.clientHeight}px`}};customElements.define(`starlight-toc`,t);</script></div></aside></div><footer class="hd-site-footer" data-pagefind-ignore><div class="hd-site-footer__row"><a class="hd-brand hd-brand--footer" href="/docs/"><span class="hd-brand__mark"><img class="hd-brand__light" src="/docs/images/logo.svg" alt="" width="20" height="20" loading="lazy"><img class="hd-brand__dark" src="/docs/images/logo.svg" alt="" width="20" height="20" loading="lazy"></span><span class="hd-brand__name">Host</span></a></div><div class="hd-site-footer__row hd-site-footer__row--meta"><p>Ton site en ligne, déployé à chaque modification.</p><div class="hd-theme-choice" role="radiogroup" aria-label="Thème"><button type="button" role="radio" aria-checked="false" data-hd-theme="auto" aria-label="Système" title="Système"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 5h16a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1Zm4 15h8m-4-3v3"></path></svg></button><button type="button" role="radio" aria-checked="false" data-hd-theme="light" aria-label="Clair" title="Clair"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM12 2.5v2M12 19.5v2M4.6 4.6 6 6M18 18l1.4 1.4M2.5 12h2M19.5 12h2M4.6 19.4 6 18M18 6l1.4-1.4"></path></svg></button><button type="button" role="radio" aria-checked="false" data-hd-theme="dark" aria-label="Sombre" title="Sombre"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M20 14.5A8 8 0 1 1 9.5 4a6.5 6.5 0 0 0 10.5 10.5Z"></path></svg></button></div></div></footer></div><hgdc-assistant data-endpoint="https://docs.hgdc.ch/api/v1/ask" data-project="js743wp3001k1jvrdad0fwcjx18gc789" data-name="Host"><section class="hgdc-panel" role="dialog" aria-modal="false" aria-labelledby="hgdc-assistant-title" data-panel inert><div class="hgdc-panel__grip" aria-hidden="true"></div><header class="hgdc-panel__header"><h2 id="hgdc-assistant-title"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3.5 13.6 8a3 3 0 0 0 1.9 1.9L20 11.5l-4.5 1.6a3 3 0 0 0-1.9 1.9L12 19.5 10.4 15a3 3 0 0 0-1.9-1.9L4 11.5 8.5 9.9A3 3 0 0 0 10.4 8ZM19 3v3M20.5 4.5h-3"></path></svg>Assistant</h2><div class="hgdc-panel__tools"><button type="button" class="hd-icon-button" data-reset aria-label="Nouvelle conversation" title="Nouvelle conversation" hidden><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M4 12a8 8 0 1 0 2.3-5.7M4 4v4h4"></path></svg></button><button type="button" class="hd-icon-button" data-close aria-label="Fermer l'assistant" title="Fermer (Échap)"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M6 6l12 12M18 6 6 18"></path></svg></button></div></header><div class="hgdc-panel__body" data-log aria-live="polite"><div class="hgdc-empty" data-empty><p class="hgdc-empty__title">Pose ta question sur Host.</p><p>Je cherche dans les pages de cette documentation et je cite mes sources. Si la réponse n'y est pas, je te le dis.</p></div></div><form class="hgdc-panel__form" data-form><label class="sr-only" for="hgdc-question">Ta question</label><textarea id="hgdc-question" data-input rows="1" maxlength="1000" placeholder="Pose une question…" required></textarea><button type="submit" class="hd-send" data-send aria-label="Envoyer la question"><svg class="hd-icon" aria-hidden="true" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><path d="M12 19V5m-6 6 6-6 6 6"></path></svg></button></form><p class="hgdc-panel__note">Réponses générées par IA (Claude, d'Anthropic), à vérifier. Les questions sont conservées 90 jours pour améliorer cette documentation.</p></section></hgdc-assistant><script type="module" src="/docs/_astro/Assistant.astro_astro_type_script_index_0_lang.C1pz7yK1.js"></script></div><script type="module">var e=class extends HTMLElement{connectedCallback(){let e=matchMedia(`(min-width: 50em)`),t=()=>{e.matches&&this.matches(`:popover-open`)&&this.hidePopover(),this.popover=e.matches?null:`auto`};t(),e.addEventListener(`change`,t),this.addEventListener(`toggle`,e=>{let t=e.newState===`open`;for(let e of document.querySelectorAll(`.hd-main-frame, .hd-askbar`))e.toggleAttribute(`inert`,t);document.documentElement.toggleAttribute(`data-hd-menu`,t)}),this.addEventListener(`click`,e=>{e.target.closest(`a`)&&this.matches(`:popover-open`)&&this.hidePopover()})}};customElements.define(`hd-sidebar-pane`,e);</script></body></html>
@@ -0,0 +1,74 @@
1
+ # Déployer un framework
2
+
3
+ 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.
4
+
5
+ **Résultat attendu** : un déploiement **Prêt** dont la page affiche ton site construit.
6
+
7
+ **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/).
8
+
9
+ ## Construire puis envoyer
10
+
11
+ 1. **Construis le projet**
12
+
13
+ Depuis le dossier du projet :
14
+
15
+ ```bash
16
+ export VERCEL_TOKEN=ah_…
17
+ vercel --api https://api.host.hgdc.ch build
18
+ ```
19
+
20
+ 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).
21
+
22
+ **Vérification** : le dossier `.vercel/output/static` contient les fichiers de ton site.
23
+
24
+ 2. **Envoie le résultat**
25
+
26
+ ```bash
27
+ vercel --api https://api.host.hgdc.ch deploy --prebuilt
28
+ ```
29
+
30
+ L’option `--prebuilt` envoie `.vercel/output` tel quel, sans reconstruire.
31
+
32
+ **Vérification** : l’adresse du déploiement répond avec ton site, et le déploiement passe à **Prêt**.
33
+
34
+ 3. **Passe en production**
35
+
36
+ Utilise la même cible des deux côtés. Pour la production :
37
+
38
+ ```bash
39
+ vercel --api https://api.host.hgdc.ch build --prod
40
+ vercel --api https://api.host.hgdc.ch deploy --prebuilt --prod
41
+ ```
42
+
43
+ > **Attention**
44
+ >
45
+ > 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`.
46
+
47
+ ## Ce qui est servi, par framework
48
+
49
+ | Framework | Servi tel quel | Préversion |
50
+ | -------------------------- | ---------------------------------------- | ------------------------------------------------------------------------- |
51
+ | Astro | Les pages générées | Rendu à la demande, routes d’API, middleware, ISR |
52
+ | Vite (React, Vue, Svelte…) | Le build de l’application | |
53
+ | SvelteKit | Les pages pré-rendues | Rendu à la demande, routes d’API, actions de formulaire, ISR |
54
+ | Nuxt | Les pages générées | Rendu à la demande, routes d’API, middleware serveur, ISR |
55
+ | TanStack Start | Les pages pré-rendues | |
56
+ | React Router | Les pages pré-rendues | |
57
+ | Next.js | Les pages pré-rendues et leur navigation | Rendu à la demande, routes d’API, Server Actions, proxy, ISR, routes edge |
58
+
59
+ Le tableau complet, avec les fonctions de la plateforme, est dans [Compatibilité](/docs/reference/compatibilite/).
60
+
61
+ ## Next.js
62
+
63
+ - `next/image` sert l’image d’origine, sans redimensionnement. Optimise tes images avant le build.
64
+ - La page `not-found` sert de 404.
65
+ - 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/).
66
+
67
+ ## Un site de documentation
68
+
69
+ 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`.
70
+
71
+ ## Si ça ne marche pas
72
+
73
+ - 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).
74
+ - 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/).