Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: context usage in k8s code #2405

Merged
merged 93 commits into from
May 15, 2024
Merged
Show file tree
Hide file tree
Changes from 84 commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
47dd9cf
Initial commit to refactor context usage within k8s code
lucasrod16 Mar 26, 2024
8e4ff57
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Mar 26, 2024
c74e634
Simplify getImagesAndNodesForInjection
lucasrod16 Mar 26, 2024
3cdec09
Make ctx the first param in testConnection
lucasrod16 Mar 26, 2024
57c70a6
Make ctx the first param in connectToZarfServices
lucasrod16 Mar 26, 2024
418dbeb
Make ctx the first param in testGitServerReadOnly and testGitServerTa…
lucasrod16 Mar 26, 2024
f074a95
Fix component webhooks test
lucasrod16 Mar 27, 2024
d336924
Set ctx timeout for connectToCluster to 30 seconds
lucasrod16 Mar 27, 2024
e96a397
Go back to 5 second timeout to connect to cluster in pushReposToRepos…
lucasrod16 Mar 27, 2024
59c4282
Use DefaultTimeout in NewClusterSource
lucasrod16 Mar 27, 2024
2ddf7f9
Use DefaultTimeout in LoadPackageMetadata
lucasrod16 Mar 27, 2024
323c5e0
Replace 30 second timeouts with DefaultTimeout
lucasrod16 Mar 27, 2024
db44603
Fix import cycle
lucasrod16 Mar 27, 2024
b586021
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Mar 27, 2024
91dd499
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Mar 28, 2024
3192b8c
Merge branch 'main' into refactor-context-usage-in-k8s-code
AustinAbro321 Apr 4, 2024
32c4e11
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Apr 8, 2024
27c5255
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Apr 9, 2024
93716bd
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Apr 10, 2024
7f37c55
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Apr 11, 2024
4e4bff5
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Apr 12, 2024
30d4c43
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Apr 15, 2024
9558272
Merge branch 'main' into refactor-context-usage-in-k8s-code
AustinAbro321 Apr 16, 2024
f405049
Do not reuse context in destroy ops
lucasrod16 Apr 18, 2024
ca07227
Do not reuse context in connect ops
lucasrod16 Apr 18, 2024
32ca85a
Do not set timeout for DevDeploy and handle errors
lucasrod16 Apr 18, 2024
e7e2e99
Do not set timeout for init and remove comments
lucasrod16 Apr 18, 2024
d8e2a1f
Do not set timeout for connect
lucasrod16 Apr 18, 2024
3395af9
Do not set timeout for connect list
lucasrod16 Apr 18, 2024
dee36c2
Do not set timeout for internal cmds and handle errors
lucasrod16 Apr 18, 2024
5c0b771
Do not set timeout for package cmds
lucasrod16 Apr 18, 2024
0de4a3a
Handle errors
lucasrod16 Apr 18, 2024
3627ec0
Attempt to make logical improvements to WaitForPodsAndContainers
lucasrod16 Apr 18, 2024
15c3078
Fix TestConfigFile test
lucasrod16 Apr 18, 2024
55cccf8
Do not set timeout for destroy ops
lucasrod16 Apr 18, 2024
49e868e
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Apr 18, 2024
4f62bef
Do not set timeout for crane ops
lucasrod16 Apr 18, 2024
c9cdd0d
Move NewClusterOrDie to src/cmd/common
lucasrod16 Apr 18, 2024
af66e35
Do not set timeout for prune images
lucasrod16 Apr 18, 2024
a7fc662
Do not set timeout for update-gitea-pvc
lucasrod16 Apr 18, 2024
f32398f
Use NewClusterOrDie in destroy cmd
lucasrod16 Apr 18, 2024
ed89d81
Do not set timeout for helm post-render
lucasrod16 Apr 18, 2024
7e8cc18
Do not wait before checking for ns in DeleteNamespace()
lucasrod16 Apr 19, 2024
75dc048
Do not wait before finding an image for injector pod
lucasrod16 Apr 19, 2024
8af2c43
Do not wait before checking pkg secret in RecordPackageDeploymentAndW…
lucasrod16 Apr 19, 2024
d3b5e3d
Do not wait before checking for healthy cluster
lucasrod16 Apr 19, 2024
de5df64
Do not wait before checking for deleted pod
lucasrod16 Apr 19, 2024
d5eef95
Do not wait before checking for matching containers
lucasrod16 Apr 19, 2024
0c4fca6
Do not wait before checking for a service account
lucasrod16 Apr 19, 2024
3eb9a5b
Do not set timeout to fetch deployed pkg in LoadPackageMetadata()
lucasrod16 Apr 19, 2024
170d219
Use timer in select statements rather than time.After()
lucasrod16 Apr 22, 2024
8f01e27
Use timer.Reset() rather than continue in WaitForHealthyCluster()
lucasrod16 Apr 22, 2024
ab7bf59
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Apr 22, 2024
931ea7e
Merge branch 'main' into refactor-context-usage-in-k8s-code
AustinAbro321 Apr 23, 2024
a30790a
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Apr 23, 2024
c9c6db0
Update src/pkg/k8s/sa.go
lucasrod16 Apr 23, 2024
06452bf
Update src/pkg/k8s/pods.go
lucasrod16 Apr 23, 2024
1bfc325
Do not use timed out phrase in ctx.Done() cases
lucasrod16 Apr 23, 2024
9b961ba
Use timer.Reset() and continue in WaitForHealthyCluster()
lucasrod16 Apr 23, 2024
74d39db
Use const for waitDuration in WaitForHealthyCluster()
lucasrod16 Apr 23, 2024
e2479d9
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Apr 24, 2024
e10dede
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Apr 25, 2024
5be68a5
dogsled stderr
lucasrod16 Apr 25, 2024
6a53c92
sigh
lucasrod16 Apr 25, 2024
a2c418c
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Apr 25, 2024
cd1c4e7
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 Apr 26, 2024
fe66783
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 May 1, 2024
6aa2aad
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 May 3, 2024
a20fc99
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 May 6, 2024
7b8c325
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 May 7, 2024
23b1db1
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 May 7, 2024
6396af2
Use single, global context for parent and child commands
lucasrod16 May 7, 2024
42ed9f0
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 May 8, 2024
21f5415
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 May 8, 2024
29d2367
Undo trivial lint fix
lucasrod16 May 9, 2024
e98fc9a
Implement PR feedback
lucasrod16 May 9, 2024
043f28e
Use real context in bb test
lucasrod16 May 9, 2024
e7896cd
sigh
lucasrod16 May 9, 2024
daa77ef
Fix config file test
lucasrod16 May 9, 2024
df57e2f
Check container name before running state
lucasrod16 May 9, 2024
be801e2
Remove unnecessary matchedContainer boolean
lucasrod16 May 9, 2024
b25db88
Use real context in unit test
lucasrod16 May 9, 2024
7099dd6
Pass ctx to NewClusterOrDie()
lucasrod16 May 9, 2024
47b582f
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 May 10, 2024
48b8882
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 May 13, 2024
10f65ae
Apply PR feedback
lucasrod16 May 13, 2024
07e6213
Go back to using context.TODO in tests
lucasrod16 May 13, 2024
0f48bce
Missed one
lucasrod16 May 13, 2024
cb8ba56
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 May 14, 2024
e9a44b7
Back to using context.Background() in tests
lucasrod16 May 14, 2024
5ee0265
Missed a TODO
lucasrod16 May 14, 2024
fd03b66
Merge branch 'main' into refactor-context-usage-in-k8s-code
lucasrod16 May 14, 2024
fc58ef2
Merge branch 'main' into refactor-context-usage-in-k8s-code
AustinAbro321 May 15, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ repos:
args:
- "--allow-missing-credentials"
- id: detect-private-key
exclude: "src/test/e2e/30_config_file_test.go"
- id: end-of-file-fixer
exclude: site/src/content/docs/commands/.*
- id: fix-byte-order-marker
Expand Down
13 changes: 13 additions & 0 deletions src/cmd/common/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
package common

import (
"context"
"os"
"os/signal"
"syscall"

"github.com/defenseunicorns/zarf/src/config/lang"
"github.com/defenseunicorns/zarf/src/pkg/cluster"
"github.com/defenseunicorns/zarf/src/pkg/message"
)

Expand All @@ -35,3 +37,14 @@ func ExitOnInterrupt() {
}
}()
}

// NewClusterOrDie creates a new Cluster instance and waits for the cluster to be ready or throws a fatal error.
func NewClusterOrDie(ctx context.Context) *cluster.Cluster {
timeoutCtx, cancel := context.WithTimeout(ctx, cluster.DefaultTimeout)
defer cancel()
c, err := cluster.NewClusterWithWait(timeoutCtx)
if err != nil {
message.Fatalf(err, "Failed to connect to cluster")
}
return c
}
15 changes: 10 additions & 5 deletions src/cmd/connect.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ var (
Aliases: []string{"c"},
Short: lang.CmdConnectShort,
Long: lang.CmdConnectLong,
Run: func(_ *cobra.Command, args []string) {
Run: func(cmd *cobra.Command, args []string) {
var target string
if len(args) > 0 {
target = args[0]
Expand All @@ -43,12 +43,14 @@ var (
spinner.Fatalf(err, lang.CmdConnectErrCluster, err.Error())
}

ctx := cmd.Context()

var tunnel *k8s.Tunnel
if connectResourceName != "" {
zt := cluster.NewTunnelInfo(connectNamespace, connectResourceType, connectResourceName, "", connectLocalPort, connectRemotePort)
tunnel, err = c.ConnectTunnelInfo(zt)
tunnel, err = c.ConnectTunnelInfo(ctx, zt)
} else {
tunnel, err = c.Connect(target)
tunnel, err = c.Connect(ctx, target)
}
if err != nil {
spinner.Fatalf(err, lang.CmdConnectErrService, err.Error())
Expand Down Expand Up @@ -90,8 +92,11 @@ var (
Use: "list",
Aliases: []string{"l"},
Short: lang.CmdConnectListShort,
Run: func(_ *cobra.Command, _ []string) {
cluster.NewClusterOrDie().PrintConnectTable()
Run: func(cmd *cobra.Command, _ []string) {
ctx := cmd.Context()
if err := common.NewClusterOrDie(ctx).PrintConnectTable(ctx); err != nil {
message.Fatal(err, err.Error())
}
},
}
)
Expand Down
18 changes: 9 additions & 9 deletions src/cmd/destroy.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ import (
"regexp"

"github.com/defenseunicorns/pkg/helpers"
"github.com/defenseunicorns/zarf/src/cmd/common"
"github.com/defenseunicorns/zarf/src/config"
"github.com/defenseunicorns/zarf/src/config/lang"
"github.com/defenseunicorns/zarf/src/internal/packager/helm"
"github.com/defenseunicorns/zarf/src/pkg/cluster"
"github.com/defenseunicorns/zarf/src/pkg/message"
"github.com/defenseunicorns/zarf/src/pkg/utils/exec"

Expand All @@ -28,16 +28,14 @@ var destroyCmd = &cobra.Command{
Aliases: []string{"d"},
Short: lang.CmdDestroyShort,
Long: lang.CmdDestroyLong,
Run: func(_ *cobra.Command, _ []string) {
c, err := cluster.NewClusterWithWait(cluster.DefaultTimeout)
if err != nil {
message.Fatalf(err, lang.ErrNoClusterConnection)
}
Run: func(cmd *cobra.Command, _ []string) {
ctx := cmd.Context()
c := common.NewClusterOrDie(ctx)

// NOTE: If 'zarf init' failed to deploy the k3s component (or if we're looking at the wrong kubeconfig)
// there will be no zarf-state to load and the struct will be empty. In these cases, if we can find
// the scripts to remove k3s, we will still try to remove a locally installed k3s cluster
state, err := c.LoadZarfState()
state, err := c.LoadZarfState(ctx)
if err != nil {
message.WarnErr(err, lang.ErrLoadState)
}
Expand Down Expand Up @@ -74,10 +72,12 @@ var destroyCmd = &cobra.Command{
helm.Destroy(removeComponents)

// If Zarf didn't deploy the cluster, only delete the ZarfNamespace
c.DeleteZarfNamespace()
if err := c.DeleteZarfNamespace(ctx); err != nil {
message.Fatal(err, err.Error())
}

// Remove zarf agent labels and secrets from namespaces Zarf doesn't manage
c.StripZarfLabelsAndSecretsFromNamespaces()
c.StripZarfLabelsAndSecretsFromNamespaces(ctx)
}
},
}
Expand Down
37 changes: 24 additions & 13 deletions src/cmd/dev.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ var devDeployCmd = &cobra.Command{
Args: cobra.MaximumNArgs(1),
Short: lang.CmdDevDeployShort,
Long: lang.CmdDevDeployLong,
Run: func(_ *cobra.Command, args []string) {
Run: func(cmd *cobra.Command, args []string) {
pkgConfig.CreateOpts.BaseDir = common.SetBaseDirectory(args)

v := common.GetViper()
Expand All @@ -50,12 +50,12 @@ var devDeployCmd = &cobra.Command{
pkgConfig.PkgOpts.SetVariables = helpers.TransformAndMergeMap(
v.GetStringMapString(common.VPkgDeploySet), pkgConfig.PkgOpts.SetVariables, strings.ToUpper)

// Configure the packager
pkgClient := packager.NewOrDie(&pkgConfig)
defer pkgClient.ClearTempPaths()

// Create the package
if err := pkgClient.DevDeploy(); err != nil {
ctx := cmd.Context()
lucasrod16 marked this conversation as resolved.
Show resolved Hide resolved

if err := pkgClient.DevDeploy(ctx); err != nil {
message.Fatalf(err, lang.CmdDevDeployErr, err.Error())
}
},
Expand Down Expand Up @@ -209,19 +209,15 @@ var devFindImagesCmd = &cobra.Command{
Run: func(_ *cobra.Command, args []string) {
pkgConfig.CreateOpts.BaseDir = common.SetBaseDirectory(args)

// Ensure uppercase keys from viper
v := common.GetViper()

pkgConfig.CreateOpts.SetVariables = helpers.TransformAndMergeMap(
v.GetStringMapString(common.VPkgCreateSet), pkgConfig.CreateOpts.SetVariables, strings.ToUpper)
pkgConfig.PkgOpts.SetVariables = helpers.TransformAndMergeMap(
v.GetStringMapString(common.VPkgDeploySet), pkgConfig.PkgOpts.SetVariables, strings.ToUpper)

// Configure the packager
pkgClient := packager.NewOrDie(&pkgConfig)
defer pkgClient.ClearTempPaths()

// Find all the images the package might need
if _, err := pkgClient.FindImages(); err != nil {
message.Fatalf(err, lang.CmdDevFindImagesErr, err.Error())
}
Expand Down Expand Up @@ -292,8 +288,14 @@ func init() {
// use the package create config for this and reset it here to avoid overwriting the config.CreateOptions.SetVariables
devFindImagesCmd.Flags().StringToStringVar(&pkgConfig.CreateOpts.SetVariables, "set", v.GetStringMapString(common.VPkgCreateSet), lang.CmdDevFlagSet)

devFindImagesCmd.Flags().MarkDeprecated("set", "this field is replaced by create-set")
devFindImagesCmd.Flags().MarkHidden("set")
err := devFindImagesCmd.Flags().MarkDeprecated("set", "this field is replaced by create-set")
if err != nil {
message.Fatal(err, err.Error())
}
err = devFindImagesCmd.Flags().MarkHidden("set")
if err != nil {
message.Fatal(err, err.Error())
}
devFindImagesCmd.Flags().StringVarP(&pkgConfig.CreateOpts.Flavor, "flavor", "f", v.GetString(common.VPkgCreateFlavor), lang.CmdPackageCreateFlagFlavor)
devFindImagesCmd.Flags().StringToStringVar(&pkgConfig.CreateOpts.SetVariables, "create-set", v.GetStringMapString(common.VPkgCreateSet), lang.CmdDevFlagSet)
devFindImagesCmd.Flags().StringToStringVar(&pkgConfig.PkgOpts.SetVariables, "deploy-set", v.GetStringMapString(common.VPkgDeploySet), lang.CmdPackageDeployFlagSet)
Expand Down Expand Up @@ -341,7 +343,16 @@ func bindDevGenerateFlags(_ *viper.Viper) {
generateFlags.StringVar(&pkgConfig.GenerateOpts.Output, "output-directory", "", "Output directory for the generated zarf.yaml")
generateFlags.StringVar(&pkgConfig.FindImagesOpts.KubeVersionOverride, "kube-version", "", lang.CmdDevFlagKubeVersion)

devGenerateCmd.MarkFlagRequired("url")
devGenerateCmd.MarkFlagRequired("version")
devGenerateCmd.MarkFlagRequired("output-directory")
err := devGenerateCmd.MarkFlagRequired("url")
if err != nil {
message.Fatal(err, err.Error())
}
err = devGenerateCmd.MarkFlagRequired("version")
if err != nil {
message.Fatal(err, err.Error())
}
err = devGenerateCmd.MarkFlagRequired("output-directory")
if err != nil {
message.Fatal(err, err.Error())
}
}
9 changes: 4 additions & 5 deletions src/cmd/initialize.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ var initCmd = &cobra.Command{
Short: lang.CmdInitShort,
Long: lang.CmdInitLong,
Example: lang.CmdInitExample,
Run: func(_ *cobra.Command, _ []string) {
Run: func(cmd *cobra.Command, _ []string) {
zarfLogo := message.GetLogo()
_, _ = fmt.Fprintln(os.Stderr, zarfLogo)

Expand All @@ -58,17 +58,16 @@ var initCmd = &cobra.Command{
message.Fatal(err, err.Error())
}

// Ensure uppercase keys from viper
v := common.GetViper()
pkgConfig.PkgOpts.SetVariables = helpers.TransformAndMergeMap(
v.GetStringMapString(common.VPkgDeploySet), pkgConfig.PkgOpts.SetVariables, strings.ToUpper)

// Configure the packager
pkgClient := packager.NewOrDie(&pkgConfig, packager.WithSource(src))
defer pkgClient.ClearTempPaths()

// Deploy everything
err = pkgClient.Deploy()
ctx := cmd.Context()

err = pkgClient.Deploy(ctx)
if err != nil {
message.Fatal(err, err.Error())
}
Expand Down
33 changes: 20 additions & 13 deletions src/cmd/internal.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import (
"github.com/defenseunicorns/zarf/src/config/lang"
"github.com/defenseunicorns/zarf/src/internal/agent"
"github.com/defenseunicorns/zarf/src/internal/packager/git"
"github.com/defenseunicorns/zarf/src/pkg/cluster"
"github.com/defenseunicorns/zarf/src/pkg/message"
"github.com/defenseunicorns/zarf/src/types"
"github.com/invopop/jsonschema"
Expand Down Expand Up @@ -194,15 +193,17 @@ var createReadOnlyGiteaUser = &cobra.Command{
Use: "create-read-only-gitea-user",
Short: lang.CmdInternalCreateReadOnlyGiteaUserShort,
Long: lang.CmdInternalCreateReadOnlyGiteaUserLong,
Run: func(_ *cobra.Command, _ []string) {
Run: func(cmd *cobra.Command, _ []string) {
ctx := cmd.Context()

// Load the state so we can get the credentials for the admin git user
state, err := cluster.NewClusterOrDie().LoadZarfState()
state, err := common.NewClusterOrDie(ctx).LoadZarfState(ctx)
if err != nil {
message.WarnErr(err, lang.ErrLoadState)
}

// Create the non-admin user
if err = git.New(state.GitServer).CreateReadOnlyUser(); err != nil {
if err = git.New(state.GitServer).CreateReadOnlyUser(ctx); err != nil {
message.WarnErr(err, lang.CmdInternalCreateReadOnlyGiteaUserErr)
}
},
Expand All @@ -212,24 +213,26 @@ var createPackageRegistryToken = &cobra.Command{
Use: "create-artifact-registry-token",
Short: lang.CmdInternalArtifactRegistryGiteaTokenShort,
Long: lang.CmdInternalArtifactRegistryGiteaTokenLong,
Run: func(_ *cobra.Command, _ []string) {
// Load the state so we can get the credentials for the admin git user
c := cluster.NewClusterOrDie()
state, err := c.LoadZarfState()
Run: func(cmd *cobra.Command, _ []string) {
ctx := cmd.Context()
c := common.NewClusterOrDie(ctx)
state, err := c.LoadZarfState(ctx)
if err != nil {
message.WarnErr(err, lang.ErrLoadState)
}

// If we are setup to use an internal artifact server, create the artifact registry token
if state.ArtifactServer.InternalServer {
token, err := git.New(state.GitServer).CreatePackageRegistryToken()
token, err := git.New(state.GitServer).CreatePackageRegistryToken(ctx)
if err != nil {
message.WarnErr(err, lang.CmdInternalArtifactRegistryGiteaTokenErr)
}

state.ArtifactServer.PushToken = token.Sha1

c.SaveZarfState(state)
if err := c.SaveZarfState(ctx, state); err != nil {
message.Fatal(err, err.Error())
}
}
},
}
Expand All @@ -238,10 +241,11 @@ var updateGiteaPVC = &cobra.Command{
Use: "update-gitea-pvc",
Short: lang.CmdInternalUpdateGiteaPVCShort,
Long: lang.CmdInternalUpdateGiteaPVCLong,
Run: func(_ *cobra.Command, _ []string) {
Run: func(cmd *cobra.Command, _ []string) {
ctx := cmd.Context()

// There is a possibility that the pvc does not yet exist and Gitea helm chart should create it
helmShouldCreate, err := git.UpdateGiteaPVC(rollback)
helmShouldCreate, err := git.UpdateGiteaPVC(ctx, rollback)
if err != nil {
message.WarnErr(err, lang.CmdInternalUpdateGiteaPVCErr)
}
Expand Down Expand Up @@ -294,6 +298,9 @@ func addHiddenDummyFlag(cmd *cobra.Command, flagDummy string) {
if cmd.PersistentFlags().Lookup(flagDummy) == nil {
var dummyStr string
cmd.PersistentFlags().StringVar(&dummyStr, flagDummy, "", "")
cmd.PersistentFlags().MarkHidden(flagDummy)
err := cmd.PersistentFlags().MarkHidden(flagDummy)
if err != nil {
message.Fatal(err, err.Error())
}
}
}
Loading
Loading