@hgdc/docs 0.2.0 → 0.4.0

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 (233) hide show
  1. package/docs.schema.json +21 -0
  2. package/package.json +3 -1
  3. package/src/build/auto-import.ts +5 -24
  4. package/src/build/content.ts +82 -0
  5. package/src/build/markdown.ts +10 -5
  6. package/src/components/Accordion.astro +3 -1
  7. package/src/components/Callout.astro +31 -0
  8. package/src/components/Card.astro +3 -1
  9. package/src/components/Check.astro +2 -3
  10. package/src/components/CodeGroup.astro +9 -1
  11. package/src/components/Danger.astro +2 -3
  12. package/src/components/Info.astro +2 -3
  13. package/src/components/Note.astro +2 -3
  14. package/src/components/Tip.astro +2 -3
  15. package/src/components/Warning.astro +2 -3
  16. package/src/core/components.ts +166 -0
  17. package/src/core/config.ts +42 -0
  18. package/src/core/feedback-api.ts +27 -0
  19. package/src/core/theme.ts +6 -3
  20. package/src/core/validate.ts +276 -0
  21. package/src/integration.ts +102 -30
  22. package/src/overrides/Assistant.astro +17 -39
  23. package/src/overrides/Footer.astro +107 -0
  24. package/src/overrides/Head.astro +14 -14
  25. package/src/overrides/Header.astro +92 -0
  26. package/src/overrides/Icon.astro +65 -0
  27. package/src/overrides/PageFrame.astro +55 -8
  28. package/src/overrides/PageSidebar.astro +7 -0
  29. package/src/overrides/PageTitle.astro +126 -95
  30. package/src/overrides/Search.astro +54 -0
  31. package/src/overrides/Sidebar.astro +105 -60
  32. package/src/overrides/SidebarList.astro +52 -0
  33. package/src/overrides/SiteFooter.astro +51 -0
  34. package/src/overrides/ThemeProvider.astro +23 -0
  35. package/src/overrides/ThemeToggle.astro +90 -0
  36. package/src/overrides/TwoColumnContent.astro +45 -0
  37. package/src/overrides/sections.ts +29 -0
  38. package/src/styles/theme.css +2137 -511
  39. package/src/widget/client.ts +51 -19
  40. package/src/widget/code.ts +218 -0
  41. package/src/widget/excerpt.ts +5 -0
  42. package/src/widget/search.ts +222 -0
  43. package/template/.astro/collections/docs.schema.json +3 -0
  44. package/template/.astro/content-modules.mjs +35 -15
  45. package/template/.astro/data-store.json +1 -0
  46. package/template/.astro/settings.json +5 -0
  47. package/template/.build/.well-known/llms.txt +51 -34
  48. package/template/.build/404.html +16 -42
  49. package/template/.build/_astro/Assistant.astro_astro_type_script_index_0_lang.C1pz7yK1.js +4 -0
  50. package/template/.build/_astro/CodeGroup.astro_astro_type_script_index_0_lang.-eM8maAX.js +1 -0
  51. package/template/.build/_astro/Footer.astro_astro_type_script_index_0_lang.DzCnn3OT.js +1 -0
  52. package/template/.build/_astro/Search.astro_astro_type_script_index_0_lang.D7EcezBU.js +1 -0
  53. package/template/.build/_astro/code.smqv0zhe.js +9 -0
  54. package/template/.build/_astro/common.Dx3aBIS0.css +3 -0
  55. package/template/.build/_astro/{ec.8nqtp.css → ec.t9qpe.css} +1 -1
  56. package/template/.build/_astro/logo.BPu921Tp.svg +1 -0
  57. package/template/.build/_hgdc/corpus.json +1 -1
  58. package/template/.build/concepts/confidentialite/index.html +50 -0
  59. package/template/.build/concepts/confidentialite.md +38 -0
  60. package/template/.build/concepts/deploiements/index.html +106 -0
  61. package/template/.build/concepts/deploiements.md +70 -0
  62. package/template/.build/concepts/organisations-et-roles/index.html +83 -0
  63. package/template/.build/concepts/organisations-et-roles.md +39 -0
  64. package/template/.build/concepts/preversion/index.html +49 -0
  65. package/template/.build/concepts/preversion.md +52 -0
  66. package/template/.build/concepts/secrets-et-coffre/index.html +70 -0
  67. package/template/.build/concepts/secrets-et-coffre.md +54 -0
  68. package/template/.build/demarrer/depuis-github/index.html +34 -0
  69. package/template/.build/demarrer/depuis-github.md +68 -0
  70. package/template/.build/demarrer/premier-site/index.html +28 -0
  71. package/template/.build/demarrer/premier-site.md +94 -0
  72. package/template/.build/guides/brancher-un-domaine/index.html +91 -0
  73. package/template/.build/guides/brancher-un-domaine.md +81 -0
  74. package/template/.build/guides/cle-d-api/index.html +62 -0
  75. package/template/.build/guides/cle-d-api.md +78 -0
  76. package/template/.build/guides/depannage/index.html +64 -0
  77. package/template/.build/guides/depannage.md +69 -0
  78. package/template/.build/guides/deployer-depuis-github/index.html +45 -0
  79. package/template/.build/guides/deployer-depuis-github.md +70 -0
  80. package/template/.build/guides/deployer-un-framework/index.html +81 -0
  81. package/template/.build/guides/deployer-un-framework.md +74 -0
  82. package/template/.build/guides/github-actions-sans-application/index.html +53 -0
  83. package/template/.build/guides/github-actions-sans-application.md +95 -0
  84. package/template/.build/guides/inviter-une-personne/index.html +28 -0
  85. package/template/.build/guides/inviter-une-personne.md +38 -0
  86. package/template/.build/guides/lire-les-logs/index.html +37 -0
  87. package/template/.build/guides/lire-les-logs.md +48 -0
  88. package/template/.build/guides/migrer-depuis-vercel/index.html +25 -0
  89. package/template/.build/guides/migrer-depuis-vercel.md +51 -0
  90. package/template/.build/guides/monorepo/index.html +40 -0
  91. package/template/.build/guides/monorepo.md +42 -0
  92. package/template/.build/guides/revenir-en-arriere/index.html +39 -0
  93. package/template/.build/guides/revenir-en-arriere.md +50 -0
  94. package/template/.build/guides/site-statique/index.html +41 -0
  95. package/template/.build/guides/site-statique.md +59 -0
  96. package/template/.build/guides/synchroniser-doppler/index.html +46 -0
  97. package/template/.build/guides/synchroniser-doppler.md +63 -0
  98. package/template/.build/guides/variables-d-environnement/index.html +73 -0
  99. package/template/.build/guides/variables-d-environnement.md +92 -0
  100. package/template/.build/images/famille/account.svg +1 -0
  101. package/template/.build/images/famille/analytics.svg +1 -0
  102. package/template/.build/images/famille/docs.svg +1 -0
  103. package/template/.build/images/famille/host.svg +1 -0
  104. package/template/.build/images/famille/mail.svg +1 -0
  105. package/template/.build/images/famille/portal.svg +1 -0
  106. package/template/.build/images/famille/status.svg +1 -0
  107. package/template/.build/images/logo.svg +1 -0
  108. package/template/.build/index.html +30 -86
  109. package/template/.build/index.md +59 -21
  110. package/template/.build/llms-full.txt +2330 -518
  111. package/template/.build/llms.txt +51 -34
  112. package/template/.build/pagefind/fragment/fr-ch_16987e2.pf_fragment +0 -0
  113. package/template/.build/pagefind/fragment/fr-ch_2b4c97b.pf_fragment +0 -0
  114. package/template/.build/pagefind/fragment/fr-ch_3294a5c.pf_fragment +0 -0
  115. package/template/.build/pagefind/fragment/fr-ch_34858c9.pf_fragment +0 -0
  116. package/template/.build/pagefind/fragment/fr-ch_39ddba1.pf_fragment +0 -0
  117. package/template/.build/pagefind/fragment/fr-ch_4ab1899.pf_fragment +0 -0
  118. package/template/.build/pagefind/fragment/fr-ch_4d3a52a.pf_fragment +0 -0
  119. package/template/.build/pagefind/fragment/fr-ch_506c187.pf_fragment +0 -0
  120. package/template/.build/pagefind/fragment/fr-ch_5aa255a.pf_fragment +0 -0
  121. package/template/.build/pagefind/fragment/fr-ch_6841c7d.pf_fragment +0 -0
  122. package/template/.build/pagefind/fragment/fr-ch_6dc7a2d.pf_fragment +0 -0
  123. package/template/.build/pagefind/fragment/fr-ch_847edff.pf_fragment +0 -0
  124. package/template/.build/pagefind/fragment/fr-ch_8745af7.pf_fragment +0 -0
  125. package/template/.build/pagefind/fragment/fr-ch_8aac5e6.pf_fragment +0 -0
  126. package/template/.build/pagefind/fragment/fr-ch_916b233.pf_fragment +0 -0
  127. package/template/.build/pagefind/fragment/fr-ch_9fd014a.pf_fragment +0 -0
  128. package/template/.build/pagefind/fragment/fr-ch_a0808f8.pf_fragment +0 -0
  129. package/template/.build/pagefind/fragment/fr-ch_a4e1f69.pf_fragment +0 -0
  130. package/template/.build/pagefind/fragment/fr-ch_a80a53d.pf_fragment +0 -0
  131. package/template/.build/pagefind/fragment/fr-ch_a9e725b.pf_fragment +0 -0
  132. package/template/.build/pagefind/fragment/fr-ch_ac3f64c.pf_fragment +0 -0
  133. package/template/.build/pagefind/fragment/fr-ch_af292f1.pf_fragment +0 -0
  134. package/template/.build/pagefind/fragment/fr-ch_af3e716.pf_fragment +0 -0
  135. package/template/.build/pagefind/fragment/fr-ch_b0689a4.pf_fragment +0 -0
  136. package/template/.build/pagefind/fragment/fr-ch_baed996.pf_fragment +0 -0
  137. package/template/.build/pagefind/fragment/fr-ch_c89e27a.pf_fragment +0 -0
  138. package/template/.build/pagefind/fragment/fr-ch_cd6ca13.pf_fragment +0 -0
  139. package/template/.build/pagefind/fragment/fr-ch_d09af09.pf_fragment +0 -0
  140. package/template/.build/pagefind/fragment/fr-ch_d4bcea8.pf_fragment +0 -0
  141. package/template/.build/pagefind/fragment/fr-ch_dc2a134.pf_fragment +0 -0
  142. package/template/.build/pagefind/fragment/fr-ch_ded7ddc.pf_fragment +0 -0
  143. package/template/.build/pagefind/fragment/fr-ch_e2528cb.pf_fragment +0 -0
  144. package/template/.build/pagefind/fragment/fr-ch_e3cbb4e.pf_fragment +0 -0
  145. package/template/.build/pagefind/fragment/fr-ch_e7902d9.pf_fragment +0 -0
  146. package/template/.build/pagefind/fragment/fr-ch_f48ca47.pf_fragment +0 -0
  147. package/template/.build/pagefind/index/fr-ch_8a5f905.pf_index +0 -0
  148. package/template/.build/pagefind/index/fr-ch_fbd9c96.pf_index +0 -0
  149. package/template/.build/pagefind/pagefind-entry.json +1 -1
  150. package/template/.build/pagefind/pagefind.fr-ch_211aacbfa7f0e.pf_meta +0 -0
  151. package/template/.build/reference/api/deploiements/index.html +326 -0
  152. package/template/.build/reference/api/deploiements.md +170 -0
  153. package/template/.build/reference/api/erreurs/index.html +102 -0
  154. package/template/.build/reference/api/erreurs.md +50 -0
  155. package/template/.build/reference/api/fichiers/index.html +82 -0
  156. package/template/.build/reference/api/fichiers.md +62 -0
  157. package/template/.build/reference/api/introduction/index.html +126 -0
  158. package/template/.build/reference/api/introduction.md +84 -0
  159. package/template/.build/reference/api/projets/index.html +184 -0
  160. package/template/.build/reference/api/projets.md +102 -0
  161. package/template/.build/reference/api/utilisateur/index.html +96 -0
  162. package/template/.build/reference/api/utilisateur.md +89 -0
  163. package/template/.build/reference/api/variables/index.html +75 -0
  164. package/template/.build/reference/api/variables.md +58 -0
  165. package/template/.build/reference/cli/index.html +165 -82
  166. package/template/.build/reference/cli.md +159 -23
  167. package/template/.build/reference/compatibilite/index.html +196 -0
  168. package/template/.build/reference/compatibilite.md +64 -0
  169. package/template/.build/reference/domaines/index.html +171 -0
  170. package/template/.build/reference/domaines.md +76 -0
  171. package/template/.build/reference/limites/index.html +159 -0
  172. package/template/.build/reference/limites.md +56 -0
  173. package/template/.build/reference/variables/index.html +164 -0
  174. package/template/.build/reference/variables.md +63 -0
  175. package/template/.build/reference/vercel-json/index.html +65 -0
  176. package/template/.build/reference/vercel-json.md +51 -0
  177. package/template/node_modules/.vite/deps/_metadata.json +8 -8
  178. package/template/src/content.config.ts +8 -2
  179. package/template/.build/_astro/Assistant.astro_astro_type_script_index_0_lang.DWgmlr85.js +0 -4
  180. package/template/.build/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.C3fM4Kra.js +0 -1
  181. package/template/.build/_astro/Search.astro_astro_type_script_index_0_lang.Cn3-p701.js +0 -1
  182. package/template/.build/_astro/TableOfContents.astro_astro_type_script_index_0_lang.BpJaGz7G.js +0 -1
  183. package/template/.build/_astro/common.C-MpX45O.css +0 -3
  184. package/template/.build/_astro/logo-clair.BqNh6JNi.svg +0 -1
  185. package/template/.build/_astro/logo-sombre.BkgsFXxh.svg +0 -1
  186. package/template/.build/_astro/starlight-toc.D4UDIxQL.js +0 -1
  187. package/template/.build/_astro/ui-core.CrG20ya_.js +0 -2
  188. package/template/.build/demarrer/premiere-doc/index.html +0 -84
  189. package/template/.build/demarrer/premiere-doc.md +0 -65
  190. package/template/.build/explications/donnees/index.html +0 -114
  191. package/template/.build/explications/donnees.md +0 -28
  192. package/template/.build/explications/fonctionnement/index.html +0 -93
  193. package/template/.build/explications/fonctionnement.md +0 -32
  194. package/template/.build/guides/agents/index.html +0 -118
  195. package/template/.build/guides/agents.md +0 -54
  196. package/template/.build/guides/assistant/index.html +0 -119
  197. package/template/.build/guides/assistant.md +0 -46
  198. package/template/.build/guides/composants/index.html +0 -97
  199. package/template/.build/guides/composants.md +0 -101
  200. package/template/.build/guides/ecrire/index.html +0 -116
  201. package/template/.build/guides/ecrire.md +0 -63
  202. package/template/.build/guides/navigation/index.html +0 -90
  203. package/template/.build/guides/navigation.md +0 -63
  204. package/template/.build/guides/publier/index.html +0 -95
  205. package/template/.build/guides/publier.md +0 -65
  206. package/template/.build/guides/theme/index.html +0 -87
  207. package/template/.build/guides/theme.md +0 -33
  208. package/template/.build/images/favicon.svg +0 -1
  209. package/template/.build/images/logo-clair.svg +0 -1
  210. package/template/.build/images/logo-sombre.svg +0 -1
  211. package/template/.build/pagefind/fragment/fr-ch_2a431a9.pf_fragment +0 -0
  212. package/template/.build/pagefind/fragment/fr-ch_456586a.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_68e734b.pf_fragment +0 -0
  215. package/template/.build/pagefind/fragment/fr-ch_72b91f4.pf_fragment +0 -0
  216. package/template/.build/pagefind/fragment/fr-ch_8f256dd.pf_fragment +0 -0
  217. package/template/.build/pagefind/fragment/fr-ch_95a15cc.pf_fragment +0 -0
  218. package/template/.build/pagefind/fragment/fr-ch_aa80c55.pf_fragment +0 -0
  219. package/template/.build/pagefind/fragment/fr-ch_ab79738.pf_fragment +0 -0
  220. package/template/.build/pagefind/fragment/fr-ch_cfa4336.pf_fragment +0 -0
  221. package/template/.build/pagefind/fragment/fr-ch_dab8f5e.pf_fragment +0 -0
  222. package/template/.build/pagefind/fragment/fr-ch_de60b43.pf_fragment +0 -0
  223. package/template/.build/pagefind/fragment/fr-ch_e02aa49.pf_fragment +0 -0
  224. package/template/.build/pagefind/fragment/fr-ch_e254a54.pf_fragment +0 -0
  225. package/template/.build/pagefind/fragment/fr-ch_e2c46e3.pf_fragment +0 -0
  226. package/template/.build/pagefind/index/fr-ch_a71411b.pf_index +0 -0
  227. package/template/.build/pagefind/pagefind.fr-ch_2f3ea8fccf961.pf_meta +0 -0
  228. package/template/.build/reference/api-assistant/index.html +0 -161
  229. package/template/.build/reference/api-assistant.md +0 -70
  230. package/template/.build/reference/docs-json/index.html +0 -192
  231. package/template/.build/reference/docs-json.md +0 -43
  232. package/template/.build/reference/mcp/index.html +0 -151
  233. package/template/.build/reference/mcp.md +0 -49
@@ -0,0 +1,70 @@
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>Secrets et coffre | 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="Secrets et coffre"/><meta property="og:type" content="article"/><meta property="og:locale" content="fr-CH"/><meta property="og:description" content="Comment Host protège les valeurs de tes variables et tes clés d'API, qui peut les lire et ce qui reste dans le journal."/><meta property="og:site_name" content="Host"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="Comment Host protège les valeurs de tes variables et tes clés d'API, qui peut les lire et ce qui reste dans le journal."/><link rel="alternate" type="text/markdown" href="/docs/concepts/secrets-et-coffre.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"><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" aria-current="page"><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">Concepts</p><div class="hd-title__row"><h1 id="_top">Secrets et coffre</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/concepts/secrets-et-coffre.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/concepts/secrets-et-coffre.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">Comment Host protège les valeurs de tes variables et tes clés d&#39;API, qui peut les lire et ce qui reste dans le journal.</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>Les valeurs de tes variables sont des secrets : mots de passe, clés de service, jetons. Host les garde dans un coffre, les chiffre, et ne les renvoie jamais en clair à quiconque n’en a pas besoin.</p>
17
+ <p>Cette page explique le modèle. Pour les règles chiffrées, voir <a href="/docs/reference/variables/">Variables : référence</a>.</p>
18
+ <h2 id="le-coffre">Le coffre</h2>
19
+ <ul>
20
+ <li>Chaque organisation a sa propre clé de chiffrement, AES-GCM 256 bits.</li>
21
+ <li>Cette clé est elle-même chiffrée par une clé maîtresse, gardée hors de la base de données.</li>
22
+ <li>Chaque valeur est liée à son projet. Une valeur recopiée dans un autre projet ne se déchiffre pas.</li>
23
+ </ul>
24
+ <h2 id="qui-lit-quoi">Qui lit quoi</h2>
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+ <div class="hd-table"><table><thead><tr><th>Donnée</th><th>Qui la voit</th></tr></thead><tbody><tr><td>Nom d’une variable</td><td>Tous les membres de l’organisation</td></tr><tr><td>Valeur d’une variable non sensible</td><td>Tous les membres de l’organisation</td></tr><tr><td>Valeur d’une variable sensible</td><td>Personne, après l’enregistrement. Elle peut seulement être remplacée</td></tr></tbody></table></div>
47
+ <p>Une variable sensible ne part que vers le build du dépôt GitHub, par une clé limitée au projet. Un <code>vercel pull</code> depuis un poste de développement ne la télécharge pas.</p>
48
+ <h2 id="le-journal-du-coffre">Le journal du coffre</h2>
49
+ <p>Le journal, en bas de l’onglet <strong>Variables d’environnement</strong>, garde les 50 derniers gestes sur le coffre :</p>
50
+ <ul>
51
+ <li>qui a créé, modifié ou supprimé une variable ;</li>
52
+ <li>qui a affiché une valeur non sensible ;</li>
53
+ <li>quelle clé d’API a téléchargé les variables, avec <code>vercel pull</code> ou un build ;</li>
54
+ <li>quand Doppler a synchronisé une valeur.</li>
55
+ </ul>
56
+ <p>Le journal ne garde jamais une valeur.</p>
57
+ <h2 id="les-clés-dapi">Les clés d’API</h2>
58
+ <p>Host ne garde qu’une empreinte SHA-256 de chaque clé d’API. La clé complète ne s’affiche qu’une fois, à sa création. Si tu la perds, aucune copie n’est possible : crée une nouvelle clé, puis révoque l’ancienne.</p>
59
+ <p>Une clé posée dans un dépôt GitHub ne donne accès qu’à son projet. Une clé d’organisation donne accès à tous les projets de l’organisation, avec les variables non sensibles.</p>
60
+ <h2 id="les-secrets-des-intégrations">Les secrets des intégrations</h2>
61
+ <p>Les jetons Doppler et les secrets des webhooks sont chiffrés de la même façon, et ne sont jamais renvoyés par la console ni par l’API. Chaque webhook Doppler est vérifié par sa signature HMAC.</p>
62
+ <h2 id="ce-que-le-site-publie">Ce que le site publie</h2>
63
+ <p>Le coffre protège les valeurs dans Host. Il ne protège pas un secret qui finit dans le site. Tout ce que le build écrit dans les fichiers du site est public, même si la variable d’origine était sensible.</p>
64
+ <p>Une variable lue dans le navigateur, comme celles qui commencent par <code>PUBLIC_</code>, <code>VITE_</code> ou <code>NEXT_PUBLIC_</code>, ne doit jamais contenir un secret.</p>
65
+ <h2 id="voir-aussi">Voir aussi</h2>
66
+ <ul>
67
+ <li><a href="/docs/guides/variables-d-environnement/">Gérer les variables d’environnement</a></li>
68
+ <li><a href="/docs/guides/synchroniser-doppler/">Synchroniser depuis Doppler</a></li>
69
+ <li><a href="/docs/concepts/confidentialite/">Confidentialité</a></li>
70
+ </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/concepts/organisations-et-roles/" 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">Organisations et rôles</span></a><a class="hd-pagination__link hd-pagination__link--next" href="/docs/concepts/preversion/" 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">Préversion</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="#le-coffre" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Le coffre</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#qui-lit-quoi" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Qui lit quoi</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#le-journal-du-coffre" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Le journal du coffre</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#les-clés-dapi" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Les clés d’API</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#les-secrets-des-intégrations" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Les secrets des intégrations</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#ce-que-le-site-publie" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Ce que le site publie</span></a></li><li style="--depth: 0;" class="astro-jxyovztp"><a href="#voir-aussi" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Voir aussi</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,54 @@
1
+ # Secrets et coffre
2
+
3
+ Les valeurs de tes variables sont des secrets : mots de passe, clés de service, jetons. Host les garde dans un coffre, les chiffre, et ne les renvoie jamais en clair à quiconque n’en a pas besoin.
4
+
5
+ Cette page explique le modèle. Pour les règles chiffrées, voir [Variables : référence](/docs/reference/variables/).
6
+
7
+ ## Le coffre
8
+
9
+ - Chaque organisation a sa propre clé de chiffrement, AES-GCM 256 bits.
10
+ - Cette clé est elle-même chiffrée par une clé maîtresse, gardée hors de la base de données.
11
+ - Chaque valeur est liée à son projet. Une valeur recopiée dans un autre projet ne se déchiffre pas.
12
+
13
+ ## Qui lit quoi
14
+
15
+ | Donnée | Qui la voit |
16
+ | ---------------------------------- | -------------------------------------------------------------------- |
17
+ | Nom d’une variable | Tous les membres de l’organisation |
18
+ | Valeur d’une variable non sensible | Tous les membres de l’organisation |
19
+ | Valeur d’une variable sensible | Personne, après l’enregistrement. Elle peut seulement être remplacée |
20
+
21
+ Une variable sensible ne part que vers le build du dépôt GitHub, par une clé limitée au projet. Un `vercel pull` depuis un poste de développement ne la télécharge pas.
22
+
23
+ ## Le journal du coffre
24
+
25
+ Le journal, en bas de l’onglet **Variables d’environnement**, garde les 50 derniers gestes sur le coffre :
26
+
27
+ - qui a créé, modifié ou supprimé une variable ;
28
+ - qui a affiché une valeur non sensible ;
29
+ - quelle clé d’API a téléchargé les variables, avec `vercel pull` ou un build ;
30
+ - quand Doppler a synchronisé une valeur.
31
+
32
+ Le journal ne garde jamais une valeur.
33
+
34
+ ## Les clés d’API
35
+
36
+ Host ne garde qu’une empreinte SHA-256 de chaque clé d’API. La clé complète ne s’affiche qu’une fois, à sa création. Si tu la perds, aucune copie n’est possible : crée une nouvelle clé, puis révoque l’ancienne.
37
+
38
+ Une clé posée dans un dépôt GitHub ne donne accès qu’à son projet. Une clé d’organisation donne accès à tous les projets de l’organisation, avec les variables non sensibles.
39
+
40
+ ## Les secrets des intégrations
41
+
42
+ Les jetons Doppler et les secrets des webhooks sont chiffrés de la même façon, et ne sont jamais renvoyés par la console ni par l’API. Chaque webhook Doppler est vérifié par sa signature HMAC.
43
+
44
+ ## Ce que le site publie
45
+
46
+ Le coffre protège les valeurs dans Host. Il ne protège pas un secret qui finit dans le site. Tout ce que le build écrit dans les fichiers du site est public, même si la variable d’origine était sensible.
47
+
48
+ Une variable lue dans le navigateur, comme celles qui commencent par `PUBLIC_`, `VITE_` ou `NEXT_PUBLIC_`, ne doit jamais contenir un secret.
49
+
50
+ ## Voir aussi
51
+
52
+ - [Gérer les variables d’environnement](/docs/guides/variables-d-environnement/)
53
+ - [Synchroniser depuis Doppler](/docs/guides/synchroniser-doppler/)
54
+ - [Confidentialité](/docs/concepts/confidentialite/)
@@ -0,0 +1,34 @@
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 site 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 un site 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 GitHub. La branche principale part en production, les autres reçoivent une preview."/><meta property="og:site_name" content="Host"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="Importe un dépôt GitHub. La branche principale part en production, les autres reçoivent une preview."/><link rel="alternate" type="text/markdown" href="/docs/demarrer/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" aria-current="page"><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"><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">Démarrer</p><div class="hd-title__row"><h1 id="_top">Déployer un site 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/demarrer/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/demarrer/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 GitHub. La branche principale part en production, les autres reçoivent une preview.</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>Dans ce parcours, tu importes un dépôt GitHub dans Host. À la fin, un <code>git push</code> sur la branche principale met ton site en production, et chaque autre branche reçoit sa propre preview.</p>
17
+ <p><strong>Avant de commencer</strong> :</p>
18
+ <ul>
19
+ <li>un compte HGDC et une organisation dans Account ;</li>
20
+ <li>un dépôt GitHub avec un site qui se construit (Astro, Vite, Next.js ou un site statique) ;</li>
21
+ <li>le droit d’écriture (push) sur ce dépôt. Un dépôt où tu n’as que la lecture ne s’importe pas.</li>
22
+ </ul>
23
+ <ol class="hgdc-steps"><li class="hgdc-step"><p class="hgdc-step__title">Ouvre un nouveau projet</p><div class="hgdc-step__body"><p>Dans ton organisation, clique <strong>Nouveau projet</strong>, puis <strong>Importer depuis GitHub</strong>.</p><p><strong>Vérification</strong> : la liste des dépôts accessibles s’affiche, ou Host te propose d’installer l’app GitHub.</p></div></li><li class="hgdc-step"><p class="hgdc-step__title">Installe l&#39;app GitHub</p><div class="hgdc-step__body"><p>Installe l’app <strong>Host</strong> sur ton compte GitHub ou sur celui de ton organisation. Tu peux la limiter à quelques dépôts.</p><p>L’app ne demande que les droits dont le workflow a besoin. Le détail est dans <a href="/docs/guides/deployer-depuis-github/">Déployer depuis GitHub</a>.</p><p><strong>Vérification</strong> : le dépôt choisi apparaît dans la liste de Host.</p></div></li><li class="hgdc-step"><p class="hgdc-step__title">Choisis le dépôt et vérifie les réglages</p><div class="hgdc-step__body"><p>Sélectionne le dépôt. Host lit le projet et propose le framework, les commandes d’installation et de build, la version de Node.js et la branche de production.</p><p>Si le site est dans un sous-dossier ou dans un monorepo, choisis le dossier de l’app. Voir <a href="/docs/guides/monorepo/">Monorepo et sous-dossier</a>.</p><p><strong>Vérification</strong> : le framework détecté correspond à ton site. Corrige les réglages qui ne correspondent pas.</p></div></li><li class="hgdc-step"><p class="hgdc-step__title">Fusionne la PR d&#39;installation</p><div class="hgdc-step__body"><p>L’import ouvre une pull request qui ajoute le fichier <code>.github/workflows/hgdc-host.yml</code> et pose le secret <code>HGDC_HOST_TOKEN</code> dans le dépôt. Relis-la, puis fusionne-la sur la branche principale.</p><p>Le secret est une clé limitée à ce projet. Elle ne peut ni créer de projet ni lire les autres.</p><p><strong>Vérification</strong> : la PR est fusionnée, et le fichier <code>hgdc-host.yml</code> existe sur la branche principale.</p></div></li><li class="hgdc-step"><p class="hgdc-step__title">Pousse une modification</p><div class="hgdc-step__body"><p>Modifie une page du site, puis pousse-la sur la branche principale :</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:#953800;--1:#FFA657">git</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0A3069;--1:#A5D6FF">add</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0A3069;--1:#A5D6FF">.</span></div></div><div class="ec-line"><div class="code"><span style="--0:#953800;--1:#FFA657">git</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0A3069;--1:#A5D6FF">commit</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0550AE;--1:#79C0FF">-m</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0A3069;--1:#A5D6FF">"docs: ajoute une page de test"</span></div></div><div class="ec-line"><div class="code"><span style="--0:#953800;--1:#FFA657">git</span><span style="--0:#1F2328;--1:#E6EDF3"> </span><span style="--0:#0A3069;--1:#A5D6FF">push</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="git add .git commit -m &#x22;docs: ajoute une page de test&#x22;git push"><div></div></button></div></figure></div><p><strong>Vérification</strong> : l’onglet <strong>Déploiements</strong> du projet affiche un déploiement en cours, puis <strong>Prêt</strong>. L’adresse de production affiche la modification.</p></div></li><li class="hgdc-step"><p class="hgdc-step__title">Ouvre une preview</p><div class="hgdc-step__body"><p>Crée une branche, pousse-la, puis ouvre une pull request sur la branche principale. Host construit la branche et publie une preview.</p><p><strong>Vérification</strong> : le commit affiche le statut du déploiement avec son lien. La preview répond sur son adresse <code>hgdc.cloud</code>.</p></div></li></ol>
24
+ <h2 id="et-après">Et après</h2>
25
+ <ul>
26
+ <li>Pour mettre le site sur ton domaine, suis <a href="/docs/guides/brancher-un-domaine/">Brancher un domaine</a>.</li>
27
+ <li>Pour les variables de build, comme une clé publique ou l’adresse d’une API, suis <a href="/docs/guides/variables-d-environnement/">Variables d’environnement</a>.</li>
28
+ <li>Pour comprendre ce qui se passe à chaque push, lis <a href="/docs/concepts/deploiements/">Déploiements</a>.</li>
29
+ </ul>
30
+ <h2 id="si-ça-ne-marche-pas">Si ça ne marche pas</h2>
31
+ <ul>
32
+ <li>Le build n’apparaît pas après le push : vérifie que la PR d’installation est fusionnée. Voir <a href="/docs/guides/depannage/#le-build-github-est-absent">Dépannage</a>.</li>
33
+ <li>Le build échoue : ouvre le déploiement dans Host, la sortie du build y est affichée en direct.</li>
34
+ </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/demarrer/premier-site/" 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">Premier site</span></a><a class="hd-pagination__link hd-pagination__link--next" href="/docs/guides/cle-d-api/" 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">Clés d&#39;API</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="#et-après" style="--depth: 0;" class="astro-jxyovztp"><span style="--depth: 0;" class="astro-jxyovztp">Et après</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,68 @@
1
+ # Déployer un site depuis GitHub
2
+
3
+ Dans ce parcours, tu importes un dépôt GitHub dans Host. À la fin, un `git push` sur la branche principale met ton site en production, et chaque autre branche reçoit sa propre preview.
4
+
5
+ **Avant de commencer** :
6
+
7
+ - un compte HGDC et une organisation dans Account ;
8
+ - un dépôt GitHub avec un site qui se construit (Astro, Vite, Next.js ou un site statique) ;
9
+ - le droit d’écriture (push) sur ce dépôt. Un dépôt où tu n’as que la lecture ne s’importe pas.
10
+
11
+ 1. **Ouvre un nouveau projet**
12
+
13
+ Dans ton organisation, clique **Nouveau projet**, puis **Importer depuis GitHub**.
14
+
15
+ **Vérification** : la liste des dépôts accessibles s’affiche, ou Host te propose d’installer l’app GitHub.
16
+
17
+ 2. **Installe l'app GitHub**
18
+
19
+ Installe l’app **Host** sur ton compte GitHub ou sur celui de ton organisation. Tu peux la limiter à quelques dépôts.
20
+
21
+ L’app ne demande que les droits dont le workflow a besoin. Le détail est dans [Déployer depuis GitHub](/docs/guides/deployer-depuis-github/).
22
+
23
+ **Vérification** : le dépôt choisi apparaît dans la liste de Host.
24
+
25
+ 3. **Choisis le dépôt et vérifie les réglages**
26
+
27
+ Sélectionne le dépôt. Host lit le projet et propose le framework, les commandes d’installation et de build, la version de Node.js et la branche de production.
28
+
29
+ Si le site est dans un sous-dossier ou dans un monorepo, choisis le dossier de l’app. Voir [Monorepo et sous-dossier](/docs/guides/monorepo/).
30
+
31
+ **Vérification** : le framework détecté correspond à ton site. Corrige les réglages qui ne correspondent pas.
32
+
33
+ 4. **Fusionne la PR d'installation**
34
+
35
+ L’import ouvre une pull request qui ajoute le fichier `.github/workflows/hgdc-host.yml` et pose le secret `HGDC_HOST_TOKEN` dans le dépôt. Relis-la, puis fusionne-la sur la branche principale.
36
+
37
+ Le secret est une clé limitée à ce projet. Elle ne peut ni créer de projet ni lire les autres.
38
+
39
+ **Vérification** : la PR est fusionnée, et le fichier `hgdc-host.yml` existe sur la branche principale.
40
+
41
+ 5. **Pousse une modification**
42
+
43
+ Modifie une page du site, puis pousse-la sur la branche principale :
44
+
45
+ ```bash
46
+ git add .
47
+ git commit -m "docs: ajoute une page de test"
48
+ git push
49
+ ```
50
+
51
+ **Vérification** : l’onglet **Déploiements** du projet affiche un déploiement en cours, puis **Prêt**. L’adresse de production affiche la modification.
52
+
53
+ 6. **Ouvre une preview**
54
+
55
+ Crée une branche, pousse-la, puis ouvre une pull request sur la branche principale. Host construit la branche et publie une preview.
56
+
57
+ **Vérification** : le commit affiche le statut du déploiement avec son lien. La preview répond sur son adresse `hgdc.cloud`.
58
+
59
+ ## Et après
60
+
61
+ - Pour mettre le site sur ton domaine, suis [Brancher un domaine](/docs/guides/brancher-un-domaine/).
62
+ - Pour les variables de build, comme une clé publique ou l’adresse d’une API, suis [Variables d’environnement](/docs/guides/variables-d-environnement/).
63
+ - Pour comprendre ce qui se passe à chaque push, lis [Déploiements](/docs/concepts/deploiements/).
64
+
65
+ ## Si ça ne marche pas
66
+
67
+ - Le build n’apparaît pas après le push : vérifie que la PR d’installation est fusionnée. Voir [Dépannage](/docs/guides/depannage/#le-build-github-est-absent).
68
+ - Le build échoue : ouvre le déploiement dans Host, la sortie du build y est affichée en direct.