Skip to content

Commit 544c0b4

Browse files
authored
Merge pull request #4735 from kersten/chore/improve-error-wrapping-golang-plugins
🌱 (chore): add detailed error wrapping across Golang plugin commands
2 parents b878bf9 + 93f8d75 commit 544c0b4

File tree

5 files changed

+42
-28
lines changed

5 files changed

+42
-28
lines changed

pkg/plugins/golang/repository.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ func findGoModulePath() (string, error) {
4545
return "", err
4646
}
4747
mod := goMod{}
48-
if err := json.Unmarshal(out, &mod); err != nil {
49-
return "", err
48+
if err = json.Unmarshal(out, &mod); err != nil {
49+
return "", fmt.Errorf("failed to unmarshal go.mod: %w", err)
5050
}
5151
return mod.Module.Path, nil
5252
}

pkg/plugins/golang/v4/api.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,16 +139,16 @@ func (p *createAPISubcommand) InjectResource(res *resource.Resource) error {
139139
// Ensure that external API options cannot be used when creating an API in the project.
140140
if p.options.DoAPI {
141141
if len(p.options.ExternalAPIPath) != 0 || len(p.options.ExternalAPIDomain) != 0 {
142-
return errors.New("Cannot use '--external-api-path' or '--external-api-domain' " +
142+
return errors.New("cannot use '--external-api-path' or '--external-api-domain' " +
143143
"when creating an API in the project with '--resource=true'. " +
144-
"Use '--resource=false' when referencing an external API.")
144+
"Use '--resource=false' when referencing an external API")
145145
}
146146
}
147147

148148
p.options.UpdateResource(p.resource, p.config)
149149

150150
if err := p.resource.Validate(); err != nil {
151-
return err
151+
return fmt.Errorf("error validating resource: %w", err)
152152
}
153153

154154
// In case we want to scaffold a resource API we need to do some checks
@@ -180,18 +180,22 @@ func (p *createAPISubcommand) PreScaffold(machinery.Filesystem) error {
180180
func (p *createAPISubcommand) Scaffold(fs machinery.Filesystem) error {
181181
scaffolder := scaffolds.NewAPIScaffolder(p.config, *p.resource, p.force)
182182
scaffolder.InjectFS(fs)
183-
return scaffolder.Scaffold()
183+
if err := scaffolder.Scaffold(); err != nil {
184+
return fmt.Errorf("error scaffolding API: %w", err)
185+
}
186+
187+
return nil
184188
}
185189

186190
func (p *createAPISubcommand) PostScaffold() error {
187191
err := util.RunCmd("Update dependencies", "go", "mod", "tidy")
188192
if err != nil {
189-
return err
193+
return fmt.Errorf("error updating go dependencies: %w", err)
190194
}
191195
if p.runMake && p.resource.HasAPI() {
192196
err = util.RunCmd("Running make", "make", "generate")
193197
if err != nil {
194-
return err
198+
return fmt.Errorf("error running make generate: %w", err)
195199
}
196200
fmt.Print("Next: implement your new API and generate the manifests (e.g. CRDs,CRs) with:\n$ make manifests\n")
197201
}

pkg/plugins/golang/v4/edit.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,9 @@ func (p *editSubcommand) InjectConfig(c config.Config) error {
6161
func (p *editSubcommand) Scaffold(fs machinery.Filesystem) error {
6262
scaffolder := scaffolds.NewEditScaffolder(p.config, p.multigroup)
6363
scaffolder.InjectFS(fs)
64-
return scaffolder.Scaffold()
64+
if err := scaffolder.Scaffold(); err != nil {
65+
return fmt.Errorf("failed to edit scaffold: %w", err)
66+
}
67+
68+
return nil
6569
}

pkg/plugins/golang/v4/init.go

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -106,27 +106,30 @@ func (p *initSubcommand) InjectConfig(c config.Config) error {
106106
p.repo = repoPath
107107
}
108108

109-
return p.config.SetRepository(p.repo)
109+
if err := p.config.SetRepository(p.repo); err != nil {
110+
return fmt.Errorf("error setting repository: %w", err)
111+
}
112+
113+
return nil
110114
}
111115

112116
func (p *initSubcommand) PreScaffold(machinery.Filesystem) error {
113117
// Ensure Go version is in the allowed range if check not turned off.
114118
if !p.skipGoVersionCheck {
115119
if err := golang.ValidateGoVersion(goVerMin, goVerMax); err != nil {
116-
return err
120+
return fmt.Errorf("error validating go version: %w", err)
117121
}
118122
}
119123

120-
// Check if the current directory has not files or directories which does not allow to init the project
124+
// Check if the current directory has no files or directories which does not allow to init the project
121125
return checkDir()
122126
}
123127

124128
func (p *initSubcommand) Scaffold(fs machinery.Filesystem) error {
125129
scaffolder := scaffolds.NewInitScaffolder(p.config, p.license, p.owner, p.commandName)
126130
scaffolder.InjectFS(fs)
127-
err := scaffolder.Scaffold()
128-
if err != nil {
129-
return err
131+
if err := scaffolder.Scaffold(); err != nil {
132+
return fmt.Errorf("error scaffolding init plugin: %w", err)
130133
}
131134

132135
if !p.fetchDeps {
@@ -136,10 +139,10 @@ func (p *initSubcommand) Scaffold(fs machinery.Filesystem) error {
136139

137140
// Ensure that we are pinning controller-runtime version
138141
// xref: https://github.com/kubernetes-sigs/kubebuilder/issues/997
139-
err = util.RunCmd("Get controller runtime", "go", "get",
142+
err := util.RunCmd("Get controller runtime", "go", "get",
140143
"sigs.k8s.io/controller-runtime@"+scaffolds.ControllerRuntimeVersion)
141144
if err != nil {
142-
return err
145+
return fmt.Errorf("error getting controller-runtime version: %w", err)
143146
}
144147

145148
return nil
@@ -148,7 +151,7 @@ func (p *initSubcommand) Scaffold(fs machinery.Filesystem) error {
148151
func (p *initSubcommand) PostScaffold() error {
149152
err := util.RunCmd("Update dependencies", "go", "mod", "tidy")
150153
if err != nil {
151-
return err
154+
return fmt.Errorf("error updating go dependencies: %w", err)
152155
}
153156

154157
fmt.Printf("Next: define a resource with:\n$ %s create api\n", p.commandName)
@@ -162,7 +165,7 @@ func checkDir() error {
162165
err := filepath.Walk(".",
163166
func(path string, info os.FileInfo, err error) error {
164167
if err != nil {
165-
return err
168+
return fmt.Errorf("error walking path %q: %w", path, err)
166169
}
167170
// Allow directory trees starting with '.'
168171
if info.IsDir() && strings.HasPrefix(info.Name(), ".") && info.Name() != "." {
@@ -202,11 +205,11 @@ func checkDir() error {
202205
// Do not allow any other file
203206
return fmt.Errorf(
204207
"target directory is not empty and contains a disallowed file %q. "+
205-
"files with the following extensions [%s] are not allowed to avoid conflicts with the tooling.",
208+
"files with the following extensions [%s] are not allowed to avoid conflicts with the tooling",
206209
path, strings.Join(disallowedExtensions, ", "))
207210
})
208211
if err != nil {
209-
return err
212+
return fmt.Errorf("error walking directory: %w", err)
210213
}
211214
return nil
212215
}

pkg/plugins/golang/v4/webhook.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -114,22 +114,21 @@ func (p *createWebhookSubcommand) InjectResource(res *resource.Resource) error {
114114
p.resource = res
115115

116116
if len(p.options.ExternalAPIPath) != 0 && len(p.options.ExternalAPIDomain) != 0 && p.isLegacyPath {
117-
return errors.New("You cannot scaffold webhooks for external types " +
118-
"using the legacy path")
117+
return errors.New("you cannot scaffold webhooks for external types using the legacy path")
119118
}
120119

121120
for _, spoke := range p.options.Spoke {
122121
spoke = strings.TrimSpace(spoke)
123122
if !isValidVersion(spoke, res, p.config) {
124-
return fmt.Errorf("invalid spoke version: %s", spoke)
123+
return fmt.Errorf("invalid spoke version %q", spoke)
125124
}
126125
res.Webhooks.Spoke = append(res.Webhooks.Spoke, spoke)
127126
}
128127

129128
p.options.UpdateResource(p.resource, p.config)
130129

131130
if err := p.resource.Validate(); err != nil {
132-
return err
131+
return fmt.Errorf("error validating resource: %w", err)
133132
}
134133

135134
if !p.resource.HasDefaultingWebhook() && !p.resource.HasValidationWebhook() && !p.resource.HasConversionWebhook() {
@@ -157,19 +156,23 @@ func (p *createWebhookSubcommand) InjectResource(res *resource.Resource) error {
157156
func (p *createWebhookSubcommand) Scaffold(fs machinery.Filesystem) error {
158157
scaffolder := scaffolds.NewWebhookScaffolder(p.config, *p.resource, p.force, p.isLegacyPath)
159158
scaffolder.InjectFS(fs)
160-
return scaffolder.Scaffold()
159+
if err := scaffolder.Scaffold(); err != nil {
160+
return fmt.Errorf("failed to scaffold webhook: %w", err)
161+
}
162+
163+
return nil
161164
}
162165

163166
func (p *createWebhookSubcommand) PostScaffold() error {
164167
err := pluginutil.RunCmd("Update dependencies", "go", "mod", "tidy")
165168
if err != nil {
166-
return err
169+
return fmt.Errorf("error updating go dependencies: %w", err)
167170
}
168171

169172
if p.runMake {
170173
err = pluginutil.RunCmd("Running make", "make", "generate")
171174
if err != nil {
172-
return err
175+
return fmt.Errorf("error running make generate: %w", err)
173176
}
174177
}
175178

0 commit comments

Comments
 (0)