Skip to content

Commit 6743979

Browse files
lukemassaPetr Bubenik
authored and
Petr Bubenik
committed
chore: Remove dependency on multierror (runatlantis#5275)
Signed-off-by: Luke Massa <[email protected]> Signed-off-by: Petr Bubenik <[email protected]>
1 parent 24efe61 commit 6743979

File tree

4 files changed

+20
-29
lines changed

4 files changed

+20
-29
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ require (
2222
github.com/gorilla/mux v1.8.1
2323
github.com/gorilla/websocket v1.5.3
2424
github.com/hashicorp/go-getter/v2 v2.2.3
25-
github.com/hashicorp/go-multierror v1.1.1
2625
github.com/hashicorp/go-version v1.7.0
2726
github.com/hashicorp/golang-lru/v2 v2.0.7
2827
github.com/hashicorp/hc-install v0.9.0
@@ -96,6 +95,7 @@ require (
9695
github.com/gorilla/css v1.0.1 // indirect
9796
github.com/hashicorp/errwrap v1.1.0 // indirect
9897
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
98+
github.com/hashicorp/go-multierror v1.1.1 // indirect
9999
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
100100
github.com/hashicorp/go-safetemp v1.0.0 // indirect
101101
github.com/hashicorp/hcl v1.0.0 // indirect

server/controllers/events/testdata/test-repos/policy-checks-diff-owner/exp-output-approve-policies.txt

+1-4
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ Ran Approve Policies for 1 projects:
66
### 1. dir: `.` workspace: `default`
77
**Approve Policies Error**
88
```
9-
1 error occurred:
10-
* policy set: test_policy user runatlantis is not a policy owner - please contact policy owners to approve failing policies
11-
12-
9+
policy set: test_policy user runatlantis is not a policy owner - please contact policy owners to approve failing policies
1310
```
1411
#### Policy Approval Status:
1512
```

server/core/runtime/policy/conftest_client.go

+8-13
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package policy
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
67
"os"
78
"path/filepath"
@@ -12,9 +13,9 @@ import (
1213
"regexp"
1314

1415
"github.com/hashicorp/go-getter/v2"
15-
"github.com/hashicorp/go-multierror"
16+
1617
version "github.com/hashicorp/go-version"
17-
"github.com/pkg/errors"
18+
1819
"github.com/runatlantis/atlantis/server/core/config/valid"
1920
"github.com/runatlantis/atlantis/server/core/runtime/cache"
2021
runtime_models "github.com/runatlantis/atlantis/server/core/runtime/models"
@@ -139,7 +140,7 @@ func (c ConfTestVersionDownloader) downloadConfTestVersion(v *version.Version, d
139140
fullSrcURL := fmt.Sprintf("%s?checksum=file:%s", binURL, checksumURL)
140141

141142
if err := c.downloader.GetAny(destPath, fullSrcURL); err != nil {
142-
return runtime_models.LocalFilePath(""), errors.Wrapf(err, "downloading conftest version %s at %q", v.String(), fullSrcURL)
143+
return runtime_models.LocalFilePath(""), fmt.Errorf("downloading conftest version %s at %q: %w", v.String(), fullSrcURL, err)
143144
}
144145

145146
binPath := filepath.Join(destPath, "conftest")
@@ -212,9 +213,9 @@ func (c *ConfTestExecutorWorkflow) Run(ctx command.ProjectContext, executablePat
212213
if cmdErr != nil {
213214
// Since we're running conftest for each policyset, individual command errors should be concatenated.
214215
if isValidConftestOutput(cmdOutput) {
215-
combinedErr = multierror.Append(combinedErr, fmt.Errorf("policy_set: %s: conftest: some policies failed", policySet.Name))
216+
combinedErr = errors.Join(combinedErr, fmt.Errorf("policy_set: %s: conftest: some policies failed", policySet.Name))
216217
} else {
217-
combinedErr = multierror.Append(combinedErr, fmt.Errorf("policy_set: %s: conftest: %s", policySet.Name, cmdOutput))
218+
combinedErr = errors.Join(combinedErr, fmt.Errorf("policy_set: %s: conftest: %s", policySet.Name, cmdOutput))
218219
}
219220
}
220221

@@ -247,13 +248,7 @@ func (c *ConfTestExecutorWorkflow) Run(ctx command.ProjectContext, executablePat
247248
policyCheckResultFile := filepath.Join(workdir, ctx.GetPolicyCheckResultFileName())
248249
err = os.WriteFile(policyCheckResultFile, marshaledStatus, 0600)
249250

250-
combinedErr = multierror.Append(combinedErr, err)
251-
252-
// Multierror will wrap combined errors in a way that the upstream functions won't be able to read it as nil.
253-
// Let's pass nil back if there are no wrapped errors.
254-
if errors.Unwrap(combinedErr) == nil {
255-
combinedErr = nil
256-
}
251+
combinedErr = errors.Join(combinedErr, err)
257252

258253
output := string(marshaledStatus)
259254

@@ -306,7 +301,7 @@ func getDefaultVersion() (*version.Version, error) {
306301
wrappedVersion, err := version.NewVersion(defaultVersion)
307302

308303
if err != nil {
309-
return nil, errors.Wrapf(err, "wrapping version %s", defaultVersion)
304+
return nil, fmt.Errorf("wrapping version %s: %w", defaultVersion, err)
310305
}
311306
return wrappedVersion, nil
312307
}

server/events/project_command_runner.go

+10-11
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,12 @@ package events
1515

1616
import (
1717
"encoding/json"
18+
"errors"
1819
"fmt"
1920
"os"
2021
"path/filepath"
2122
"strings"
2223

23-
"github.com/hashicorp/go-multierror"
24-
"github.com/pkg/errors"
2524
"github.com/runatlantis/atlantis/server/core/config/valid"
2625
"github.com/runatlantis/atlantis/server/core/runtime"
2726
"github.com/runatlantis/atlantis/server/events/command"
@@ -347,7 +346,7 @@ func (p *DefaultProjectCommandRunner) doApprovePolicies(ctx command.ProjectConte
347346
// Acquire Atlantis lock for this repo/dir/workspace.
348347
lockAttempt, err := p.Locker.TryLock(ctx.Log, ctx.Pull, ctx.User, ctx.Workspace, models.NewProject(ctx.Pull.BaseRepo.FullName, ctx.RepoRelDir, ctx.ProjectName), ctx.RepoLocksMode == valid.RepoLocksOnPlanMode)
349348
if err != nil {
350-
return nil, "", errors.Wrap(err, "acquiring lock")
349+
return nil, "", fmt.Errorf("acquiring lock: %w", err)
351350
}
352351
if !lockAttempt.LockAcquired {
353352
return nil, lockAttempt.LockFailureReason, nil
@@ -408,10 +407,10 @@ func (p *DefaultProjectCommandRunner) doApprovePolicies(ctx command.ProjectConte
408407
}
409408
// User matches the author and prevent self approve is set to true
410409
} else if isOwner && !ignorePolicy && ctx.User.Username == ctx.Pull.Author && policySet.PreventSelfApprove {
411-
prjErr = multierror.Append(prjErr, fmt.Errorf("policy set: %s the author of pr %s matches the command commenter user %s - please contact another policy owners to approve failing policies", policySet.Name, ctx.Pull.Author, ctx.User.Username))
410+
prjErr = errors.Join(prjErr, fmt.Errorf("policy set: %s the author of pr %s matches the command commenter user %s - please contact another policy owners to approve failing policies", policySet.Name, ctx.Pull.Author, ctx.User.Username))
412411
// User is not authorized to approve policy set.
413412
} else if !ignorePolicy {
414-
prjErr = multierror.Append(prjErr, fmt.Errorf("policy set: %s user %s is not a policy owner - please contact policy owners to approve failing policies", policySet.Name, ctx.User.Username))
413+
prjErr = errors.Join(prjErr, fmt.Errorf("policy set: %s user %s is not a policy owner - please contact policy owners to approve failing policies", policySet.Name, ctx.User.Username))
415414
}
416415
// Still bubble up this failure, even if policy set is not targeted.
417416
if !policyStatus.Passed && (prjPolicyStatus[i].Approvals != policySet.ApproveCount) {
@@ -449,7 +448,7 @@ func (p *DefaultProjectCommandRunner) doPolicyCheck(ctx command.ProjectContext)
449448
lockAttempt, err := p.Locker.TryLock(ctx.Log, ctx.Pull, ctx.User, ctx.Workspace, models.NewProject(ctx.Pull.BaseRepo.FullName, ctx.RepoRelDir, ctx.ProjectName), ctx.RepoLocksMode == valid.RepoLocksOnPlanMode)
450449

451450
if err != nil {
452-
return nil, "", errors.Wrap(err, "acquiring lock")
451+
return nil, "", fmt.Errorf("acquiring lock: %w", err)
453452
}
454453
if !lockAttempt.LockAcquired {
455454
return nil, lockAttempt.LockFailureReason, nil
@@ -502,7 +501,7 @@ func (p *DefaultProjectCommandRunner) doPolicyCheck(ctx command.ProjectContext)
502501
}
503502
// Exclude errors for failed policies
504503
if !strings.Contains(err.Error(), "some policies failed") {
505-
errs = multierror.Append(errs, err)
504+
errs = errors.Join(errs, err)
506505
}
507506
}
508507

@@ -567,7 +566,7 @@ func (p *DefaultProjectCommandRunner) doPlan(ctx command.ProjectContext) (*model
567566
// Acquire Atlantis lock for this repo/dir/workspace.
568567
lockAttempt, err := p.Locker.TryLock(ctx.Log, ctx.Pull, ctx.User, ctx.Workspace, models.NewProject(ctx.Pull.BaseRepo.FullName, ctx.RepoRelDir, ctx.ProjectName), ctx.RepoLocksMode == valid.RepoLocksOnPlanMode)
569568
if err != nil {
570-
return nil, "", errors.Wrap(err, "acquiring lock")
569+
return nil, "", fmt.Errorf("acquiring lock: %w", err)
571570
}
572571
if !lockAttempt.LockAcquired {
573572
return nil, lockAttempt.LockFailureReason, nil
@@ -644,7 +643,7 @@ func (p *DefaultProjectCommandRunner) doApply(ctx command.ProjectContext) (apply
644643
// Acquire Atlantis lock for this repo/dir/workspace.
645644
lockAttempt, err := p.Locker.TryLock(ctx.Log, ctx.Pull, ctx.User, ctx.Workspace, models.NewProject(ctx.Pull.BaseRepo.FullName, ctx.RepoRelDir, ctx.ProjectName), ctx.RepoLocksMode == valid.RepoLocksOnApplyMode)
646645
if err != nil {
647-
return "", "", errors.Wrap(err, "acquiring lock")
646+
return "", "", fmt.Errorf("acquiring lock: %w", err)
648647
}
649648
if !lockAttempt.LockAcquired {
650649
return "", lockAttempt.LockFailureReason, nil
@@ -724,7 +723,7 @@ func (p *DefaultProjectCommandRunner) doImport(ctx command.ProjectContext) (out
724723
// Acquire Atlantis lock for this repo/dir/workspace.
725724
lockAttempt, err := p.Locker.TryLock(ctx.Log, ctx.Pull, ctx.User, ctx.Workspace, models.NewProject(ctx.Pull.BaseRepo.FullName, ctx.RepoRelDir, ctx.ProjectName), ctx.RepoLocksMode != valid.RepoLocksDisabledMode)
726725
if err != nil {
727-
return nil, "", errors.Wrap(err, "acquiring lock")
726+
return nil, "", fmt.Errorf("acquiring lock: %w", err)
728727
}
729728
if !lockAttempt.LockAcquired {
730729
return nil, lockAttempt.LockFailureReason, nil
@@ -765,7 +764,7 @@ func (p *DefaultProjectCommandRunner) doStateRm(ctx command.ProjectContext) (out
765764
// Acquire Atlantis lock for this repo/dir/workspace.
766765
lockAttempt, err := p.Locker.TryLock(ctx.Log, ctx.Pull, ctx.User, ctx.Workspace, models.NewProject(ctx.Pull.BaseRepo.FullName, ctx.RepoRelDir, ctx.ProjectName), ctx.RepoLocksMode != valid.RepoLocksDisabledMode)
767766
if err != nil {
768-
return nil, "", errors.Wrap(err, "acquiring lock")
767+
return nil, "", fmt.Errorf("acquiring lock: %w", err)
769768
}
770769
if !lockAttempt.LockAcquired {
771770
return nil, lockAttempt.LockFailureReason, nil

0 commit comments

Comments
 (0)