Skip to content

Commit

Permalink
Eliminate more of boilerplate (#5)
Browse files Browse the repository at this point in the history
  • Loading branch information
EricHripko authored May 18, 2021
1 parent 07986b4 commit eca8a8d
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 75 deletions.
3 changes: 1 addition & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
)
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -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=
Expand Down
20 changes: 3 additions & 17 deletions internal/app/packer-frontend/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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))
Expand All @@ -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)),
Expand Down
59 changes: 5 additions & 54 deletions internal/app/packer-frontend/build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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().
Expand All @@ -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"},
Expand Down

0 comments on commit eca8a8d

Please sign in to comment.