cmd: fix possible skipped defers for build and bake

Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
CrazyMax
2025-07-01 09:45:27 +02:00
parent 6deb9ff384
commit a711b8ff88
5 changed files with 28 additions and 5 deletions
-1
View File
@@ -49,7 +49,6 @@ linters:
- "assignOp" - "assignOp"
- "appendAssign" - "appendAssign"
- "singleCaseSwitch" - "singleCaseSwitch"
- "exitAfterDefer" # FIXME
gosec: gosec:
excludes: excludes:
- G204 - G204
+8
View File
@@ -7,6 +7,7 @@ import (
"path/filepath" "path/filepath"
"github.com/docker/buildx/commands" "github.com/docker/buildx/commands"
"github.com/docker/buildx/util/cobrautil"
"github.com/docker/buildx/util/desktop" "github.com/docker/buildx/util/desktop"
"github.com/docker/buildx/version" "github.com/docker/buildx/version"
"github.com/docker/cli/cli" "github.com/docker/cli/cli"
@@ -101,6 +102,13 @@ func main() {
os.Exit(sterr.StatusCode) os.Exit(sterr.StatusCode)
} }
// Check for ExitCodeError, which is used to exit with a specific code
// without printing an error message.
var exitCodeErr cobrautil.ExitCodeError
if errors.As(err, &exitCodeErr) {
os.Exit(int(exitCodeErr))
}
for _, s := range solvererrdefs.Sources(err) { for _, s := range solvererrdefs.Sources(err) {
s.Print(cmd.Err()) s.Print(cmd.Err())
} }
+2 -1
View File
@@ -24,6 +24,7 @@ import (
"github.com/docker/buildx/builder" "github.com/docker/buildx/builder"
"github.com/docker/buildx/localstate" "github.com/docker/buildx/localstate"
"github.com/docker/buildx/util/buildflags" "github.com/docker/buildx/util/buildflags"
"github.com/docker/buildx/util/cobrautil"
"github.com/docker/buildx/util/cobrautil/completion" "github.com/docker/buildx/util/cobrautil/completion"
"github.com/docker/buildx/util/confutil" "github.com/docker/buildx/util/confutil"
"github.com/docker/buildx/util/desktop" "github.com/docker/buildx/util/desktop"
@@ -448,7 +449,7 @@ func runBake(ctx context.Context, dockerCli command.Cli, targets []string, in ba
} }
if exitCode != 0 { if exitCode != 0 {
os.Exit(exitCode) return cobrautil.ExitCodeError(exitCode)
} }
return nil return nil
+3 -3
View File
@@ -384,10 +384,10 @@ func runBuild(ctx context.Context, dockerCli command.Cli, options buildOptions)
} }
} }
if opts.CallFunc != nil { if opts.CallFunc != nil {
if exitcode, err := printResult(dockerCli.Out(), opts.CallFunc, resp.ExporterResponse, options.target, inputs); err != nil { if exitCode, err := printResult(dockerCli.Out(), opts.CallFunc, resp.ExporterResponse, options.target, inputs); err != nil {
return err return err
} else if exitcode != 0 { } else if exitCode != 0 {
os.Exit(exitcode) return cobrautil.ExitCodeError(exitCode)
} }
} }
if v, ok := resp.ExporterResponse["frontend.result.inlinemessage"]; ok { if v, ok := resp.ExporterResponse["frontend.result.inlinemessage"]; ok {
+15
View File
@@ -0,0 +1,15 @@
package cobrautil
import (
"fmt"
)
type ExitCodeError int
func (e ExitCodeError) Error() string {
return fmt.Sprintf("exiting with code %d", int(e))
}
func (e ExitCodeError) Unwrap() error {
return nil
}