Skip to content

support parallel running of commands#2215

Merged
dearchap merged 7 commits intourfave:mainfrom
oprudkyi:issue/parallel_run
Oct 28, 2025
Merged

support parallel running of commands#2215
dearchap merged 7 commits intourfave:mainfrom
oprudkyi:issue/parallel_run

Conversation

@oprudkyi
Copy link
Copy Markdown
Contributor

@oprudkyi oprudkyi commented Oct 25, 2025

What type of PR is this?

Fix to allow running commands in parallel (probably partial)

  • bug
  • feature

What this PR does / why we need it:

  • extra test go test -run 'TestCommand_ParallelRun' -count 100000 -failfast -race
  • avoid global HelpFlag reuse in different commands by cloning flag
  • avoid global VersionFlag reuse in different commands
  • remove globals used for splicing slices and maps
  • defaultSliceFlagSeparator, disableSliceFlagSeparator, defaultMapFlagKeyValueSeparator converted to consts
  • command - added new MapFlagKeyValueSeparator field
  • command fields - SliceFlagSeparator, DisableSliceFlagSeparator, MapFlagKeyValueSeparator are propagated down to FlagBase and then to (MapBase|SliceBase)

Which issue(s) this PR fixes:

Fixes #2176

Special notes for your reviewer:

I just lurked around, so please recheck carefully

Testing

  • extra test go test -run 'TestCommand_ParallelRun' -count 100000 -failfast -race

Release Notes

Reduced dependency on internal global vars, allows to run commands in parallel 

`go test -run 'TestCommand_ParallelRun' -count 100000 -failfast -race`
- defaultSliceFlagSeparator, disableSliceFlagSeparator, defaultMapFlagKeyValueSeparator
converted to consts
- command - new MapFlagKeyValueSeparator field
@oprudkyi oprudkyi requested a review from a team as a code owner October 25, 2025 14:29

func (cmd *Command) set(fName string, f Flag, val string) error {
cmd.setFlags[f] = struct{}{}
cmd.setMultiValueParsingConfig(f)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

strictly speaking this call should be moved into PreParse phase.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @dearchap
I tried to avoid breaking things, and there are two set methods set and Set

Initially I thought to call setMultiValueParsingConfig from inside parseFlags(args Args) (Args, error) { or run(... but found that Set can be called without Run , at least in tests , so I moved it where setMultiValueParsingConfig will be called for sure

@dearchap dearchap merged commit 9dad0d4 into urfave:main Oct 28, 2025
9 checks passed
another-rex pushed a commit to google/osv-scanner that referenced this pull request Nov 12, 2025
Thanks to urfave/cli#2215 we should no longer
need this workaround 🎉
schwarlex pushed a commit to la-demos/vcluster-workshop-prep that referenced this pull request Feb 11, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [github.com/urfave/cli/v3](https://github.com/urfave/cli) | require | minor | `v3.3.8` -> `v3.6.1` |

---

### Release Notes

<details>
<summary>urfave/cli (github.com/urfave/cli/v3)</summary>

### [`v3.6.1`](https://github.com/urfave/cli/releases/tag/v3.6.1)

[Compare Source](urfave/cli@v3.6.0...v3.6.1)

#### What's Changed

- chore(deps): bump golangci/golangci-lint-action from 8 to 9 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2222](urfave/cli#2222)
- feat: add ability to override usage text of default help command by [@&#8203;Maks1mS](https://github.com/Maks1mS) in [#&#8203;2196](urfave/cli#2196)
- Fix:(issue\_2223) Fix incorrect processing of empty value after = by [@&#8203;dearchap](https://github.com/dearchap) in [#&#8203;2224](urfave/cli#2224)

#### New Contributors

- [@&#8203;Maks1mS](https://github.com/Maks1mS) made their first contribution in [#&#8203;2196](urfave/cli#2196)

**Full Changelog**: <urfave/cli@v3.6.0...v3.6.1>

### [`v3.6.0`](https://github.com/urfave/cli/releases/tag/v3.6.0)

[Compare Source](urfave/cli@v3.5.0...v3.6.0)

#### What's Changed

- support parallel running of commands by [@&#8203;oprudkyi](https://github.com/oprudkyi) in [#&#8203;2215](urfave/cli#2215)
- Fix:(issue\_2208) Fix local flag by [@&#8203;dearchap](https://github.com/dearchap) in [#&#8203;2211](urfave/cli#2211)
- chore(deps): bump the python-packages group with 2 updates by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2219](urfave/cli#2219)
- Call actions on flags set from env by [@&#8203;malclocke](https://github.com/malclocke) in [#&#8203;2221](urfave/cli#2221)

#### New Contributors

- [@&#8203;malclocke](https://github.com/malclocke) made their first contribution in [#&#8203;2221](urfave/cli#2221)

**Full Changelog**: <urfave/cli@v3.5.0...v3.6.0>

### [`v3.5.0`](https://github.com/urfave/cli/releases/tag/v3.5.0)

[Compare Source](urfave/cli@v3.4.1...v3.5.0)

#### What's Changed

- Update mkdocs reqs by [@&#8203;meatballhat](https://github.com/meatballhat) in [#&#8203;2190](urfave/cli#2190)
- Allow the user to stop processing flags after seeing N args by [@&#8203;adrian-thurston](https://github.com/adrian-thurston) in [#&#8203;2163](urfave/cli#2163)
- chore(deps): bump github.com/stretchr/testify from 1.10.0 to 1.11.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2194](urfave/cli#2194)
- chore(deps): bump mkdocs-material from 9.6.16 to 9.6.18 in the python-packages group by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2195](urfave/cli#2195)
- chore(deps): bump actions/setup-go from 5 to 6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2198](urfave/cli#2198)
- chore(deps): bump actions/setup-node from 4 to 5 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2199](urfave/cli#2199)
- chore(deps): bump actions/setup-python from 5 to 6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2200](urfave/cli#2200)
- chore(deps): bump github.com/stretchr/testify from 1.11.0 to 1.11.1 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2197](urfave/cli#2197)
- chore(deps): bump mkdocs-material from 9.6.18 to 9.6.19 in the python-packages group by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2201](urfave/cli#2201)
- chore(deps): bump mkdocs-material from 9.6.19 to 9.6.20 in the python-packages group by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2202](urfave/cli#2202)
- feat: add name of argument into error message when parsing fails by [@&#8203;oprudkyi](https://github.com/oprudkyi) in [#&#8203;2203](urfave/cli#2203)
- chore(deps): bump mkdocs-material from 9.6.20 to 9.6.21 in the python-packages group by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2204](urfave/cli#2204)
- add space between arguments usage by [@&#8203;dimfu](https://github.com/dimfu) in [#&#8203;2207](urfave/cli#2207)
- chore(deps): bump mkdocs-material from 9.6.21 to 9.6.22 in the python-packages group by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2213](urfave/cli#2213)
- Fix: Make DefaultText behaviour consistent by [@&#8203;dearchap](https://github.com/dearchap) in [#&#8203;2214](urfave/cli#2214)

#### New Contributors

- [@&#8203;adrian-thurston](https://github.com/adrian-thurston) made their first contribution in [#&#8203;2163](urfave/cli#2163)
- [@&#8203;oprudkyi](https://github.com/oprudkyi) made their first contribution in [#&#8203;2203](urfave/cli#2203)
- [@&#8203;dimfu](https://github.com/dimfu) made their first contribution in [#&#8203;2207](urfave/cli#2207)

**Full Changelog**: <urfave/cli@v3.4.1...v3.5.0>

### [`v3.4.1`](https://github.com/urfave/cli/releases/tag/v3.4.1)

[Compare Source](urfave/cli@v3.4.0...v3.4.1)

#### What's Changed

- Use recommended GitHub Actions runner labels by [@&#8203;meatballhat](https://github.com/meatballhat) in [#&#8203;2181](urfave/cli#2181)
- chore(deps): bump actions/checkout from 4 to 5 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;2179](urfave/cli#2179)
- Document that `v3` series is recommended for new development by [@&#8203;meatballhat](https://github.com/meatballhat) in [#&#8203;2186](urfave/cli#2186)

**Full Changelog**: <urfave/cli@v3.4.0...v3.4.1>

### [`v3.4.0`](https://github.com/urfave/cli/releases/tag/v3.4.0)

[Compare Source](urfave/cli@v3.3.9...v3.4.0)

#### What's Changed

- Export help display functions as variables to allow custom help display logic by [@&#8203;almas-x](https://github.com/almas-x) in [#&#8203;2150](urfave/cli#2150)
- Invoke OnUsageError when missing required flags by [@&#8203;MohitPanchariya](https://github.com/MohitPanchariya) in [#&#8203;2161](urfave/cli#2161)
- Fix:(issue\_2169) Allow trim space for string slice flags by [@&#8203;dearchap](https://github.com/dearchap) in [#&#8203;2171](urfave/cli#2171)
- Add example of flag groups to docs by [@&#8203;jllovet](https://github.com/jllovet) in [#&#8203;2178](urfave/cli#2178)
- Add installation instructions for gfmrun by [@&#8203;jllovet](https://github.com/jllovet) in [#&#8203;2177](urfave/cli#2177)
- Ensure public vars reference public types by [@&#8203;meatballhat](https://github.com/meatballhat) in [#&#8203;2180](urfave/cli#2180)

#### New Contributors

- [@&#8203;almas-x](https://github.com/almas-x) made their first contribution in [#&#8203;2150](urfave/cli#2150)
- [@&#8203;MohitPanchariya](https://github.com/MohitPanchariya) made their first contribution in [#&#8203;2161](urfave/cli#2161)
- [@&#8203;jllovet](https://github.com/jllovet) made their first contribution in [#&#8203;2178](urfave/cli#2178)

**Full Changelog**: <urfave/cli@v3.3.9...v3.4.0>

### [`v3.3.9`](https://github.com/urfave/cli/releases/tag/v3.3.9)

[Compare Source](urfave/cli@v3.3.8...v3.3.9)

#### What's Changed

- Fix typos in documentation for customizations and full API example by [@&#8203;amarjit03](https://github.com/amarjit03) in [#&#8203;2165](urfave/cli#2165)
- Update advanced.md by [@&#8203;thetillhoff](https://github.com/thetillhoff) in [#&#8203;2170](urfave/cli#2170)

#### New Contributors

- [@&#8203;amarjit03](https://github.com/amarjit03) made their first contribution in [#&#8203;2165](urfave/cli#2165)
- [@&#8203;thetillhoff](https://github.com/thetillhoff) made their first contribution in [#&#8203;2170](urfave/cli#2170)

**Full Changelog**: <urfave/cli@v3.3.8...v3.3.9>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xMjcuMiIsInVwZGF0ZWRJblZlciI6IjQxLjE3My4xIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbXX0=-->

Reviewed-on: https://kubara.git.onstackit.cloud/STACKIT/kubara/pulls/100
Co-authored-by: Matthias_Huether <matthias.huether_ext@external.stackit.cloud>
Co-committed-by: Matthias_Huether <matthias.huether_ext@external.stackit.cloud>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

nil pointer dereference due to HelpFlag when running in parallel

2 participants