@ferrflow/doc 7.17.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 (170) hide show
  1. package/docs-en/ci/github-actions.md +120 -0
  2. package/docs-en/ci/gitlab-ci.md +90 -0
  3. package/docs-en/ci/hosted-bot.md +82 -0
  4. package/docs-en/ci/pipeline-triggers.md +287 -0
  5. package/docs-en/configuration/config-file.md +1259 -0
  6. package/docs-en/configuration/formats.md +220 -0
  7. package/docs-en/configuration/monorepo.md +390 -0
  8. package/docs-en/installation.md +56 -0
  9. package/docs-en/introduction.md +56 -0
  10. package/docs-en/quickstart.md +66 -0
  11. package/docs-en/reference/api.md +106 -0
  12. package/docs-en/reference/cli.md +483 -0
  13. package/docs-en/reference/conventional-commits.md +103 -0
  14. package/docs-en/reference/errors.md +508 -0
  15. package/docs-en/verifying-releases.md +97 -0
  16. package/docs-fr/ci/github-actions.md +109 -0
  17. package/docs-fr/ci/gitlab-ci.md +77 -0
  18. package/docs-fr/ci/hosted-bot.md +82 -0
  19. package/docs-fr/ci/pipeline-triggers.md +238 -0
  20. package/docs-fr/configuration/config-file.md +839 -0
  21. package/docs-fr/configuration/formats.md +163 -0
  22. package/docs-fr/configuration/monorepo.md +357 -0
  23. package/docs-fr/installation.md +56 -0
  24. package/docs-fr/introduction.md +54 -0
  25. package/docs-fr/quickstart.md +63 -0
  26. package/docs-fr/reference/api.md +106 -0
  27. package/docs-fr/reference/cli.md +407 -0
  28. package/docs-fr/reference/conventional-commits.md +103 -0
  29. package/docs-fr/reference/errors.md +378 -0
  30. package/docs-fr/verifying-releases.md +97 -0
  31. package/docs-fr-v4/ci/github-actions.md +106 -0
  32. package/docs-fr-v4/ci/gitlab-ci.md +77 -0
  33. package/docs-fr-v4/ci/pipeline-triggers.md +214 -0
  34. package/docs-fr-v4/configuration/config-file.md +769 -0
  35. package/docs-fr-v4/configuration/formats.md +128 -0
  36. package/docs-fr-v4/configuration/monorepo.md +324 -0
  37. package/docs-fr-v4/installation.md +48 -0
  38. package/docs-fr-v4/introduction.md +54 -0
  39. package/docs-fr-v4/legal/telemetry.md +65 -0
  40. package/docs-fr-v4/quickstart.md +63 -0
  41. package/docs-fr-v4/reference/cli.md +130 -0
  42. package/docs-fr-v4/reference/conventional-commits.md +67 -0
  43. package/docs-fr-v4/reference/errors.md +372 -0
  44. package/docs-fr-v5/ci/github-actions.md +109 -0
  45. package/docs-fr-v5/ci/gitlab-ci.md +77 -0
  46. package/docs-fr-v5/ci/hosted-bot.md +82 -0
  47. package/docs-fr-v5/ci/pipeline-triggers.md +238 -0
  48. package/docs-fr-v5/configuration/config-file.md +812 -0
  49. package/docs-fr-v5/configuration/formats.md +150 -0
  50. package/docs-fr-v5/configuration/monorepo.md +357 -0
  51. package/docs-fr-v5/installation.md +56 -0
  52. package/docs-fr-v5/introduction.md +54 -0
  53. package/docs-fr-v5/legal/telemetry.md +26 -0
  54. package/docs-fr-v5/quickstart.md +63 -0
  55. package/docs-fr-v5/reference/api.md +106 -0
  56. package/docs-fr-v5/reference/cli.md +356 -0
  57. package/docs-fr-v5/reference/conventional-commits.md +88 -0
  58. package/docs-fr-v5/reference/errors.md +378 -0
  59. package/docs-fr-v5/verifying-releases.md +97 -0
  60. package/docs-fr-v6/ci/github-actions.md +109 -0
  61. package/docs-fr-v6/ci/gitlab-ci.md +77 -0
  62. package/docs-fr-v6/ci/hosted-bot.md +82 -0
  63. package/docs-fr-v6/ci/pipeline-triggers.md +238 -0
  64. package/docs-fr-v6/configuration/config-file.md +813 -0
  65. package/docs-fr-v6/configuration/formats.md +150 -0
  66. package/docs-fr-v6/configuration/monorepo.md +357 -0
  67. package/docs-fr-v6/installation.md +56 -0
  68. package/docs-fr-v6/introduction.md +54 -0
  69. package/docs-fr-v6/quickstart.md +63 -0
  70. package/docs-fr-v6/reference/api.md +106 -0
  71. package/docs-fr-v6/reference/cli.md +356 -0
  72. package/docs-fr-v6/reference/conventional-commits.md +88 -0
  73. package/docs-fr-v6/reference/errors.md +378 -0
  74. package/docs-fr-v6/verifying-releases.md +97 -0
  75. package/docs-v0/ci/github-actions.md +77 -0
  76. package/docs-v0/ci/gitlab-ci.md +59 -0
  77. package/docs-v0/configuration/config-file.md +97 -0
  78. package/docs-v0/configuration/formats.md +86 -0
  79. package/docs-v0/configuration/monorepo.md +59 -0
  80. package/docs-v0/installation.md +48 -0
  81. package/docs-v0/introduction.md +34 -0
  82. package/docs-v0/legal/telemetry.md +63 -0
  83. package/docs-v0/quickstart.md +58 -0
  84. package/docs-v0/reference/cli.md +95 -0
  85. package/docs-v0/reference/conventional-commits.md +68 -0
  86. package/docs-v1/ci/github-actions.md +76 -0
  87. package/docs-v1/ci/gitlab-ci.md +58 -0
  88. package/docs-v1/configuration/config-file.md +515 -0
  89. package/docs-v1/configuration/formats.md +115 -0
  90. package/docs-v1/configuration/monorepo.md +246 -0
  91. package/docs-v1/installation.md +48 -0
  92. package/docs-v1/introduction.md +39 -0
  93. package/docs-v1/legal/telemetry.md +63 -0
  94. package/docs-v1/quickstart.md +62 -0
  95. package/docs-v1/reference/cli.md +128 -0
  96. package/docs-v1/reference/conventional-commits.md +67 -0
  97. package/docs-v2/ci/github-actions.md +117 -0
  98. package/docs-v2/ci/gitlab-ci.md +90 -0
  99. package/docs-v2/ci/pipeline-triggers.md +263 -0
  100. package/docs-v2/configuration/config-file.md +806 -0
  101. package/docs-v2/configuration/formats.md +98 -0
  102. package/docs-v2/configuration/monorepo.md +324 -0
  103. package/docs-v2/installation.md +48 -0
  104. package/docs-v2/introduction.md +40 -0
  105. package/docs-v2/legal/telemetry.md +66 -0
  106. package/docs-v2/quickstart.md +63 -0
  107. package/docs-v2/reference/cli.md +130 -0
  108. package/docs-v2/reference/conventional-commits.md +67 -0
  109. package/docs-v2/reference/errors.md +500 -0
  110. package/docs-v2/self-hosting.md +101 -0
  111. package/docs-v3/ci/github-actions.md +117 -0
  112. package/docs-v3/ci/gitlab-ci.md +90 -0
  113. package/docs-v3/ci/pipeline-triggers.md +263 -0
  114. package/docs-v3/configuration/config-file.md +806 -0
  115. package/docs-v3/configuration/formats.md +99 -0
  116. package/docs-v3/configuration/monorepo.md +324 -0
  117. package/docs-v3/installation.md +48 -0
  118. package/docs-v3/introduction.md +40 -0
  119. package/docs-v3/legal/telemetry.md +66 -0
  120. package/docs-v3/quickstart.md +66 -0
  121. package/docs-v3/reference/cli.md +161 -0
  122. package/docs-v3/reference/conventional-commits.md +67 -0
  123. package/docs-v3/reference/errors.md +502 -0
  124. package/docs-v3/self-hosting.md +137 -0
  125. package/docs-v4/ci/github-actions.md +117 -0
  126. package/docs-v4/ci/gitlab-ci.md +90 -0
  127. package/docs-v4/ci/pipeline-triggers.md +263 -0
  128. package/docs-v4/configuration/config-file.md +850 -0
  129. package/docs-v4/configuration/formats.md +182 -0
  130. package/docs-v4/configuration/monorepo.md +324 -0
  131. package/docs-v4/installation.md +48 -0
  132. package/docs-v4/introduction.md +56 -0
  133. package/docs-v4/legal/telemetry.md +65 -0
  134. package/docs-v4/quickstart.md +66 -0
  135. package/docs-v4/reference/cli.md +161 -0
  136. package/docs-v4/reference/conventional-commits.md +67 -0
  137. package/docs-v4/reference/errors.md +502 -0
  138. package/docs-v4/self-hosting.md +137 -0
  139. package/docs-v5/ci/github-actions.md +120 -0
  140. package/docs-v5/ci/gitlab-ci.md +90 -0
  141. package/docs-v5/ci/hosted-bot.md +82 -0
  142. package/docs-v5/ci/pipeline-triggers.md +287 -0
  143. package/docs-v5/configuration/config-file.md +1133 -0
  144. package/docs-v5/configuration/formats.md +206 -0
  145. package/docs-v5/configuration/monorepo.md +390 -0
  146. package/docs-v5/installation.md +56 -0
  147. package/docs-v5/introduction.md +56 -0
  148. package/docs-v5/legal/telemetry.md +26 -0
  149. package/docs-v5/quickstart.md +66 -0
  150. package/docs-v5/reference/api.md +106 -0
  151. package/docs-v5/reference/cli.md +431 -0
  152. package/docs-v5/reference/conventional-commits.md +88 -0
  153. package/docs-v5/reference/errors.md +508 -0
  154. package/docs-v5/verifying-releases.md +97 -0
  155. package/docs-v6/ci/github-actions.md +120 -0
  156. package/docs-v6/ci/gitlab-ci.md +90 -0
  157. package/docs-v6/ci/hosted-bot.md +82 -0
  158. package/docs-v6/ci/pipeline-triggers.md +287 -0
  159. package/docs-v6/configuration/config-file.md +1134 -0
  160. package/docs-v6/configuration/formats.md +206 -0
  161. package/docs-v6/configuration/monorepo.md +390 -0
  162. package/docs-v6/installation.md +56 -0
  163. package/docs-v6/introduction.md +56 -0
  164. package/docs-v6/quickstart.md +66 -0
  165. package/docs-v6/reference/api.md +106 -0
  166. package/docs-v6/reference/cli.md +431 -0
  167. package/docs-v6/reference/conventional-commits.md +88 -0
  168. package/docs-v6/reference/errors.md +508 -0
  169. package/docs-v6/verifying-releases.md +97 -0
  170. package/package.json +17 -0
@@ -0,0 +1,378 @@
1
+ ---
2
+ title: Codes d'erreur
3
+ description: "R\u00e9f\u00e9rence des codes d'erreur FerrFlow avec causes et solutions."
4
+ ---
5
+
6
+ Quand FerrFlow rencontre une erreur, il affiche un code comme `error[E2001]` avec un lien vers cette page. Utilisez le code pour trouver la cause et la solution.
7
+
8
+ ## Erreurs de configuration
9
+
10
+ ### E1001 : Fichier de config introuvable
11
+
12
+ <span id="e1001"></span>
13
+
14
+ Le fichier de config indiqu\u00e9 via `--config` n'existe pas.
15
+
16
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Lancez <code>ferrflow init</code> pour cr\u00e9er un fichier de config, ou v\u00e9rifiez le chemin.</p>
17
+ </div></aside>
18
+
19
+ ### E1002 : \u00c9chec du parsing ferrflow.json
20
+
21
+ <span id="e1002"></span>
22
+
23
+ Le fichier `ferrflow.json` contient du JSON invalide.
24
+
25
+ ### E1003 : \u00c9chec du parsing ferrflow.json5
26
+
27
+ <span id="e1003"></span>
28
+
29
+ Le fichier `ferrflow.json5` contient du JSON5 invalide.
30
+
31
+ ### E1004 : \u00c9chec du parsing ferrflow.toml
32
+
33
+ <span id="e1004"></span>
34
+
35
+ Le fichier `ferrflow.toml` contient du TOML invalide.
36
+
37
+ ### E1005 : Erreur de s\u00e9rialisation TOML
38
+
39
+ <span id="e1005"></span>
40
+
41
+ Erreur interne lors de l'\u00e9criture TOML.
42
+
43
+ ### E1006 : \u00c9chec du parsing .ferrflow
44
+
45
+ <span id="e1006"></span>
46
+
47
+ Le fichier `.ferrflow` contient du JSON invalide.
48
+
49
+ ### E1007 : Erreur de s\u00e9rialisation .ferrflow
50
+
51
+ <span id="e1007"></span>
52
+
53
+ Erreur interne lors de l'\u00e9criture du dotfile.
54
+
55
+ ### E1008 : R\u00e9solution de chemin impossible
56
+
57
+ <span id="e1008"></span>
58
+
59
+ Un chemin dans la config n'a pas pu \u00eatre r\u00e9solu en chemin absolu.
60
+
61
+ ### E1009 : \u00c9criture du loader temporaire impossible
62
+
63
+ <span id="e1009"></span>
64
+
65
+ Impossible d'\u00e9crire le loader JS/TS temporaire.
66
+
67
+ ### E1010 : Impossible d'ex\u00e9cuter tsx
68
+
69
+ <span id="e1010"></span>
70
+
71
+ Le runtime `tsx` est introuvable pour les configs `.ts`.
72
+
73
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Installez tsx : <code>npm install -g tsx</code>, ou utilisez un format JSON/TOML.</p>
74
+ </div></aside>
75
+
76
+ ### E1011 : Impossible d'ex\u00e9cuter node
77
+
78
+ <span id="e1011"></span>
79
+
80
+ Le runtime `node` est introuvable pour les configs `.js`.
81
+
82
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Installez Node.js ou utilisez un format JSON/TOML.</p>
83
+ </div></aside>
84
+
85
+ ### E1012 : \u00c9valuation de la config \u00e9chou\u00e9e
86
+
87
+ <span id="e1012"></span>
88
+
89
+ Le fichier JS/TS a lev\u00e9 une erreur lors de l'\u00e9valuation.
90
+
91
+ ### E1013 : Sortie de config invalide
92
+
93
+ <span id="e1013"></span>
94
+
95
+ Le fichier JS/TS a produit une sortie non UTF-8.
96
+
97
+ ### E1014 : JSON invalide depuis la config
98
+
99
+ <span id="e1014"></span>
100
+
101
+ Le fichier JS/TS n'a pas produit de JSON valide.
102
+
103
+ ### E1015 : Lecture du fichier impossible
104
+
105
+ <span id="e1015"></span>
106
+
107
+ Le fichier de config existe mais ne peut pas \u00eatre lu.
108
+
109
+ ### E1016 : Plusieurs fichiers de config
110
+
111
+ <span id="e1016"></span>
112
+
113
+ Plusieurs fichiers de config trouv\u00e9s dans le r\u00e9pertoire.
114
+
115
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Gardez un seul fichier de config.</p>
116
+ </div></aside>
117
+
118
+ ### E1017 : Fichier d\u00e9j\u00e0 existant
119
+
120
+ <span id="e1017"></span>
121
+
122
+ `ferrflow init` lanc\u00e9 alors qu'un fichier de config existe d\u00e9j\u00e0.
123
+
124
+ ## Erreurs de validation
125
+
126
+ ### E1100 : Spec de repo invalide
127
+
128
+ <span id="e1100"></span>
129
+
130
+ L'argument `--repo` ne correspond pas au format attendu `owner/repo`.
131
+
132
+ ### E1101 : Erreur API GitHub
133
+
134
+ <span id="e1101"></span>
135
+
136
+ L'API GitHub a retourn\u00e9 une erreur lors de la validation distante.
137
+
138
+ ### E1102 : Erreur API GitLab
139
+
140
+ <span id="e1102"></span>
141
+
142
+ L'API GitLab a retourn\u00e9 une erreur lors de la validation distante.
143
+
144
+ ### E1103 : UTF-8 invalide
145
+
146
+ <span id="e1103"></span>
147
+
148
+ Le fichier de config distant contient un encodage UTF-8 invalide.
149
+
150
+ ### E1104 : Parsing de la config distante \u00e9chou\u00e9
151
+
152
+ <span id="e1104"></span>
153
+
154
+ Le fichier de config distant n'a pas pu \u00eatre pars\u00e9.
155
+
156
+ ### E1105 : Fichier de config distant introuvable
157
+
158
+ <span id="e1105"></span>
159
+
160
+ Le chemin sp\u00e9cifi\u00e9 n'existe pas dans le d\u00e9p\u00f4t distant.
161
+
162
+ ### E1106 : Aucun fichier de config trouv\u00e9
163
+
164
+ <span id="e1106"></span>
165
+
166
+ Aucun fichier de config FerrFlow dans le d\u00e9p\u00f4t distant.
167
+
168
+ ### E1107 : --ref n\u00e9cessite --repo
169
+
170
+ <span id="e1107"></span>
171
+
172
+ Le flag `--ref` a \u00e9t\u00e9 utilis\u00e9 sans `--repo`.
173
+
174
+ ## Op\u00e9rations Git
175
+
176
+ ### E2001 : Pas un d\u00e9p\u00f4t git
177
+
178
+ <span id="e2001"></span>
179
+
180
+ Le r\u00e9pertoire courant n'est pas dans un d\u00e9p\u00f4t git.
181
+
182
+ ### E2002 : D\u00e9p\u00f4t bare non support\u00e9
183
+
184
+ <span id="e2002"></span>
185
+
186
+ FerrFlow ne supporte pas les d\u00e9p\u00f4ts git bare.
187
+
188
+ ### E2003 : Tag existant
189
+
190
+ <span id="e2003"></span>
191
+
192
+ Le tag que FerrFlow veut cr\u00e9er existe d\u00e9j\u00e0.
193
+
194
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Supprimez le tag existant ou utilisez <code>--force</code>.</p>
195
+ </div></aside>
196
+
197
+ ### E2004 : Push de branche \u00e9chou\u00e9
198
+
199
+ <span id="e2004"></span>
200
+
201
+ Impossible de push la branche de release.
202
+
203
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>V\u00e9rifiez vos droits de push et les r\u00e8gles de protection.</p>
204
+ </div></aside>
205
+
206
+ ### E2005 : Push rejet\u00e9
207
+
208
+ <span id="e2005"></span>
209
+
210
+ Le remote a rejet\u00e9 le push.
211
+
212
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Pullez les derniers changements et r\u00e9essayez.</p>
213
+ </div></aside>
214
+
215
+ ### E2006 : Push des tags \u00e9chou\u00e9
216
+
217
+ <span id="e2006"></span>
218
+
219
+ Impossible de push les tags vers le remote.
220
+
221
+ ### E2007 : Push des tags flottants \u00e9chou\u00e9
222
+
223
+ <span id="e2007"></span>
224
+
225
+ Impossible de force-push les tags flottants.
226
+
227
+ ### E2008 : Remote introuvable
228
+
229
+ <span id="e2008"></span>
230
+
231
+ Le remote git configur\u00e9 n'existe pas.
232
+
233
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>V\u00e9rifiez <code>git remote -v</code> et le champ <code>remote</code> de votre config.</p>
234
+ </div></aside>
235
+
236
+ ### E2009 : V\u00e9rification post-push \u00e9chou\u00e9e
237
+
238
+ <span id="e2009"></span>
239
+
240
+ Le commit de release n'a pas pu \u00eatre v\u00e9rifi\u00e9 sur la branche distante.
241
+
242
+ ### E2010 : Branche distante introuvable
243
+
244
+ <span id="e2010"></span>
245
+
246
+ La branche distante n'a pas \u00e9t\u00e9 trouv\u00e9e apr\u00e8s le push.
247
+
248
+ ## API GitHub
249
+
250
+ ### E3001 : Cr\u00e9ation de release \u00e9chou\u00e9e
251
+
252
+ <span id="e3001"></span>
253
+
254
+ L'API GitHub Releases a retourn\u00e9 une erreur.
255
+
256
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>V\u00e9rifiez que <code>GITHUB_TOKEN</code> a la permission <code>contents: write</code>.</p>
257
+ </div></aside>
258
+
259
+ ### E3002 to E3010 : Erreurs API GitHub
260
+
261
+ <span id="e3002"></span>
262
+
263
+ Erreurs lors d'op\u00e9rations sur l'API GitHub (releases, PR, auto-merge, GraphQL).
264
+
265
+ ## API GitLab
266
+
267
+ ### E3101 : Cr\u00e9ation de release \u00e9chou\u00e9e
268
+
269
+ <span id="e3101"></span>
270
+
271
+ L'API GitLab Releases a retourn\u00e9 une erreur.
272
+
273
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>V\u00e9rifiez que le token CI a les acc\u00e8s API n\u00e9cessaires.</p>
274
+ </div></aside>
275
+
276
+ ### E3102 to E3105 : Erreurs API GitLab
277
+
278
+ <span id="e3102"></span>
279
+
280
+ Erreurs lors d'op\u00e9rations sur l'API GitLab (releases, MR, merge).
281
+
282
+ ## Fichiers de version
283
+
284
+ Les erreurs E4xxx concernent la lecture, l'\u00e9criture et le parsing des fichiers de version :
285
+
286
+ | Plage | Format |
287
+ | -------------- | --------------------------------- |
288
+ | E4101 to E4105 | TOML (Cargo.toml, pyproject.toml) |
289
+ | E4201 to E4205 | JSON (package.json) |
290
+ | E4301 to E4304 | Helm / YAML (Chart.yaml) |
291
+ | E4401 to E4413 | XML / CSProj |
292
+ | E4501 to E4504 | Gradle |
293
+ | E4601 to E4603 | Go mod |
294
+ | E4701 to E4704 | Texte (VERSION, VERSION.txt) |
295
+
296
+ Erreurs courantes : lecture impossible, syntaxe invalide, champ `version` manquant, \u00e9criture impossible, UTF-8 invalide.
297
+
298
+ ## Pr\u00e9-release
299
+
300
+ ### E5001 : Nom de channel vide
301
+
302
+ <span id="e5001"></span>
303
+
304
+ Le nom du channel de pr\u00e9-release est vide.
305
+
306
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Sp\u00e9cifiez un nom : <code>--channel beta</code></p>
307
+ </div></aside>
308
+
309
+ ### E5002 : Nom de channel invalide
310
+
311
+ <span id="e5002"></span>
312
+
313
+ Seuls les alphanum\u00e9riques et tirets sont accept\u00e9s.
314
+
315
+ ## Versioning
316
+
317
+ ### E5010 : Semver invalide
318
+
319
+ <span id="e5010"></span>
320
+
321
+ La version actuelle n'est pas un semver valide.
322
+
323
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Format attendu : <code>MAJEUR.MINEUR.PATCH</code>.</p>
324
+ </div></aside>
325
+
326
+ ## Hooks
327
+
328
+ ### E6001 : Hook \u00e9chou\u00e9
329
+
330
+ <span id="e6001"></span>
331
+
332
+ Un hook a \u00e9chou\u00e9 avec `on_failure: "abort"`.
333
+
334
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>V\u00e9rifiez la commande du hook, ou mettez <code>on_failure: &quot;continue&quot;</code>.</p>
335
+ </div></aside>
336
+
337
+ ## Query
338
+
339
+ ### E7001 : Aucun package configur\u00e9
340
+
341
+ <span id="e7001"></span>
342
+
343
+ Aucun package dans le fichier de config.
344
+
345
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Lancez <code>ferrflow init</code> ou ajoutez des packages manuellement.</p>
346
+ </div></aside>
347
+
348
+ ### E7002 : Package introuvable
349
+
350
+ <span id="e7002"></span>
351
+
352
+ Le nom de package sp\u00e9cifi\u00e9 n'existe pas dans la config.
353
+
354
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Lancez <code>ferrflow version</code> pour lister les packages.</p>
355
+ </div></aside>
356
+
357
+ ## Monorepo
358
+
359
+ ### E8001 : Package introuvable dans la config
360
+
361
+ <span id="e8001"></span>
362
+
363
+ Un package r\u00e9f\u00e9renc\u00e9 pendant la release n'a pas \u00e9t\u00e9 trouv\u00e9.
364
+
365
+ ### E8002 : Tag flottant r\u00e9gressif
366
+
367
+ <span id="e8002"></span>
368
+
369
+ Un tag flottant serait d\u00e9plac\u00e9 vers une version plus ancienne.
370
+
371
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Utilisez <code>--force</code> pour ignorer la v\u00e9rification.</p>
372
+ </div></aside>
373
+
374
+ ### E8003 : Cycle de dépendances
375
+
376
+ <span id="e8003"></span>
377
+
378
+ Deux packages ou plus dépendent l'un de l'autre via `dependsOn`, directement ou transitivement : il n'existe aucun ordre de release possible. Le message nomme la boucle, par exemple `cycle detected: api → web → api`. Supprimez l'une des arêtes `dependsOn` pour la casser. La vérification s'exécute avant toute écriture de version, donc une configuration cyclique ne laisse jamais de release partielle.
@@ -0,0 +1,97 @@
1
+ ---
2
+ title: Vérifier les releases
3
+ description: Chaque release FerrFlow embarque des signatures Sigstore, un SBOM CycloneDX et une attestation de provenance SLSA. Voici comment les vérifier.
4
+ ---
5
+
6
+ Chaque tarball de release, l'image Docker, l'archive de complétions binaires et le SBOM qui les accompagne sont signés via [Sigstore](https://www.sigstore.dev/) en signature sans clé. Il n'y a aucune clé publique à suivre — l'identité de signature est celle du workload GitHub Actions qui tourne dans `FerrLabs/FerrFlow`, ancrée dans le journal public de transparence [Rekor](https://docs.sigstore.dev/logging/overview/).
7
+
8
+ Disponible depuis la v5.2.
9
+
10
+ ## Ce qui est livré par release
11
+
12
+ | Artefact | Sidecars |
13
+ | ---------------------------------- | ---------------------------------- |
14
+ | `ferrflow-linux-x64.tar.gz` | `.sig`, `.crt` |
15
+ | `ferrflow-linux-arm64.tar.gz` | `.sig`, `.crt` |
16
+ | `ferrflow-linux-armv7.tar.gz` | `.sig`, `.crt` |
17
+ | `ferrflow-darwin-x64.tar.gz` | `.sig`, `.crt` |
18
+ | `ferrflow-darwin-arm64.tar.gz` | `.sig`, `.crt` |
19
+ | `ferrflow-windows-x64.zip` | `.sig`, `.crt` |
20
+ | `ferrflow-windows-arm64.zip` | `.sig`, `.crt` |
21
+ | `ferrflow-completions.tar.gz` | `.sig`, `.crt` |
22
+ | `sbom.cdx.json` | `.sig`, `.crt` |
23
+ | `ghcr.io/ferrlabs/ferrflow:vX.Y.Z` | Signature cosign dans GHCR + Rekor |
24
+
25
+ Tous les sidecars sont téléchargeables depuis la page GitHub Release à côté du binaire.
26
+
27
+ > Les releases jusqu'à **v5.47.4** embarquent une paire `.sig` + `.crt` au lieu d'un unique `.bundle`. Vérifiez-les avec `--certificate <fichier>.crt --signature <fichier>.sig` à la place de `--bundle`. Le changement vient de cosign v3, qui a remplacé les sorties signature et certificat séparées par un bundle unique.
28
+
29
+ ## Vérifier un tarball
30
+
31
+ ```bash
32
+ # installer cosign (une seule fois)
33
+ curl -L https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64 \
34
+ -o /usr/local/bin/cosign && chmod +x /usr/local/bin/cosign
35
+
36
+ # télécharger l'artefact + les sidecars depuis la page de release
37
+ TAG=v5.2.3
38
+ gh release download "$TAG" --repo FerrLabs/FerrFlow \
39
+ -p 'ferrflow-linux-x64.tar.gz*'
40
+
41
+ # vérifier
42
+ cosign verify-blob \
43
+ --bundle ferrflow-linux-x64.tar.gz.bundle \
44
+ --certificate-identity-regexp "https://github.com/FerrLabs/FerrFlow/.*" \
45
+ --certificate-oidc-issuer https://token.actions.githubusercontent.com \
46
+ ferrflow-linux-x64.tar.gz
47
+ # → Verified OK
48
+ ```
49
+
50
+ Une vérification qui passe signifie :
51
+
52
+ - Les octets du tarball n'ont pas été modifiés depuis que le workflow de release les a signés.
53
+ - L'identité de signature était un workflow exécuté dans `FerrLabs/FerrFlow` déclenché par l'issuer OIDC de GitHub Actions.
54
+ - La signature est inscrite dans le journal public Rekor — cherchez la valeur du `.sig` sur [search.sigstore.dev](https://search.sigstore.dev/).
55
+
56
+ ## Vérifier l'image Docker
57
+
58
+ ```bash
59
+ cosign verify ghcr.io/ferrlabs/ferrflow:v5.2.3 \
60
+ --certificate-identity-regexp "https://github.com/FerrLabs/FerrFlow/.*" \
61
+ --certificate-oidc-issuer https://token.actions.githubusercontent.com
62
+ ```
63
+
64
+ ## Vérifier le SBOM
65
+
66
+ Le SBOM (`sbom.cdx.json`) est un document [CycloneDX](https://cyclonedx.org/) listant toutes les dépendances transitives du binaire publié. Il est signé de la même façon que les tarballs :
67
+
68
+ ```bash
69
+ cosign verify-blob \
70
+ --bundle sbom.cdx.json.bundle \
71
+ --certificate-identity-regexp "https://github.com/FerrLabs/FerrFlow/.*" \
72
+ --certificate-oidc-issuer https://token.actions.githubusercontent.com \
73
+ sbom.cdx.json
74
+ ```
75
+
76
+ Injectez le SBOM vérifié dans votre scanner — Grype, Trivy, Snyk, JFrog Xray, Anchore, n'importe quoi qui parle CycloneDX.
77
+
78
+ ## Attestation de provenance SLSA
79
+
80
+ En plus des signatures Sigstore, chaque release embarque aussi une [attestation de provenance SLSA](https://slsa.dev/) générée via [`actions/attest-build-provenance`](https://github.com/actions/attest-build-provenance). Elle enregistre le run du workflow, le SHA du commit source et les inputs de build.
81
+
82
+ ```bash
83
+ gh attestation verify ferrflow-linux-x64.tar.gz --repo FerrLabs/FerrFlow
84
+ ```
85
+
86
+ ## Ce qui n'est pas signé
87
+
88
+ Les tarballs sources de `git archive` (les actifs « Source code (zip) » / « Source code (tar.gz) » générés automatiquement sur la page GitHub Release) viennent de GitHub, pas du workflow de release, et n'ont pas de sidecar de signature. Si vous avez besoin d'une attestation sur la source, utilisez plutôt `gh attestation verify` contre le bundle de provenance.
89
+
90
+ ## Pourquoi c'est important
91
+
92
+ - **Attaques de chaîne d'approvisionnement.** Un attaquant qui compromet un CDN, un miroir ou pousse un package typosquat ne peut pas forger la signature — l'identité de signature est ancrée au flow OIDC de GitHub Actions.
93
+ - **Conformité.** Les clients SOC 2 / ISO 27001 peuvent attester que le binaire qu'ils ont récupéré est celui que leur auditeur a approuvé.
94
+ - **Aucune gestion de clé.** Personne chez FerrLabs n'a de clé privée de signature à perdre ou faire tourner. Le workflow prouve son identité au moment de la signature.
95
+
96
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Si vous déployez FerrFlow dans un environnement régulé, pinnez à la fois la version <strong>et</strong> la paire <code>.sig</code>/<code>.crt</code> dans votre étape de provisioning. Une compromission future du workflow ne peut pas antidater une signature déjà présente dans Rekor.</p>
97
+ </div></aside>
@@ -0,0 +1,77 @@
1
+ ---
2
+ title: GitHub Actions
3
+ description: Run FerrFlow releases automatically in GitHub Actions.
4
+ slug: v0/docs/ci/github-actions
5
+ ---
6
+
7
+ ## Using the official action
8
+
9
+ The easiest way to use FerrFlow in GitHub Actions is the `FerrLabs/ferrflow@v0` action. It installs the binary and runs `ferrflow release` automatically.
10
+
11
+ ```yaml
12
+ name: Release
13
+
14
+ on:
15
+ push:
16
+ branches: [main]
17
+
18
+ jobs:
19
+ release:
20
+ runs-on: ubuntu-latest
21
+ permissions:
22
+ contents: write # required to push tags and create releases
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ with:
26
+ fetch-depth: 0 # full history needed for commit scanning
27
+ token: ${{ secrets.GITHUB_TOKEN }}
28
+
29
+ - uses: FerrLabs/ferrflow@v0
30
+ env:
31
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
32
+ ```
33
+
34
+ <aside class="ferr-aside ferr-aside--warning"><div class="ferr-aside__body"><p><code>fetch-depth: 0</code> is required. Without it, FerrFlow cannot find previous tags and will treat every commit as new.</p>
35
+ </div></aside>
36
+
37
+ ## Permissions
38
+
39
+ FerrFlow needs `contents: write` to:
40
+
41
+ - Push version bump commits
42
+ - Create and push git tags
43
+ - Create GitHub Releases
44
+
45
+ If your repository has branch protection rules, create a dedicated token with the necessary permissions and pass it as `FERRFLOW_TOKEN` or configure the action's `token` input.
46
+
47
+ ## Accessing the release output
48
+
49
+ The action exposes the new version as an output you can use in downstream steps:
50
+
51
+ ```yaml
52
+ - uses: FerrLabs/ferrflow@v0
53
+ id: ferrflow
54
+ env:
55
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
56
+
57
+ - name: Build Docker image
58
+ if: steps.ferrflow.outputs.version != ''
59
+ run: |
60
+ docker build -t myimage:${{ steps.ferrflow.outputs.version }} .
61
+ docker push myimage:${{ steps.ferrflow.outputs.version }}
62
+ ```
63
+
64
+ ## Skip CI on release commits
65
+
66
+ FerrFlow commits version bumps with `[skip ci]` in the message by default to prevent infinite loops. No extra configuration needed.
67
+
68
+ ## Monorepo example
69
+
70
+ In a monorepo, FerrFlow releases each changed package in a single run:
71
+
72
+ ```yaml
73
+ - uses: FerrLabs/ferrflow@v0
74
+ env:
75
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
76
+ # Creates api@v1.3.0 and site@v0.5.1 in one step if both changed
77
+ ```
@@ -0,0 +1,59 @@
1
+ ---
2
+ title: GitLab CI
3
+ description: Run FerrFlow releases automatically in GitLab CI.
4
+ slug: v0/docs/ci/gitlab-ci
5
+ ---
6
+
7
+ ## Using the Docker image
8
+
9
+ The official FerrFlow Docker image ships the binary and can be used directly as a GitLab CI job image.
10
+
11
+ ```yaml
12
+ release:
13
+ image: ghcr.io/ferrlabs/ferrflow:latest
14
+ stage: release
15
+ script:
16
+ - ferrflow release
17
+ variables:
18
+ GITLAB_TOKEN: $CI_JOB_TOKEN
19
+ rules:
20
+ - if: $CI_COMMIT_BRANCH == "main"
21
+ when: on_success
22
+ ```
23
+
24
+ <aside class="ferr-aside ferr-aside--warning"><div class="ferr-aside__body"><p>Make sure your CI runner clones with full history. Add <code>GIT_DEPTH: 0</code> to the job variables to disable shallow cloning.</p>
25
+ </div></aside>
26
+
27
+ ## Full history
28
+
29
+ ```yaml
30
+ release:
31
+ image: ghcr.io/ferrlabs/ferrflow:latest
32
+ variables:
33
+ GIT_DEPTH: 0 # full history — required for tag scanning
34
+ GITLAB_TOKEN: $CI_JOB_TOKEN
35
+ script:
36
+ - ferrflow release
37
+ rules:
38
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
39
+ ```
40
+
41
+ ## Using a deploy token
42
+
43
+ If `CI_JOB_TOKEN` doesn't have permission to push tags, create a project deploy token with `write_repository` access and store it as a CI variable:
44
+
45
+ ```yaml
46
+ release:
47
+ image: ghcr.io/ferrlabs/ferrflow:latest
48
+ variables:
49
+ GIT_DEPTH: 0
50
+ GITLAB_TOKEN: $FERRFLOW_DEPLOY_TOKEN # CI variable with write_repository access
51
+ script:
52
+ - ferrflow release
53
+ rules:
54
+ - if: $CI_COMMIT_BRANCH == "main"
55
+ ```
56
+
57
+ ## GitLab Releases
58
+
59
+ When `GITLAB_TOKEN` is set, FerrFlow creates a GitLab Release with the generated changelog as release notes, matching the behaviour of the GitHub integration.