Skip to content

Commit b64346d

Browse files
committed
FnCLI fn deploy
1 parent 06e5e0d commit b64346d

File tree

1 file changed

+41
-12
lines changed

1 file changed

+41
-12
lines changed

common/common.go

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
"os/exec"
3333
"os/signal"
3434
"path/filepath"
35+
"runtime"
3536
"strings"
3637
"time"
3738
"unicode"
@@ -55,6 +56,7 @@ const (
5556
MinRequiredDockerVersion = "17.5.0"
5657
BuildxBuilderInstance = "oci_fn_builder"
5758
DefaultAppShape = modelsv2.AppShapeGENERICX86
59+
containerEngineTypeDocker = "docker"
5860
)
5961

6062
var GlobalVerbose bool
@@ -66,6 +68,12 @@ var ShapeMap = map[string][]string{
6668
modelsv2.AppShapeGENERICX86ARM: {"linux/amd64", "linux/arm64"},
6769
}
6870

71+
var TargetPlatformMap = map[string][]string{
72+
modelsv2.AppShapeGENERICX86: {"amd64"},
73+
modelsv2.AppShapeGENERICARM: {"arm64"},
74+
modelsv2.AppShapeGENERICX86ARM: {"amd64_arm64"},
75+
}
76+
6977
func IsVerbose() bool {
7078
return GlobalVerbose || CommandVerbose
7179
}
@@ -435,7 +443,6 @@ func buildXDockerCommand(imageName, dockerfile string, buildArgs []string, noCac
435443
var label = "imageName=" + imageName
436444
args = append(args, "--build-arg", arg)
437445
args = append(args, "--label", label)
438-
args = append(args, "--push")
439446
}
440447

441448
args = append(args,
@@ -512,20 +519,30 @@ func RunBuild(verbose bool, dir, imageName, dockerfile string, buildArgs []strin
512519
go func(done chan<- error) {
513520
var dockerBuildCmdArgs []string
514521
// Depending whether architecture list is passed or not trigger docker buildx or docker build accordingly
515-
var mappedArchitectures []string
522+
516523
if arch, ok := ShapeMap[shape]; ok {
524+
var mappedArchitectures []string
517525
mappedArchitectures = append(mappedArchitectures, arch...)
518-
err := initializeContainerBuilder(containerEngineType, mappedArchitectures)
519-
if err != nil {
520-
done <- err
521-
return
526+
var hostedPlatform = runtime.GOARCH
527+
if platform, ok := TargetPlatformMap[shape]; ok {
528+
// create target platform string to compare with hosted platform
529+
targetPlatform := strings.Join(platform," ")
530+
fmt.Println("hosted platform %v target platform %v", hostedPlatform, targetPlatform)
531+
if targetPlatform != hostedPlatform {
532+
fmt.Println("TargetedPlatform and hostPlatform are not same")
533+
err := initializeContainerBuilder(containerEngineType, mappedArchitectures)
534+
if err != nil {
535+
done <- err
536+
return
537+
}
538+
dockerBuildCmdArgs = buildXDockerCommand(imageName, dockerfile, buildArgs, noCache, mappedArchitectures)
539+
// perform cleanup
540+
defer cleanupContainerBuilder(containerEngineType)
541+
} else {
542+
fmt.Println("TargetedPlatform and hostPlatform are same")
543+
dockerBuildCmdArgs = buildDockerCommand(imageName, dockerfile, buildArgs, noCache)
544+
}
522545
}
523-
524-
dockerBuildCmdArgs = buildXDockerCommand(imageName, dockerfile, buildArgs, noCache, mappedArchitectures)
525-
// perform cleanup
526-
defer cleanupContainerBuilder(containerEngineType)
527-
} else {
528-
dockerBuildCmdArgs = buildDockerCommand(imageName, dockerfile, buildArgs, noCache)
529546
}
530547

531548
cmd := exec.Command(containerEngineType, dockerBuildCmdArgs...)
@@ -551,6 +568,15 @@ func RunBuild(verbose bool, dir, imageName, dockerfile string, buildArgs []strin
551568
fmt.Fprintln(os.Stderr)
552569
return fmt.Errorf("build cancelled on signal %v", signal)
553570
}
571+
// Push to docker registry
572+
fmt.Println("Using Container engine", containerEngineType, "to push")
573+
fmt.Printf("Pushing %v to docker registry...", imageName)
574+
cmd := exec.Command(containerEngineType, "push", imageName)
575+
cmd.Stderr = os.Stderr
576+
cmd.Stdout = os.Stdout
577+
if err := cmd.Run(); err != nil {
578+
return fmt.Errorf("error running %v push, are you logged?: %v", containerEngineType, err)
579+
}
554580
return nil
555581
}
556582

@@ -620,6 +646,9 @@ func isSupportedByDefaultBuildxPlatforms(containerEngineType string, platforms [
620646

621647
func initializeContainerBuilder(containerEngineType string, platforms []string) error {
622648

649+
if containerEngineType == containerEngineTypeDocker {
650+
return nil
651+
}
623652
if isSupportedByDefaultBuildxPlatforms(containerEngineType, platforms) {
624653
return nil
625654
}

0 commit comments

Comments
 (0)