Skip to content

Commit cc4655d

Browse files
authored
Merge pull request #4742 from kersten/chore/improve-golang-scaffolder-error-wrapping
🌱 (chore): add error context to golang scaffolder execution steps
2 parents 5221f52 + 0bf34cd commit cc4655d

File tree

3 files changed

+20
-17
lines changed

3 files changed

+20
-17
lines changed

pkg/plugins/golang/v4/scaffolds/edit.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ limitations under the License.
1717
package scaffolds
1818

1919
import (
20+
"fmt"
21+
2022
"github.com/spf13/afero"
2123

2224
"sigs.k8s.io/kubebuilder/v4/pkg/config"
@@ -52,7 +54,7 @@ func (s *editScaffolder) Scaffold() error {
5254
filename := "Dockerfile"
5355
bs, err := afero.ReadFile(s.fs.FS, filename)
5456
if err != nil {
55-
return err
57+
return fmt.Errorf("error reading %q: %w", filename, err)
5658
}
5759
str := string(bs)
5860

@@ -66,7 +68,9 @@ func (s *editScaffolder) Scaffold() error {
6668
// because there is nothing to replace.
6769
if str != "" {
6870
// TODO: instead of writing it directly, we should use the scaffolding machinery for consistency
69-
return afero.WriteFile(s.fs.FS, filename, []byte(str), 0o644)
71+
if err = afero.WriteFile(s.fs.FS, filename, []byte(str), 0o644); err != nil {
72+
return fmt.Errorf("error writing %q: %w", filename, err)
73+
}
7074
}
7175

7276
return nil

pkg/plugins/golang/v4/scaffolds/init.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ func (s *initScaffolder) Scaffold() error {
110110
}
111111
bpFile.Path = s.boilerplatePath
112112
if err := scaffold.Execute(bpFile); err != nil {
113-
return err
113+
return fmt.Errorf("failed to execute boilerplate: %w", err)
114114
}
115115

116116
boilerplate, err := afero.ReadFile(s.fs.FS, s.boilerplatePath)
@@ -152,7 +152,7 @@ func (s *initScaffolder) Scaffold() error {
152152
}
153153
}
154154

155-
return scaffold.Execute(
155+
err := scaffold.Execute(
156156
&cmd.Main{
157157
ControllerRuntimeVersion: ControllerRuntimeVersion,
158158
},
@@ -185,4 +185,9 @@ func (s *initScaffolder) Scaffold() error {
185185
&templates.DevContainer{},
186186
&templates.DevContainerPostInstallScript{},
187187
)
188+
if err != nil {
189+
return fmt.Errorf("failed to execute init scaffold: %w", err)
190+
}
191+
192+
return nil
188193
}

pkg/plugins/golang/v4/scaffolds/webhook.go

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ func (s *webhookScaffolder) Scaffold() error {
110110
&cmd.MainUpdater{WireWebhook: true, IsLegacyPath: s.isLegacy},
111111
&webhooks.WebhookTest{Force: s.force, IsLegacyPath: s.isLegacy},
112112
); err != nil {
113-
return err
113+
return fmt.Errorf("error updating webhook: %w", err)
114114
}
115115

116116
if doConversion {
@@ -131,17 +131,13 @@ func (s *webhookScaffolder) Scaffold() error {
131131
"in file %s: %v", resourceFilePath, err)
132132
}
133133

134-
if err := scaffold.Execute(
135-
&api.Hub{Force: s.force},
136-
); err != nil {
137-
return err
134+
if err = scaffold.Execute(&api.Hub{Force: s.force}); err != nil {
135+
return fmt.Errorf("error scaffold resource with hub: %w", err)
138136
}
139137

140138
for _, spoke := range s.resource.Webhooks.Spoke {
141139
log.Printf("Scaffolding for spoke version: %s\n", spoke)
142-
if err := scaffold.Execute(
143-
&api.Spoke{Force: s.force, SpokeVersion: spoke},
144-
); err != nil {
140+
if err = scaffold.Execute(&api.Spoke{Force: s.force, SpokeVersion: spoke}); err != nil {
145141
return fmt.Errorf("failed to scaffold spoke %s: %w", spoke, err)
146142
}
147143
}
@@ -152,10 +148,8 @@ You need to implement the conversion.Hub and conversion.Convertible interfaces f
152148

153149
// TODO: Add test suite for conversion webhook after #1664 has been merged & conversion tests supported in envtest.
154150
if doDefaulting || doValidation {
155-
if err := scaffold.Execute(
156-
&webhooks.WebhookSuite{IsLegacyPath: s.isLegacy},
157-
); err != nil {
158-
return err
151+
if err = scaffold.Execute(&webhooks.WebhookSuite{IsLegacyPath: s.isLegacy}); err != nil {
152+
return fmt.Errorf("error scaffold webhook suite: %w", err)
159153
}
160154
}
161155

@@ -167,7 +161,7 @@ You need to implement the conversion.Hub and conversion.Convertible interfaces f
167161
log.Warning("Dockerfile is copying internal/controller. To allow copying webhooks, " +
168162
"it will be edited, and `internal/controller` will be replaced by `internal/`.")
169163

170-
if err := pluginutil.ReplaceInFile("Dockerfile", "internal/controller", "internal/"); err != nil {
164+
if err = pluginutil.ReplaceInFile("Dockerfile", "internal/controller", "internal/"); err != nil {
171165
log.Error("Unable to replace \"internal/controller\" with \"internal/\" in the Dockerfile: ", err)
172166
}
173167
}

0 commit comments

Comments
 (0)