don't create metadatafile, just generate a random name

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
Nicolas De Loof 2025-06-11 15:35:54 +02:00 committed by Guillaume Lours
parent 97530790fa
commit 4893a8b9ad

View File

@ -23,6 +23,7 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"math/rand"
"os" "os"
"os/exec" "os/exec"
"path/filepath" "path/filepath"
@ -249,20 +250,22 @@ func (s *composeService) doBuildBake(ctx context.Context, project *types.Project
} }
logrus.Debugf("bake build config:\n%s", string(b)) logrus.Debugf("bake build config:\n%s", string(b))
metadata, err := os.CreateTemp(os.TempDir(), "compose") var metadataFile string
if err != nil { for {
return nil, err // we don't use os.CreateTemp here as we need a temporary file name, but don't want it actually created
// as bake relies on atomicwriter and this creates conflict during rename
metadataFile = filepath.Join(os.TempDir(), fmt.Sprintf("compose-build-metadataFile-%d.json", rand.Int31()))
if _, err = os.Stat(metadataFile); os.IsNotExist(err) {
break
}
} }
defer func() {
_ = os.Remove(metadata.Name())
}()
buildx, err := manager.GetPlugin("buildx", s.dockerCli, &cobra.Command{}) buildx, err := manager.GetPlugin("buildx", s.dockerCli, &cobra.Command{})
if err != nil { if err != nil {
return nil, err return nil, err
} }
args := []string{"bake", "--file", "-", "--progress", "rawjson", "--metadata-file", metadata.Name()} args := []string{"bake", "--file", "-", "--progress", "rawjson", "--metadata-file", metadataFile}
mustAllow := buildx.Version != "" && versions.GreaterThanOrEqualTo(buildx.Version[1:], "0.17.0") mustAllow := buildx.Version != "" && versions.GreaterThanOrEqualTo(buildx.Version[1:], "0.17.0")
if mustAllow { if mustAllow {
// FIXME we should prompt user about this, but this is a breaking change in UX // FIXME we should prompt user about this, but this is a breaking change in UX
@ -343,7 +346,7 @@ func (s *composeService) doBuildBake(ctx context.Context, project *types.Project
return nil, fmt.Errorf("failed to execute bake: %w", err) return nil, fmt.Errorf("failed to execute bake: %w", err)
} }
b, err = os.ReadFile(metadata.Name()) b, err = os.ReadFile(metadataFile)
if err != nil { if err != nil {
return nil, err return nil, err
} }