@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,58 @@
1
+ ---
2
+ title: GitLab CI
3
+ description: Run FerrFlow releases automatically in GitLab CI.
4
+ ---
5
+
6
+ ## Using the Docker image
7
+
8
+ The official FerrFlow Docker image ships the binary and can be used directly as a GitLab CI job image.
9
+
10
+ ```yaml
11
+ release:
12
+ image: ghcr.io/ferrlabs/ferrflow:latest
13
+ stage: release
14
+ script:
15
+ - ferrflow release
16
+ variables:
17
+ GITLAB_TOKEN: $CI_JOB_TOKEN
18
+ rules:
19
+ - if: $CI_COMMIT_BRANCH == "main"
20
+ when: on_success
21
+ ```
22
+
23
+ <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>
24
+ </div></aside>
25
+
26
+ ## Full history
27
+
28
+ ```yaml
29
+ release:
30
+ image: ghcr.io/ferrlabs/ferrflow:latest
31
+ variables:
32
+ GIT_DEPTH: 0 # full history — required for tag scanning
33
+ GITLAB_TOKEN: $CI_JOB_TOKEN
34
+ script:
35
+ - ferrflow release
36
+ rules:
37
+ - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
38
+ ```
39
+
40
+ ## Using a deploy token
41
+
42
+ 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:
43
+
44
+ ```yaml
45
+ release:
46
+ image: ghcr.io/ferrlabs/ferrflow:latest
47
+ variables:
48
+ GIT_DEPTH: 0
49
+ GITLAB_TOKEN: $FERRFLOW_DEPLOY_TOKEN # CI variable with write_repository access
50
+ script:
51
+ - ferrflow release
52
+ rules:
53
+ - if: $CI_COMMIT_BRANCH == "main"
54
+ ```
55
+
56
+ ## GitLab Releases
57
+
58
+ When `GITLAB_TOKEN` is set, FerrFlow creates a GitLab Release with the generated changelog as release notes, matching the behaviour of the GitHub integration.
@@ -0,0 +1,515 @@
1
+ ---
2
+ title: Configuration
3
+ description: Complete reference for the FerrFlow configuration file.
4
+ ---
5
+
6
+ FerrFlow supports four config file formats, searched in this order:
7
+
8
+ 1. `ferrflow.json`
9
+ 2. `ferrflow.json5`
10
+ 3. `ferrflow.toml`
11
+ 4. `.ferrflow` (JSON)
12
+
13
+ If no config file is found, FerrFlow auto-detects common version files in the current directory.
14
+
15
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Add <code>&quot;$schema&quot;: &quot;https://ferrflow.com/schema/ferrflow.json&quot;</code> to your JSON config for editor autocompletion and validation.</p>
16
+ </div></aside>
17
+
18
+ ## Config formats
19
+
20
+ <div class="ferr-tabs">
21
+ <div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
22
+ &quot;$schema&quot;: &quot;https://ferrflow.com/schema/ferrflow.json&quot;,
23
+ &quot;workspace&quot;: {
24
+ &quot;tagTemplate&quot;: &quot;v{version}&quot;
25
+ },
26
+ &quot;package&quot;: [
27
+ {
28
+ &quot;name&quot;: &quot;my-app&quot;,
29
+ &quot;path&quot;: &quot;.&quot;,
30
+ &quot;changelog&quot;: &quot;CHANGELOG.md&quot;,
31
+ &quot;versionedFiles&quot;: [
32
+ { &quot;path&quot;: &quot;Cargo.toml&quot;, &quot;format&quot;: &quot;toml&quot; }
33
+ ]
34
+ }
35
+ ]
36
+ }
37
+ </code></pre>
38
+ </div></div>
39
+ <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]
40
+ tag_template = &quot;v{version}&quot;
41
+
42
+ [[package]]
43
+ name = &quot;my-app&quot;
44
+ path = &quot;.&quot;
45
+ changelog = &quot;CHANGELOG.md&quot;
46
+
47
+ [[package.versioned_files]]
48
+ path = &quot;Cargo.toml&quot;
49
+ format = &quot;toml&quot;
50
+ </code></pre>
51
+ </div></div>
52
+ <div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
53
+ $schema: &quot;https://ferrflow.com/schema/ferrflow.json&quot;,
54
+ workspace: {
55
+ tagTemplate: &quot;v{version}&quot;,
56
+ },
57
+ package: [
58
+ {
59
+ name: &quot;my-app&quot;,
60
+ path: &quot;.&quot;,
61
+ changelog: &quot;CHANGELOG.md&quot;,
62
+ versionedFiles: [
63
+ { path: &quot;Cargo.toml&quot;, format: &quot;toml&quot; },
64
+ ],
65
+ },
66
+ ],
67
+ }
68
+ </code></pre>
69
+ </div></div>
70
+ <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:
71
+ tagTemplate: &quot;v{version}&quot;
72
+
73
+ package:
74
+
75
+ - name: my-app
76
+ path: &quot;.&quot;
77
+ changelog: CHANGELOG.md
78
+ versionedFiles:
79
+ - path: Cargo.toml
80
+ format: toml
81
+ </code></pre>
82
+
83
+ </div></div>
84
+ </div>
85
+
86
+ <aside class="ferr-aside ferr-aside--note"><div class="ferr-aside__body"><p>JSON and JSON5 configs use <strong>camelCase</strong> keys (<code>tagTemplate</code>, <code>versionedFiles</code>).
87
+ TOML configs use <strong>snake_case</strong> keys (<code>tag_template</code>, <code>versioned_files</code>).
88
+ YAML configs support both, but <strong>camelCase</strong> is recommended for consistency with JSON.
89
+ All forms are equivalent.</p>
90
+ </div></aside>
91
+
92
+ ## `workspace`
93
+
94
+ Global settings that apply to all packages.
95
+
96
+ | Field | Type | Default | Description |
97
+ | ----------------------- | ------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
98
+ | `remote` | string | `"origin"` | Git remote to push to |
99
+ | `branch` | string | auto-detected | Branch to push to (detected from remote HEAD) |
100
+ | `tagTemplate` | string | `"v{version}"` or `"{name}@v{version}"` | Tag naming pattern. Uses `{version}` and `{name}` placeholders. Defaults to `v{version}` for single-package repos and `{name}@v{version}` for monorepos. |
101
+ | `versioning` | string | `"semver"` | Default versioning strategy for all packages |
102
+ | `releaseCommitMode` | string | `"commit"` | How to handle the release commit: `"commit"`, `"pr"`, or `"none"` |
103
+ | `skipCi` | boolean | depends on mode | Add `[skip ci]` to release commits. Defaults to `true` when mode is `"commit"`, `false` otherwise. |
104
+ | `autoMergeReleases` | boolean | `true` | Enable auto-merge on release PRs (only applies when mode is `"pr"`) |
105
+ | `recoverMissedReleases` | boolean | `false` | When enabled, if FerrFlow finds unreleased commits spanning multiple version bumps, it creates all intermediate releases instead of jumping to the latest version |
106
+ | `telemetry` | boolean | `true` | Send anonymous usage telemetry |
107
+
108
+ ### Tag template
109
+
110
+ The `tagTemplate` field controls how git tags are named. Available placeholders:
111
+
112
+ | Placeholder | Description |
113
+ | ----------- | --------------------------------- |
114
+ | `{version}` | The version number (e.g. `1.2.3`) |
115
+ | `{name}` | The package name |
116
+
117
+ <div class="ferr-tabs">
118
+ <div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
119
+ &quot;workspace&quot;: {
120
+ &quot;tagTemplate&quot;: &quot;v{version}&quot;
121
+ }
122
+ }
123
+ </code></pre>
124
+ </div></div>
125
+ <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]
126
+ tag_template = &quot;v{version}&quot;
127
+ </code></pre>
128
+ </div></div>
129
+ <div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
130
+ workspace: {
131
+ tagTemplate: &quot;v{version}&quot;,
132
+ },
133
+ }
134
+ </code></pre>
135
+ </div></div>
136
+ <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:
137
+ tagTemplate: &quot;v{version}&quot;
138
+ </code></pre>
139
+ </div></div>
140
+ </div>
141
+
142
+ For monorepos, use `{name}` to namespace tags per package:
143
+
144
+ <div class="ferr-tabs">
145
+ <div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
146
+ &quot;workspace&quot;: {
147
+ &quot;tagTemplate&quot;: &quot;{name}@v{version}&quot;
148
+ }
149
+ }
150
+ </code></pre>
151
+ </div></div>
152
+ <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]
153
+ tag_template = &quot;{name}@v{version}&quot;
154
+ </code></pre>
155
+ </div></div>
156
+ <div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
157
+ workspace: {
158
+ tagTemplate: &quot;{name}@v{version}&quot;,
159
+ },
160
+ }
161
+ </code></pre>
162
+ </div></div>
163
+ <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:
164
+ tagTemplate: &quot;{name}@v{version}&quot;
165
+ </code></pre>
166
+ </div></div>
167
+ </div>
168
+
169
+ ### Release commit mode
170
+
171
+ Controls how FerrFlow handles the commit that updates version files and changelogs.
172
+
173
+ | Mode | Behavior |
174
+ | ---------- | ------------------------------------------------------------ |
175
+ | `"commit"` | Commits directly to the current branch and pushes (default) |
176
+ | `"pr"` | Creates a `release/` branch and opens a pull request |
177
+ | `"none"` | Only creates tags and releases, does not commit file changes |
178
+
179
+ <div class="ferr-tabs">
180
+ <div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
181
+ &quot;workspace&quot;: {
182
+ &quot;releaseCommitMode&quot;: &quot;pr&quot;,
183
+ &quot;autoMergeReleases&quot;: true
184
+ }
185
+ }
186
+ </code></pre>
187
+ </div></div>
188
+ <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]
189
+ release_commit_mode = &quot;pr&quot;
190
+ auto_merge_releases = true
191
+ </code></pre>
192
+ </div></div>
193
+ <div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
194
+ workspace: {
195
+ releaseCommitMode: &quot;pr&quot;,
196
+ autoMergeReleases: true,
197
+ },
198
+ }
199
+ </code></pre>
200
+ </div></div>
201
+ <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:
202
+ releaseCommitMode: pr
203
+ autoMergeReleases: true
204
+ </code></pre>
205
+ </div></div>
206
+ </div>
207
+
208
+ ### Versioning strategies
209
+
210
+ FerrFlow supports multiple versioning strategies, configurable at workspace or package level.
211
+
212
+ | Strategy | Format | Example progression |
213
+ | -------------- | ------------------- | --------------------------------------- |
214
+ | `semver` | `MAJOR.MINOR.PATCH` | `1.2.3` → `1.3.0` → `2.0.0` |
215
+ | `calver` | `YYYY.MM.PATCH` | `2026.03.0` → `2026.03.1` → `2026.04.0` |
216
+ | `calver-short` | `YY.MM.PATCH` | `26.03.0` → `26.03.1` |
217
+ | `calver-seq` | `YYYY.MM.SEQ` | `2026.03.1` → `2026.03.2` |
218
+ | `sequential` | `N` | `1` → `2` → `3` |
219
+ | `zerover` | `0.MINOR.PATCH` | `0.1.0` → `0.2.0` (never reaches 1.0) |
220
+
221
+ <div class="ferr-tabs">
222
+ <div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
223
+ &quot;workspace&quot;: {
224
+ &quot;versioning&quot;: &quot;calver&quot;
225
+ }
226
+ }
227
+ </code></pre>
228
+ </div></div>
229
+ <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]
230
+ versioning = &quot;calver&quot;
231
+ </code></pre>
232
+ </div></div>
233
+ <div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
234
+ workspace: {
235
+ versioning: &quot;calver&quot;,
236
+ },
237
+ }
238
+ </code></pre>
239
+ </div></div>
240
+ <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:
241
+ versioning: calver
242
+ </code></pre>
243
+ </div></div>
244
+ </div>
245
+
246
+ ## `package`
247
+
248
+ Defines a package to version. You can have one or many.
249
+
250
+ | Field | Required | Default | Description |
251
+ | ------------- | -------- | ------------------------ | --------------------------------------------- |
252
+ | `name` | yes | — | Package identifier, used in git tag prefix |
253
+ | `path` | yes | — | Relative path to the package directory |
254
+ | `changelog` | no | `{path}/CHANGELOG.md` | Path to the changelog file |
255
+ | `sharedPaths` | no | `[]` | Paths that trigger this package when changed |
256
+ | `versioning` | no | inherited from workspace | Override versioning strategy for this package |
257
+ | `tagTemplate` | no | inherited from workspace | Override tag template for this package |
258
+
259
+ ### `versionedFiles`
260
+
261
+ Files where the version number should be updated.
262
+
263
+ <div class="ferr-tabs">
264
+ <div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
265
+ &quot;package&quot;: [
266
+ {
267
+ &quot;name&quot;: &quot;my-app&quot;,
268
+ &quot;path&quot;: &quot;.&quot;,
269
+ &quot;versionedFiles&quot;: [
270
+ { &quot;path&quot;: &quot;Cargo.toml&quot;, &quot;format&quot;: &quot;toml&quot; },
271
+ { &quot;path&quot;: &quot;npm/package.json&quot;, &quot;format&quot;: &quot;json&quot; }
272
+ ]
273
+ }
274
+ ]
275
+ }
276
+ </code></pre>
277
+ </div></div>
278
+ <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]]
279
+ name = &quot;my-app&quot;
280
+ path = &quot;.&quot;
281
+
282
+ [[package.versioned_files]]
283
+ path = &quot;Cargo.toml&quot;
284
+ format = &quot;toml&quot;
285
+
286
+ [[package.versioned_files]]
287
+ path = &quot;npm/package.json&quot;
288
+ format = &quot;json&quot;
289
+ </code></pre>
290
+ </div></div>
291
+ <div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
292
+ package: [
293
+ {
294
+ name: &quot;my-app&quot;,
295
+ path: &quot;.&quot;,
296
+ versionedFiles: [
297
+ { path: &quot;Cargo.toml&quot;, format: &quot;toml&quot; },
298
+ { path: &quot;npm/package.json&quot;, format: &quot;json&quot; },
299
+ ],
300
+ },
301
+ ],
302
+ }
303
+ </code></pre>
304
+ </div></div>
305
+ <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:
306
+ - name: my-app
307
+ path: &quot;.&quot;
308
+ versionedFiles:
309
+ - path: Cargo.toml
310
+ format: toml
311
+ - path: npm/package.json
312
+ format: json
313
+ </code></pre>
314
+ </div></div>
315
+ </div>
316
+
317
+ | `format` | File | Field updated |
318
+ | -------- | ---------------------------------- | ------------------------------------------------- |
319
+ | `toml` | `Cargo.toml`, `pyproject.toml` | `[package].version` or `[project].version` |
320
+ | `json` | `package.json` | `version` |
321
+ | `xml` | `pom.xml` | First `<version>` element |
322
+ | `gradle` | `build.gradle`, `build.gradle.kts` | `version = "..."` |
323
+ | `gomod` | `go.mod` | No file update — version comes from git tags only |
324
+ | `txt` | `VERSION`, `VERSION.txt` | Entire file content replaced |
325
+
326
+ ## Complete examples
327
+
328
+ ### Single repo
329
+
330
+ <div class="ferr-tabs">
331
+ <div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
332
+ &quot;$schema&quot;: &quot;https://ferrflow.com/schema/ferrflow.json&quot;,
333
+ &quot;workspace&quot;: {
334
+ &quot;tagTemplate&quot;: &quot;v{version}&quot;
335
+ },
336
+ &quot;package&quot;: [
337
+ {
338
+ &quot;name&quot;: &quot;ferrflow&quot;,
339
+ &quot;path&quot;: &quot;.&quot;,
340
+ &quot;changelog&quot;: &quot;CHANGELOG.md&quot;,
341
+ &quot;versionedFiles&quot;: [
342
+ { &quot;path&quot;: &quot;Cargo.toml&quot;, &quot;format&quot;: &quot;toml&quot; },
343
+ { &quot;path&quot;: &quot;npm/package.json&quot;, &quot;format&quot;: &quot;json&quot; }
344
+ ]
345
+ }
346
+ ]
347
+ }
348
+ </code></pre>
349
+ </div></div>
350
+ <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]
351
+ tag_template = &quot;v{version}&quot;
352
+
353
+ [[package]]
354
+ name = &quot;ferrflow&quot;
355
+ path = &quot;.&quot;
356
+ changelog = &quot;CHANGELOG.md&quot;
357
+
358
+ [[package.versioned_files]]
359
+ path = &quot;Cargo.toml&quot;
360
+ format = &quot;toml&quot;
361
+
362
+ [[package.versioned_files]]
363
+ path = &quot;npm/package.json&quot;
364
+ format = &quot;json&quot;
365
+ </code></pre>
366
+ </div></div>
367
+ <div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
368
+ $schema: &quot;https://ferrflow.com/schema/ferrflow.json&quot;,
369
+ workspace: {
370
+ tagTemplate: &quot;v{version}&quot;,
371
+ },
372
+ package: [
373
+ {
374
+ name: &quot;ferrflow&quot;,
375
+ path: &quot;.&quot;,
376
+ changelog: &quot;CHANGELOG.md&quot;,
377
+ versionedFiles: [
378
+ { path: &quot;Cargo.toml&quot;, format: &quot;toml&quot; },
379
+ { path: &quot;npm/package.json&quot;, format: &quot;json&quot; },
380
+ ],
381
+ },
382
+ ],
383
+ }
384
+ </code></pre>
385
+ </div></div>
386
+ <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:
387
+ tagTemplate: &quot;v{version}&quot;
388
+
389
+ package:
390
+
391
+ - name: ferrflow
392
+ path: &quot;.&quot;
393
+ changelog: CHANGELOG.md
394
+ versionedFiles:
395
+ - path: Cargo.toml
396
+ format: toml
397
+ - path: npm/package.json
398
+ format: json
399
+ </code></pre>
400
+
401
+ </div></div>
402
+ </div>
403
+
404
+ ### Monorepo
405
+
406
+ <div class="ferr-tabs">
407
+ <div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
408
+ &quot;$schema&quot;: &quot;https://ferrflow.com/schema/ferrflow.json&quot;,
409
+ &quot;workspace&quot;: {
410
+ &quot;tagTemplate&quot;: &quot;{name}@v{version}&quot;
411
+ },
412
+ &quot;package&quot;: [
413
+ {
414
+ &quot;name&quot;: &quot;api&quot;,
415
+ &quot;path&quot;: &quot;packages/api&quot;,
416
+ &quot;changelog&quot;: &quot;packages/api/CHANGELOG.md&quot;,
417
+ &quot;sharedPaths&quot;: [&quot;packages/shared/&quot;],
418
+ &quot;versionedFiles&quot;: [
419
+ { &quot;path&quot;: &quot;packages/api/Cargo.toml&quot;, &quot;format&quot;: &quot;toml&quot; }
420
+ ]
421
+ },
422
+ {
423
+ &quot;name&quot;: &quot;site&quot;,
424
+ &quot;path&quot;: &quot;packages/site&quot;,
425
+ &quot;changelog&quot;: &quot;packages/site/CHANGELOG.md&quot;,
426
+ &quot;sharedPaths&quot;: [&quot;packages/shared/&quot;],
427
+ &quot;versionedFiles&quot;: [
428
+ { &quot;path&quot;: &quot;packages/site/package.json&quot;, &quot;format&quot;: &quot;json&quot; }
429
+ ]
430
+ }
431
+ ]
432
+ }
433
+ </code></pre>
434
+ </div></div>
435
+ <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]
436
+ tag_template = &quot;{name}@v{version}&quot;
437
+
438
+ [[package]]
439
+ name = &quot;api&quot;
440
+ path = &quot;packages/api&quot;
441
+ changelog = &quot;packages/api/CHANGELOG.md&quot;
442
+ shared_paths = [&quot;packages/shared/&quot;]
443
+
444
+ [[package.versioned_files]]
445
+ path = &quot;packages/api/Cargo.toml&quot;
446
+ format = &quot;toml&quot;
447
+
448
+ [[package]]
449
+ name = &quot;site&quot;
450
+ path = &quot;packages/site&quot;
451
+ changelog = &quot;packages/site/CHANGELOG.md&quot;
452
+ shared_paths = [&quot;packages/shared/&quot;]
453
+
454
+ [[package.versioned_files]]
455
+ path = &quot;packages/site/package.json&quot;
456
+ format = &quot;json&quot;
457
+ </code></pre>
458
+ </div></div>
459
+ <div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
460
+ $schema: &quot;https://ferrflow.com/schema/ferrflow.json&quot;,
461
+ workspace: {
462
+ tagTemplate: &quot;{name}@v{version}&quot;,
463
+ },
464
+ package: [
465
+ {
466
+ name: &quot;api&quot;,
467
+ path: &quot;packages/api&quot;,
468
+ changelog: &quot;packages/api/CHANGELOG.md&quot;,
469
+ sharedPaths: [&quot;packages/shared/&quot;],
470
+ versionedFiles: [
471
+ { path: &quot;packages/api/Cargo.toml&quot;, format: &quot;toml&quot; },
472
+ ],
473
+ },
474
+ {
475
+ name: &quot;site&quot;,
476
+ path: &quot;packages/site&quot;,
477
+ changelog: &quot;packages/site/CHANGELOG.md&quot;,
478
+ sharedPaths: [&quot;packages/shared/&quot;],
479
+ versionedFiles: [
480
+ { path: &quot;packages/site/package.json&quot;, format: &quot;json&quot; },
481
+ ],
482
+ },
483
+ ],
484
+ }
485
+ </code></pre>
486
+ </div></div>
487
+ <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:
488
+ tagTemplate: &quot;{name}@v{version}&quot;
489
+
490
+ package:
491
+
492
+ - name: api
493
+ path: packages/api
494
+ changelog: packages/api/CHANGELOG.md
495
+ sharedPaths:
496
+ - packages/shared/
497
+ versionedFiles:
498
+ - path: packages/api/Cargo.toml
499
+ format: toml
500
+
501
+ - name: site
502
+ path: packages/site
503
+ changelog: packages/site/CHANGELOG.md
504
+ sharedPaths:
505
+ - packages/shared/
506
+ versionedFiles:
507
+ - path: packages/site/package.json
508
+ format: json
509
+ </code></pre>
510
+
511
+ </div></div>
512
+ </div>
513
+
514
+ <aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Run <code>ferrflow init</code> to generate a config file automatically based on what FerrFlow detects in your repo.</p>
515
+ </div></aside>
@@ -0,0 +1,115 @@
1
+ ---
2
+ title: Supported formats
3
+ description: Version file formats that FerrFlow can read and update.
4
+ ---
5
+
6
+ ## TOML
7
+
8
+ Used by Rust (`Cargo.toml`) and Python (`pyproject.toml`).
9
+
10
+ FerrFlow updates the `version` field under `[package]`, `[project]`, or `[tool.poetry]`.
11
+
12
+ ```toml
13
+ [package]
14
+ name = "my-crate"
15
+ version = "1.2.3" # ← updated
16
+ ```
17
+
18
+ ## JSON
19
+
20
+ Used by Node.js (`package.json`).
21
+
22
+ FerrFlow updates the top-level `version` field.
23
+
24
+ ```json
25
+ {
26
+ "name": "my-package",
27
+ "version": "1.2.3"
28
+ }
29
+ ```
30
+
31
+ ## XML
32
+
33
+ Used by Java/Maven (`pom.xml`).
34
+
35
+ FerrFlow updates the first `<version>` element it encounters.
36
+
37
+ ```xml
38
+ <project>
39
+ <groupId>com.example</groupId>
40
+ <artifactId>my-app</artifactId>
41
+ <version>1.2.3</version> <!-- updated -->
42
+ </project>
43
+ ```
44
+
45
+ ## Gradle
46
+
47
+ Used by Java/Kotlin Gradle projects (`build.gradle`, `build.gradle.kts`).
48
+
49
+ FerrFlow updates the `version = "..."` assignment.
50
+
51
+ ```groovy
52
+ version = "1.2.3" // updated
53
+ ```
54
+
55
+ ## Plain text
56
+
57
+ Used for simple version files (`VERSION`, `VERSION.txt`).
58
+
59
+ FerrFlow replaces the entire file content with the version number.
60
+
61
+ ```
62
+ 1.2.3
63
+ ```
64
+
65
+ ## Go modules
66
+
67
+ Used by Go projects (`go.mod`).
68
+
69
+ Go modules use git tags directly — FerrFlow does **not** modify `go.mod`. The version is derived entirely from the git tag (`v1.2.3` or `{name}@v1.2.3`).
70
+
71
+ ## Multiple files per package
72
+
73
+ A package can have as many versioned file entries as needed:
74
+
75
+ <div class="ferr-tabs">
76
+ <div class="ferr-tab" data-label="JSON"><p class="ferr-tab__label">JSON</p><div class="ferr-tab__body"><pre><code class="language-json">{
77
+ &quot;package&quot;: {
78
+ &quot;versionedFiles&quot;: [
79
+ { &quot;path&quot;: &quot;Cargo.toml&quot;, &quot;format&quot;: &quot;toml&quot; },
80
+ { &quot;path&quot;: &quot;npm/package.json&quot;, &quot;format&quot;: &quot;json&quot; }
81
+ ]
82
+ }
83
+ }
84
+ </code></pre>
85
+ </div></div>
86
+ <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]]
87
+ path = &quot;Cargo.toml&quot;
88
+ format = &quot;toml&quot;
89
+
90
+ [[package.versioned_files]]
91
+ path = &quot;npm/package.json&quot;
92
+ format = &quot;json&quot;
93
+ </code></pre>
94
+ </div></div>
95
+ <div class="ferr-tab" data-label="JSON5"><p class="ferr-tab__label">JSON5</p><div class="ferr-tab__body"><pre><code class="language-json5">{
96
+ package: {
97
+ versionedFiles: [
98
+ { path: &quot;Cargo.toml&quot;, format: &quot;toml&quot; },
99
+ { path: &quot;npm/package.json&quot;, format: &quot;json&quot; },
100
+ ],
101
+ },
102
+ }
103
+ </code></pre>
104
+ </div></div>
105
+ <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:
106
+ versionedFiles:
107
+ - path: Cargo.toml
108
+ format: toml
109
+ - path: npm/package.json
110
+ format: json
111
+ </code></pre>
112
+ </div></div>
113
+ </div>
114
+
115
+ Both files will be updated to the same version before the git commit.