@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,130 @@
|
|
|
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
|
+
---
|
|
32
|
+
|
|
33
|
+
## `ferrflow check`
|
|
34
|
+
|
|
35
|
+
Preview what `ferrflow release` would do without making any changes. Equivalent to `ferrflow release --dry-run`.
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
ferrflow check
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## `ferrflow changelog`
|
|
44
|
+
|
|
45
|
+
Generate or update `CHANGELOG.md` only, without bumping versions or creating tags.
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
ferrflow changelog [OPTIONS]
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
| Flag | Description |
|
|
52
|
+
| ----------- | ------------------------------------------------- |
|
|
53
|
+
| `--dry-run` | Print the changelog entry without writing to disk |
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## `ferrflow init`
|
|
58
|
+
|
|
59
|
+
Scaffold a config file for the current repository. Detects existing version files (`Cargo.toml`, `package.json`, etc.) and generates the appropriate config.
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
ferrflow init [OPTIONS]
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
| Flag | Description |
|
|
66
|
+
| ------------------- | ---------------------------------------------- |
|
|
67
|
+
| `--format <FORMAT>` | Config file format: `json`, `json5`, or `toml` |
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## `ferrflow status`
|
|
72
|
+
|
|
73
|
+
Show the current version of each package and whether a release would be triggered.
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
ferrflow status [OPTIONS]
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
| Flag | Description |
|
|
80
|
+
| ------------------- | ----------------------------------------- |
|
|
81
|
+
| `--output <FORMAT>` | Output format: `text` (default) or `json` |
|
|
82
|
+
|
|
83
|
+
Example output:
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
api 1.2.3 minor bump pending (1 feat commit)
|
|
87
|
+
site 0.4.1 no release (only chore commits)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## `ferrflow version`
|
|
93
|
+
|
|
94
|
+
Print the current version of one or all packages. Useful in CI scripts.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
ferrflow version [PACKAGE] [OPTIONS]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
| Flag | Description |
|
|
101
|
+
| -------- | -------------- |
|
|
102
|
+
| `--json` | Output as JSON |
|
|
103
|
+
|
|
104
|
+
Returns the version from the latest git tag matching the package's tag template.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## `ferrflow tag`
|
|
109
|
+
|
|
110
|
+
Print the latest tag for one or all packages.
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
ferrflow tag [PACKAGE] [OPTIONS]
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
| Flag | Description |
|
|
117
|
+
| -------- | -------------- |
|
|
118
|
+
| `--json` | Output as JSON |
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Global flags
|
|
123
|
+
|
|
124
|
+
These flags work with all commands:
|
|
125
|
+
|
|
126
|
+
| Flag | Description |
|
|
127
|
+
| ----------------- | --------------------------------------------------------------------------------------------------- |
|
|
128
|
+
| `--config <PATH>` | Path to a custom config file (default: auto-detected). Also accepts `FERRFLOW_CONFIG` env variable. |
|
|
129
|
+
| `--version` | Print the FerrFlow version and exit |
|
|
130
|
+
| `--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.
|
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Error codes
|
|
3
|
+
description: Reference for all FerrFlow error codes with causes and fixes.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
When FerrFlow encounters an error, it displays a code like `error[E2001]` with a link to this page. Use the code to find the cause and fix.
|
|
7
|
+
|
|
8
|
+
## Configuration Errors
|
|
9
|
+
|
|
10
|
+
### E1001: Config file not found
|
|
11
|
+
|
|
12
|
+
<span id="e1001"></span>
|
|
13
|
+
|
|
14
|
+
The config file specified via `--config` does not exist.
|
|
15
|
+
|
|
16
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Run <code>ferrflow init</code> to create a config file, or check the path.</p>
|
|
17
|
+
</div></aside>
|
|
18
|
+
|
|
19
|
+
### E1002: Failed to parse ferrflow.json
|
|
20
|
+
|
|
21
|
+
<span id="e1002"></span>
|
|
22
|
+
|
|
23
|
+
The `ferrflow.json` file contains invalid JSON (missing commas, trailing commas, unquoted keys).
|
|
24
|
+
|
|
25
|
+
### E1003: Failed to parse ferrflow.json5
|
|
26
|
+
|
|
27
|
+
<span id="e1003"></span>
|
|
28
|
+
|
|
29
|
+
The `ferrflow.json5` file contains invalid JSON5.
|
|
30
|
+
|
|
31
|
+
### E1004: Failed to parse ferrflow.toml
|
|
32
|
+
|
|
33
|
+
<span id="e1004"></span>
|
|
34
|
+
|
|
35
|
+
The `ferrflow.toml` file contains invalid TOML.
|
|
36
|
+
|
|
37
|
+
### E1005: Failed to serialize to TOML
|
|
38
|
+
|
|
39
|
+
<span id="e1005"></span>
|
|
40
|
+
|
|
41
|
+
Internal error when writing TOML output.
|
|
42
|
+
|
|
43
|
+
### E1006: Failed to parse .ferrflow
|
|
44
|
+
|
|
45
|
+
<span id="e1006"></span>
|
|
46
|
+
|
|
47
|
+
The `.ferrflow` dotfile contains invalid JSON.
|
|
48
|
+
|
|
49
|
+
### E1007: Failed to serialize .ferrflow
|
|
50
|
+
|
|
51
|
+
<span id="e1007"></span>
|
|
52
|
+
|
|
53
|
+
Internal error when writing the dotfile.
|
|
54
|
+
|
|
55
|
+
### E1008: Failed to resolve path
|
|
56
|
+
|
|
57
|
+
<span id="e1008"></span>
|
|
58
|
+
|
|
59
|
+
A path in the config could not be resolved to an absolute path.
|
|
60
|
+
|
|
61
|
+
### E1009: Failed to write temporary loader file
|
|
62
|
+
|
|
63
|
+
<span id="e1009"></span>
|
|
64
|
+
|
|
65
|
+
Could not write the temporary JS/TS loader during config evaluation.
|
|
66
|
+
|
|
67
|
+
### E1010: Failed to execute tsx
|
|
68
|
+
|
|
69
|
+
<span id="e1010"></span>
|
|
70
|
+
|
|
71
|
+
The `tsx` runtime could not be found or executed for `.ts` config files.
|
|
72
|
+
|
|
73
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Install tsx: <code>npm install -g tsx</code>, or use a JSON/TOML config instead.</p>
|
|
74
|
+
</div></aside>
|
|
75
|
+
|
|
76
|
+
### E1011: Failed to execute node
|
|
77
|
+
|
|
78
|
+
<span id="e1011"></span>
|
|
79
|
+
|
|
80
|
+
The `node` runtime could not be found or executed for `.js` config files.
|
|
81
|
+
|
|
82
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Install Node.js or use a JSON/TOML config instead.</p>
|
|
83
|
+
</div></aside>
|
|
84
|
+
|
|
85
|
+
### E1012: Config evaluation failed
|
|
86
|
+
|
|
87
|
+
<span id="e1012"></span>
|
|
88
|
+
|
|
89
|
+
The JS/TS config file threw an error during evaluation.
|
|
90
|
+
|
|
91
|
+
### E1013: Invalid config output
|
|
92
|
+
|
|
93
|
+
<span id="e1013"></span>
|
|
94
|
+
|
|
95
|
+
The JS/TS config file produced non-UTF-8 output.
|
|
96
|
+
|
|
97
|
+
### E1014: Invalid JSON from config
|
|
98
|
+
|
|
99
|
+
<span id="e1014"></span>
|
|
100
|
+
|
|
101
|
+
The JS/TS config file did not produce valid JSON output.
|
|
102
|
+
|
|
103
|
+
### E1015: Failed to read config file
|
|
104
|
+
|
|
105
|
+
<span id="e1015"></span>
|
|
106
|
+
|
|
107
|
+
The config file exists but could not be read (permissions, encoding).
|
|
108
|
+
|
|
109
|
+
### E1016: Multiple config files found
|
|
110
|
+
|
|
111
|
+
<span id="e1016"></span>
|
|
112
|
+
|
|
113
|
+
More than one config file was found in the project root (e.g. both `ferrflow.json` and `ferrflow.toml`).
|
|
114
|
+
|
|
115
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Keep only one config file and delete the others.</p>
|
|
116
|
+
</div></aside>
|
|
117
|
+
|
|
118
|
+
### E1017: Config file already exists
|
|
119
|
+
|
|
120
|
+
<span id="e1017"></span>
|
|
121
|
+
|
|
122
|
+
Running `ferrflow init` when a config file already exists.
|
|
123
|
+
|
|
124
|
+
## Validation Errors
|
|
125
|
+
|
|
126
|
+
### E1100: Invalid repo spec
|
|
127
|
+
|
|
128
|
+
<span id="e1100"></span>
|
|
129
|
+
|
|
130
|
+
The `--repo` argument does not match the expected format `owner/repo` or `host/owner/repo`.
|
|
131
|
+
|
|
132
|
+
### E1101: GitHub API error
|
|
133
|
+
|
|
134
|
+
<span id="e1101"></span>
|
|
135
|
+
|
|
136
|
+
The GitHub API returned an error during remote config validation.
|
|
137
|
+
|
|
138
|
+
### E1102: GitLab API error
|
|
139
|
+
|
|
140
|
+
<span id="e1102"></span>
|
|
141
|
+
|
|
142
|
+
The GitLab API returned an error during remote config validation.
|
|
143
|
+
|
|
144
|
+
### E1103: Invalid UTF-8 in config
|
|
145
|
+
|
|
146
|
+
<span id="e1103"></span>
|
|
147
|
+
|
|
148
|
+
The remote config file contains invalid UTF-8 encoding.
|
|
149
|
+
|
|
150
|
+
### E1104: Failed to parse remote config
|
|
151
|
+
|
|
152
|
+
<span id="e1104"></span>
|
|
153
|
+
|
|
154
|
+
The remote config file could not be parsed.
|
|
155
|
+
|
|
156
|
+
### E1105: Remote config file not found
|
|
157
|
+
|
|
158
|
+
<span id="e1105"></span>
|
|
159
|
+
|
|
160
|
+
The specified config file path does not exist in the remote repository.
|
|
161
|
+
|
|
162
|
+
### E1106: No config file found
|
|
163
|
+
|
|
164
|
+
<span id="e1106"></span>
|
|
165
|
+
|
|
166
|
+
No FerrFlow config file was found in the remote repository.
|
|
167
|
+
|
|
168
|
+
### E1107: --ref requires --repo
|
|
169
|
+
|
|
170
|
+
<span id="e1107"></span>
|
|
171
|
+
|
|
172
|
+
The `--ref` flag was used without specifying `--repo`.
|
|
173
|
+
|
|
174
|
+
## Git Operation Errors
|
|
175
|
+
|
|
176
|
+
### E2001: Not a git repository
|
|
177
|
+
|
|
178
|
+
<span id="e2001"></span>
|
|
179
|
+
|
|
180
|
+
The current directory is not inside a git repository.
|
|
181
|
+
|
|
182
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Run FerrFlow from within a git repository, or check the <code>--config</code> path.</p>
|
|
183
|
+
</div></aside>
|
|
184
|
+
|
|
185
|
+
### E2002: Bare repository not supported
|
|
186
|
+
|
|
187
|
+
<span id="e2002"></span>
|
|
188
|
+
|
|
189
|
+
FerrFlow does not support bare git repositories.
|
|
190
|
+
|
|
191
|
+
### E2003: Tag already exists
|
|
192
|
+
|
|
193
|
+
<span id="e2003"></span>
|
|
194
|
+
|
|
195
|
+
The tag that FerrFlow wants to create already exists.
|
|
196
|
+
|
|
197
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Delete the existing tag or use <code>--force</code> to overwrite.</p>
|
|
198
|
+
</div></aside>
|
|
199
|
+
|
|
200
|
+
### E2004: Failed to push branch
|
|
201
|
+
|
|
202
|
+
<span id="e2004"></span>
|
|
203
|
+
|
|
204
|
+
Could not push the release branch to the remote.
|
|
205
|
+
|
|
206
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Check that you have push access and the branch is not protected.</p>
|
|
207
|
+
</div></aside>
|
|
208
|
+
|
|
209
|
+
### E2005: Push rejected by remote
|
|
210
|
+
|
|
211
|
+
<span id="e2005"></span>
|
|
212
|
+
|
|
213
|
+
The remote rejected the push (non-fast-forward, branch protection, hooks).
|
|
214
|
+
|
|
215
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Pull the latest changes and retry, or check branch protection rules.</p>
|
|
216
|
+
</div></aside>
|
|
217
|
+
|
|
218
|
+
### E2006: Failed to push tags
|
|
219
|
+
|
|
220
|
+
<span id="e2006"></span>
|
|
221
|
+
|
|
222
|
+
Could not push tags to the remote.
|
|
223
|
+
|
|
224
|
+
### E2007: Failed to push floating tags
|
|
225
|
+
|
|
226
|
+
<span id="e2007"></span>
|
|
227
|
+
|
|
228
|
+
Could not force-push floating tags (e.g. `v1`, `v1.2`).
|
|
229
|
+
|
|
230
|
+
### E2008: Remote not found
|
|
231
|
+
|
|
232
|
+
<span id="e2008"></span>
|
|
233
|
+
|
|
234
|
+
The configured git remote (default: `origin`) does not exist.
|
|
235
|
+
|
|
236
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Check <code>git remote -v</code> and update the <code>remote</code> field in your config.</p>
|
|
237
|
+
</div></aside>
|
|
238
|
+
|
|
239
|
+
### E2009: Post-push verification failed
|
|
240
|
+
|
|
241
|
+
<span id="e2009"></span>
|
|
242
|
+
|
|
243
|
+
After pushing, the release commit could not be verified on the remote branch.
|
|
244
|
+
|
|
245
|
+
### E2010: Remote branch not found
|
|
246
|
+
|
|
247
|
+
<span id="e2010"></span>
|
|
248
|
+
|
|
249
|
+
The remote branch was not found after a push operation.
|
|
250
|
+
|
|
251
|
+
## GitHub API Errors
|
|
252
|
+
|
|
253
|
+
### E3001: Failed to create release
|
|
254
|
+
|
|
255
|
+
<span id="e3001"></span>
|
|
256
|
+
|
|
257
|
+
The GitHub Releases API returned an error when creating a release.
|
|
258
|
+
|
|
259
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Check that <code>GITHUB_TOKEN</code> or <code>FERRFLOW_TOKEN</code> has <code>contents: write</code> permission.</p>
|
|
260
|
+
</div></aside>
|
|
261
|
+
|
|
262
|
+
### E3002: Failed to list releases
|
|
263
|
+
|
|
264
|
+
<span id="e3002"></span>
|
|
265
|
+
|
|
266
|
+
Could not fetch existing releases from the GitHub API.
|
|
267
|
+
|
|
268
|
+
### E3003: Failed to parse releases response
|
|
269
|
+
|
|
270
|
+
<span id="e3003"></span>
|
|
271
|
+
|
|
272
|
+
The GitHub API returned an unexpected response format.
|
|
273
|
+
|
|
274
|
+
### E3004: Failed to publish release
|
|
275
|
+
|
|
276
|
+
<span id="e3004"></span>
|
|
277
|
+
|
|
278
|
+
Could not publish (un-draft) a GitHub release.
|
|
279
|
+
|
|
280
|
+
### E3005: Failed to create pull request
|
|
281
|
+
|
|
282
|
+
<span id="e3005"></span>
|
|
283
|
+
|
|
284
|
+
The GitHub API returned an error when creating a PR.
|
|
285
|
+
|
|
286
|
+
### E3006: Failed to parse PR response
|
|
287
|
+
|
|
288
|
+
<span id="e3006"></span>
|
|
289
|
+
|
|
290
|
+
The GitHub API returned an unexpected PR response format.
|
|
291
|
+
|
|
292
|
+
### E3007: PR response missing required field
|
|
293
|
+
|
|
294
|
+
<span id="e3007"></span>
|
|
295
|
+
|
|
296
|
+
The GitHub API PR response was missing the `number` or `node_id` field.
|
|
297
|
+
|
|
298
|
+
### E3008: Failed to enable auto-merge
|
|
299
|
+
|
|
300
|
+
<span id="e3008"></span>
|
|
301
|
+
|
|
302
|
+
Could not enable auto-merge on the release PR via the GraphQL API.
|
|
303
|
+
|
|
304
|
+
### E3009: Failed to parse GraphQL response
|
|
305
|
+
|
|
306
|
+
<span id="e3009"></span>
|
|
307
|
+
|
|
308
|
+
The GitHub GraphQL API returned an unexpected response.
|
|
309
|
+
|
|
310
|
+
### E3010: Auto-merge failed
|
|
311
|
+
|
|
312
|
+
<span id="e3010"></span>
|
|
313
|
+
|
|
314
|
+
The GraphQL mutation to enable auto-merge returned an error.
|
|
315
|
+
|
|
316
|
+
## GitLab API Errors
|
|
317
|
+
|
|
318
|
+
### E3101: Failed to create release
|
|
319
|
+
|
|
320
|
+
<span id="e3101"></span>
|
|
321
|
+
|
|
322
|
+
The GitLab Releases API returned an error.
|
|
323
|
+
|
|
324
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Check that the CI token has API access and the project allows release creation.</p>
|
|
325
|
+
</div></aside>
|
|
326
|
+
|
|
327
|
+
### E3102: Failed to create merge request
|
|
328
|
+
|
|
329
|
+
<span id="e3102"></span>
|
|
330
|
+
|
|
331
|
+
The GitLab API returned an error when creating an MR.
|
|
332
|
+
|
|
333
|
+
### E3103: Failed to parse MR response
|
|
334
|
+
|
|
335
|
+
<span id="e3103"></span>
|
|
336
|
+
|
|
337
|
+
The GitLab API returned an unexpected MR response format.
|
|
338
|
+
|
|
339
|
+
### E3104: MR response missing iid field
|
|
340
|
+
|
|
341
|
+
<span id="e3104"></span>
|
|
342
|
+
|
|
343
|
+
The GitLab MR response was missing the `iid` field.
|
|
344
|
+
|
|
345
|
+
### E3105: Failed to merge MR
|
|
346
|
+
|
|
347
|
+
<span id="e3105"></span>
|
|
348
|
+
|
|
349
|
+
Could not merge the release MR via the GitLab API.
|
|
350
|
+
|
|
351
|
+
## Version File Errors
|
|
352
|
+
|
|
353
|
+
### TOML (E4101 to E4105)
|
|
354
|
+
|
|
355
|
+
| Code | Error |
|
|
356
|
+
| --------- | --------------------------------- |
|
|
357
|
+
| **E4101** | Cannot read TOML version file |
|
|
358
|
+
| **E4102** | Invalid TOML syntax |
|
|
359
|
+
| **E4103** | No `version` field found |
|
|
360
|
+
| **E4104** | Failed to write TOML version file |
|
|
361
|
+
| **E4105** | Invalid UTF-8 in TOML file |
|
|
362
|
+
|
|
363
|
+
### JSON (E4201 to E4205)
|
|
364
|
+
|
|
365
|
+
| Code | Error |
|
|
366
|
+
| --------- | --------------------------------- |
|
|
367
|
+
| **E4201** | Cannot read JSON version file |
|
|
368
|
+
| **E4202** | Invalid JSON syntax |
|
|
369
|
+
| **E4203** | No `version` field found |
|
|
370
|
+
| **E4204** | Failed to write JSON version file |
|
|
371
|
+
| **E4205** | Invalid UTF-8 in JSON file |
|
|
372
|
+
|
|
373
|
+
### Helm / YAML (E4301 to E4304)
|
|
374
|
+
|
|
375
|
+
| Code | Error |
|
|
376
|
+
| --------- | --------------------------- |
|
|
377
|
+
| **E4301** | Cannot read Chart.yaml |
|
|
378
|
+
| **E4302** | No `version` field found |
|
|
379
|
+
| **E4303** | Failed to write Chart.yaml |
|
|
380
|
+
| **E4304** | Invalid UTF-8 in Chart.yaml |
|
|
381
|
+
|
|
382
|
+
### XML (E4401 to E4404)
|
|
383
|
+
|
|
384
|
+
| Code | Error |
|
|
385
|
+
| --------- | ---------------------------- |
|
|
386
|
+
| **E4401** | Cannot read XML version file |
|
|
387
|
+
| **E4402** | No `<version>` tag found |
|
|
388
|
+
| **E4403** | Failed to write XML file |
|
|
389
|
+
| **E4404** | Invalid UTF-8 in XML file |
|
|
390
|
+
|
|
391
|
+
### CSProj (E4410 to E4413)
|
|
392
|
+
|
|
393
|
+
| Code | Error |
|
|
394
|
+
| --------- | ----------------------------- |
|
|
395
|
+
| **E4410** | Cannot read .csproj file |
|
|
396
|
+
| **E4411** | No `<Version>` tag found |
|
|
397
|
+
| **E4412** | Failed to write .csproj file |
|
|
398
|
+
| **E4413** | Invalid UTF-8 in .csproj file |
|
|
399
|
+
|
|
400
|
+
### Gradle (E4501 to E4504)
|
|
401
|
+
|
|
402
|
+
| Code | Error |
|
|
403
|
+
| --------- | ----------------------------- |
|
|
404
|
+
| **E4501** | Cannot read build.gradle |
|
|
405
|
+
| **E4502** | No `version` field found |
|
|
406
|
+
| **E4503** | Failed to write build.gradle |
|
|
407
|
+
| **E4504** | Invalid UTF-8 in build.gradle |
|
|
408
|
+
|
|
409
|
+
### Go mod (E4601 to E4603)
|
|
410
|
+
|
|
411
|
+
| Code | Error |
|
|
412
|
+
| --------- | ------------------------------- |
|
|
413
|
+
| **E4601** | Failed to run `git describe` |
|
|
414
|
+
| **E4602** | No version tag found |
|
|
415
|
+
| **E4603** | Go modules do not support write |
|
|
416
|
+
|
|
417
|
+
### Text (E4701 to E4704)
|
|
418
|
+
|
|
419
|
+
| Code | Error |
|
|
420
|
+
| --------- | ----------------------------- |
|
|
421
|
+
| **E4701** | Cannot read text version file |
|
|
422
|
+
| **E4702** | No version found |
|
|
423
|
+
| **E4703** | Failed to write text file |
|
|
424
|
+
| **E4704** | Invalid UTF-8 in text file |
|
|
425
|
+
|
|
426
|
+
## Pre-release Errors
|
|
427
|
+
|
|
428
|
+
### E5001: Empty channel name
|
|
429
|
+
|
|
430
|
+
<span id="e5001"></span>
|
|
431
|
+
|
|
432
|
+
The pre-release channel name is empty.
|
|
433
|
+
|
|
434
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Provide a non-empty channel name: <code>--channel beta</code></p>
|
|
435
|
+
</div></aside>
|
|
436
|
+
|
|
437
|
+
### E5002: Invalid channel name
|
|
438
|
+
|
|
439
|
+
<span id="e5002"></span>
|
|
440
|
+
|
|
441
|
+
The channel name contains invalid characters. Only alphanumeric characters and hyphens are allowed.
|
|
442
|
+
|
|
443
|
+
## Versioning Errors
|
|
444
|
+
|
|
445
|
+
### E5010: Invalid semver
|
|
446
|
+
|
|
447
|
+
<span id="e5010"></span>
|
|
448
|
+
|
|
449
|
+
The current version string is not valid semantic versioning.
|
|
450
|
+
|
|
451
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Ensure the version in your versioned file follows <code>MAJOR.MINOR.PATCH</code> format.</p>
|
|
452
|
+
</div></aside>
|
|
453
|
+
|
|
454
|
+
## Hook Errors
|
|
455
|
+
|
|
456
|
+
### E6001: Hook execution failed
|
|
457
|
+
|
|
458
|
+
<span id="e6001"></span>
|
|
459
|
+
|
|
460
|
+
A lifecycle hook exited with a non-zero status code and `on_failure` is set to `abort`.
|
|
461
|
+
|
|
462
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Check the hook command output, or set <code>on_failure: "continue"</code> to ignore failures.</p>
|
|
463
|
+
</div></aside>
|
|
464
|
+
|
|
465
|
+
## Query Errors
|
|
466
|
+
|
|
467
|
+
### E7001: No packages configured
|
|
468
|
+
|
|
469
|
+
<span id="e7001"></span>
|
|
470
|
+
|
|
471
|
+
No packages are defined in the config file.
|
|
472
|
+
|
|
473
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Run <code>ferrflow init</code> to create a config, or add packages manually.</p>
|
|
474
|
+
</div></aside>
|
|
475
|
+
|
|
476
|
+
### E7002: Package not found
|
|
477
|
+
|
|
478
|
+
<span id="e7002"></span>
|
|
479
|
+
|
|
480
|
+
The specified package name does not exist in the config.
|
|
481
|
+
|
|
482
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Run <code>ferrflow version</code> to list all configured packages.</p>
|
|
483
|
+
</div></aside>
|
|
484
|
+
|
|
485
|
+
## Monorepo Errors
|
|
486
|
+
|
|
487
|
+
### E8001: Package not found in config
|
|
488
|
+
|
|
489
|
+
<span id="e8001"></span>
|
|
490
|
+
|
|
491
|
+
A package referenced during release was not found in the configuration.
|
|
492
|
+
|
|
493
|
+
### E8002: Floating tag backward move
|
|
494
|
+
|
|
495
|
+
<span id="e8002"></span>
|
|
496
|
+
|
|
497
|
+
A floating tag would move to an older version.
|
|
498
|
+
|
|
499
|
+
<aside class="ferr-aside ferr-aside--tip"><div class="ferr-aside__body"><p>Use <code>--force</code> to override the safety check.</p>
|
|
500
|
+
</div></aside>
|