@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,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Telemetry
|
|
3
|
+
description: What FerrFlow collects, how data is anonymized, and how to opt out.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
FerrFlow collects anonymous usage telemetry to help improve the tool. This page explains exactly what is sent, how it is anonymized, and how to disable it.
|
|
7
|
+
|
|
8
|
+
## What is collected
|
|
9
|
+
|
|
10
|
+
Each time you run a command, FerrFlow may send a single event containing:
|
|
11
|
+
|
|
12
|
+
| Field | Description |
|
|
13
|
+
| --------------- | ------------------------------------------------------------------- |
|
|
14
|
+
| `event_type` | The action performed: `check`, `release`, `version_bump`, or `init` |
|
|
15
|
+
| `commits_count` | Number of commits since the last release |
|
|
16
|
+
| `repo_hash` | A SHA-256 hash of your git remote URL (see below) |
|
|
17
|
+
|
|
18
|
+
Only fields relevant to the command are included. Empty fields are omitted.
|
|
19
|
+
|
|
20
|
+
## How data is anonymized
|
|
21
|
+
|
|
22
|
+
Your repository URL is **never sent in plain text**. FerrFlow computes a SHA-256 hash of the git remote URL and sends only the resulting hex digest. This lets us count unique repositories without knowing which repositories they are.
|
|
23
|
+
|
|
24
|
+
No source code, file names, commit messages, branch names, package names, version numbers, IP addresses, or personal information are ever collected or stored.
|
|
25
|
+
|
|
26
|
+
## Where data is sent
|
|
27
|
+
|
|
28
|
+
Events are sent as a POST request to `https://api.ferrflow.com/events`. The request is asynchronous and non-blocking — it never slows down your workflow. If the request fails, it is silently discarded.
|
|
29
|
+
|
|
30
|
+
## How to opt out
|
|
31
|
+
|
|
32
|
+
You can disable telemetry entirely using either an environment variable or your config file.
|
|
33
|
+
|
|
34
|
+
### Environment variable
|
|
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
|
+
Accepted values to disable: `false`, `0`, `off`, `no` (case-insensitive).
|
|
46
|
+
|
|
47
|
+
Since v4.10, FerrFlow also honors the standard [`DO_NOT_TRACK`](https://consoledonottrack.com/) environment variable — `DO_NOT_TRACK=1` disables telemetry without any FerrFlow-specific configuration. `FERRFLOW_TELEMETRY=false` is kept as a fallback for backwards compatibility with v0/v1 configs.
|
|
48
|
+
|
|
49
|
+
### Config file
|
|
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
|
+
"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
|
+
telemetry = false
|
|
61
|
+
</code></pre>
|
|
62
|
+
</div></div>
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
Either method is sufficient to disable telemetry. If the config file disables it, the environment variable cannot re-enable it, and vice versa.
|
|
@@ -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
|
+
"$schema": "https://ferrflow.com/schema/ferrflow.json",
|
|
14
|
+
"workspace": {
|
|
15
|
+
"tagTemplate": "v{version}"
|
|
16
|
+
},
|
|
17
|
+
"package": [
|
|
18
|
+
{
|
|
19
|
+
"name": "my-app",
|
|
20
|
+
"path": ".",
|
|
21
|
+
"changelog": "CHANGELOG.md",
|
|
22
|
+
"versionedFiles": [
|
|
23
|
+
{ "path": "Cargo.toml", "format": "toml" }
|
|
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'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'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,161 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: CLI commands
|
|
3
|
+
description: Full reference for all FerrFlow CLI commands and flags.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## `ferrflow release`
|
|
7
|
+
|
|
8
|
+
Run the full release pipeline: bump versions, update changelogs, commit, tag, push, and create a release.
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
ferrflow release [OPTIONS]
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
| Flag | Description |
|
|
15
|
+
| --------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
|
16
|
+
| `--dry-run` | Preview all changes without writing, committing, or pushing |
|
|
17
|
+
| `--force` | Allow floating tags to move backward to a lower version |
|
|
18
|
+
| `--force-version <VERSION>` | Force a specific version, skipping commit analysis. Format: `VERSION` (single repo) or `NAME@VERSION` (monorepo) |
|
|
19
|
+
| `--verbose`, `-v` | Show detailed output including commit hashes and file diffs |
|
|
20
|
+
|
|
21
|
+
**What it does:**
|
|
22
|
+
|
|
23
|
+
1. Scans commits since the last tag for each package
|
|
24
|
+
2. Determines the version bump from Conventional Commits
|
|
25
|
+
3. Updates all `versionedFiles` with the new version
|
|
26
|
+
4. Appends the new section to `CHANGELOG.md`
|
|
27
|
+
5. Creates a git commit, opens a PR, or skips (depending on `releaseCommitMode`)
|
|
28
|
+
6. Creates and pushes the git tag
|
|
29
|
+
7. Creates a GitHub/GitLab release with the changelog as notes
|
|
30
|
+
|
|
31
|
+
### Which version is bumped from
|
|
32
|
+
|
|
33
|
+
Starting with FerrFlow **v3**, the baseline for every bump is **the highest semver-valid tag** for the package (e.g. `my-pkg@v2.4.1` or `v2.4.1`), not the value in the versioned file.
|
|
34
|
+
|
|
35
|
+
The versioned file stays the canonical write target so downstream consumers (`cargo publish`, Docker builds, etc.) always see a coherent version, but it is no longer the source of truth for the bump computation. This prevents two classes of silent failure:
|
|
36
|
+
|
|
37
|
+
- **Parallel release workflows**: two pull requests merging back-to-back used to spawn two release jobs that both read the pre-release version from the file. Both computed the same next version — the second push either collided or was silently skipped. Today the second workflow sees the first workflow's freshly-pushed tag and computes the correct next version on top of it.
|
|
38
|
+
- **File/tag drift**: a revert, a merge from an old branch, or a manual edit could leave the file behind the tags. Bumping from a stale file produced tags that collided with history and the release got silently skipped with `tag X already exists, skipping`. The tag now wins; the file only wins when it is genuinely ahead (human pre-bump).
|
|
39
|
+
|
|
40
|
+
Resolution order, per package:
|
|
41
|
+
|
|
42
|
+
| Tag | File | Baseline used |
|
|
43
|
+
| ------- | ------- | ------------------------------ |
|
|
44
|
+
| present | present | `max(tag, file)` by semver |
|
|
45
|
+
| present | absent | tag |
|
|
46
|
+
| absent | present | file |
|
|
47
|
+
| absent | absent | strategy bootstrap (see below) |
|
|
48
|
+
|
|
49
|
+
### First release on a brand-new repo
|
|
50
|
+
|
|
51
|
+
When no tag exists yet _and_ the format has no version to read (notably `go.mod`, which stores the version in tags alone), FerrFlow bootstraps from the versioning strategy's zero value:
|
|
52
|
+
|
|
53
|
+
| Strategy | Bootstrap baseline |
|
|
54
|
+
| ------------------------ | ---------------------------------------- |
|
|
55
|
+
| `semver`, `zerover` | `0.0.0` |
|
|
56
|
+
| `sequential` | `0` |
|
|
57
|
+
| `calver-seq` | `0.0` |
|
|
58
|
+
| `calver`, `calver-short` | ignored — bump derives from today's date |
|
|
59
|
+
|
|
60
|
+
From there the first `feat:` commit bumps to `0.1.0` / `1` / today's date / … and the release flow creates the tag itself — no `git tag foo@v0.0.0` ceremony required before the first run.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## `ferrflow check`
|
|
65
|
+
|
|
66
|
+
Preview what `ferrflow release` would do without making any changes. Equivalent to `ferrflow release --dry-run`.
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
ferrflow check
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## `ferrflow changelog`
|
|
75
|
+
|
|
76
|
+
Generate or update `CHANGELOG.md` only, without bumping versions or creating tags.
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
ferrflow changelog [OPTIONS]
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
| Flag | Description |
|
|
83
|
+
| ----------- | ------------------------------------------------- |
|
|
84
|
+
| `--dry-run` | Print the changelog entry without writing to disk |
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## `ferrflow init`
|
|
89
|
+
|
|
90
|
+
Scaffold a config file for the current repository. Detects existing version files (`Cargo.toml`, `package.json`, etc.) and generates the appropriate config.
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
ferrflow init [OPTIONS]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
| Flag | Description |
|
|
97
|
+
| ------------------- | ---------------------------------------------- |
|
|
98
|
+
| `--format <FORMAT>` | Config file format: `json`, `json5`, or `toml` |
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## `ferrflow status`
|
|
103
|
+
|
|
104
|
+
Show the current version of each package and whether a release would be triggered.
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
ferrflow status [OPTIONS]
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
| Flag | Description |
|
|
111
|
+
| ------------------- | ----------------------------------------- |
|
|
112
|
+
| `--output <FORMAT>` | Output format: `text` (default) or `json` |
|
|
113
|
+
|
|
114
|
+
Example output:
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
api 1.2.3 minor bump pending (1 feat commit)
|
|
118
|
+
site 0.4.1 no release (only chore commits)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## `ferrflow version`
|
|
124
|
+
|
|
125
|
+
Print the current version of one or all packages. Useful in CI scripts.
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
ferrflow version [PACKAGE] [OPTIONS]
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
| Flag | Description |
|
|
132
|
+
| -------- | -------------- |
|
|
133
|
+
| `--json` | Output as JSON |
|
|
134
|
+
|
|
135
|
+
Returns the version from the latest git tag matching the package's tag template.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## `ferrflow tag`
|
|
140
|
+
|
|
141
|
+
Print the latest tag for one or all packages.
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
ferrflow tag [PACKAGE] [OPTIONS]
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
| Flag | Description |
|
|
148
|
+
| -------- | -------------- |
|
|
149
|
+
| `--json` | Output as JSON |
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Global flags
|
|
154
|
+
|
|
155
|
+
These flags work with all commands:
|
|
156
|
+
|
|
157
|
+
| Flag | Description |
|
|
158
|
+
| ----------------- | --------------------------------------------------------------------------------------------------- |
|
|
159
|
+
| `--config <PATH>` | Path to a custom config file (default: auto-detected). Also accepts `FERRFLOW_CONFIG` env variable. |
|
|
160
|
+
| `--version` | Print the FerrFlow version and exit |
|
|
161
|
+
| `--help`, `-h` | Print help |
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Conventional Commits
|
|
3
|
+
description: How FerrFlow interprets commit messages to determine version bumps.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
FerrFlow follows the [Conventional Commits](https://www.conventionalcommits.org/) specification to determine how much to bump the version.
|
|
7
|
+
|
|
8
|
+
## Bump rules
|
|
9
|
+
|
|
10
|
+
| Commit type | Version bump | Example |
|
|
11
|
+
| ----------------------------- | ------------ | ----------------------------------- |
|
|
12
|
+
| `feat:` | **minor** | `feat: add wallet subscriptions` |
|
|
13
|
+
| `fix:` | patch | `fix: correct pagination offset` |
|
|
14
|
+
| `perf:` | patch | `perf: cache user queries` |
|
|
15
|
+
| `refactor:` | patch | `refactor: extract auth middleware` |
|
|
16
|
+
| `feat!:` or `BREAKING CHANGE` | **major** | `feat!: remove deprecated endpoint` |
|
|
17
|
+
| `chore:` | none | `chore: update dependencies` |
|
|
18
|
+
| `docs:` | none | `docs: update README` |
|
|
19
|
+
| `ci:` | none | `ci: add linting step` |
|
|
20
|
+
| `style:` | none | `style: format code` |
|
|
21
|
+
| `test:` | none | `test: add unit tests` |
|
|
22
|
+
|
|
23
|
+
## Breaking changes
|
|
24
|
+
|
|
25
|
+
A breaking change can be indicated in two ways:
|
|
26
|
+
|
|
27
|
+
**Exclamation mark suffix:**
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
feat!: remove the /v1/users endpoint
|
|
31
|
+
fix!: change authentication header format
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**`BREAKING CHANGE` footer:**
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
feat: redesign the API
|
|
38
|
+
|
|
39
|
+
BREAKING CHANGE: The /v1/users endpoint has been removed. Use /v2/users instead.
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Both produce a **major** version bump.
|
|
43
|
+
|
|
44
|
+
## Scope
|
|
45
|
+
|
|
46
|
+
Scopes are optional and ignored for bump calculation. They're useful for readability:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
feat(auth): add OAuth2 support → minor bump
|
|
50
|
+
fix(db): correct index on user table → patch bump
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## No release
|
|
54
|
+
|
|
55
|
+
Commits with types `chore`, `docs`, `ci`, `style`, or `test` do not trigger a release. If all commits since the last tag are of these types, FerrFlow exits without creating a new version.
|
|
56
|
+
|
|
57
|
+
## Multiple commits
|
|
58
|
+
|
|
59
|
+
When multiple commits are present since the last tag, FerrFlow takes the **highest** bump across all of them:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
fix: correct typo → patch
|
|
63
|
+
feat: add export button → minor ← wins
|
|
64
|
+
chore: lint → none
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Result: **minor** bump.
|