Skip to content

Commit 31dcfc0

Browse files
committed
Podman buildx manifest
1 parent 07045cc commit 31dcfc0

File tree

1 file changed

+33
-12
lines changed

1 file changed

+33
-12
lines changed

common/common.go

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ var CommandVerbose bool
6565
var ShapeMap = map[string][]string{
6666
modelsv2.AppShapeGENERICX86: {"linux/amd64"},
6767
modelsv2.AppShapeGENERICARM: {"linux/arm64"},
68-
modelsv2.AppShapeGENERICX86ARM: {"linux/amd64", "linux/arm64"},
68+
modelsv2.AppShapeGENERICX86ARM: {"linux/arm64", "linux/amd64"},
6969
}
7070

7171
var TargetPlatformMap = map[string][]string{
@@ -425,7 +425,7 @@ func buildXDockerCommand(imageName, dockerfile string, buildArgs []string, noCac
425425
args := []string{
426426
buildCommand,
427427
"build",
428-
"-t", name,
428+
//"-t", name,
429429
"-f", dockerfile,
430430
//"--load",
431431
"--platform", strings.Join(architectures, ","),
@@ -450,11 +450,12 @@ func buildXDockerCommand(imageName, dockerfile string, buildArgs []string, noCac
450450

451451
if containerEngineType != containerEngineTypeDocker {
452452
fmt.Println("*** engine type not docker append load")
453+
args = append(args, "--manifest", name)
453454
args = append(args, "--load")
454455
} else {
455-
fmt.Println("*** engine type docker append push")
456+
fmt.Println("*** engine type docker append push")
457+
args = append(args, "-t", name)
456458
args = append(args, "--push")
457-
458459
}
459460

460461
args = append(args,
@@ -466,12 +467,16 @@ func buildXDockerCommand(imageName, dockerfile string, buildArgs []string, noCac
466467
return args
467468
}
468469

469-
func buildDockerCommand(imageName, dockerfile string, buildArgs []string, noCache bool) []string {
470+
func buildDockerCommand(imageName, dockerfile string, buildArgs []string, noCache bool, architectures []string) []string {
470471
var name = imageName
472+
plat:= strings.Join(architectures,"," )
473+
fmt.Println("build platform is %v", plat)
474+
471475
args := []string{
472476
"build",
473477
"-t", name,
474478
"-f", dockerfile,
479+
"--platform", strings.Join(architectures, ","),
475480
}
476481

477482
if noCache {
@@ -554,12 +559,15 @@ func RunBuild(verbose bool, dir, imageName, dockerfile string, buildArgs []strin
554559
defer cleanupContainerBuilder(containerEngineType)
555560
} else {
556561
fmt.Println("TargetedPlatform and hostPlatform are same")
557-
dockerBuildCmdArgs = buildDockerCommand(imageName, dockerfile, buildArgs, noCache)
562+
fmt.Println("1. issuePush is ", issuePush)
563+
dockerBuildCmdArgs = buildDockerCommand(imageName, dockerfile, buildArgs, noCache, mappedArchitectures )
558564
issuePush = true
565+
fmt.Println("2. issuePush is ", issuePush)
559566
}
560567
}
561568
}
562-
569+
fmt.Println("*****containerEngineType*****",containerEngineType )
570+
fmt.Println("*****dockerBuildCmdArgs*******", dockerBuildCmdArgs)
563571
cmd := exec.Command(containerEngineType, dockerBuildCmdArgs...)
564572
cmd.Dir = dir
565573
cmd.Stderr = buildErr // Doesn't look like there's any output to stderr on docker build, whether it's successful or not.
@@ -588,11 +596,24 @@ func RunBuild(verbose bool, dir, imageName, dockerfile string, buildArgs []strin
588596
// Push to docker registry
589597
fmt.Println("Using Container engine", containerEngineType, "to push")
590598
fmt.Printf("Pushing %v to docker registry...", imageName)
591-
cmd := exec.Command(containerEngineType, "push", imageName)
592-
cmd.Stderr = os.Stderr
593-
cmd.Stdout = os.Stdout
594-
if err := cmd.Run(); err != nil {
595-
return fmt.Errorf("error running %v push, are you logged?: %v", containerEngineType, err)
599+
if issuePush == true {
600+
// build push
601+
fmt.Println("***build push***")
602+
cmd := exec.Command(containerEngineType, "push", imageName)
603+
cmd.Stderr = os.Stderr
604+
cmd.Stdout = os.Stdout
605+
if err := cmd.Run(); err != nil {
606+
return fmt.Errorf("error running %v push, are you logged?: %v", containerEngineType, err)
607+
}
608+
} else {
609+
// buildX push for podman
610+
fmt.Println("***buildX push for podman***")
611+
cmd := exec.Command(containerEngineType, "manifest", "push", imageName)
612+
cmd.Stderr = os.Stderr
613+
cmd.Stdout = os.Stdout
614+
if err := cmd.Run(); err != nil {
615+
return fmt.Errorf("error running %v push, are you logged?: %v", containerEngineType, err)
616+
}
596617
}
597618
}
598619
return nil

0 commit comments

Comments
 (0)