@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,56 @@
1
+ ---
2
+ title: Introduction
3
+ description: What FerrFlow is and why it exists.
4
+ ---
5
+
6
+ FerrFlow is a single binary that automates semantic versioning for any repository: monorepo or classic, any language.
7
+
8
+ It reads your commit history, determines the right version bump, updates your version files, writes a changelog, creates a git tag, and publishes a release. Zero runtime dependencies.
9
+
10
+ <div class="ferr-card-group" data-cols="2">
11
+ <div class="ferr-card"><p class="ferr-card__title">CLI-first</p><div class="ferr-card__body"><p>Everything happens from your terminal or your CI. No UI to click, no config server to babysit.</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, self-hosted: FerrFlow adapts to your forge. One tool, any platform.</p>
14
+ </div></div>
15
+ <div class="ferr-card"><p class="ferr-card__title">Conventional commits</p><div class="ferr-card__body"><p>Reads commit history to determine version bumps automatically. No manual changelog maintenance.</p>
16
+ </div></div>
17
+ <div class="ferr-card"><p class="ferr-card__title">Zero infra</p><div class="ferr-card__body"><p>A single binary with no daemon, no server, no database. Runs wherever your CI runs.</p>
18
+ </div></div>
19
+ </div>
20
+
21
+ ## Why not semantic-release or changesets?
22
+
23
+ Most versioning tools are coupled to a specific ecosystem or require Node.js to be present in your CI.
24
+
25
+ | Tool | Monorepo | Multi-language | Runtime |
26
+ | ---------------- | ----------- | -------------- | -------- |
27
+ | semantic-release | via plugins | JS/Node only | Node.js |
28
+ | changesets | manual bump | JS only | Node.js |
29
+ | release-please | limited | partial | Node.js |
30
+ | cargo-release | no | Rust only | Rust |
31
+ | **FerrFlow** | **native** | **any** | **none** |
32
+
33
+ FerrFlow ships as a compiled binary. Drop it in any CI environment without installing a runtime. A WASM build (`@ferrflow/wasm`) is also available for browser-side usage.
34
+
35
+ For side-by-side latency, peak memory and install size against the JS ecosystem release tools, see [Performance](/performance): numbers refresh on every FerrFlow release.
36
+
37
+ <aside class="ferr-aside ferr-aside--note"><p class="ferr-aside__title">Heads up</p><div class="ferr-aside__body"><p>FerrFlow is versioning only. Issue tracking, secrets, and AI agents live in separate FerrLabs products.</p>
38
+ </div></aside>
39
+
40
+ ## How it works
41
+
42
+ 1. **Reads commits** since the last git tag for each package
43
+ 2. **Determines the bump** from [Conventional Commits](/docs/reference/conventional-commits) (`feat` → minor, `fix` → patch, breaking → major)
44
+ 3. **Updates version files**: `Cargo.toml`, `package.json`, `pom.xml`, etc.
45
+ 4. **Writes the changelog** in Keep a Changelog format
46
+ 5. **Creates a git tag** (`api@v1.2.0`) and pushes
47
+ 6. **Publishes a GitHub/GitLab release** with the changelog as release notes
48
+
49
+ In a monorepo, FerrFlow only releases packages that have changed, and understands shared dependency paths.
50
+
51
+ ## Key features
52
+
53
+ - **Pre/post-release hooks**: run scripts at every lifecycle stage (bump, commit, publish, failure)
54
+ - **Query commands**: `ferrflow version`, `ferrflow tag`, and `ferrflow status` for CI scripting, plus `ferrflow why` to explain a package's release decision
55
+ - **Any version file**: Cargo.toml, package.json, pom.xml, build.gradle, Chart.yaml, plain text, and more
56
+ - **Browser support**: `@ferrflow/wasm` brings commit parsing, bump computation, and changelog generation to the browser
@@ -0,0 +1,66 @@
1
+ ---
2
+ title: Quick start
3
+ description: Go from zero to your first automated release in under 5 minutes.
4
+ ---
5
+
6
+ <ol>
7
+ <li><p><strong>Scaffold the config</strong></p>
8
+ <p>Run <code>ferrflow init</code> at the root of your repository. It detects your version files and writes a <code>.ferrflow</code> config:</p>
9
+ <pre><code class="language-bash">ferrflow init
10
+ </code></pre>
11
+ <p>For a Rust project this produces:</p>
12
+ <pre><code class="language-json">{
13
+ &quot;$schema&quot;: &quot;https://ferrflow.com/schema/ferrflow.json&quot;,
14
+ &quot;workspace&quot;: {
15
+ &quot;tagTemplate&quot;: &quot;v{version}&quot;
16
+ },
17
+ &quot;package&quot;: [
18
+ {
19
+ &quot;name&quot;: &quot;my-app&quot;,
20
+ &quot;path&quot;: &quot;.&quot;,
21
+ &quot;changelog&quot;: &quot;CHANGELOG.md&quot;,
22
+ &quot;versionedFiles&quot;: [
23
+ { &quot;path&quot;: &quot;Cargo.toml&quot;, &quot;format&quot;: &quot;toml&quot; }
24
+ ]
25
+ }
26
+ ]
27
+ }
28
+ </code></pre>
29
+ </li>
30
+ <li><p><strong>Preview what would happen</strong></p>
31
+ <p>Before touching anything, run a dry-run to see what FerrFlow would do:</p>
32
+ <pre><code class="language-bash">ferrflow check
33
+ </code></pre>
34
+ <p>Output:</p>
35
+ <pre><code>Scanning . ...
36
+ → feat: add user authentication
37
+ → fix: correct pagination offset
38
+
39
+ Bump my-app 0.1.0 → 0.2.0
40
+ Tag v0.2.0
41
+ </code></pre>
42
+ </li>
43
+ <li><p><strong>Run the release</strong></p>
44
+ <pre><code class="language-bash">ferrflow release
45
+ </code></pre>
46
+ <p>FerrFlow will:</p>
47
+ <ul>
48
+ <li>Update <code>Cargo.toml</code> to <code>0.2.0</code></li>
49
+ <li>Append to <code>CHANGELOG.md</code></li>
50
+ <li>Commit the changes</li>
51
+ <li>Create and push <code>v0.2.0</code></li>
52
+ <li>Create a GitHub release (if <code>GITHUB_TOKEN</code> is set)</li>
53
+ </ul>
54
+ </li>
55
+ </ol>
56
+
57
+ <aside class="ferr-aside ferr-aside--tip"><p class="ferr-aside__title">Starting from scratch</p><div class="ferr-aside__body"><p>No prior tag? FerrFlow v3 bootstraps from the strategy&#39;s zero value automatically: the first <code>feat:</code> lands at <code>0.1.0</code>, the first <code>fix:</code> at <code>0.0.1</code>. You don&#39;t need to create a <code>v0.0.0</code> tag by hand. See <a href="/docs/reference/cli#which-version-is-bumped-from">how the baseline is chosen</a>.</p>
58
+ </div></aside>
59
+
60
+ ## Next steps
61
+
62
+ - Set up [GitHub Actions](/docs/ci/github-actions) to run releases automatically on push to `main`
63
+ - Configure a [monorepo](/docs/configuration/monorepo) if you have multiple packages
64
+ - Add [pre/post-release hooks](/docs/configuration/config-file#hooks) for custom scripts during the release lifecycle
65
+ - Use `ferrflow version` and `ferrflow tag` in CI scripts: see the [CLI reference](/docs/reference/cli)
66
+ - Review the full [config reference](/docs/configuration/config-file)
@@ -0,0 +1,106 @@
1
+ ---
2
+ title: FerrFlow API
3
+ description: 'Hosted HTTP endpoints for FerrFlow: validate configs, preview version bumps, resolve the latest release, and fetch the config schema.'
4
+ ---
5
+
6
+ The FerrFlow API exposes a small set of hosted HTTP endpoints under `https://api.ferrflow.com/v1/ferrflow/*`. They are backed by the same FerrFlow core the CLI runs, so `validate` and `preview` return results identical to `ferrflow validate` and `ferrflow check`. No second implementation to drift.
7
+
8
+ Every endpoint is public (no authentication) and safe to call from CI, editors, or a browser. The machine-readable contract is served at [`/v1/ferrflow/openapi.json`](https://api.ferrflow.com/v1/ferrflow/openapi.json) (OpenAPI 3.1).
9
+
10
+ `https://api.ferrlabs.com/v1/ferrflow/*` reaches the same endpoints and keeps working indefinitely. It is where the API was first published, and released CLI versions still call it. Prefer `api.ferrflow.com` in anything new.
11
+
12
+ ## `GET /v1/ferrflow/health`
13
+
14
+ Liveness and version probe. Powers status dashboards.
15
+
16
+ ```json
17
+ { "status": "ok", "service": "ferrflow-api", "version": "10.17.0", "time": "2026-07-21T15:00:00Z" }
18
+ ```
19
+
20
+ ## `GET /v1/ferrflow/schema`
21
+
22
+ Returns the config JSON Schema (`Content-Type: application/schema+json`), served from the schema bundled in the FerrFlow release: the same bytes the CLI validates against. Sends a strong `ETag` and `Cache-Control`, so point your editor's `$schema` here:
23
+
24
+ ```json
25
+ { "$schema": "https://api.ferrflow.com/v1/ferrflow/schema" }
26
+ ```
27
+
28
+ `GET /v1/ferrflow/schema/v{major}` returns the schema frozen at a CLI major (e.g. `/schema/v5`). Only the current major is served today; older majors return `404` until per-major snapshots land.
29
+
30
+ ## `GET /v1/ferrflow/latest`
31
+
32
+ Resolves the latest FerrFlow release from GitHub, cached server-side. Pass `platform` to get a single asset:
33
+
34
+ ```bash
35
+ curl "https://api.ferrflow.com/v1/ferrflow/latest?platform=linux-x64"
36
+ ```
37
+
38
+ ```json
39
+ {
40
+ "version": "5.48.0",
41
+ "tag": "v5.48.0",
42
+ "platform": "linux-x64",
43
+ "download_url": "https://github.com/FerrLabs/FerrFlow/releases/download/v5.48.0/ferrflow-linux-x64.tar.gz",
44
+ "bundle_url": "https://github.com/FerrLabs/FerrFlow/releases/download/v5.48.0/ferrflow-linux-x64.tar.gz.bundle",
45
+ "published_at": "2026-07-27T19:20:00Z"
46
+ }
47
+ ```
48
+
49
+ Releases are signed with [Sigstore](/verifying-releases/): verify the `.bundle` rather than a checksum (releases up to v5.47.4 carry a `.sig` + `.crt` pair instead). Without `platform`, the response lists `assets` for every platform. Valid platforms: `linux-x64`, `linux-arm64`, `linux-arm`, `darwin-x64`, `darwin-arm64`, `win32-x64`, `win32-arm64`.
50
+
51
+ ## `POST /v1/ferrflow/validate`
52
+
53
+ Validates a config without a repo. You send the config text and, optionally, the contents of the versioned files it references so the file-existence and version-consistency checks run. The result is identical to `ferrflow validate --json`.
54
+
55
+ ```bash
56
+ curl -X POST https://api.ferrflow.com/v1/ferrflow/validate \
57
+ -H 'content-type: application/json' \
58
+ -d '{
59
+ "config": "{\"package\":[{\"name\":\"app\",\"path\":\".\",\"versionedFiles\":[{\"path\":\"package.json\",\"format\":\"json\"}]}]}",
60
+ "files": { "package.json": "{\"version\":\"1.0.0\"}" }
61
+ }'
62
+ ```
63
+
64
+ ```json
65
+ {
66
+ "valid": true,
67
+ "config_file": null,
68
+ "package_count": 1,
69
+ "errors": [],
70
+ "warnings": [],
71
+ "suggestions": []
72
+ }
73
+ ```
74
+
75
+ An invalid config is still a successful validation: the response is `200` with `"valid": false` and the offending entries. Only a malformed request body returns `400`. The optional `format` field (`json` | `json5` | `toml`) skips format inference.
76
+
77
+ ## `POST /v1/ferrflow/preview`
78
+
79
+ Computes the version bumps and changelog for an explicit list of commits: the same logic as `ferrflow check`, as a service. No repo access; you pass the commits.
80
+
81
+ ```bash
82
+ curl -X POST https://api.ferrflow.com/v1/ferrflow/preview \
83
+ -H 'content-type: application/json' \
84
+ -d '{
85
+ "config": "{\"package\":[{\"name\":\"api\",\"path\":\".\"}]}",
86
+ "commits": [{ "message": "feat(api): add endpoint", "hash": "a1b2" }],
87
+ "current_versions": { "api": "1.2.3" }
88
+ }'
89
+ ```
90
+
91
+ ```json
92
+ {
93
+ "packages": [
94
+ {
95
+ "name": "api",
96
+ "current": "1.2.3",
97
+ "next": "1.3.0",
98
+ "bump": "minor",
99
+ "commits": [{ "hash": "a1b2", "type": "feat", "scope": "api", "breaking": false }],
100
+ "changelog": "### Features\n- ..."
101
+ }
102
+ ]
103
+ }
104
+ ```
105
+
106
+ In a monorepo config, each commit is assigned to a package when its `files` fall under that package's `path`. Packages with no releasable commit are omitted.