@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.
- package/docs-en/ci/github-actions.md +120 -0
- package/docs-en/ci/gitlab-ci.md +90 -0
- package/docs-en/ci/hosted-bot.md +82 -0
- package/docs-en/ci/pipeline-triggers.md +287 -0
- package/docs-en/configuration/config-file.md +1259 -0
- package/docs-en/configuration/formats.md +220 -0
- package/docs-en/configuration/monorepo.md +390 -0
- package/docs-en/installation.md +56 -0
- package/docs-en/introduction.md +56 -0
- package/docs-en/quickstart.md +66 -0
- package/docs-en/reference/api.md +106 -0
- package/docs-en/reference/cli.md +483 -0
- package/docs-en/reference/conventional-commits.md +103 -0
- package/docs-en/reference/errors.md +508 -0
- package/docs-en/verifying-releases.md +97 -0
- package/docs-fr/ci/github-actions.md +109 -0
- package/docs-fr/ci/gitlab-ci.md +77 -0
- package/docs-fr/ci/hosted-bot.md +82 -0
- package/docs-fr/ci/pipeline-triggers.md +238 -0
- package/docs-fr/configuration/config-file.md +839 -0
- package/docs-fr/configuration/formats.md +163 -0
- package/docs-fr/configuration/monorepo.md +357 -0
- package/docs-fr/installation.md +56 -0
- package/docs-fr/introduction.md +54 -0
- package/docs-fr/quickstart.md +63 -0
- package/docs-fr/reference/api.md +106 -0
- package/docs-fr/reference/cli.md +407 -0
- package/docs-fr/reference/conventional-commits.md +103 -0
- package/docs-fr/reference/errors.md +378 -0
- package/docs-fr/verifying-releases.md +97 -0
- package/docs-fr-v4/ci/github-actions.md +106 -0
- package/docs-fr-v4/ci/gitlab-ci.md +77 -0
- package/docs-fr-v4/ci/pipeline-triggers.md +214 -0
- package/docs-fr-v4/configuration/config-file.md +769 -0
- package/docs-fr-v4/configuration/formats.md +128 -0
- package/docs-fr-v4/configuration/monorepo.md +324 -0
- package/docs-fr-v4/installation.md +48 -0
- package/docs-fr-v4/introduction.md +54 -0
- package/docs-fr-v4/legal/telemetry.md +65 -0
- package/docs-fr-v4/quickstart.md +63 -0
- package/docs-fr-v4/reference/cli.md +130 -0
- package/docs-fr-v4/reference/conventional-commits.md +67 -0
- package/docs-fr-v4/reference/errors.md +372 -0
- package/docs-fr-v5/ci/github-actions.md +109 -0
- package/docs-fr-v5/ci/gitlab-ci.md +77 -0
- package/docs-fr-v5/ci/hosted-bot.md +82 -0
- package/docs-fr-v5/ci/pipeline-triggers.md +238 -0
- package/docs-fr-v5/configuration/config-file.md +812 -0
- package/docs-fr-v5/configuration/formats.md +150 -0
- package/docs-fr-v5/configuration/monorepo.md +357 -0
- package/docs-fr-v5/installation.md +56 -0
- package/docs-fr-v5/introduction.md +54 -0
- package/docs-fr-v5/legal/telemetry.md +26 -0
- package/docs-fr-v5/quickstart.md +63 -0
- package/docs-fr-v5/reference/api.md +106 -0
- package/docs-fr-v5/reference/cli.md +356 -0
- package/docs-fr-v5/reference/conventional-commits.md +88 -0
- package/docs-fr-v5/reference/errors.md +378 -0
- package/docs-fr-v5/verifying-releases.md +97 -0
- package/docs-fr-v6/ci/github-actions.md +109 -0
- package/docs-fr-v6/ci/gitlab-ci.md +77 -0
- package/docs-fr-v6/ci/hosted-bot.md +82 -0
- package/docs-fr-v6/ci/pipeline-triggers.md +238 -0
- package/docs-fr-v6/configuration/config-file.md +813 -0
- package/docs-fr-v6/configuration/formats.md +150 -0
- package/docs-fr-v6/configuration/monorepo.md +357 -0
- package/docs-fr-v6/installation.md +56 -0
- package/docs-fr-v6/introduction.md +54 -0
- package/docs-fr-v6/quickstart.md +63 -0
- package/docs-fr-v6/reference/api.md +106 -0
- package/docs-fr-v6/reference/cli.md +356 -0
- package/docs-fr-v6/reference/conventional-commits.md +88 -0
- package/docs-fr-v6/reference/errors.md +378 -0
- package/docs-fr-v6/verifying-releases.md +97 -0
- package/docs-v0/ci/github-actions.md +77 -0
- package/docs-v0/ci/gitlab-ci.md +59 -0
- package/docs-v0/configuration/config-file.md +97 -0
- package/docs-v0/configuration/formats.md +86 -0
- package/docs-v0/configuration/monorepo.md +59 -0
- package/docs-v0/installation.md +48 -0
- package/docs-v0/introduction.md +34 -0
- package/docs-v0/legal/telemetry.md +63 -0
- package/docs-v0/quickstart.md +58 -0
- package/docs-v0/reference/cli.md +95 -0
- package/docs-v0/reference/conventional-commits.md +68 -0
- package/docs-v1/ci/github-actions.md +76 -0
- package/docs-v1/ci/gitlab-ci.md +58 -0
- package/docs-v1/configuration/config-file.md +515 -0
- package/docs-v1/configuration/formats.md +115 -0
- package/docs-v1/configuration/monorepo.md +246 -0
- package/docs-v1/installation.md +48 -0
- package/docs-v1/introduction.md +39 -0
- package/docs-v1/legal/telemetry.md +63 -0
- package/docs-v1/quickstart.md +62 -0
- package/docs-v1/reference/cli.md +128 -0
- package/docs-v1/reference/conventional-commits.md +67 -0
- package/docs-v2/ci/github-actions.md +117 -0
- package/docs-v2/ci/gitlab-ci.md +90 -0
- package/docs-v2/ci/pipeline-triggers.md +263 -0
- package/docs-v2/configuration/config-file.md +806 -0
- package/docs-v2/configuration/formats.md +98 -0
- package/docs-v2/configuration/monorepo.md +324 -0
- package/docs-v2/installation.md +48 -0
- package/docs-v2/introduction.md +40 -0
- package/docs-v2/legal/telemetry.md +66 -0
- package/docs-v2/quickstart.md +63 -0
- package/docs-v2/reference/cli.md +130 -0
- package/docs-v2/reference/conventional-commits.md +67 -0
- package/docs-v2/reference/errors.md +500 -0
- package/docs-v2/self-hosting.md +101 -0
- package/docs-v3/ci/github-actions.md +117 -0
- package/docs-v3/ci/gitlab-ci.md +90 -0
- package/docs-v3/ci/pipeline-triggers.md +263 -0
- package/docs-v3/configuration/config-file.md +806 -0
- package/docs-v3/configuration/formats.md +99 -0
- package/docs-v3/configuration/monorepo.md +324 -0
- package/docs-v3/installation.md +48 -0
- package/docs-v3/introduction.md +40 -0
- package/docs-v3/legal/telemetry.md +66 -0
- package/docs-v3/quickstart.md +66 -0
- package/docs-v3/reference/cli.md +161 -0
- package/docs-v3/reference/conventional-commits.md +67 -0
- package/docs-v3/reference/errors.md +502 -0
- package/docs-v3/self-hosting.md +137 -0
- package/docs-v4/ci/github-actions.md +117 -0
- package/docs-v4/ci/gitlab-ci.md +90 -0
- package/docs-v4/ci/pipeline-triggers.md +263 -0
- package/docs-v4/configuration/config-file.md +850 -0
- package/docs-v4/configuration/formats.md +182 -0
- package/docs-v4/configuration/monorepo.md +324 -0
- package/docs-v4/installation.md +48 -0
- package/docs-v4/introduction.md +56 -0
- package/docs-v4/legal/telemetry.md +65 -0
- package/docs-v4/quickstart.md +66 -0
- package/docs-v4/reference/cli.md +161 -0
- package/docs-v4/reference/conventional-commits.md +67 -0
- package/docs-v4/reference/errors.md +502 -0
- package/docs-v4/self-hosting.md +137 -0
- package/docs-v5/ci/github-actions.md +120 -0
- package/docs-v5/ci/gitlab-ci.md +90 -0
- package/docs-v5/ci/hosted-bot.md +82 -0
- package/docs-v5/ci/pipeline-triggers.md +287 -0
- package/docs-v5/configuration/config-file.md +1133 -0
- package/docs-v5/configuration/formats.md +206 -0
- package/docs-v5/configuration/monorepo.md +390 -0
- package/docs-v5/installation.md +56 -0
- package/docs-v5/introduction.md +56 -0
- package/docs-v5/legal/telemetry.md +26 -0
- package/docs-v5/quickstart.md +66 -0
- package/docs-v5/reference/api.md +106 -0
- package/docs-v5/reference/cli.md +431 -0
- package/docs-v5/reference/conventional-commits.md +88 -0
- package/docs-v5/reference/errors.md +508 -0
- package/docs-v5/verifying-releases.md +97 -0
- package/docs-v6/ci/github-actions.md +120 -0
- package/docs-v6/ci/gitlab-ci.md +90 -0
- package/docs-v6/ci/hosted-bot.md +82 -0
- package/docs-v6/ci/pipeline-triggers.md +287 -0
- package/docs-v6/configuration/config-file.md +1134 -0
- package/docs-v6/configuration/formats.md +206 -0
- package/docs-v6/configuration/monorepo.md +390 -0
- package/docs-v6/installation.md +56 -0
- package/docs-v6/introduction.md +56 -0
- package/docs-v6/quickstart.md +66 -0
- package/docs-v6/reference/api.md +106 -0
- package/docs-v6/reference/cli.md +431 -0
- package/docs-v6/reference/conventional-commits.md +88 -0
- package/docs-v6/reference/errors.md +508 -0
- package/docs-v6/verifying-releases.md +97 -0
- package/package.json +17 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Formats supportés
|
|
3
|
+
description: Formats de fichiers de version que FerrFlow peut lire et mettre à jour.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## TOML
|
|
7
|
+
|
|
8
|
+
Utilisé par Rust (`Cargo.toml`) et Python (`pyproject.toml`).
|
|
9
|
+
|
|
10
|
+
FerrFlow met à jour le champ `version` sous `[package]`, `[project]` ou `[tool.poetry]`.
|
|
11
|
+
|
|
12
|
+
```toml
|
|
13
|
+
[package]
|
|
14
|
+
name = "my-crate"
|
|
15
|
+
version = "1.2.3" # ← mis à jour
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## JSON
|
|
19
|
+
|
|
20
|
+
Utilisé par Node.js (`package.json`).
|
|
21
|
+
|
|
22
|
+
FerrFlow met à jour le champ `version` de premier niveau.
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"name": "my-package",
|
|
27
|
+
"version": "1.2.3"
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## XML
|
|
32
|
+
|
|
33
|
+
Utilisé par Java/Maven (`pom.xml`).
|
|
34
|
+
|
|
35
|
+
FerrFlow met à jour le premier élément `<version>` rencontré.
|
|
36
|
+
|
|
37
|
+
```xml
|
|
38
|
+
<project>
|
|
39
|
+
<groupId>com.example</groupId>
|
|
40
|
+
<artifactId>my-app</artifactId>
|
|
41
|
+
<version>1.2.3</version> <!-- mis à jour -->
|
|
42
|
+
</project>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Gradle
|
|
46
|
+
|
|
47
|
+
Utilisé par les projets Java/Kotlin Gradle (`build.gradle`, `build.gradle.kts`).
|
|
48
|
+
|
|
49
|
+
FerrFlow met à jour l'assignation `version = "..."`.
|
|
50
|
+
|
|
51
|
+
```groovy
|
|
52
|
+
version = "1.2.3" // mis à jour
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Texte brut
|
|
56
|
+
|
|
57
|
+
Utilisé pour les fichiers de version simples (`VERSION`, `VERSION.txt`).
|
|
58
|
+
|
|
59
|
+
FerrFlow remplace l'intégralité du contenu du fichier par le numéro de version.
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
1.2.3
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Go modules
|
|
66
|
+
|
|
67
|
+
Utilisé par les projets Go (`go.mod`).
|
|
68
|
+
|
|
69
|
+
Les modules Go utilisent directement les tags git — FerrFlow ne modifie **pas** `go.mod`. La version est dérivée entièrement du tag git (`v1.2.3` ou `{name}@v1.2.3`).
|
|
70
|
+
|
|
71
|
+
## Helm
|
|
72
|
+
|
|
73
|
+
Utilisé par les charts Helm Kubernetes (`Chart.yaml`).
|
|
74
|
+
|
|
75
|
+
FerrFlow met à jour le champ `version` et, lorsqu'il est présent, maintient `appVersion` synchronisé.
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
apiVersion: v2
|
|
79
|
+
name: my-app
|
|
80
|
+
version: 1.2.3 # ← mis à jour
|
|
81
|
+
appVersion: '1.2.3' # ← mis à jour si présent
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Plusieurs fichiers par package
|
|
85
|
+
|
|
86
|
+
Un package peut avoir autant d'entrées de fichiers versionnés que nécessaire :
|
|
87
|
+
|
|
88
|
+
<div class="ferr-tabs">
|
|
89
|
+
<div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
|
|
90
|
+
"package": {
|
|
91
|
+
"versionedFiles": [
|
|
92
|
+
{ "path": "Cargo.toml", "format": "toml" },
|
|
93
|
+
{ "path": "npm/package.json", "format": "json" }
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
</code></pre>
|
|
98
|
+
</div></div>
|
|
99
|
+
<div class="ferr-tab" data-label="TOML"><p class="ferr-tab__label">TOML</p><div class="ferr-tab__body"><pre><code class="language-toml">[[package.versioned_files]]
|
|
100
|
+
path = "Cargo.toml"
|
|
101
|
+
format = "toml"
|
|
102
|
+
|
|
103
|
+
[[package.versioned_files]]
|
|
104
|
+
path = "npm/package.json"
|
|
105
|
+
format = "json"
|
|
106
|
+
</code></pre>
|
|
107
|
+
</div></div>
|
|
108
|
+
<div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
|
|
109
|
+
package: {
|
|
110
|
+
versionedFiles: [
|
|
111
|
+
{ path: "Cargo.toml", format: "toml" },
|
|
112
|
+
{ path: "npm/package.json", format: "json" },
|
|
113
|
+
],
|
|
114
|
+
},
|
|
115
|
+
}
|
|
116
|
+
</code></pre>
|
|
117
|
+
</div></div>
|
|
118
|
+
<div class="ferr-tab" data-label="YAML"><p class="ferr-tab__label">YAML</p><div class="ferr-tab__body"><pre><code class="language-yaml">package:
|
|
119
|
+
versionedFiles:
|
|
120
|
+
- path: Cargo.toml
|
|
121
|
+
format: toml
|
|
122
|
+
- path: npm/package.json
|
|
123
|
+
format: json
|
|
124
|
+
</code></pre>
|
|
125
|
+
</div></div>
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
Les deux fichiers seront mis à jour avec la même version avant le commit git.
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Monorepo
|
|
3
|
+
description: Versionner plusieurs packages indépendamment dans un seul repository.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
FerrFlow considère un repository comme un monorepo lorsque la configuration définit plus d'un package. Chaque package est versionné indépendamment en fonction de son propre historique git.
|
|
7
|
+
|
|
8
|
+
## Isolation des packages
|
|
9
|
+
|
|
10
|
+
FerrFlow utilise les préfixes de chemin pour déterminer quels commits appartiennent à quel package. Seuls les commits qui touchent des fichiers sous `path` (ou `sharedPaths`) déclenchent une release pour ce package.
|
|
11
|
+
|
|
12
|
+
<div class="ferr-tabs">
|
|
13
|
+
<div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
|
|
14
|
+
"package": [
|
|
15
|
+
{
|
|
16
|
+
"name": "api",
|
|
17
|
+
"path": "packages/api"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "site",
|
|
21
|
+
"path": "packages/site"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
</code></pre>
|
|
26
|
+
</div></div>
|
|
27
|
+
<div class="ferr-tab" data-label="TOML"><p class="ferr-tab__label">TOML</p><div class="ferr-tab__body"><pre><code class="language-toml">[[package]]
|
|
28
|
+
name = "api"
|
|
29
|
+
path = "packages/api"
|
|
30
|
+
|
|
31
|
+
[[package]]
|
|
32
|
+
name = "site"
|
|
33
|
+
path = "packages/site"
|
|
34
|
+
</code></pre>
|
|
35
|
+
</div></div>
|
|
36
|
+
<div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
|
|
37
|
+
package: [
|
|
38
|
+
{
|
|
39
|
+
name: "api",
|
|
40
|
+
path: "packages/api",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "site",
|
|
44
|
+
path: "packages/site",
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
}
|
|
48
|
+
</code></pre>
|
|
49
|
+
</div></div>
|
|
50
|
+
<div class="ferr-tab" data-label="YAML"><p class="ferr-tab__label">YAML</p><div class="ferr-tab__body"><pre><code class="language-yaml">package:
|
|
51
|
+
- name: api
|
|
52
|
+
path: packages/api
|
|
53
|
+
- name: site
|
|
54
|
+
path: packages/site
|
|
55
|
+
</code></pre>
|
|
56
|
+
</div></div>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
## Dépendances partagées
|
|
60
|
+
|
|
61
|
+
Si vous avez du code partagé entre packages (ex. une bibliothèque `packages/shared/`), déclarez-le comme entrée `sharedPaths`. Un changement dans un chemin partagé déclenche une release pour chaque package qui le référence :
|
|
62
|
+
|
|
63
|
+
<div class="ferr-tabs">
|
|
64
|
+
<div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
|
|
65
|
+
"package": [
|
|
66
|
+
{
|
|
67
|
+
"name": "api",
|
|
68
|
+
"path": "packages/api",
|
|
69
|
+
"sharedPaths": ["packages/shared/"]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "site",
|
|
73
|
+
"path": "packages/site",
|
|
74
|
+
"sharedPaths": ["packages/shared/"]
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
</code></pre>
|
|
79
|
+
</div></div>
|
|
80
|
+
<div class="ferr-tab" data-label="TOML"><p class="ferr-tab__label">TOML</p><div class="ferr-tab__body"><pre><code class="language-toml">[[package]]
|
|
81
|
+
name = "api"
|
|
82
|
+
path = "packages/api"
|
|
83
|
+
shared_paths = ["packages/shared/"]
|
|
84
|
+
|
|
85
|
+
[[package]]
|
|
86
|
+
name = "site"
|
|
87
|
+
path = "packages/site"
|
|
88
|
+
shared_paths = ["packages/shared/"]
|
|
89
|
+
</code></pre>
|
|
90
|
+
</div></div>
|
|
91
|
+
<div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
|
|
92
|
+
package: [
|
|
93
|
+
{
|
|
94
|
+
name: "api",
|
|
95
|
+
path: "packages/api",
|
|
96
|
+
sharedPaths: ["packages/shared/"],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: "site",
|
|
100
|
+
path: "packages/site",
|
|
101
|
+
sharedPaths: ["packages/shared/"],
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
}
|
|
105
|
+
</code></pre>
|
|
106
|
+
</div></div>
|
|
107
|
+
<div class="ferr-tab" data-label="YAML"><p class="ferr-tab__label">YAML</p><div class="ferr-tab__body"><pre><code class="language-yaml">package:
|
|
108
|
+
- name: api
|
|
109
|
+
path: packages/api
|
|
110
|
+
sharedPaths:
|
|
111
|
+
- packages/shared/
|
|
112
|
+
- name: site
|
|
113
|
+
path: packages/site
|
|
114
|
+
sharedPaths:
|
|
115
|
+
- packages/shared/
|
|
116
|
+
</code></pre>
|
|
117
|
+
</div></div>
|
|
118
|
+
</div>
|
|
119
|
+
|
|
120
|
+
## Dependances entre packages
|
|
121
|
+
|
|
122
|
+
Utilisez `dependsOn` pour declarer qu'un package depend d'un autre. Quand une dependance est publiee, le package dependant recoit automatiquement un bump patch — meme si aucun de ses propres fichiers n'a change. La cascade est transitive : si `app` depend de `cli` et `cli` depend de `core`, publier `core` bumpe aussi `cli` et `app`.
|
|
123
|
+
|
|
124
|
+
<div class="ferr-tabs">
|
|
125
|
+
<div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
|
|
126
|
+
"package": [
|
|
127
|
+
{
|
|
128
|
+
"name": "core",
|
|
129
|
+
"path": "packages/core"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"name": "cli",
|
|
133
|
+
"path": "packages/cli",
|
|
134
|
+
"dependsOn": ["core"]
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"name": "app",
|
|
138
|
+
"path": "packages/app",
|
|
139
|
+
"dependsOn": ["cli"]
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
</code></pre>
|
|
144
|
+
</div></div>
|
|
145
|
+
<div class="ferr-tab" data-label="TOML"><p class="ferr-tab__label">TOML</p><div class="ferr-tab__body"><pre><code class="language-toml">[[package]]
|
|
146
|
+
name = "core"
|
|
147
|
+
path = "packages/core"
|
|
148
|
+
|
|
149
|
+
[[package]]
|
|
150
|
+
name = "cli"
|
|
151
|
+
path = "packages/cli"
|
|
152
|
+
depends_on = ["core"]
|
|
153
|
+
|
|
154
|
+
[[package]]
|
|
155
|
+
name = "app"
|
|
156
|
+
path = "packages/app"
|
|
157
|
+
depends_on = ["cli"]
|
|
158
|
+
</code></pre>
|
|
159
|
+
</div></div>
|
|
160
|
+
<div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
|
|
161
|
+
package: [
|
|
162
|
+
{
|
|
163
|
+
name: "core",
|
|
164
|
+
path: "packages/core",
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: "cli",
|
|
168
|
+
path: "packages/cli",
|
|
169
|
+
dependsOn: ["core"],
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: "app",
|
|
173
|
+
path: "packages/app",
|
|
174
|
+
dependsOn: ["cli"],
|
|
175
|
+
},
|
|
176
|
+
],
|
|
177
|
+
}
|
|
178
|
+
</code></pre>
|
|
179
|
+
</div></div>
|
|
180
|
+
<div class="ferr-tab" data-label="YAML"><p class="ferr-tab__label">YAML</p><div class="ferr-tab__body"><pre><code class="language-yaml">package:
|
|
181
|
+
- name: core
|
|
182
|
+
path: packages/core
|
|
183
|
+
- name: cli
|
|
184
|
+
path: packages/cli
|
|
185
|
+
dependsOn:
|
|
186
|
+
- core
|
|
187
|
+
- name: app
|
|
188
|
+
path: packages/app
|
|
189
|
+
dependsOn:
|
|
190
|
+
- cli
|
|
191
|
+
</code></pre>
|
|
192
|
+
</div></div>
|
|
193
|
+
</div>
|
|
194
|
+
|
|
195
|
+
<aside class="ferr-aside ferr-aside--note"><div class="ferr-aside__body"><p><code>dependsOn</code> est different de <code>sharedPaths</code>. Les chemins partages declenchent un bump quand des fichiers dans le repertoire partage changent. <code>dependsOn</code> declenche un bump quand un autre <strong>package</strong> est publie, independamment des fichiers modifies.</p>
|
|
196
|
+
</div></aside>
|
|
197
|
+
|
|
198
|
+
## Format des tags git
|
|
199
|
+
|
|
200
|
+
Par défaut, les tags en monorepo utilisent le format `{name}@v{version}` :
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
api@v1.2.0
|
|
204
|
+
site@v0.4.1
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Configurez cela avec le champ `tagTemplate` :
|
|
208
|
+
|
|
209
|
+
<div class="ferr-tabs">
|
|
210
|
+
<div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
|
|
211
|
+
"workspace": {
|
|
212
|
+
"tagTemplate": "{name}@v{version}"
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
</code></pre>
|
|
216
|
+
</div></div>
|
|
217
|
+
<div class="ferr-tab" data-label="TOML"><p class="ferr-tab__label">TOML</p><div class="ferr-tab__body"><pre><code class="language-toml">[workspace]
|
|
218
|
+
tag_template = "{name}@v{version}"
|
|
219
|
+
</code></pre>
|
|
220
|
+
</div></div>
|
|
221
|
+
<div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
|
|
222
|
+
workspace: {
|
|
223
|
+
tagTemplate: "{name}@v{version}",
|
|
224
|
+
},
|
|
225
|
+
}
|
|
226
|
+
</code></pre>
|
|
227
|
+
</div></div>
|
|
228
|
+
<div class="ferr-tab" data-label="YAML"><p class="ferr-tab__label">YAML</p><div class="ferr-tab__body"><pre><code class="language-yaml">workspace:
|
|
229
|
+
tagTemplate: "{name}@v{version}"
|
|
230
|
+
</code></pre>
|
|
231
|
+
</div></div>
|
|
232
|
+
</div>
|
|
233
|
+
|
|
234
|
+
Pour un repo mono-package, le défaut est `v{version}` (sans préfixe de nom).
|
|
235
|
+
|
|
236
|
+
FerrFlow recherche le tag le plus récent correspondant au modèle pour déterminer quels commits sont nouveaux.
|
|
237
|
+
|
|
238
|
+
## Cadences indépendantes
|
|
239
|
+
|
|
240
|
+
Les packages sont publiés indépendamment. Dans une seule exécution de `ferrflow release` :
|
|
241
|
+
|
|
242
|
+
- `api` peut passer de `1.2.0` → `1.3.0` (nouveau commit `feat:`)
|
|
243
|
+
- `site` peut passer de `0.4.0` → `0.4.1` (uniquement des commits `fix:`)
|
|
244
|
+
- `shared` peut ne pas être publié (uniquement des commits `chore:`)
|
|
245
|
+
|
|
246
|
+
## Surcharges par package
|
|
247
|
+
|
|
248
|
+
Chaque package peut surcharger la stratégie de `versioning` et le `tagTemplate` du workspace :
|
|
249
|
+
|
|
250
|
+
<div class="ferr-tabs">
|
|
251
|
+
<div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
|
|
252
|
+
"workspace": {
|
|
253
|
+
"versioning": "semver",
|
|
254
|
+
"tagTemplate": "{name}@v{version}"
|
|
255
|
+
},
|
|
256
|
+
"package": [
|
|
257
|
+
{
|
|
258
|
+
"name": "api",
|
|
259
|
+
"path": "packages/api",
|
|
260
|
+
"versioning": "calver"
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"name": "site",
|
|
264
|
+
"path": "packages/site",
|
|
265
|
+
"tagTemplate": "site-v{version}"
|
|
266
|
+
}
|
|
267
|
+
]
|
|
268
|
+
}
|
|
269
|
+
</code></pre>
|
|
270
|
+
</div></div>
|
|
271
|
+
<div class="ferr-tab" data-label="TOML"><p class="ferr-tab__label">TOML</p><div class="ferr-tab__body"><pre><code class="language-toml">[workspace]
|
|
272
|
+
versioning = "semver"
|
|
273
|
+
tag_template = "{name}@v{version}"
|
|
274
|
+
|
|
275
|
+
[[package]]
|
|
276
|
+
name = "api"
|
|
277
|
+
path = "packages/api"
|
|
278
|
+
versioning = "calver"
|
|
279
|
+
|
|
280
|
+
[[package]]
|
|
281
|
+
name = "site"
|
|
282
|
+
path = "packages/site"
|
|
283
|
+
tag_template = "site-v{version}"
|
|
284
|
+
</code></pre>
|
|
285
|
+
</div></div>
|
|
286
|
+
<div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
|
|
287
|
+
workspace: {
|
|
288
|
+
versioning: "semver",
|
|
289
|
+
tagTemplate: "{name}@v{version}",
|
|
290
|
+
},
|
|
291
|
+
package: [
|
|
292
|
+
{
|
|
293
|
+
name: "api",
|
|
294
|
+
path: "packages/api",
|
|
295
|
+
versioning: "calver",
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
name: "site",
|
|
299
|
+
path: "packages/site",
|
|
300
|
+
tagTemplate: "site-v{version}",
|
|
301
|
+
},
|
|
302
|
+
],
|
|
303
|
+
}
|
|
304
|
+
</code></pre>
|
|
305
|
+
</div></div>
|
|
306
|
+
<div class="ferr-tab" data-label="YAML"><p class="ferr-tab__label">YAML</p><div class="ferr-tab__body"><pre><code class="language-yaml">workspace:
|
|
307
|
+
versioning: semver
|
|
308
|
+
tagTemplate: "{name}@v{version}"
|
|
309
|
+
|
|
310
|
+
package:
|
|
311
|
+
|
|
312
|
+
- name: api
|
|
313
|
+
path: packages/api
|
|
314
|
+
versioning: calver
|
|
315
|
+
- name: site
|
|
316
|
+
path: packages/site
|
|
317
|
+
tagTemplate: "site-v{version}"
|
|
318
|
+
</code></pre>
|
|
319
|
+
|
|
320
|
+
</div></div>
|
|
321
|
+
</div>
|
|
322
|
+
|
|
323
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Utilisez <code>ferrflow check</code> pour prévisualiser exactement quels packages seraient publiés et à quelle version avant de lancer une release.</p>
|
|
324
|
+
</div></aside>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Installation
|
|
3
|
+
description: Comment installer FerrFlow en local ou en CI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Installation locale
|
|
7
|
+
|
|
8
|
+
<div class="ferr-tabs">
|
|
9
|
+
<div class="ferr-tab" data-label="Cargo"><p class="ferr-tab__label">Cargo</p><div class="ferr-tab__body"><pre><code class="language-bash">cargo install ferrflow
|
|
10
|
+
</code></pre>
|
|
11
|
+
</div></div>
|
|
12
|
+
<div class="ferr-tab" data-label="npm"><p class="ferr-tab__label">npm</p><div class="ferr-tab__body"><pre><code class="language-bash">npm install -g ferrflow
|
|
13
|
+
# ou en dépendance de développement
|
|
14
|
+
npm install -D ferrflow
|
|
15
|
+
</code></pre>
|
|
16
|
+
</div></div>
|
|
17
|
+
<div class="ferr-tab" data-label="WASM (navigateur)"><p class="ferr-tab__label">WASM (navigateur)</p><div class="ferr-tab__body"><pre><code class="language-bash">npm install @ferrflow/wasm
|
|
18
|
+
</code></pre>
|
|
19
|
+
<p>Utilisez FerrFlow directement dans le navigateur — parsez les commits, calculez les incréments de version et générez des changelogs côté client sans backend.</p>
|
|
20
|
+
</div></div>
|
|
21
|
+
<div class="ferr-tab" data-label="Binaire"><p class="ferr-tab__label">Binaire</p><div class="ferr-tab__body"><p>Téléchargez un binaire pré-compilé depuis les <a href="https://github.com/FerrLabs/FerrFlow/releases/latest">Releases</a> :</p>
|
|
22
|
+
<pre><code class="language-bash"># Linux x86_64
|
|
23
|
+
curl -L https://github.com/FerrLabs/FerrFlow/releases/latest/download/ferrflow-linux-x64.tar.gz | tar xz
|
|
24
|
+
sudo mv ferrflow /usr/local/bin/
|
|
25
|
+
</code></pre>
|
|
26
|
+
</div></div>
|
|
27
|
+
<div class="ferr-tab" data-label="Docker"><p class="ferr-tab__label">Docker</p><div class="ferr-tab__body"><pre><code class="language-bash">docker run --rm -v $(pwd):/repo ghcr.io/ferrlabs/ferrflow:latest check
|
|
28
|
+
</code></pre>
|
|
29
|
+
</div></div>
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
## Installation CI
|
|
33
|
+
|
|
34
|
+
La méthode recommandée pour utiliser FerrFlow en CI est la GitHub Action — aucune étape d'installation nécessaire :
|
|
35
|
+
|
|
36
|
+
```yaml
|
|
37
|
+
- uses: FerrLabs/ferrflow@v4
|
|
38
|
+
env:
|
|
39
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Consultez [GitHub Actions](/fr/docs/ci/github-actions) et [GitLab CI](/fr/docs/ci/gitlab-ci) pour des exemples complets.
|
|
43
|
+
|
|
44
|
+
## Vérification
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
ferrflow --version
|
|
48
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Introduction
|
|
3
|
+
description: Ce qu'est FerrFlow et pourquoi il existe.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
FerrFlow est un binaire unique qui automatise le versionnage sémantique pour n'importe quel repository — monorepo ou classique, quel que soit le langage.
|
|
7
|
+
|
|
8
|
+
Il analyse votre historique de commits, détermine le bon incrément de version, met à jour vos fichiers de version, rédige un changelog, crée un tag git et publie une release. Zéro dépendance runtime.
|
|
9
|
+
|
|
10
|
+
<div class="ferr-card-group" data-cols="2">
|
|
11
|
+
<div class="ferr-card"><p class="ferr-card__title">CLI d'abord</p><div class="ferr-card__body"><p>Tout se passe depuis votre terminal ou votre CI. Aucune UI à cliquer, aucun serveur de configuration à surveiller.</p>
|
|
12
|
+
</div></div>
|
|
13
|
+
<div class="ferr-card"><p class="ferr-card__title">Multi-forge</p><div class="ferr-card__body"><p>GitHub, GitLab, auto-hébergé — FerrFlow s'adapte à votre forge. Un seul outil, toutes les plateformes.</p>
|
|
14
|
+
</div></div>
|
|
15
|
+
<div class="ferr-card"><p class="ferr-card__title">Commits conventionnels</p><div class="ferr-card__body"><p>Analyse l'historique des commits pour déterminer les incréments de version automatiquement. Aucune maintenance manuelle du changelog.</p>
|
|
16
|
+
</div></div>
|
|
17
|
+
<div class="ferr-card"><p class="ferr-card__title">Zéro infra</p><div class="ferr-card__body"><p>Un seul binaire, sans daemon, sans serveur, sans base de données. Tourne là où votre CI tourne.</p>
|
|
18
|
+
</div></div>
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
## Pourquoi pas semantic-release ou changesets ?
|
|
22
|
+
|
|
23
|
+
La plupart des outils de versionnage sont liés à un écosystème spécifique ou nécessitent Node.js dans votre CI.
|
|
24
|
+
|
|
25
|
+
| Outil | Monorepo | Multi-langage | Runtime |
|
|
26
|
+
| ---------------- | ----------- | ------------------ | --------- |
|
|
27
|
+
| semantic-release | via plugins | JS/Node uniquement | Node.js |
|
|
28
|
+
| changesets | bump manuel | JS uniquement | Node.js |
|
|
29
|
+
| release-please | limité | partiel | Node.js |
|
|
30
|
+
| cargo-release | non | Rust uniquement | Rust |
|
|
31
|
+
| **FerrFlow** | **natif** | **tous** | **aucun** |
|
|
32
|
+
|
|
33
|
+
FerrFlow est distribué sous forme de binaire compilé. Déposez-le dans n'importe quel environnement CI sans installer de runtime. Un build WASM (`@ferrflow/wasm`) est également disponible pour une utilisation côté navigateur. Pour la comparaison côte-à-côte (latence, RSS, taille) avec les outils de release JS, voir [Performance](/fr/performance) — chiffres rafraîchis à chaque release.
|
|
34
|
+
|
|
35
|
+
<aside class="ferr-aside ferr-aside--note"><p class="ferr-aside__title">À noter</p><div class="ferr-aside__body"><p>FerrFlow ne fait que du versionnage. Le suivi des issues, les secrets et les agents IA vivent dans d'autres produits FerrLabs.</p>
|
|
36
|
+
</div></aside>
|
|
37
|
+
|
|
38
|
+
## Comment ça marche
|
|
39
|
+
|
|
40
|
+
1. **Lit les commits** depuis le dernier tag git pour chaque package
|
|
41
|
+
2. **Détermine l'incrément** à partir des [Conventional Commits](/fr/docs/reference/conventional-commits) (`feat` → minor, `fix` → patch, breaking → major)
|
|
42
|
+
3. **Met à jour les fichiers de version** — `Cargo.toml`, `package.json`, `pom.xml`, etc.
|
|
43
|
+
4. **Rédige le changelog** au format Keep a Changelog
|
|
44
|
+
5. **Crée un tag git** (`api@v1.2.0`) et pousse
|
|
45
|
+
6. **Publie une release GitHub/GitLab** avec le changelog comme notes de version
|
|
46
|
+
|
|
47
|
+
Dans un monorepo, FerrFlow ne publie que les packages modifiés et comprend les chemins de dépendances partagées.
|
|
48
|
+
|
|
49
|
+
## Fonctionnalités clés
|
|
50
|
+
|
|
51
|
+
- **Hooks pre/post-release** — exécutez des scripts à chaque étape du cycle de vie (bump, commit, publish, failure)
|
|
52
|
+
- **Commandes de requête** — `ferrflow version`, `ferrflow tag` et `ferrflow status` pour le scripting CI
|
|
53
|
+
- **Tout fichier de version** — Cargo.toml, package.json, pom.xml, build.gradle, Chart.yaml, texte brut, et plus
|
|
54
|
+
- **Support navigateur** — `@ferrflow/wasm` apporte le parsing de commits, le calcul de bump et la génération de changelog dans le navigateur
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Telemetrie
|
|
3
|
+
description: Ce que FerrFlow collecte, comment les donnees sont anonymisees, et comment desactiver la telemetrie.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
FerrFlow collecte des donnees de telemetrie anonymes pour ameliorer l'outil. Cette page explique exactement ce qui est envoye, comment les donnees sont anonymisees, et comment desactiver la telemetrie.
|
|
7
|
+
|
|
8
|
+
## Ce qui est collecte
|
|
9
|
+
|
|
10
|
+
A chaque execution d'une commande, FerrFlow peut envoyer un evenement contenant :
|
|
11
|
+
|
|
12
|
+
| Champ | Description |
|
|
13
|
+
| --------------- | ----------------------------------------------------------------- |
|
|
14
|
+
| `event_type` | L'action effectuee : `check`, `release`, `version_bump` ou `init` |
|
|
15
|
+
| `commits_count` | Nombre de commits depuis la derniere release |
|
|
16
|
+
| `repo_hash` | Un hash SHA-256 de l'URL du remote git (voir ci-dessous) |
|
|
17
|
+
|
|
18
|
+
Seuls les champs pertinents sont inclus. Les champs vides sont omis.
|
|
19
|
+
|
|
20
|
+
## Comment les donnees sont anonymisees
|
|
21
|
+
|
|
22
|
+
L'URL de votre depot n'est **jamais envoyee en clair**. FerrFlow calcule un hash SHA-256 de l'URL du remote git et envoie uniquement le digest hexadecimal. Cela permet de compter les depots uniques sans savoir lesquels ils sont.
|
|
23
|
+
|
|
24
|
+
Aucun code source, nom de fichier, message de commit, nom de branche, nom de package, numero de version, adresse IP ou information personnelle n'est collecte ou stocke.
|
|
25
|
+
|
|
26
|
+
## Ou les donnees sont envoyees
|
|
27
|
+
|
|
28
|
+
Les evenements sont envoyes via une requete POST a `https://api.ferrflow.com/events`. La requete est asynchrone et non-bloquante — elle ne ralentit jamais votre workflow. Si la requete echoue, elle est silencieusement ignoree.
|
|
29
|
+
|
|
30
|
+
## Comment desactiver
|
|
31
|
+
|
|
32
|
+
Vous pouvez desactiver completement la telemetrie via une variable d'environnement ou votre fichier de configuration.
|
|
33
|
+
|
|
34
|
+
### Variable d'environnement
|
|
35
|
+
|
|
36
|
+
<div class="ferr-tabs">
|
|
37
|
+
<div class="ferr-tab" data-label="Linux / macOS"><p class="ferr-tab__label">Linux / macOS</p><div class="ferr-tab__body"><pre><code class="language-bash">export FERRFLOW_ANONYMOUS_TELEMETRY=false
|
|
38
|
+
</code></pre>
|
|
39
|
+
</div></div>
|
|
40
|
+
<div class="ferr-tab" data-label="Windows"><p class="ferr-tab__label">Windows</p><div class="ferr-tab__body"><pre><code class="language-powershell">$env:FERRFLOW_ANONYMOUS_TELEMETRY = "false"
|
|
41
|
+
</code></pre>
|
|
42
|
+
</div></div>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
Valeurs acceptees pour desactiver : `false`, `0`, `off`, `no` (insensible a la casse).
|
|
46
|
+
|
|
47
|
+
Depuis la v4.10, FerrFlow honore aussi la variable d'environnement standard [`DO_NOT_TRACK`](https://consoledonottrack.com/) — `DO_NOT_TRACK=1` desactive la telemetrie sans aucune configuration specifique. `FERRFLOW_TELEMETRY=false` reste pris en charge comme alternative pour la retrocompatibilite avec les configs v0/v1.
|
|
48
|
+
|
|
49
|
+
### Fichier de configuration
|
|
50
|
+
|
|
51
|
+
<div class="ferr-tabs">
|
|
52
|
+
<div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
|
|
53
|
+
"workspace": {
|
|
54
|
+
"anonymous_telemetry": false
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
</code></pre>
|
|
58
|
+
</div></div>
|
|
59
|
+
<div class="ferr-tab" data-label="TOML"><p class="ferr-tab__label">TOML</p><div class="ferr-tab__body"><pre><code class="language-toml">[workspace]
|
|
60
|
+
anonymous_telemetry = false
|
|
61
|
+
</code></pre>
|
|
62
|
+
</div></div>
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
L'une ou l'autre methode suffit pour desactiver la telemetrie.
|