Skip to content

Commit 7cca91b

Browse files
committed
removing previous attempt to default the Target if user doesn't provided one
Signed-off-by: Juan Bustamante <jbustamante@vmware.com>
1 parent dad414b commit 7cca91b

8 files changed

Lines changed: 93 additions & 120 deletions

File tree

pkg/buildpack/downloader_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010

1111
"github.com/buildpacks/imgutil/fakes"
1212
"github.com/buildpacks/lifecycle/api"
13-
"github.com/docker/docker/api/types"
1413
"github.com/docker/docker/api/types/system"
1514
"github.com/golang/mock/gomock"
1615
"github.com/heroku/color"
@@ -62,7 +61,6 @@ func testBuildpackDownloader(t *testing.T, when spec.G, it spec.S) {
6261
var createPackage = func(imageName string) *fakes.Image {
6362
packageImage := fakes.NewImage(imageName, "", nil)
6463
mockImageFactory.EXPECT().NewImage(packageImage.Name(), false, dist.Target{OS: "linux"}).Return(packageImage, nil)
65-
mockDockerClient.EXPECT().ServerVersion(gomock.Any()).Return(types.Version{Os: "linux", Arch: "amd64"}, nil)
6664

6765
pack, err := client.NewClient(
6866
client.WithLogger(logger),

pkg/buildpack/multi_architecture_helper.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func (m *MultiArchConfig) Targets() []dist.Target {
3838

3939
// CopyConfigFiles will, given a base directory (which is expected to be the root folder of a single buildpack),
4040
// copy the buildpack.toml file from the base directory into the corresponding platform root folder for each target.
41-
// It will return an array with all the platform root folders where the buildpack.toml file were copied.
41+
// It will return an array with all the platform root folders where the buildpack.toml file was copied.
4242
func (m *MultiArchConfig) CopyConfigFiles(baseDir string) ([]string, error) {
4343
var filesToClean []string
4444
targets := dist.ExpandTargetsDistributions(m.Targets()...)

pkg/client/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ func (f *imageFactory) NewImage(repoName string, daemon bool, target dist.Target
323323
return local.NewImage(repoName, f.dockerClient, local.WithDefaultPlatform(platform))
324324
}
325325

326-
// when targeting a registry, we need to use variant and osVersion to hit the correct image
326+
// when targeting a registry, we need to use variant if available to hit the correct image
327327
platform.Variant = target.ArchVariant
328328
if len(target.Distributions) > 0 {
329329
// We assume the given target's distributions were already expanded, we should be dealing with just 1 distribution name and version.

pkg/client/create_builder.go

Lines changed: 64 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package client
33
import (
44
"context"
55
"fmt"
6-
"runtime"
76
"sort"
87
"strings"
98

@@ -67,46 +66,19 @@ func (c *Client) CreateBuilder(ctx context.Context, opts CreateBuilderOptions) e
6766
multiArch := len(targets) > 1 && opts.Publish
6867

6968
var digests []string
70-
for _, target := range targets {
71-
if err := c.validateConfig(ctx, opts, target); err != nil {
72-
return err
73-
}
74-
75-
bldr, err := c.createBaseBuilder(ctx, opts, target)
76-
if err != nil {
77-
return errors.Wrap(err, "failed to create builder")
78-
}
79-
80-
if err := c.addBuildpacksToBuilder(ctx, opts, bldr); err != nil {
81-
return errors.Wrap(err, "failed to add buildpacks to builder")
82-
}
83-
84-
if err := c.addExtensionsToBuilder(ctx, opts, bldr); err != nil {
85-
return errors.Wrap(err, "failed to add extensions to builder")
86-
}
87-
88-
bldr.SetOrder(opts.Config.Order)
89-
bldr.SetOrderExtensions(opts.Config.OrderExtensions)
90-
91-
if opts.Config.Stack.ID != "" {
92-
bldr.SetStack(opts.Config.Stack)
69+
for _, t := range targets {
70+
var target *dist.Target
71+
if t.OS == "" && t.Arch == "" {
72+
target = nil
73+
} else {
74+
target = &t
9375
}
94-
bldr.SetRunImage(opts.Config.Run)
95-
bldr.SetBuildConfigEnv(opts.BuildConfigEnv)
9676

97-
err = bldr.Save(c.logger, builder.CreatorMetadata{Version: c.version})
77+
digest, err := c.createBuilderTarget(ctx, opts, target, multiArch)
9878
if err != nil {
9979
return err
10080
}
101-
102-
if multiArch {
103-
// We need to keep the identifier to create the image index
104-
id, err := bldr.Image().Identifier()
105-
if err != nil {
106-
return errors.Wrapf(err, "determining image manifest digest")
107-
}
108-
digests = append(digests, id.String())
109-
}
81+
digests = append(digests, digest)
11082
}
11183

11284
if multiArch && len(digests) > 1 {
@@ -120,7 +92,50 @@ func (c *Client) CreateBuilder(ctx context.Context, opts CreateBuilderOptions) e
12092
return nil
12193
}
12294

123-
func (c *Client) validateConfig(ctx context.Context, opts CreateBuilderOptions, target dist.Target) error {
95+
func (c *Client) createBuilderTarget(ctx context.Context, opts CreateBuilderOptions, target *dist.Target, multiArch bool) (string, error) {
96+
if err := c.validateConfig(ctx, opts, target); err != nil {
97+
return "", err
98+
}
99+
100+
bldr, err := c.createBaseBuilder(ctx, opts, target)
101+
if err != nil {
102+
return "", errors.Wrap(err, "failed to create builder")
103+
}
104+
105+
if err := c.addBuildpacksToBuilder(ctx, opts, bldr); err != nil {
106+
return "", errors.Wrap(err, "failed to add buildpacks to builder")
107+
}
108+
109+
if err := c.addExtensionsToBuilder(ctx, opts, bldr); err != nil {
110+
return "", errors.Wrap(err, "failed to add extensions to builder")
111+
}
112+
113+
bldr.SetOrder(opts.Config.Order)
114+
bldr.SetOrderExtensions(opts.Config.OrderExtensions)
115+
116+
if opts.Config.Stack.ID != "" {
117+
bldr.SetStack(opts.Config.Stack)
118+
}
119+
bldr.SetRunImage(opts.Config.Run)
120+
bldr.SetBuildConfigEnv(opts.BuildConfigEnv)
121+
122+
err = bldr.Save(c.logger, builder.CreatorMetadata{Version: c.version})
123+
if err != nil {
124+
return "", err
125+
}
126+
127+
if multiArch {
128+
// We need to keep the identifier to create the image index
129+
id, err := bldr.Image().Identifier()
130+
if err != nil {
131+
return "", errors.Wrapf(err, "determining image manifest digest")
132+
}
133+
return id.String(), nil
134+
}
135+
return "", nil
136+
}
137+
138+
func (c *Client) validateConfig(ctx context.Context, opts CreateBuilderOptions, target *dist.Target) error {
124139
if err := pubbldr.ValidateConfig(opts.Config); err != nil {
125140
return errors.Wrap(err, "invalid builder config")
126141
}
@@ -132,12 +147,12 @@ func (c *Client) validateConfig(ctx context.Context, opts CreateBuilderOptions,
132147
return nil
133148
}
134149

135-
func (c *Client) validateRunImageConfig(ctx context.Context, opts CreateBuilderOptions, target dist.Target) error {
150+
func (c *Client) validateRunImageConfig(ctx context.Context, opts CreateBuilderOptions, target *dist.Target) error {
136151
var runImages []imgutil.Image
137152
for _, r := range opts.Config.Run.Images {
138153
for _, i := range append([]string{r.Image}, r.Mirrors...) {
139154
if !opts.Publish {
140-
img, err := c.imageFetcher.Fetch(ctx, i, image.FetchOptions{Daemon: true, PullPolicy: opts.PullPolicy, Target: &target})
155+
img, err := c.imageFetcher.Fetch(ctx, i, image.FetchOptions{Daemon: true, PullPolicy: opts.PullPolicy, Target: target})
141156
if err != nil {
142157
if errors.Cause(err) != image.ErrNotFound {
143158
return errors.Wrap(err, "failed to fetch image")
@@ -148,7 +163,7 @@ func (c *Client) validateRunImageConfig(ctx context.Context, opts CreateBuilderO
148163
}
149164
}
150165

151-
img, err := c.imageFetcher.Fetch(ctx, i, image.FetchOptions{Daemon: false, PullPolicy: opts.PullPolicy, Target: &target})
166+
img, err := c.imageFetcher.Fetch(ctx, i, image.FetchOptions{Daemon: false, PullPolicy: opts.PullPolicy, Target: target})
152167
if err != nil {
153168
if errors.Cause(err) != image.ErrNotFound {
154169
return errors.Wrap(err, "failed to fetch image")
@@ -181,8 +196,8 @@ func (c *Client) validateRunImageConfig(ctx context.Context, opts CreateBuilderO
181196
return nil
182197
}
183198

184-
func (c *Client) createBaseBuilder(ctx context.Context, opts CreateBuilderOptions, target dist.Target) (*builder.Builder, error) {
185-
baseImage, err := c.imageFetcher.Fetch(ctx, opts.Config.Build.Image, image.FetchOptions{Daemon: !opts.Publish, PullPolicy: opts.PullPolicy, Target: &target})
199+
func (c *Client) createBaseBuilder(ctx context.Context, opts CreateBuilderOptions, target *dist.Target) (*builder.Builder, error) {
200+
baseImage, err := c.imageFetcher.Fetch(ctx, opts.Config.Build.Image, image.FetchOptions{Daemon: !opts.Publish, PullPolicy: opts.PullPolicy, Target: target})
186201
if err != nil {
187202
return nil, errors.Wrap(err, "fetch build image")
188203
}
@@ -364,37 +379,19 @@ func (c *Client) addConfig(ctx context.Context, kind string, config pubbldr.Modu
364379
func (c *Client) processBuilderCreateTargets(ctx context.Context, opts CreateBuilderOptions) ([]dist.Target, error) {
365380
var targets []dist.Target
366381

367-
// For backward compatibility, we must create a target with de default platform used in the Fetch implementation for daemon and remote
368-
// When daemon
369-
// OS: daemonInfo.Os,
370-
// Architecture: daemonInfo.Arch
371-
// When remote || layout
372-
// OS: "linux",
373-
// Architecture: runtime.GOARCH
374-
375-
if !opts.Publish {
376-
// daemon option
377-
info, err := c.docker.ServerVersion(ctx)
378-
if err != nil {
379-
return targets, err
380-
}
381-
if len(opts.Targets) > 0 {
382-
// when exporting to the daemon, we need to select just one target
383-
daemonTarget, err := c.daemonTarget(info, opts.Targets)
382+
if len(opts.Targets) > 0 {
383+
if opts.Publish {
384+
targets = opts.Targets
385+
} else {
386+
// find a target that matches the daemon
387+
daemonTarget, err := c.daemonTarget(ctx, opts.Targets)
384388
if err != nil {
385389
return targets, err
386390
}
387391
targets = append(targets, daemonTarget)
388-
} else {
389-
targets = append(targets, dist.Target{OS: info.Os, Arch: info.Arch})
390392
}
391393
} else {
392-
// remote option
393-
if len(opts.Targets) > 0 {
394-
targets = opts.Targets
395-
} else {
396-
targets = append(targets, dist.Target{OS: "linux", Arch: runtime.GOARCH})
397-
}
394+
targets = append(targets, dist.Target{})
398395
}
399396
return targets, nil
400397
}

pkg/client/create_builder_test.go

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"fmt"
77
"os"
88
"path/filepath"
9-
"runtime"
109
"strings"
1110
"testing"
1211

@@ -59,7 +58,6 @@ func testCreateBuilder(t *testing.T, when spec.G, it spec.S) {
5958
logger logging.Logger
6059
out bytes.Buffer
6160
tmpDir string
62-
target dist.Target
6361
)
6462
var prepareFetcherWithRunImages = func() {
6563
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/run-image", gomock.Any()).Return(fakeRunImage, nil).AnyTimes()
@@ -188,11 +186,6 @@ func testCreateBuilder(t *testing.T, when spec.G, it spec.S) {
188186

189187
tmpDir, err = os.MkdirTemp("", "create-builder-test")
190188
h.AssertNil(t, err)
191-
192-
target = dist.Target{
193-
OS: runtime.GOOS,
194-
Arch: runtime.GOARCH,
195-
}
196189
})
197190

198191
it.After(func() {
@@ -225,8 +218,8 @@ func testCreateBuilder(t *testing.T, when spec.G, it spec.S) {
225218
})
226219

227220
it("should fail when the stack ID from the builder config does not match the stack ID from the build image", func() {
228-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/build-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways, Target: &target}).Return(fakeBuildImage, nil)
229221
h.AssertNil(t, fakeBuildImage.SetLabel("io.buildpacks.stack.id", "other.stack.id"))
222+
prepareFetcherWithBuildImage()
230223
prepareFetcherWithRunImages()
231224

232225
err := subject.CreateBuilder(context.TODO(), opts)
@@ -369,13 +362,13 @@ func testCreateBuilder(t *testing.T, when spec.G, it spec.S) {
369362
})
370363

371364
it("should warn when the run image cannot be found", func() {
372-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/build-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways, Target: &target}).Return(fakeBuildImage, nil)
365+
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/build-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways}).Return(fakeBuildImage, nil)
373366

374-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/run-image", image.FetchOptions{Daemon: false, PullPolicy: image.PullAlways, Target: &target}).Return(nil, errors.Wrap(image.ErrNotFound, "yikes"))
375-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/run-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways, Target: &target}).Return(nil, errors.Wrap(image.ErrNotFound, "yikes"))
367+
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/run-image", image.FetchOptions{Daemon: false, PullPolicy: image.PullAlways}).Return(nil, errors.Wrap(image.ErrNotFound, "yikes"))
368+
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/run-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways}).Return(nil, errors.Wrap(image.ErrNotFound, "yikes"))
376369

377-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "localhost:5000/some/run-image", image.FetchOptions{Daemon: false, PullPolicy: image.PullAlways, Target: &target}).Return(nil, errors.Wrap(image.ErrNotFound, "yikes"))
378-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "localhost:5000/some/run-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways, Target: &target}).Return(nil, errors.Wrap(image.ErrNotFound, "yikes"))
370+
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "localhost:5000/some/run-image", image.FetchOptions{Daemon: false, PullPolicy: image.PullAlways}).Return(nil, errors.Wrap(image.ErrNotFound, "yikes"))
371+
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "localhost:5000/some/run-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways}).Return(nil, errors.Wrap(image.ErrNotFound, "yikes"))
379372

380373
err := subject.CreateBuilder(context.TODO(), opts)
381374
h.AssertNil(t, err)
@@ -384,14 +377,14 @@ func testCreateBuilder(t *testing.T, when spec.G, it spec.S) {
384377
})
385378

386379
it("should fail when not publish and the run image cannot be fetched", func() {
387-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/run-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways, Target: &target}).Return(nil, errors.New("yikes"))
380+
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/run-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways}).Return(nil, errors.New("yikes"))
388381

389382
err := subject.CreateBuilder(context.TODO(), opts)
390383
h.AssertError(t, err, "failed to fetch image: yikes")
391384
})
392385

393386
it("should fail when publish and the run image cannot be fetched", func() {
394-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/run-image", image.FetchOptions{Daemon: false, PullPolicy: image.PullAlways, Target: &target}).Return(nil, errors.New("yikes"))
387+
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/run-image", image.FetchOptions{Daemon: false, PullPolicy: image.PullAlways}).Return(nil, errors.New("yikes"))
395388

396389
opts.Publish = true
397390
err := subject.CreateBuilder(context.TODO(), opts)
@@ -411,12 +404,12 @@ func testCreateBuilder(t *testing.T, when spec.G, it spec.S) {
411404
when("publish is true", func() {
412405
it("should only try to validate the remote run image", func() {
413406
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/build-image", image.FetchOptions{Daemon: true}).Times(0)
414-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/run-image", image.FetchOptions{Daemon: true, Target: &target}).Times(0)
407+
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/run-image", image.FetchOptions{Daemon: true}).Times(0)
415408
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "localhost:5000/some/run-image", image.FetchOptions{Daemon: true}).Times(0)
416409

417-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/build-image", image.FetchOptions{Daemon: false, Target: &target}).Return(fakeBuildImage, nil)
418-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/run-image", image.FetchOptions{Daemon: false, Target: &target}).Return(fakeRunImage, nil)
419-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "localhost:5000/some/run-image", image.FetchOptions{Daemon: false, Target: &target}).Return(fakeRunImageMirror, nil)
410+
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/build-image", image.FetchOptions{Daemon: false}).Return(fakeBuildImage, nil)
411+
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/run-image", image.FetchOptions{Daemon: false}).Return(fakeRunImage, nil)
412+
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "localhost:5000/some/run-image", image.FetchOptions{Daemon: false}).Return(fakeRunImageMirror, nil)
420413

421414
opts.Publish = true
422415

@@ -430,7 +423,7 @@ func testCreateBuilder(t *testing.T, when spec.G, it spec.S) {
430423
when("build image not found", func() {
431424
it("should fail", func() {
432425
prepareFetcherWithRunImages()
433-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/build-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways, Target: &target}).Return(nil, image.ErrNotFound)
426+
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/build-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways}).Return(nil, image.ErrNotFound)
434427

435428
err := subject.CreateBuilder(context.TODO(), opts)
436429
h.AssertError(t, err, "fetch build image: not found")
@@ -442,7 +435,7 @@ func testCreateBuilder(t *testing.T, when spec.G, it spec.S) {
442435
fakeImage := fakeBadImageStruct{}
443436

444437
prepareFetcherWithRunImages()
445-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/build-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways, Target: &target}).Return(fakeImage, nil)
438+
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/build-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways}).Return(fakeImage, nil)
446439

447440
err := subject.CreateBuilder(context.TODO(), opts)
448441
h.AssertError(t, err, "failed to create builder: invalid build-image")
@@ -466,7 +459,7 @@ func testCreateBuilder(t *testing.T, when spec.G, it spec.S) {
466459
prepareFetcherWithRunImages()
467460

468461
h.AssertNil(t, fakeBuildImage.SetOS("windows"))
469-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/build-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways, Target: &target}).Return(fakeBuildImage, nil)
462+
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/build-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways}).Return(fakeBuildImage, nil)
470463

471464
err = packClientWithExperimental.CreateBuilder(context.TODO(), opts)
472465
h.AssertNil(t, err)
@@ -478,7 +471,7 @@ func testCreateBuilder(t *testing.T, when spec.G, it spec.S) {
478471
prepareFetcherWithRunImages()
479472

480473
h.AssertNil(t, fakeBuildImage.SetOS("windows"))
481-
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/build-image", image.FetchOptions{Daemon: true, PullPolicy: image.PullAlways, Target: &target}).Return(fakeBuildImage, nil)
474+
mockImageFetcher.EXPECT().Fetch(gomock.Any(), "some/build-image", gomock.Any()).Return(fakeBuildImage, nil)
482475

483476
err := subject.CreateBuilder(context.TODO(), opts)
484477
h.AssertError(t, err, "failed to create builder: Windows containers support is currently experimental.")

pkg/client/package_buildpack.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"fmt"
66
"path/filepath"
77

8-
"github.com/docker/docker/api/types"
98
"github.com/pkg/errors"
109

1110
pubbldpkg "github.com/buildpacks/pack/buildpackage"
@@ -229,14 +228,10 @@ func (c *Client) downloadBuildpackFromURI(ctx context.Context, uri, relativeBase
229228

230229
func (c *Client) processPackageBuildpackTargets(ctx context.Context, opts PackageBuildpackOptions) ([]dist.Target, error) {
231230
var targets []dist.Target
232-
info, err := c.docker.ServerVersion(ctx)
233-
if err != nil {
234-
return targets, err
235-
}
236231
if len(opts.Targets) > 0 {
237232
// when exporting to the daemon, we need to select just one target
238233
if !opts.Publish && opts.Format == FormatImage {
239-
daemonTarget, err := c.daemonTarget(info, opts.Targets)
234+
daemonTarget, err := c.daemonTarget(ctx, opts.Targets)
240235
if err != nil {
241236
return targets, err
242237
}
@@ -268,7 +263,11 @@ func (c *Client) validateOSPlatform(ctx context.Context, os string, publish bool
268263
}
269264

270265
// daemonTarget returns a target that matches with the given daemon os/arch
271-
func (c *Client) daemonTarget(info types.Version, targets []dist.Target) (dist.Target, error) {
266+
func (c *Client) daemonTarget(ctx context.Context, targets []dist.Target) (dist.Target, error) {
267+
info, err := c.docker.ServerVersion(ctx)
268+
if err != nil {
269+
return dist.Target{}, err
270+
}
272271
for _, t := range targets {
273272
if t.Arch != "" && t.OS == info.Os && t.Arch == info.Arch {
274273
return t, nil

0 commit comments

Comments
 (0)