Skip to content

Commit b3b6bb9

Browse files
vitorflorianocamilamacedo86
authored andcommitted
add --force flag to alpha update
This commit adds the --force flag to the alpha update command. It also adds documentation for the flag. The --force flag makes it possible to run the alpha update command in CI workflows.
1 parent cd23cd5 commit b3b6bb9

File tree

3 files changed

+70
-8
lines changed

3 files changed

+70
-8
lines changed

docs/book/src/reference/commands/alpha_update.md

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ kubebuilder alpha update \
6161
--from-branch=main
6262
```
6363

64+
Force update even with merge conflicts:
65+
66+
```sh
67+
kubebuilder alpha update --force
68+
```
69+
6470
<aside class="note warning">
6571
<h1>You might need to upgrade your project first</h1>
6672

@@ -81,17 +87,58 @@ Once updated, you can use `kubebuilder alpha update` for future upgrades.
8187
| `--from-version` | **Required for projects initialized with versions earlier than v4.6.0.** Kubebuilder version your project was created with. If unset, uses the `PROJECT` file. |
8288
| `--to-version` | Version to upgrade to. Defaults to the latest version. |
8389
| `--from-branch` | Git branch that contains your current project code. Defaults to `main`. |
90+
| `--force` | Force the update even if conflicts occur. Conflicted files will include conflict markers, and a commit will be created automatically. Ideal for automation (e.g., cronjobs, CI). |
8491
| `-h, --help` | Show help for this command. |
85-
86-
<aside class="note warning">
87-
<h1>Projects generated with </h1>
88-
92+
<aside class="note">
8993
Projects generated with **Kubebuilder v4.6.0** or later include the `cliVersion` field in the `PROJECT` file.
9094
This field is used by `kubebuilder alpha update` to determine the correct CLI
9195
version for upgrading your project.
96+
</aside>
97+
98+
## Merge Conflicts with `--force`
99+
100+
When you use the `--force` flag with `kubebuilder alpha update`, Git will complete the merge even if there are conflicts. The resulting commit will include conflict markers like:
101+
```
102+
<<<<<<< HEAD
103+
Your changes
104+
=======
105+
Incoming changes
106+
>>>>>>> branch-name
107+
```
108+
These conflicts will be committed in the
109+
`tmp-kb-update-merge` branch.
92110

111+
<aside class="note warning">
112+
You must manually resolve these conflicts before merging into your main branch.
113+
114+
```suggestion
115+
<aside class="note warning">
116+
<H1>If you face conflicts (using or not the --force flag) </H1>
117+
If the merge introduces conflicts, you must resolve them and **ensure** you execute the following command to regenerate the manifests and organise the files properly:
118+
119+
```bash
120+
make manifests generate fmt vet lint-fix
121+
```
122+
123+
Alternatively, you may want to run:
124+
125+
```bash
126+
make all
127+
```
93128
</aside>
94129

130+
131+
## When to Use `--force`
132+
Use `--force` only in scenarios like:
133+
- Automated environments (e.g., CI pipelines or cron jobs)
134+
- When you need to create a PR even if conflicts are present
135+
- When a human will resolve the conflicts later
136+
`kubebuilder alpha update --force`
137+
138+
This ensures the update proceeds without manual blocking but shifts responsibility for conflict resolution to a follow-up manual step.
139+
140+
This approach is typically used in automation workflows where conflict markers are later addressed by a human, or where preserving the conflicting changes is acceptable for follow-up processing.
141+
95142
## Requirements
96143

97144
- A valid [PROJECT][project-config] file at the root of your project

pkg/cli/alpha/internal/update/update.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ type Update struct {
3838
ToVersion string
3939
// FromBranch stores the branch to update from, e.g., "main".
4040
FromBranch string
41+
// Force commits the update changes even with merge conflicts
42+
Force bool
4143

4244
// UpdateBranches
4345
AncestorBranch string
@@ -334,8 +336,15 @@ func (opts *Update) mergeOriginalToUpgrade() error {
334336
var exitErr *exec.ExitError
335337
// If the merge has an error that is not a conflict, return an error 2
336338
if errors.As(err, &exitErr) && exitErr.ExitCode() == 1 {
337-
log.Warn("Merge completed with conflicts. Manual resolution required.")
338339
hasConflicts = true
340+
if !opts.Force {
341+
log.Warn("Merge stopped due to conflicts. Manual resolution is required.")
342+
log.Warn("After resolving the conflicts, run the following command:")
343+
log.Warn(" make manifests generate fmt vet lint-fix")
344+
log.Warn("This ensures manifests and generated files are up to date, and the project layout remains consistent.")
345+
return fmt.Errorf("merge stopped due to conflicts")
346+
}
347+
log.Warn("Merge completed with conflicts. Conflict markers will be committed.")
339348
} else {
340349
return fmt.Errorf("merge failed unexpectedly: %w", err)
341350
}

pkg/cli/alpha/update.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,8 @@ The process uses Git branches:
4949
- upgrade: scaffold from the target version
5050
- merge: result of the 3-way merge
5151
52-
If conflicts occur during the merge, resolve them manually in the 'merge' branch.
53-
Once resolved, commit and push it as a pull request. This branch will contain the
54-
final upgraded project with the latest Kubebuilder layout and your custom code.
52+
If conflicts occur during the merge, the command will stop and leave the merge branch for manual resolution.
53+
Use --force to commit conflicts with markers instead.
5554
5655
Examples:
5756
# Update from the version specified in the PROJECT file to the latest release
@@ -63,6 +62,9 @@ Examples:
6362
# Update from a specific version to an specific release
6463
kubebuilder alpha update --from-version v4.5.0 --to-version v4.7.0
6564
65+
# Force update even with merge conflicts (commit conflict markers)
66+
kubebuilder alpha update --force
67+
6668
`,
6769

6870
PreRunE: func(_ *cobra.Command, _ []string) error {
@@ -92,5 +94,9 @@ Examples:
9294
updateCmd.Flags().StringVar(&opts.FromBranch, "from-branch", "",
9395
"Git branch to use as current state of the project for the update.")
9496

97+
updateCmd.Flags().BoolVar(&opts.Force, "force", false,
98+
"Force the update even if conflicts occur. Conflicted files will include conflict markers, and a "+
99+
"commit will be created automatically. Ideal for automation (e.g., cronjobs, CI).")
100+
95101
return updateCmd
96102
}

0 commit comments

Comments
 (0)