Skip to content

Commit 3fe8b25

Browse files
committed
use Config instead of global RunContext is present
1 parent 8682a78 commit 3fe8b25

File tree

20 files changed

+115
-85
lines changed

20 files changed

+115
-85
lines changed

cmd/skaffold/app/cmd/cmd.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"os"
2424
"strings"
2525

26+
sErrors "github.com/GoogleContainerTools/skaffold/pkg/skaffold/errors"
2627
"github.com/sirupsen/logrus"
2728
"github.com/spf13/cobra"
2829
"github.com/spf13/pflag"
@@ -265,12 +266,12 @@ func setUpLogs(stdErr io.Writer, level string, timestamp bool) error {
265266
return nil
266267
}
267268

268-
func alwaysSucceedWhenCancelled(ctx context.Context, err error) error {
269+
func alwaysSucceedWhenCancelled(ctx context.Context, cfg sErrors.Config, err error) error {
269270
// if the context was cancelled act as if all is well
270-
if err != nil && ctx.Err() == context.Canceled {
271+
if err == nil || ctx.Err() == context.Canceled {
271272
return nil
272273
}
273-
return err
274+
return sErrors.ShowAIError(cfg, err)
274275
}
275276

276277
func isHouseKeepingMessagesAllowed(cmd *cobra.Command) bool {

cmd/skaffold/app/cmd/commands.go

+2-12
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ import (
2323

2424
"github.com/spf13/cobra"
2525
"github.com/spf13/pflag"
26-
27-
sErrors "github.com/GoogleContainerTools/skaffold/pkg/skaffold/errors"
2826
)
2927

3028
// Builder is used to build cobra commands.
@@ -107,7 +105,7 @@ func (b *builder) Hidden() Builder {
107105
func (b *builder) ExactArgs(argCount int, action func(context.Context, io.Writer, []string) error) *cobra.Command {
108106
b.cmd.Args = cobra.ExactArgs(argCount)
109107
b.cmd.RunE = func(_ *cobra.Command, args []string) error {
110-
err := handleWellKnownErrors(action(b.cmd.Context(), b.cmd.OutOrStdout(), args))
108+
err := action(b.cmd.Context(), b.cmd.OutOrStdout(), args)
111109
// clean up server at end of the execution since post run hooks are only executed if
112110
// RunE is successful
113111
if shutdownAPIServer != nil {
@@ -121,7 +119,7 @@ func (b *builder) ExactArgs(argCount int, action func(context.Context, io.Writer
121119
func (b *builder) NoArgs(action func(context.Context, io.Writer) error) *cobra.Command {
122120
b.cmd.Args = cobra.NoArgs
123121
b.cmd.RunE = func(*cobra.Command, []string) error {
124-
err := handleWellKnownErrors(action(b.cmd.Context(), b.cmd.OutOrStdout()))
122+
err := action(b.cmd.Context(), b.cmd.OutOrStdout())
125123
// clean up server at end of the execution since post run hooks are only executed if
126124
// RunE is successful
127125
if shutdownAPIServer != nil {
@@ -131,11 +129,3 @@ func (b *builder) NoArgs(action func(context.Context, io.Writer) error) *cobra.C
131129
}
132130
return &b.cmd
133131
}
134-
135-
func handleWellKnownErrors(err error) error {
136-
if err == nil {
137-
return err
138-
}
139-
140-
return sErrors.ShowAIError(err)
141-
}

cmd/skaffold/app/cmd/runner.go

+6-8
Original file line numberDiff line numberDiff line change
@@ -46,32 +46,30 @@ import (
4646
var createRunner = createNewRunner
4747

4848
func withRunner(ctx context.Context, out io.Writer, action func(runner.Runner, []*latest.SkaffoldConfig) error) error {
49-
runner, config, err := createRunner(out, opts)
49+
runner, runCtx, config, err := createRunner(out, opts)
5050
if err != nil {
5151
return err
5252
}
5353

5454
err = action(runner, config)
5555

56-
return alwaysSucceedWhenCancelled(ctx, err)
56+
return alwaysSucceedWhenCancelled(ctx, runCtx, err)
5757
}
5858

5959
// createNewRunner creates a Runner and returns the SkaffoldConfig associated with it.
60-
func createNewRunner(out io.Writer, opts config.SkaffoldOptions) (runner.Runner, []*latest.SkaffoldConfig, error) {
60+
func createNewRunner(out io.Writer, opts config.SkaffoldOptions) (runner.Runner, *runcontext.RunContext, []*latest.SkaffoldConfig, error) {
6161
runCtx, configs, err := runContext(out, opts)
6262
if err != nil {
63-
return nil, nil, err
63+
return nil, nil, nil, err
6464
}
65-
sErrors.SetRunContext(*runCtx)
66-
6765
instrumentation.InitMeterFromConfig(configs)
6866
runner, err := runner.NewForConfig(runCtx)
6967
if err != nil {
7068
event.InititializationFailed(err)
71-
return nil, nil, fmt.Errorf("creating runner: %w", err)
69+
return nil, nil, nil, fmt.Errorf("creating runner: %w", err)
7270
}
7371

74-
return runner, configs, nil
72+
return runner, runCtx, configs, nil
7573
}
7674

7775
func runContext(out io.Writer, opts config.SkaffoldOptions) (*runcontext.RunContext, []*latest.SkaffoldConfig, error) {

pkg/skaffold/build/scheduler.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func (s *scheduler) build(ctx context.Context, tags tag.ImageTags, i int) error
9090

9191
w, closeFn, err := s.logger.GetWriter()
9292
if err != nil {
93-
event.BuildFailed(s., a.ImageName, err)
93+
event.BuildFailed(a.ImageName, err)
9494
return err
9595
}
9696
defer closeFn()

pkg/skaffold/deploy/error/errors.go

+9-8
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/cluster"
2525
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/constants"
2626
sErrors "github.com/GoogleContainerTools/skaffold/pkg/skaffold/errors"
27-
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/runner/runcontext"
2827
"github.com/GoogleContainerTools/skaffold/proto/v1"
2928
)
3029

@@ -78,16 +77,18 @@ func isClusterInternalSystemError(err error) bool {
7877
return internalServerError.MatchString(err.Error())
7978
}
8079

81-
func internalSystemError(err error) error {
80+
func internalSystemError(cfg sErrors.Config, err error) error {
8281
return sErrors.NewProblem(
8382
func(err error) string {
8483
return fmt.Sprintf("Deploy Failed. %v", err)
8584
},
8685
proto.StatusCode_DEPLOY_CLUSTER_INTERNAL_SYSTEM_ERR,
87-
func(runCtx runcontext.RunContext) []*proto.Suggestion {
88-
action := fmt.Sprintf("Something went wrong with your cluster %q", runCtx.KubeContext)
89-
if isMinikube(runCtx.KubeContext) {
90-
action = fmt.Sprintf("Run minikube status -p %s to check if minikube is running", runCtx.KubeContext)
86+
cfg,
87+
func(cfg sErrors.Config) []*proto.Suggestion {
88+
kubectx := cfg.GetKubeContext()
89+
action := fmt.Sprintf("Something went wrong with your cluster %q", kubectx)
90+
if isMinikube(kubectx) {
91+
action = fmt.Sprintf("Run minikube status -p %s to check if minikube is running", kubectx)
9192
}
9293
return []*proto.Suggestion{{
9394
SuggestionCode: proto.SuggestionCode_OPEN_ISSUE,
@@ -99,12 +100,12 @@ func internalSystemError(err error) error {
99100
)
100101
}
101102

102-
func UserError(err error, sc proto.StatusCode) error {
103+
func UserError(cfg sErrors.Config, err error, sc proto.StatusCode) error {
103104
if sErrors.IsSkaffoldErr(err) {
104105
return err
105106
}
106107
if isClusterInternalSystemError(err) {
107-
return internalSystemError(err)
108+
return internalSystemError(cfg, err)
108109
}
109110
return sErrors.NewError(err,
110111
proto.ActionableErr{

pkg/skaffold/deploy/error/errors_test.go

+12-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
"testing"
2222

2323
sErrors "github.com/GoogleContainerTools/skaffold/pkg/skaffold/errors"
24-
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/runner/runcontext"
2524
"github.com/GoogleContainerTools/skaffold/proto/v1"
2625
"github.com/GoogleContainerTools/skaffold/testutil"
2726
)
@@ -60,9 +59,18 @@ func TestUserError(t *testing.T) {
6059
t.Override(&isMinikube, func(string) bool {
6160
return test.isMinikube
6261
})
63-
sErrors.SetRunContext(runcontext.RunContext{KubeContext: "test"})
64-
actual := UserError(test.err, proto.StatusCode_DEPLOY_HELM_USER_ERR)
65-
t.CheckDeepEqual(test.expected, sErrors.ShowAIError(actual).Error())
62+
actual := UserError(errConfig{}, test.err, proto.StatusCode_DEPLOY_HELM_USER_ERR)
63+
t.CheckDeepEqual(test.expected, sErrors.ShowAIError(errConfig{}, actual).Error())
6664
})
6765
}
6866
}
67+
68+
type errConfig struct{}
69+
70+
func (e errConfig) GetKubeContext() string { return "test" }
71+
func (e errConfig) GlobalConfig() string { return "" }
72+
func (e errConfig) Command() string { return "" }
73+
func (e errConfig) DefaultRepo() *string {
74+
o := ""
75+
return &o
76+
}

pkg/skaffold/deploy/helm/deploy.go

+15-12
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"strings"
3131
"time"
3232

33+
sErrors "github.com/GoogleContainerTools/skaffold/pkg/skaffold/errors"
3334
"github.com/blang/semver"
3435
backoff "github.com/cenkalti/backoff/v4"
3536
shell "github.com/kballard/go-shellquote"
@@ -72,6 +73,7 @@ var (
7273
// Deployer deploys workflows using the helm CLI
7374
type Deployer struct {
7475
*latest.HelmDeploy
76+
errCfg sErrors.Config
7577

7678
kubeContext string
7779
kubeConfig string
@@ -111,6 +113,7 @@ func NewDeployer(cfg kubectl.Config, labels map[string]string, h *latest.HelmDep
111113
labels: labels,
112114
bV: hv,
113115
enableDebug: cfg.Mode() == config.RunModes.Debug,
116+
errCfg: cfg,
114117
}, nil
115118
}
116119

@@ -126,11 +129,11 @@ func (h *Deployer) Deploy(ctx context.Context, out io.Writer, builds []build.Art
126129
for _, r := range h.Releases {
127130
releaseName, err := util.ExpandEnvTemplateOrFail(r.Name, nil)
128131
if err != nil {
129-
return nil, userErr(fmt.Sprintf("cannot expand release name %q", r.Name), err)
132+
return nil, userErr(h.errCfg, fmt.Sprintf("cannot expand release name %q", r.Name), err)
130133
}
131134
results, err := h.deployRelease(ctx, out, releaseName, r, builds, valuesSet, h.bV)
132135
if err != nil {
133-
return nil, userErr(fmt.Sprintf("deploying %q", releaseName), err)
136+
return nil, userErr(h.errCfg, fmt.Sprintf("deploying %q", releaseName), err)
134137
}
135138

136139
// collect namespaces
@@ -217,7 +220,7 @@ func (h *Deployer) Dependencies() ([]string, error) {
217220
}
218221

219222
if err := walk.From(release.ChartPath).When(isDep).AppendPaths(&deps); err != nil {
220-
return deps, userErr("issue walking releases", err)
223+
return deps, userErr(h.errCfg, "issue walking releases", err)
221224
}
222225
}
223226
sort.Strings(deps)
@@ -277,7 +280,7 @@ func (h *Deployer) Render(ctx context.Context, out io.Writer, builds []build.Art
277280

278281
args, err = constructOverrideArgs(&r, builds, args, func(string) {})
279282
if err != nil {
280-
return userErr("construct override args", err)
283+
return userErr(h.errCfg, "construct override args", err)
281284
}
282285

283286
namespace, err := h.releaseNamespace(r)
@@ -290,7 +293,7 @@ func (h *Deployer) Render(ctx context.Context, out io.Writer, builds []build.Art
290293

291294
outBuffer := new(bytes.Buffer)
292295
if err := h.exec(ctx, outBuffer, false, nil, args...); err != nil {
293-
return userErr("std out err", fmt.Errorf(outBuffer.String()))
296+
return userErr(h.errCfg, "std out err", fmt.Errorf(outBuffer.String()))
294297
}
295298
renderedManifests.Write(outBuffer.Bytes())
296299
}
@@ -366,19 +369,19 @@ func (h *Deployer) deployRelease(ctx context.Context, out io.Writer, releaseName
366369
logrus.Infof("Building helm dependencies...")
367370

368371
if err := h.exec(ctx, out, false, nil, "dep", "build", r.ChartPath); err != nil {
369-
return nil, userErr("building helm dependencies", err)
372+
return nil, userErr(h.errCfg, "building helm dependencies", err)
370373
}
371374
}
372375

373376
// Dump overrides to a YAML file to pass into helm
374377
if len(r.Overrides.Values) != 0 {
375378
overrides, err := yaml.Marshal(r.Overrides)
376379
if err != nil {
377-
return nil, userErr("cannot marshal overrides to create overrides values.yaml", err)
380+
return nil, userErr(h.errCfg, "cannot marshal overrides to create overrides values.yaml", err)
378381
}
379382

380383
if err := ioutil.WriteFile(constants.HelmOverridesFilename, overrides, 0666); err != nil {
381-
return nil, userErr(fmt.Sprintf("cannot create file %q", constants.HelmOverridesFilename), err)
384+
return nil, userErr(h.errCfg, fmt.Sprintf("cannot create file %q", constants.HelmOverridesFilename), err)
382385
}
383386

384387
defer func() {
@@ -389,25 +392,25 @@ func (h *Deployer) deployRelease(ctx context.Context, out io.Writer, releaseName
389392
if r.Packaged != nil {
390393
chartPath, err := h.packageChart(ctx, r)
391394
if err != nil {
392-
return nil, userErr("cannot package chart", err)
395+
return nil, userErr(h.errCfg, "cannot package chart", err)
393396
}
394397

395398
opts.chartPath = chartPath
396399
}
397400

398401
args, err := h.installArgs(r, builds, valuesSet, opts)
399402
if err != nil {
400-
return nil, userErr("release args", err)
403+
return nil, userErr(h.errCfg, "release args", err)
401404
}
402405

403406
err = h.exec(ctx, out, r.UseHelmSecrets, installEnv, args...)
404407
if err != nil {
405-
return nil, userErr("install", err)
408+
return nil, userErr(h.errCfg, "install", err)
406409
}
407410

408411
b, err := h.getRelease(ctx, releaseName, opts.namespace)
409412
if err != nil {
410-
return nil, userErr("get release", err)
413+
return nil, userErr(h.errCfg, "get release", err)
411414
}
412415

413416
artifacts := parseReleaseInfo(opts.namespace, bufio.NewReader(&b))

pkg/skaffold/deploy/helm/errors.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ func helmLabelErr(err error) error {
6767
})
6868
}
6969

70-
func userErr(prefix string, err error) error {
71-
return deployerr.UserError(errors.Wrap(err, prefix), proto.StatusCode_DEPLOY_HELM_USER_ERR)
70+
func userErr(cfg sErrors.Config, prefix string, err error) error {
71+
return deployerr.UserError(cfg, errors.Wrap(err, prefix), proto.StatusCode_DEPLOY_HELM_USER_ERR)
7272
}
7373

7474
func noMatchingBuild(image string) error {

pkg/skaffold/deploy/kubectl/cli.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"strings"
2525
"time"
2626

27+
sErrors "github.com/GoogleContainerTools/skaffold/pkg/skaffold/errors"
2728
"github.com/sirupsen/logrus"
2829

2930
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/config"
@@ -42,6 +43,7 @@ type CLI struct {
4243
forceDeploy bool
4344
waitForDeletions config.WaitForDeletions
4445
previousApply manifest.ManifestList
46+
cfg sErrors.Config
4547
}
4648

4749
type Config interface {
@@ -58,6 +60,7 @@ func NewCLI(cfg Config, flags latest.KubectlFlags, defaultNameSpace string) CLI
5860
Flags: flags,
5961
forceDeploy: cfg.ForceDeploy(),
6062
waitForDeletions: cfg.WaitForDeletions(),
63+
cfg: cfg,
6164
}
6265
}
6366

@@ -92,7 +95,7 @@ func (c *CLI) Apply(ctx context.Context, out io.Writer, manifests manifest.Manif
9295
}
9396

9497
if err := c.Run(ctx, updated.Reader(), out, "apply", c.args(c.Flags.Apply, args...)...); err != nil {
95-
return userErr(fmt.Errorf("kubectl apply: %w", err))
98+
return userErr(c.cfg, fmt.Errorf("kubectl apply: %w", err))
9699
}
97100

98101
return nil

pkg/skaffold/deploy/kubectl/errors.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,6 @@ func listManifestErr(err error) error {
8989
})
9090
}
9191

92-
func userErr(err error) error {
93-
return deployerr.UserError(err, proto.StatusCode_DEPLOY_KUBECTL_USER_ERR)
92+
func userErr(cfg sErrors.Config, err error) error {
93+
return deployerr.UserError(cfg, err, proto.StatusCode_DEPLOY_KUBECTL_USER_ERR)
9494
}

0 commit comments

Comments
 (0)