Repository: kubernetes-sigs/security-profiles-operator
Pull request #1267 (2022-10-31 23:09:05)

build(deps): bump github.com/urfave/cli/v2 from 2.20.2 to 2.23.0
Bumps [github.com/urfave/cli/v2](https://github.com/urfave/cli) from 2.20.2 to 2.23.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/urfave/cli/releases">github.com/urfave/cli/v2's releases</a>.</em></p>
<blockquote>
<h2>v2.23.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Feature:(issue_269) Allow external package flag definitions by <a href="https://github.com/dearchap"><code>@​dearchap</code></a> in <a href="https://github-redirect.dependabot.com/urfave/cli/pull/1540">urfave/cli#1540</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/urfave/cli/compare/v2.22.0...v2.23.0">https://github.com/urfave/cli/compare/v2.22.0...v2.23.0</a></p>
<h2>v2.22.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Feature:(issue_1090): Add unwrap for ExitCoder by <a href="https://github.com/dearchap"><code>@​dearchap</code></a> in <a href="https://github-redirect.dependabot.com/urfave/cli/pull/1545">urfave/cli#1545</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/urfave/cli/compare/v2.21.0...v2.22.0">https://github.com/urfave/cli/compare/v2.21.0...v2.22.0</a></p>
<h2>v2.21.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Feature: (issue_1451) customized slice flag separator by <a href="https://github.com/FGYFFFF"><code>@​FGYFFFF</code></a> in <a href="https://github-redirect.dependabot.com/urfave/cli/pull/1546">urfave/cli#1546</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/urfave/cli/compare/v2.20.5...v2.21.0">https://github.com/urfave/cli/compare/v2.20.5...v2.21.0</a></p>
<h2>v2.20.5</h2>
<h2>What's Changed</h2>
<ul>
<li>Fix:(issue_1548) Check root before run default cmd by <a href="https://github.com/smalnote"><code>@​smalnote</code></a> in <a href="https://github-redirect.dependabot.com/urfave/cli/pull/1549">urfave/cli#1549</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/smalnote"><code>@​smalnote</code></a> made their first contribution in <a href="https://github-redirect.dependabot.com/urfave/cli/pull/1549">urfave/cli#1549</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/urfave/cli/compare/v2.20.4...v2.20.5">https://github.com/urfave/cli/compare/v2.20.4...v2.20.5</a></p>
<h2>v2.20.4</h2>
<h2>What's Changed</h2>
<ul>
<li>Spelling by <a href="https://github.com/jsoref"><code>@​jsoref</code></a> in <a href="https://github-redirect.dependabot.com/urfave/cli/pull/1543">urfave/cli#1543</a></li>
<li>Documentation:(issue_786) Add docs for flag validation by <a href="https://github.com/dearchap"><code>@​dearchap</code></a> in <a href="https://github-redirect.dependabot.com/urfave/cli/pull/1544">urfave/cli#1544</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/jsoref"><code>@​jsoref</code></a> made their first contribution in <a href="https://github-redirect.dependabot.com/urfave/cli/pull/1543">urfave/cli#1543</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/urfave/cli/compare/v2.20.3...v2.20.4">https://github.com/urfave/cli/compare/v2.20.3...v2.20.4</a></p>
<h2>v2.20.3</h2>
<h2>What's Changed</h2>
<ul>
<li>Docs:(issue_1276) Make destination/value/default text clear by <a href="https://github.com/dearchap"><code>@​dearchap</code></a> in <a href="https://github-redirect.dependabot.com/urfave/cli/pull/1539">urfave/cli#1539</a></li>
<li>Fix:(issue_1263) FlagNames should return names set via env as well by <a href="https://github.com/dearchap"><code>@​dearchap</code></a> in <a href="https://github-redirect.dependabot.com/urfave/cli/pull/1537">urfave/cli#1537</a></li>
<li>Fix:(issue_1288). Add windows specific env format by <a href="https://github.com/dearchap"><code>@​dearchap</code></a> in <a href="https://github-redirect.dependabot.com/urfave/cli/pull/1538">urfave/cli#1538</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/urfave/cli/compare/v2.20.2...v2.20.3">https://github.com/urfave/cli/compare/v2.20.2...v2.20.3</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/urfave/cli/commit/ae8d932413452718007ff70a4e50ccf9729afd87"><code>ae8d932</code></a> Feature:(issue_269) Allow external package flag definitions (<a href="https://github-redirect.dependabot.com/urfave/cli/issues/1540">#1540</a>)</li>
<li><a href="https://github.com/urfave/cli/commit/c344b46a29ea0dc6dfe6caf13e4a5c3d02f4b3bb"><code>c344b46</code></a> Feature:(issue_1090): Add unwrap for ExitCoder (<a href="https://github-redirect.dependabot.com/urfave/cli/issues/1545">#1545</a>)</li>
<li><a href="https://github.com/urfave/cli/commit/63cb372cce16411e154f856aa8af0d0f8d6571f7"><code>63cb372</code></a> Feature: (issue_1451) customized slice flag separator (<a href="https://github-redirect.dependabot.com/urfave/cli/issues/1546">#1546</a>)</li>
<li><a href="https://github.com/urfave/cli/commit/82bdf5f42ea56ac1ef4ee3083fd733a27cce32cd"><code>82bdf5f</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/urfave/cli/issues/1549">#1549</a> from smalnote/smalnote/issue_1548</li>
<li><a href="https://github.com/urfave/cli/commit/7563894fded040dad9477edcaa3e15886bd25d80"><code>7563894</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/urfave/cli/issues/1544">#1544</a> from dearchap/issue_786</li>
<li><a href="https://github.com/urfave/cli/commit/ba96587f56746c8ff8a88d1be618db854c9098c9"><code>ba96587</code></a> Fix:(issue_1548) Check root before run default cmd</li>
<li><a href="https://github.com/urfave/cli/commit/de73d1b341292ee628f57da0ffc6a478fb083503"><code>de73d1b</code></a> Update docs/v2/examples/flags.md</li>
<li><a href="https://github.com/urfave/cli/commit/7732a512f9065743afd7f32da537a3da50e82238"><code>7732a51</code></a> Spelling (<a href="https://github-redirect.dependabot.com/urfave/cli/issues/1543">#1543</a>)</li>
<li><a href="https://github.com/urfave/cli/commit/0dca2d8969c31af7a9890fdde22b85e2b8ba4da9"><code>0dca2d8</code></a> Add arg</li>
<li><a href="https://github.com/urfave/cli/commit/9d0fdbe28965ff6e530bb1e12950d922631f8c17"><code>9d0fdbe</code></a> Add fmt import</li>
<li>Additional commits viewable in <a href="https://github.com/urfave/cli/compare/v2.20.2...v2.23.0">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/urfave/cli/v2&package-manager=go_modules&previous-version=2.20.2&new-version=2.23.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>

k8s-ci-robot: @dependabot[bot]: Adding the "do-not-merge/release-note-label-needed" label because no release-note block was detected, please follow our [release note process](https://git.k8s.io/community/contributors/guide/release-notes.md) to remove it.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
</details>
k8s-ci-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubernetes-sigs/security-profiles-operator/pull/1267#" title="Author self-approved">dependabot[bot]</a>*
**Once this PR has been reviewed and has the lgtm label**, please assign jaormx for approval by writing `/assign @jaormx` in a comment. For more information see [the Kubernetes Code Review Process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process).

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubernetes-sigs%2Fsecurity-profiles-operator).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/kubernetes-sigs/security-profiles-operator/blob/main/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["jaormx"]} -->
k8s-ci-robot: Hi @dependabot[bot]. Thanks for your PR.

I'm waiting for a [kubernetes-sigs](https://github.com/orgs/kubernetes-sigs/people) member to verify that this patch is reasonable to test. If it is, they should reply with `/ok-to-test` on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should [join the org](https://git.k8s.io/community/community-membership.md#member) to skip this step.

Once the patch is verified, the new status will be reflected by the `ok-to-test` label.

I understand the commands that are listed [here](https://go.k8s.io/bot-commands?repo=kubernetes-sigs%2Fsecurity-profiles-operator).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
</details>

codecov-commenter: # [Codecov](https://codecov.io/gh/kubernetes-sigs/security-profiles-operator/pull/1267?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) Report
> Merging [#1267](https://codecov.io/gh/kubernetes-sigs/security-profiles-operator/pull/1267?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) (bfcc961) into [main](https://codecov.io/gh/kubernetes-sigs/security-profiles-operator/commit/b5155b82c14b0184c242f663b02badd36c8a25e0?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) (b5155b8) will **not change** coverage.
> The diff coverage is `n/a`.

<details><summary>Additional details and impacted files</summary>


```diff
@@           Coverage Diff           @@
##             main    #1267   +/-   ##
=======================================
  Coverage   45.34%   45.34%           
=======================================
  Files          48       48           
  Lines        5376     5376           
=======================================
  Hits         2438     2438           
  Misses       2818     2818           
  Partials      120      120           
```

</details>
saschagrunert: @dependabot rebase
k8s-ci-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubernetes-sigs/security-profiles-operator/pull/1267#" title="Author self-approved">dependabot[bot]</a>*
**Once this PR has been reviewed and has the lgtm label**, please ask for approval from jhrozek by writing `/assign @jhrozek` in a comment. For more information see [the Kubernetes Code Review Process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process).

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubernetes-sigs%2Fsecurity-profiles-operator).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/kubernetes-sigs/security-profiles-operator/blob/main/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["jhrozek"]} -->
k8s-ci-robot: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubernetes-sigs/security-profiles-operator/pull/1267#" title="Author self-approved">dependabot[bot]</a>*, *<a href="https://github.com/kubernetes-sigs/security-profiles-operator/pull/1267#pullrequestreview-1167010692" title="Approved">saschagrunert</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubernetes-sigs%2Fsecurity-profiles-operator).

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

<details >
Needs approval from an approver in each of these files:

- ~~[OWNERS](https://github.com/kubernetes-sigs/security-profiles-operator/blob/main/OWNERS)~~ [saschagrunert]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->

Patch:
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 561e3cce9..fa16d1e4a 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -35,7 +35,7 @@ jobs:
     steps:
       - uses: actions/checkout@v3
       - uses: cachix/install-nix-action@daddc62a2e67d1decb56e028c9fa68344b9b7c2a
-      - uses: cachix/cachix-action@75d46f58e6608ffed5276b4aa8de78d300911526
+      - uses: cachix/cachix-action@6a9a34cdd93d0ae4b4b59fd678660efb08109f2f
         with:
           name: security-profiles-operator
           authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
@@ -50,7 +50,7 @@ jobs:
           go-version: ${{ env.GO_VERSION }}
       - uses: actions/checkout@v3
       - uses: cachix/install-nix-action@daddc62a2e67d1decb56e028c9fa68344b9b7c2a
-      - uses: cachix/cachix-action@75d46f58e6608ffed5276b4aa8de78d300911526
+      - uses: cachix/cachix-action@6a9a34cdd93d0ae4b4b59fd678660efb08109f2f
         with:
           name: security-profiles-operator
           authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
@@ -94,7 +94,7 @@ jobs:
           # Only load on PR builds
           load: ${{ github.ref != 'refs/heads/main' }}
       - name: Run container image vulnerability scanner
-        uses: aquasecurity/trivy-action@d63413b0a4a4482237085319f7f4a1ce99a8f2ac
+        uses: aquasecurity/trivy-action@9ab158e8597f3b310480b9a69402b419bc03dbd5
         with:
           image-ref: ${{ fromJSON(steps.meta.outputs.json).tags[0] }}
           format: 'table'
@@ -139,7 +139,7 @@ jobs:
           labels: ${{ steps.meta.outputs.labels }}
           load: true
       - name: Run container image vulnerability scanner
-        uses: aquasecurity/trivy-action@d63413b0a4a4482237085319f7f4a1ce99a8f2ac
+        uses: aquasecurity/trivy-action@9ab158e8597f3b310480b9a69402b419bc03dbd5
         with:
           image-ref: ${{ fromJSON(steps.meta.outputs.json).tags[0] }}
           format: 'table'
@@ -185,7 +185,7 @@ jobs:
           labels: ${{ steps.meta.outputs.labels }}
           load: true
       - name: Run container image vulnerability scanner
-        uses: aquasecurity/trivy-action@d63413b0a4a4482237085319f7f4a1ce99a8f2ac
+        uses: aquasecurity/trivy-action@9ab158e8597f3b310480b9a69402b419bc03dbd5
         with:
           image-ref: ${{ fromJSON(steps.meta.outputs.json).tags[0] }}
           format: 'table'
diff --git a/go.mod b/go.mod
index 476f1ac2f..b8aaab118 100644
--- a/go.mod
+++ b/go.mod
@@ -21,7 +21,7 @@ require (
 	github.com/prometheus/client_model v0.3.0
 	github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921
 	github.com/stretchr/testify v1.8.1
-	github.com/urfave/cli/v2 v2.20.2
+	github.com/urfave/cli/v2 v2.23.0
 	golang.org/x/net v0.0.0-20220909164309-bea034e7d591
 	golang.org/x/sync v0.0.0-20220907140024-f12130a52804
 	google.golang.org/grpc v1.50.1
diff --git a/go.sum b/go.sum
index ead81967b..472de2f2f 100644
--- a/go.sum
+++ b/go.sum
@@ -1356,8 +1356,8 @@ github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtX
 github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
 github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
 github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ=
-github.com/urfave/cli/v2 v2.20.2 h1:dKA0LUjznZpwmmbrc0pOgcLTEilnHeM8Av9Yng77gHM=
-github.com/urfave/cli/v2 v2.20.2/go.mod h1:1CNUng3PtjQMtRzJO4FMXBQvkGtuYRxxiR9xMa7jMwI=
+github.com/urfave/cli/v2 v2.23.0 h1:pkly7gKIeYv3olPAeNajNpLjeJrmTPYCoZWaV+2VfvE=
+github.com/urfave/cli/v2 v2.23.0/go.mod h1:1CNUng3PtjQMtRzJO4FMXBQvkGtuYRxxiR9xMa7jMwI=
 github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA=
 github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
 github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus=
diff --git a/vendor/github.com/urfave/cli/v2/app.go b/vendor/github.com/urfave/cli/v2/app.go
index 24704e8f7..3fb5c169a 100644
--- a/vendor/github.com/urfave/cli/v2/app.go
+++ b/vendor/github.com/urfave/cli/v2/app.go
@@ -8,6 +8,7 @@ import (
 	"os"
 	"path/filepath"
 	"sort"
+	"strings"
 	"time"
 )
 
@@ -20,6 +21,7 @@ var (
 	errInvalidActionType    = NewExitError("ERROR invalid Action type. "+
 		fmt.Sprintf("Must be `func(*Context`)` or `func(*Context) error).  %s", contactSysadmin)+
 		fmt.Sprintf("See %s", appActionDeprecationURL), 2)
+	ignoreFlagPrefix = "test." // this is to ignore test flags when adding flags from other packages
 
 	SuggestFlag               SuggestFlagFunc    = suggestFlag
 	SuggestCommand            SuggestCommandFunc = suggestCommand
@@ -103,6 +105,8 @@ type App struct {
 	// cli.go uses text/template to render templates. You can
 	// render custom help text by setting this variable.
 	CustomAppHelpTemplate string
+	// SliceFlagSeparator is used to customize the separator for SliceFlag, the default is ","
+	SliceFlagSeparator string
 	// Boolean to enable short-option handling so user can combine several
 	// single-character bool arguments into one
 	// i.e. foobar -o -v -> foobar -ov
@@ -195,6 +199,14 @@ func (a *App) Setup() {
 		a.ErrWriter = os.Stderr
 	}
 
+	// add global flags added by other packages
+	flag.VisitAll(func(f *flag.Flag) {
+		// skip test flags
+		if !strings.HasPrefix(f.Name, ignoreFlagPrefix) {
+			a.Flags = append(a.Flags, &extFlag{f})
+		}
+	})
+
 	var newCommands []*Command
 
 	for _, c := range a.Commands {
@@ -241,6 +253,10 @@ func (a *App) Setup() {
 	if a.Metadata == nil {
 		a.Metadata = make(map[string]interface{})
 	}
+
+	if len(a.SliceFlagSeparator) != 0 {
+		defaultSliceFlagSeparator = a.SliceFlagSeparator
+	}
 }
 
 func (a *App) newRootCommand() *Command {
diff --git a/vendor/github.com/urfave/cli/v2/command.go b/vendor/github.com/urfave/cli/v2/command.go
index a63048dbd..c5939d4ec 100644
--- a/vendor/github.com/urfave/cli/v2/command.go
+++ b/vendor/github.com/urfave/cli/v2/command.go
@@ -252,7 +252,7 @@ func (c *Command) Run(cCtx *Context, arguments ...string) (err error) {
 				}
 			}
 		}
-	} else if cCtx.App.DefaultCommand != "" {
+	} else if c.isRoot && cCtx.App.DefaultCommand != "" {
 		if dc := cCtx.App.Command(cCtx.App.DefaultCommand); dc != c {
 			cmd = dc
 		}
diff --git a/vendor/github.com/urfave/cli/v2/context.go b/vendor/github.com/urfave/cli/v2/context.go
index 315c2fb59..dbf50e495 100644
--- a/vendor/github.com/urfave/cli/v2/context.go
+++ b/vendor/github.com/urfave/cli/v2/context.go
@@ -82,7 +82,27 @@ func (cCtx *Context) IsSet(name string) bool {
 func (cCtx *Context) LocalFlagNames() []string {
 	var names []string
 	cCtx.flagSet.Visit(makeFlagNameVisitor(&names))
-	return names
+	// Check the flags which have been set via env or file
+	if cCtx.Command != nil && cCtx.Command.Flags != nil {
+		for _, f := range cCtx.Command.Flags {
+			if f.IsSet() {
+				names = append(names, f.Names()...)
+			}
+		}
+	}
+
+	// Sort out the duplicates since flag could be set via multiple
+	// paths
+	m := map[string]struct{}{}
+	var unames []string
+	for _, name := range names {
+		if _, ok := m[name]; !ok {
+			m[name] = struct{}{}
+			unames = append(unames, name)
+		}
+	}
+
+	return unames
 }
 
 // FlagNames returns a slice of flag names used by the this context and all of
@@ -90,7 +110,7 @@ func (cCtx *Context) LocalFlagNames() []string {
 func (cCtx *Context) FlagNames() []string {
 	var names []string
 	for _, pCtx := range cCtx.Lineage() {
-		pCtx.flagSet.Visit(makeFlagNameVisitor(&names))
+		names = append(names, pCtx.LocalFlagNames()...)
 	}
 	return names
 }
diff --git a/vendor/github.com/urfave/cli/v2/errors.go b/vendor/github.com/urfave/cli/v2/errors.go
index 8f641fb64..a818727db 100644
--- a/vendor/github.com/urfave/cli/v2/errors.go
+++ b/vendor/github.com/urfave/cli/v2/errors.go
@@ -83,7 +83,7 @@ type ExitCoder interface {
 
 type exitError struct {
 	exitCode int
-	message  interface{}
+	err      error
 }
 
 // NewExitError calls Exit to create a new ExitCoder.
@@ -98,23 +98,38 @@ func NewExitError(message interface{}, exitCode int) ExitCoder {
 //
 // This is the simplest way to trigger a non-zero exit code for an App without
 // having to call os.Exit manually. During testing, this behavior can be avoided
-// by overiding the ExitErrHandler function on an App or the package-global
+// by overriding the ExitErrHandler function on an App or the package-global
 // OsExiter function.
 func Exit(message interface{}, exitCode int) ExitCoder {
+	var err error
+
+	switch e := message.(type) {
+	case ErrorFormatter:
+		err = fmt.Errorf("%+v", message)
+	case error:
+		err = e
+	default:
+		err = fmt.Errorf("%+v", message)
+	}
+
 	return &exitError{
-		message:  message,
+		err:      err,
 		exitCode: exitCode,
 	}
 }
 
 func (ee *exitError) Error() string {
-	return fmt.Sprintf("%v", ee.message)
+	return ee.err.Error()
 }
 
 func (ee *exitError) ExitCode() int {
 	return ee.exitCode
 }
 
+func (ee *exitError) Unwrap() error {
+	return ee.err
+}
+
 // HandleExitCoder handles errors implementing ExitCoder by printing their
 // message and calling OsExiter with the given exit code.
 //
diff --git a/vendor/github.com/urfave/cli/v2/fish.go b/vendor/github.com/urfave/cli/v2/fish.go
index eec3253cd..909dfc5a2 100644
--- a/vendor/github.com/urfave/cli/v2/fish.go
+++ b/vendor/github.com/urfave/cli/v2/fish.go
@@ -98,7 +98,7 @@ func (a *App) prepareFishCommands(commands []*Command, allCommands *[]string, pr
 			a.prepareFishFlags(command.VisibleFlags(), command.Names())...,
 		)
 
-		// recursevly iterate subcommands
+		// recursively iterate subcommands
 		if len(command.Subcommands) > 0 {
 			completions = append(
 				completions,
diff --git a/vendor/github.com/urfave/cli/v2/flag.go b/vendor/github.com/urfave/cli/v2/flag.go
index a6fea1c49..b66a75da5 100644
--- a/vendor/github.com/urfave/cli/v2/flag.go
+++ b/vendor/github.com/urfave/cli/v2/flag.go
@@ -5,6 +5,7 @@ import (
 	"flag"
 	"fmt"
 	"io/ioutil"
+	"os"
 	"regexp"
 	"runtime"
 	"strings"
@@ -14,6 +15,8 @@ import (
 
 const defaultPlaceholder = "value"
 
+var defaultSliceFlagSeparator = ","
+
 var (
 	slPfx = fmt.Sprintf("sl:::%d:::", time.Now().UTC().UnixNano())
 
@@ -268,19 +271,23 @@ func prefixedNames(names []string, placeholder string) string {
 	return prefixed
 }
 
-func withEnvHint(envVars []string, str string) string {
-	envText := ""
+func envFormat(envVars []string, prefix, sep, suffix string) string {
 	if len(envVars) > 0 {
-		prefix := "$"
-		suffix := ""
-		sep := ", $"
-		if runtime.GOOS == "windows" {
-			prefix = "%"
-			suffix = "%"
-			sep = "%, %"
-		}
+		return fmt.Sprintf(" [%s%s%s]", prefix, strings.Join(envVars, sep), suffix)
+	}
+	return ""
+}
 
-		envText = fmt.Sprintf(" [%s%s%s]", prefix, strings.Join(envVars, sep), suffix)
+func defaultEnvFormat(envVars []string) string {
+	return envFormat(envVars, "$", ", $", "")
+}
+
+func withEnvHint(envVars []string, str string) string {
+	envText := ""
+	if runtime.GOOS != "windows" || os.Getenv("PSHOME") != "" {
+		envText = defaultEnvFormat(envVars)
+	} else {
+		envText = envFormat(envVars, "%", "%, %", "%")
 	}
 	return str + envText
 }
@@ -373,5 +380,5 @@ func flagFromEnvOrFile(envVars []string, filePath string) (value string, fromWhe
 }
 
 func flagSplitMultiValues(val string) []string {
-	return strings.Split(val, ",")
+	return strings.Split(val, defaultSliceFlagSeparator)
 }
diff --git a/vendor/github.com/urfave/cli/v2/flag_ext.go b/vendor/github.com/urfave/cli/v2/flag_ext.go
new file mode 100644
index 000000000..64da59ea9
--- /dev/null
+++ b/vendor/github.com/urfave/cli/v2/flag_ext.go
@@ -0,0 +1,48 @@
+package cli
+
+import "flag"
+
+type extFlag struct {
+	f *flag.Flag
+}
+
+func (e *extFlag) Apply(fs *flag.FlagSet) error {
+	fs.Var(e.f.Value, e.f.Name, e.f.Usage)
+	return nil
+}
+
+func (e *extFlag) Names() []string {
+	return []string{e.f.Name}
+}
+
+func (e *extFlag) IsSet() bool {
+	return false
+}
+
+func (e *extFlag) String() string {
+	return FlagStringer(e)
+}
+
+func (e *extFlag) IsVisible() bool {
+	return true
+}
+
+func (e *extFlag) TakesValue() bool {
+	return false
+}
+
+func (e *extFlag) GetUsage() string {
+	return e.f.Usage
+}
+
+func (e *extFlag) GetValue() string {
+	return e.f.Value.String()
+}
+
+func (e *extFlag) GetDefaultText() string {
+	return e.f.DefValue
+}
+
+func (e *extFlag) GetEnvVars() []string {
+	return nil
+}
diff --git a/vendor/github.com/urfave/cli/v2/godoc-current.txt b/vendor/github.com/urfave/cli/v2/godoc-current.txt
index 80344eced..fadb7f862 100644
--- a/vendor/github.com/urfave/cli/v2/godoc-current.txt
+++ b/vendor/github.com/urfave/cli/v2/godoc-current.txt
@@ -316,6 +316,8 @@ type App struct {
 	// cli.go uses text/template to render templates. You can
 	// render custom help text by setting this variable.
 	CustomAppHelpTemplate string
+	// SliceFlagSeparator is used to customize the separator for SliceFlag, the default is ","
+	SliceFlagSeparator string
 	// Boolean to enable short-option handling so user can combine several
 	// single-character bool arguments into one
 	// i.e. foobar -o -v -> foobar -ov
@@ -841,7 +843,7 @@ func Exit(message interface{}, exitCode int) ExitCoder
 
     This is the simplest way to trigger a non-zero exit code for an App
     without having to call os.Exit manually. During testing, this behavior
-    can be avoided by overiding the ExitErrHandler function on an App or the
+    can be avoided by overriding the ExitErrHandler function on an App or the
     package-global OsExiter function.
 
 func NewExitError(message interface{}, exitCode int) ExitCoder
diff --git a/vendor/github.com/urfave/cli/v2/help.go b/vendor/github.com/urfave/cli/v2/help.go
index 466ff3479..6dc593b34 100644
--- a/vendor/github.com/urfave/cli/v2/help.go
+++ b/vendor/github.com/urfave/cli/v2/help.go
@@ -60,7 +60,7 @@ var helpCommand = &Command{
 		}
 
 		// Case 1 & 2
-		// Special case when running help on main app itself as opposed to indivdual
+		// Special case when running help on main app itself as opposed to individual
 		// commands/subcommands
 		if cCtx.parentContext.App == nil {
 			_ = ShowAppHelp(cCtx)
@@ -188,7 +188,7 @@ func printFlagSuggestions(lastArg string, flags []Flag, writer io.Writer) {
 			// this will get total count utf8 letters in flag name
 			count := utf8.RuneCountInString(name)
 			if count > 2 {
-				count = 2 // resuse this count to generate single - or -- in flag completion
+				count = 2 // reuse this count to generate single - or -- in flag completion
 			}
 			// if flag name has more than one utf8 letter and last argument in cli has -- prefix then
 			// skip flag completion for short flags example -v or -x
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 79e0c8d5d..f118c511b 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -566,7 +566,7 @@ github.com/spf13/pflag
 github.com/stretchr/testify/assert
 github.com/stretchr/testify/require
 github.com/stretchr/testify/suite
-# github.com/urfave/cli/v2 v2.20.2
+# github.com/urfave/cli/v2 v2.23.0
 ## explicit; go 1.18
 github.com/urfave/cli/v2
 # github.com/vbatts/tar-split v0.11.2


Test patch:
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index bce2155bb..19be548b1 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -29,11 +29,11 @@ jobs:
     runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@v3
-      - uses: github/codeql-action/init@cc7986c02bac29104a72998e67239bb5ee2ee110
+      - uses: github/codeql-action/init@18fe527fa8b29f134bb91f32f1a5dc5abb15ed7f
         with:
           languages: go
-      - uses: github/codeql-action/autobuild@cc7986c02bac29104a72998e67239bb5ee2ee110
-      - uses: github/codeql-action/analyze@cc7986c02bac29104a72998e67239bb5ee2ee110
+      - uses: github/codeql-action/autobuild@18fe527fa8b29f134bb91f32f1a5dc5abb15ed7f
+      - uses: github/codeql-action/analyze@18fe527fa8b29f134bb91f32f1a5dc5abb15ed7f
 
   coverage:
     runs-on: ubuntu-22.04