Skip to content

Commit b46788c

Browse files
committed
refactor: remove go-multierror dependency and use errors.Join for error aggregation
1 parent bbc3419 commit b46788c

File tree

6 files changed

+45
-44
lines changed

6 files changed

+45
-44
lines changed

pkg/pod/status.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ package pod
1919
import (
2020
"context"
2121
"encoding/json"
22+
"errors"
2223
"fmt"
2324
"strconv"
2425
"strings"
2526
"time"
2627

27-
"github.com/hashicorp/go-multierror"
2828
"github.com/tektoncd/pipeline/internal/sidecarlogresults"
2929
"github.com/tektoncd/pipeline/pkg/apis/config"
3030
"github.com/tektoncd/pipeline/pkg/apis/pipeline"
@@ -156,16 +156,16 @@ func MakeTaskRunStatus(ctx context.Context, logger *zap.SugaredLogger, tr v1.Tas
156156
}
157157
}
158158

159-
var merr *multierror.Error
159+
var errs []error
160160
if err := setTaskRunStatusBasedOnStepStatus(ctx, logger, stepStatuses, &tr, pod.Status.Phase, kubeclient, ts); err != nil {
161-
merr = multierror.Append(merr, err)
161+
errs = append(errs, err)
162162
}
163163

164164
setTaskRunStatusBasedOnSidecarStatus(sidecarStatuses, trs)
165165

166166
trs.Results = removeDuplicateResults(trs.Results)
167167

168-
return *trs, merr.ErrorOrNil()
168+
return *trs, errors.Join(errs...)
169169
}
170170

171171
func createTaskResultsFromStepResults(stepRunRes []v1.TaskRunStepResult, neededStepResults map[string]string) []v1.TaskRunResult {
@@ -220,9 +220,9 @@ func getStepResultsFromSidecarLogs(sidecarLogResults []result.RunResult, contain
220220
return stepResultsFromSidecarLogs, nil
221221
}
222222

223-
func setTaskRunStatusBasedOnStepStatus(ctx context.Context, logger *zap.SugaredLogger, stepStatuses []corev1.ContainerStatus, tr *v1.TaskRun, podPhase corev1.PodPhase, kubeclient kubernetes.Interface, ts *v1.TaskSpec) *multierror.Error {
223+
func setTaskRunStatusBasedOnStepStatus(ctx context.Context, logger *zap.SugaredLogger, stepStatuses []corev1.ContainerStatus, tr *v1.TaskRun, podPhase corev1.PodPhase, kubeclient kubernetes.Interface, ts *v1.TaskSpec) error {
224224
trs := &tr.Status
225-
var merr *multierror.Error
225+
var errs []error
226226

227227
// collect results from taskrun spec and taskspec
228228
specResults := []v1.TaskResult{}
@@ -244,7 +244,7 @@ func setTaskRunStatusBasedOnStepStatus(ctx context.Context, logger *zap.SugaredL
244244
if tr.Status.TaskSpec.Results != nil || artifactsSidecarCreated {
245245
slr, err := sidecarlogresults.GetResultsFromSidecarLogs(ctx, kubeclient, tr.Namespace, tr.Status.PodName, pipeline.ReservedResultsSidecarContainerName, podPhase)
246246
if err != nil {
247-
merr = multierror.Append(merr, err)
247+
errs = append(errs, err)
248248
}
249249
sidecarLogResults = append(sidecarLogResults, slr...)
250250
}
@@ -258,7 +258,7 @@ func setTaskRunStatusBasedOnStepStatus(ctx context.Context, logger *zap.SugaredL
258258
err := setTaskRunArtifactsFromRunResult(sidecarLogResults, &tras)
259259
if err != nil {
260260
logger.Errorf("Failed to set artifacts value from sidecar logs: %v", err)
261-
merr = multierror.Append(merr, err)
261+
errs = append(errs, err)
262262
} else {
263263
trs.Artifacts = &tras
264264
}
@@ -282,13 +282,13 @@ func setTaskRunStatusBasedOnStepStatus(ctx context.Context, logger *zap.SugaredL
282282
// Identify StepResults needed by the Task Results
283283
neededStepResults, err := findStepResultsFetchedByTask(s.Name, specResults)
284284
if err != nil {
285-
merr = multierror.Append(merr, err)
285+
errs = append(errs, err)
286286
}
287287

288288
// populate step results from sidecar logs
289289
stepResultsFromSidecarLogs, err := getStepResultsFromSidecarLogs(sidecarLogResults, s.Name)
290290
if err != nil {
291-
merr = multierror.Append(merr, err)
291+
errs = append(errs, err)
292292
}
293293
_, stepRunRes, _ := filterResults(stepResultsFromSidecarLogs, specResults, stepResults)
294294
if tr.IsDone() {
@@ -301,7 +301,7 @@ func setTaskRunStatusBasedOnStepStatus(ctx context.Context, logger *zap.SugaredL
301301
err = setStepArtifactsValueFromSidecarLogResult(sidecarLogResults, s.Name, &sas)
302302
if err != nil {
303303
logger.Errorf("Failed to set artifacts value from sidecar logs: %v", err)
304-
merr = multierror.Append(merr, err)
304+
errs = append(errs, err)
305305
}
306306

307307
// Parse termination messages
@@ -312,22 +312,22 @@ func setTaskRunStatusBasedOnStepStatus(ctx context.Context, logger *zap.SugaredL
312312
results, err := termination.ParseMessage(logger, msg)
313313
if err != nil {
314314
logger.Errorf("termination message could not be parsed sas JSON: %v", err)
315-
merr = multierror.Append(merr, err)
315+
errs = append(errs, err)
316316
} else {
317317
err := setStepArtifactsValueFromTerminationMessageRunResult(results, &sas)
318318
if err != nil {
319319
logger.Errorf("error setting step artifacts of step %q in taskrun %q: %v", s.Name, tr.Name, err)
320-
merr = multierror.Append(merr, err)
320+
errs = append(errs, err)
321321
}
322322
time, err := extractStartedAtTimeFromResults(results)
323323
if err != nil {
324324
logger.Errorf("error setting the start time of step %q in taskrun %q: %v", s.Name, tr.Name, err)
325-
merr = multierror.Append(merr, err)
325+
errs = append(errs, err)
326326
}
327327
exitCode, err := extractExitCodeFromResults(results)
328328
if err != nil {
329329
logger.Errorf("error extracting the exit code of step %q in taskrun %q: %v", s.Name, tr.Name, err)
330-
merr = multierror.Append(merr, err)
330+
errs = append(errs, err)
331331
}
332332

333333
taskResults, stepRunRes, filteredResults := filterResults(results, specResults, stepResults)
@@ -341,15 +341,15 @@ func setTaskRunStatusBasedOnStepStatus(ctx context.Context, logger *zap.SugaredL
341341
err := setTaskRunArtifactsFromRunResult(filteredResults, &tras)
342342
if err != nil {
343343
logger.Errorf("error setting step artifacts in taskrun %q: %v", tr.Name, err)
344-
merr = multierror.Append(merr, err)
344+
errs = append(errs, err)
345345
}
346346
trs.Artifacts.Merge(&tras)
347347
trs.Artifacts.Merge(&sas)
348348
}
349349
msg, err = createMessageFromResults(filteredResults)
350350
if err != nil {
351351
logger.Errorf("%v", err)
352-
merr = multierror.Append(merr, err)
352+
errs = append(errs, err)
353353
} else {
354354
state.Terminated.Message = msg
355355
}
@@ -388,7 +388,7 @@ func setTaskRunStatusBasedOnStepStatus(ctx context.Context, logger *zap.SugaredL
388388
}
389389
}
390390

391-
return merr
391+
return errors.Join(errs...)
392392
}
393393

394394
func setStepArtifactsValueFromSidecarLogResult(results []result.RunResult, name string, artifacts *v1.Artifacts) error {

pkg/pod/status_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ package pod
1818

1919
import (
2020
"context"
21+
"errors"
2122
"fmt"
2223
"strings"
2324
"testing"
2425
"time"
2526

2627
"github.com/google/go-cmp/cmp"
2728
"github.com/google/go-cmp/cmp/cmpopts"
28-
"github.com/hashicorp/go-multierror"
2929
"github.com/tektoncd/pipeline/internal/sidecarlogresults"
3030
"github.com/tektoncd/pipeline/pkg/apis/config"
3131
v1 "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1"
@@ -238,10 +238,11 @@ func TestSetTaskRunStatusBasedOnStepStatus_sidecar_logs(t *testing.T) {
238238
ctx := config.ToContext(context.Background(), &config.Config{
239239
FeatureFlags: featureFlags,
240240
})
241-
var wantErr *multierror.Error
242-
wantErr = multierror.Append(wantErr, c.wantErr)
241+
wantErr := errors.Join(c.wantErr)
243242
merr := setTaskRunStatusBasedOnStepStatus(ctx, logger, []corev1.ContainerStatus{{}}, &c.tr, pod.Status.Phase, kubeclient, ts)
244-
243+
if merr == nil {
244+
t.Fatalf("Expected error but got nil")
245+
}
245246
if d := cmp.Diff(wantErr.Error(), merr.Error()); d != "" {
246247
t.Errorf("Got unexpected error %s", diff.PrintWantGot(d))
247248
}

pkg/reconciler/pipelinerun/pipelinerun.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"strings"
2828
"time"
2929

30-
"github.com/hashicorp/go-multierror"
3130
"github.com/tektoncd/pipeline/pkg/apis/config"
3231
"github.com/tektoncd/pipeline/pkg/apis/pipeline"
3332
pipelineErrors "github.com/tektoncd/pipeline/pkg/apis/pipeline/errors"
@@ -326,11 +325,11 @@ func (c *Reconciler) finishReconcileUpdateEmitEvents(ctx context.Context, pr *v1
326325
events.EmitError(controller.GetEventRecorder(ctx), err, pr)
327326
}
328327

329-
merr := multierror.Append(previousError, err).ErrorOrNil()
328+
errs := errors.Join(previousError, err)
330329
if controller.IsPermanentError(previousError) {
331-
return controller.NewPermanentError(merr)
330+
return controller.NewPermanentError(errs)
332331
}
333-
return merr
332+
return errs
334333
}
335334

336335
// resolvePipelineState will attempt to resolve each referenced task in the pipeline's spec and all of the resources
@@ -1536,7 +1535,7 @@ func validateChildObjectsInPipelineRunStatus(ctx context.Context, prs v1.Pipelin
15361535
case taskRun, customRun:
15371536
continue
15381537
default:
1539-
err = multierror.Append(err, fmt.Errorf("child with name %s has unknown kind %s", cr.Name, cr.Kind))
1538+
err = errors.Join(err, fmt.Errorf("child with name %s has unknown kind %s", cr.Name, cr.Kind))
15401539
}
15411540
}
15421541

pkg/reconciler/taskrun/taskrun.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"strings"
2626
"time"
2727

28-
"github.com/hashicorp/go-multierror"
2928
"github.com/tektoncd/pipeline/internal/sidecarlogresults"
3029
"github.com/tektoncd/pipeline/pkg/apis/config"
3130
"github.com/tektoncd/pipeline/pkg/apis/pipeline"
@@ -370,7 +369,10 @@ func (c *Reconciler) finishReconcileUpdateEmitEvents(ctx context.Context, tr *v1
370369
// Send k8s events and cloud events (when configured)
371370
events.Emit(ctx, beforeCondition, afterCondition, tr)
372371

373-
merr := multierror.Append(previousError).ErrorOrNil()
372+
var errs []error
373+
if previousError != nil {
374+
errs = append(errs, previousError)
375+
}
374376

375377
// If the Run has been completed before and remains so at present,
376378
// no need to update the labels and annotations
@@ -380,14 +382,14 @@ func (c *Reconciler) finishReconcileUpdateEmitEvents(ctx context.Context, tr *v1
380382
if err != nil {
381383
logger.Warn("Failed to update TaskRun labels/annotations", zap.Error(err))
382384
events.EmitError(controller.GetEventRecorder(ctx), err, tr)
385+
errs = append(errs, err)
383386
}
384-
merr = multierror.Append(merr, err).ErrorOrNil()
385387
}
386-
388+
joinedErr:=errors.Join(errs...)
387389
if controller.IsPermanentError(previousError) {
388-
return controller.NewPermanentError(merr)
390+
return controller.NewPermanentError(joinedErr)
389391
}
390-
return merr
392+
return joinedErr
391393
}
392394

393395
// `prepare` fetches resources the taskrun depends on, runs validation and conversion

pkg/reconciler/taskrun/validate_taskrun.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222
"sort"
2323
"strings"
2424

25-
"github.com/hashicorp/go-multierror"
25+
"errors"
2626
pipelineErrors "github.com/tektoncd/pipeline/pkg/apis/pipeline/errors"
2727
v1 "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1"
2828
"github.com/tektoncd/pipeline/pkg/list"
@@ -233,35 +233,35 @@ func validateTaskSpecRequestResources(taskSpec *v1.TaskSpec) error {
233233
func validateOverrides(ts *v1.TaskSpec, trs *v1.TaskRunSpec) error {
234234
stepErr := validateStepOverrides(ts, trs)
235235
sidecarErr := validateSidecarOverrides(ts, trs)
236-
return multierror.Append(stepErr, sidecarErr).ErrorOrNil()
236+
return errors.Join(stepErr, sidecarErr)
237237
}
238238

239239
func validateStepOverrides(ts *v1.TaskSpec, trs *v1.TaskRunSpec) error {
240-
var err error
240+
var errs []error
241241
stepNames := sets.NewString()
242242
for _, step := range ts.Steps {
243243
stepNames.Insert(step.Name)
244244
}
245245
for _, stepOverride := range trs.StepSpecs {
246246
if !stepNames.Has(stepOverride.Name) {
247-
err = multierror.Append(err, pipelineErrors.WrapUserError(fmt.Errorf("invalid StepOverride: No Step named %s", stepOverride.Name)))
247+
errs = append(errs, pipelineErrors.WrapUserError(fmt.Errorf("invalid StepOverride: No Step named %s", stepOverride.Name)))
248248
}
249249
}
250-
return err
250+
return errors.Join(errs...)
251251
}
252252

253253
func validateSidecarOverrides(ts *v1.TaskSpec, trs *v1.TaskRunSpec) error {
254-
var err error
254+
var errs []error
255255
sidecarNames := sets.NewString()
256256
for _, sidecar := range ts.Sidecars {
257257
sidecarNames.Insert(sidecar.Name)
258258
}
259259
for _, sidecarOverride := range trs.SidecarSpecs {
260260
if !sidecarNames.Has(sidecarOverride.Name) {
261-
err = multierror.Append(err, pipelineErrors.WrapUserError(fmt.Errorf("invalid SidecarOverride: No Sidecar named %s", sidecarOverride.Name)))
261+
errs = append(errs, pipelineErrors.WrapUserError(fmt.Errorf("invalid SidecarOverride: No Sidecar named %s", sidecarOverride.Name)))
262262
}
263263
}
264-
return err
264+
return errors.Join(errs...)
265265
}
266266

267267
// validateResults checks the emitted results type and object properties against the ones defined in spec.

pkg/result/result.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@ package result
1818

1919
import (
2020
"encoding/json"
21+
"errors"
2122
"fmt"
22-
23-
"github.com/hashicorp/go-multierror"
2423
)
2524

2625
const (
@@ -84,7 +83,7 @@ func (r *ResultType) UnmarshalJSON(data []byte) error {
8483
var asString string
8584

8685
if err := json.Unmarshal(data, &asString); err != nil {
87-
return fmt.Errorf("unsupported value type, neither int nor string: %w", multierror.Append(intErr, err).ErrorOrNil())
86+
return fmt.Errorf("unsupported value type, neither int nor string: %w", errors.Join(intErr, err))
8887
}
8988

9089
switch asString {

0 commit comments

Comments
 (0)