From eca8a8d0d103a7490032ec61438d619f169bcafd Mon Sep 17 00:00:00 2001 From: Eric Hripko Date: Tue, 18 May 2021 19:57:24 +0100 Subject: [PATCH] Eliminate more of boilerplate (#5) --- go.mod | 3 +- go.sum | 4 +- internal/app/packer-frontend/build.go | 20 ++------ internal/app/packer-frontend/build_test.go | 59 ++-------------------- 4 files changed, 11 insertions(+), 75 deletions(-) diff --git a/go.mod b/go.mod index 108c7f3..952bfe2 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/EricHripko/pack.yaml go 1.15 require ( - github.com/EricHripko/buildkit-fdk v0.0.2 + github.com/EricHripko/buildkit-fdk v0.1.2 github.com/containerd/containerd v1.4.4 github.com/golang/mock v1.5.0 github.com/mitchellh/mapstructure v1.3.1 @@ -16,6 +16,5 @@ require ( golang.org/x/mod v0.3.0 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c golang.org/x/sys v0.0.0-20210112080510-489259a85091 // indirect - golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d gopkg.in/yaml.v2 v2.3.0 ) diff --git a/go.sum b/go.sum index 513b8ca..342a233 100644 --- a/go.sum +++ b/go.sum @@ -88,8 +88,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Djarvur/go-err113 v0.0.0-20200410182137-af658d038157/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= github.com/Djarvur/go-err113 v0.1.0/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/EricHripko/buildkit-fdk v0.0.2 h1:yhNr5nebBKZ0tg+2ERdC2yNNJqFEws2CTAHUminhfYs= -github.com/EricHripko/buildkit-fdk v0.0.2/go.mod h1:+VXcEFOUjQeXUrEfH7P2k3Vhfqn+uyaTV2w8fJCt4cw= +github.com/EricHripko/buildkit-fdk v0.1.2 h1:HPGR25KdGBhGh9V/eCRFo2gWi8iCo89zFIm/bGiaF/M= +github.com/EricHripko/buildkit-fdk v0.1.2/go.mod h1:fFzx/VV3VyTTw6w7nFFsf88HJ5kwX1P61wLMcnz6Hb4= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= diff --git a/internal/app/packer-frontend/build.go b/internal/app/packer-frontend/build.go index 2764ffd..65a81d5 100644 --- a/internal/app/packer-frontend/build.go +++ b/internal/app/packer-frontend/build.go @@ -4,7 +4,6 @@ import ( "context" "encoding/json" "fmt" - "strconv" "github.com/EricHripko/pack.yaml/pkg/packer2llb" "github.com/EricHripko/pack.yaml/pkg/packer2llb/config" @@ -18,10 +17,6 @@ import ( "golang.org/x/sync/errgroup" ) -const ( - keyMultiPlatform = "multi-platform" -) - // Build the image with this frontend. func Build(ctx context.Context, c client.Client) (*client.Result, error) { return BuildWithService(ctx, c, cib.NewService(ctx, c)) @@ -31,23 +26,14 @@ func Build(ctx context.Context, c client.Client) (*client.Result, error) { // perform the build. //nolint:gocyclo // Frontends are complex func BuildWithService(ctx context.Context, c client.Client, svc cib.Service) (*client.Result, error) { - opts := svc.GetOpts() - // Identify target platforms targetPlatforms, err := svc.GetTargetPlatforms() if err != nil { return nil, err } - exportMap := len(targetPlatforms) > 1 - if v := opts[keyMultiPlatform]; v != "" { - b, err := strconv.ParseBool(v) - if err != nil { - return nil, errors.Errorf("invalid boolean value %s", v) - } - if !b && exportMap { - return nil, errors.Errorf("returning multiple target plaforms is not allowed") - } - exportMap = b + exportMap, err := svc.GetIsMultiPlatform() + if err != nil { + return nil, err } expPlatforms := &exptypes.Platforms{ Platforms: make([]exptypes.Platform, len(targetPlatforms)), diff --git a/internal/app/packer-frontend/build_test.go b/internal/app/packer-frontend/build_test.go index de681c0..52d7fe0 100644 --- a/internal/app/packer-frontend/build_test.go +++ b/internal/app/packer-frontend/build_test.go @@ -34,15 +34,15 @@ func (suite *singleTestSuite) SetupTest() { suite.build = cib_mock.NewMockService(suite.ctrl) suite.client = cib_mock.NewMockClient(suite.ctrl) - suite.build.EXPECT(). - GetOpts(). - Return(map[string]string{}) platforms := []*specs.Platform{ {OS: "linux", Architecture: "amd64"}, } suite.build.EXPECT(). GetTargetPlatforms(). Return(platforms, nil) + suite.build.EXPECT(). + GetIsMultiPlatform(). + Return(false, nil) } func (suite *singleTestSuite) TearDownTest() { @@ -340,9 +340,6 @@ func (suite *multiTestSuite) TearDownTest() { func (suite *multiTestSuite) TestTargetPlatformFails() { // Arrange - suite.build.EXPECT(). - GetOpts(). - Return(map[string]string{}) expected := errors.New("something went wrong") suite.build.EXPECT(). GetTargetPlatforms(). @@ -355,57 +352,11 @@ func (suite *multiTestSuite) TestTargetPlatformFails() { require.Same(suite.T(), expected, actual) } -func (suite *multiTestSuite) TestParseFails() { - // Arrange - opts := map[string]string{ - keyMultiPlatform: "invalid", - } - suite.build.EXPECT(). - GetOpts(). - Return(opts) - platforms := []*specs.Platform{ - {OS: "linux", Architecture: "amd64"}, - {OS: "linux", Architecture: "arm64"}, - } - suite.build.EXPECT(). - GetTargetPlatforms(). - Return(platforms, nil) - - // Act - _, err := BuildWithService(suite.ctx, suite.client, suite.build) - - // Assert - require.NotNil(suite.T(), err) -} - -func (suite *multiTestSuite) TestNotAllowed() { - // Arrange - opts := map[string]string{ - keyMultiPlatform: "false", - } - suite.build.EXPECT(). - GetOpts(). - Return(opts) - platforms := []*specs.Platform{ - {OS: "linux", Architecture: "amd64"}, - {OS: "linux", Architecture: "arm64"}, - } - suite.build.EXPECT(). - GetTargetPlatforms(). - Return(platforms, nil) - - // Act - _, err := BuildWithService(suite.ctx, suite.client, suite.build) - - // Assert - require.NotNil(suite.T(), err) -} - func (suite *multiTestSuite) TestSucceeds() { // Arrange suite.build.EXPECT(). - GetOpts(). - Return(map[string]string{}) + GetIsMultiPlatform(). + Return(true, nil) platforms := []*specs.Platform{ {OS: "linux", Architecture: "amd64"}, {OS: "linux", Architecture: "arm64"},