From 0dcace336cc5f723150d77487dbaf56f849cc361 Mon Sep 17 00:00:00 2001 From: Dan Luhring Date: Mon, 10 Jun 2024 15:25:51 -0400 Subject: [PATCH] debug: build unsupported platforms with a warning Signed-off-by: Dan Luhring --- pkg/build/gobuild.go | 19 +++++++++++-------- pkg/internal/git/clone.go | 40 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 10 deletions(-) diff --git a/pkg/build/gobuild.go b/pkg/build/gobuild.go index 604832c92..124638bc0 100644 --- a/pkg/build/gobuild.go +++ b/pkg/build/gobuild.go @@ -309,11 +309,11 @@ func getDelve(ctx context.Context, platform v1.Platform) (string, error) { cloneDir := filepath.Join(tmpInstallDir, "delve") err = os.MkdirAll(cloneDir, 0755) if err != nil { - return "", fmt.Errorf("making dir for delve clone: %v", err) + return "", fmt.Errorf("making dir for delve clone: %w", err) } err = git.Clone(ctx, cloneDir, delveCloneURL) if err != nil { - return "", fmt.Errorf("cloning delve repo: %v", err) + return "", fmt.Errorf("cloning delve repo: %w", err) } osArchDir := fmt.Sprintf("%s_%s", platform.OS, platform.Architecture) delveBinaryPath := filepath.Join(tmpInstallDir, "bin", osArchDir, "dlv") @@ -321,16 +321,15 @@ func getDelve(ctx context.Context, platform v1.Platform) (string, error) { // install delve to tmp directory args := []string{ "build", - "-C", - cloneDir, - "./cmd/dlv", "-o", delveBinaryPath, + "./cmd/dlv", } gobin := getGoBinary() cmd := exec.CommandContext(ctx, gobin, args...) cmd.Env = env + cmd.Dir = cloneDir var output bytes.Buffer cmd.Stderr = &output @@ -924,6 +923,10 @@ func (g *gobuild) configForImportPath(ip string) Config { return config } +func (g gobuild) useDebugging(platform v1.Platform) bool { + return g.debug && doesPlatformSupportDebugging(platform) +} + func (g *gobuild) buildOne(ctx context.Context, refStr string, base v1.Image, platform *v1.Platform) (oci.SignedImage, error) { if err := g.semaphore.Acquire(ctx, 1); err != nil { return nil, err @@ -965,7 +968,7 @@ func (g *gobuild) buildOne(ctx context.Context, refStr string, base v1.Image, pl } } if g.debug && !doesPlatformSupportDebugging(*platform) { - return nil, fmt.Errorf("debugging is not supported for %s", platform) + log.Printf("image for platform %q will be built without debugging enabled because debugging is not supported for that platform", *platform) } if !g.platformMatcher.matches(platform) { @@ -1078,7 +1081,7 @@ func (g *gobuild) buildOne(ctx context.Context, refStr string, base v1.Image, pl }) delvePath := "" // path for delve in image - if g.debug { + if g.useDebugging(*platform) { // get delve locally delveBinary, err := getDelve(ctx, *platform) if err != nil { @@ -1144,7 +1147,7 @@ func (g *gobuild) buildOne(ctx context.Context, refStr string, base v1.Image, pl updatePath(cfg, `C:\ko-app`) cfg.Config.Env = append(cfg.Config.Env, `KO_DATA_PATH=C:\var\run\ko`) } else { - if g.debug { + if g.useDebugging(*platform) { cfg.Config.Entrypoint = append([]string{delvePath}, delveArgs...) cfg.Config.Entrypoint = append(cfg.Config.Entrypoint, appPath) } diff --git a/pkg/internal/git/clone.go b/pkg/internal/git/clone.go index 05a3c51ec..628302a0b 100644 --- a/pkg/internal/git/clone.go +++ b/pkg/internal/git/clone.go @@ -1,3 +1,39 @@ +// Copyright 2024 ko Build Authors All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// MIT License +// +// Copyright (c) 2016-2022 Carlos Alexandro Becker +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + package git import ( @@ -10,7 +46,7 @@ import ( func Clone(ctx context.Context, dir string, repoURL string) error { rc := runConfig{ dir: dir, - args: []string{"clone", "--depth", "1", repoURL}, + args: []string{"clone", "--depth", "1", repoURL, "."}, } cmd := exec.CommandContext(ctx, "git", "clone", repoURL, dir) @@ -18,7 +54,7 @@ func Clone(ctx context.Context, dir string, repoURL string) error { _, err := run(ctx, rc) if err != nil { - return fmt.Errorf("running git clone: %v", err) + return fmt.Errorf("running git clone: %w", err) } return nil