Skip to content

Commit

Permalink
support passing in platform as flag
Browse files Browse the repository at this point in the history
  • Loading branch information
coffee-cup committed Feb 5, 2025
1 parent 1089655 commit 293ae93
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 3 deletions.
6 changes: 5 additions & 1 deletion buildkit/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ type BuildWithBuildkitClientOptions struct {
ProgressMode string
SecretsHash string
Secrets map[string]string
Platform BuildPlatform
}

func BuildWithBuildkitClient(appDir string, plan *plan.BuildPlan, opts BuildWithBuildkitClientOptions) error {
Expand Down Expand Up @@ -60,7 +61,10 @@ func BuildWithBuildkitClient(appDir string, plan *plan.BuildPlan, opts BuildWith
return fmt.Errorf("failed to get buildkit info: %w", err)
}

buildPlatform := determineBuildPlatformFromHost()
buildPlatform := opts.Platform
if (buildPlatform == BuildPlatform{}) {
buildPlatform = DetermineBuildPlatformFromHost()
}

llbState, image, err := ConvertPlanToLLB(plan, ConvertPlanOptions{
BuildPlatform: buildPlatform,
Expand Down
2 changes: 1 addition & 1 deletion buildkit/frontend.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ func validatePlatform(opts map[string]string) (BuildPlatform, error) {
platformStr := opts["platform"]
if platformStr == "" {
// Default to host platform if none specified
return determineBuildPlatformFromHost(), nil
return DetermineBuildPlatformFromHost(), nil
}

// Error if multiple platforms are specified
Expand Down
2 changes: 1 addition & 1 deletion buildkit/platform.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ var (
}
)

func determineBuildPlatformFromHost() BuildPlatform {
func DetermineBuildPlatformFromHost() BuildPlatform {
if runtime.GOARCH == "arm64" {
return PlatformLinuxARM64
}
Expand Down
25 changes: 25 additions & 0 deletions cli/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ var BuildCommand = &cli.Command{
Name: "output",
Usage: "output the final filesystem to a local directory",
},
&cli.StringFlag{
Name: "platform",
Usage: "platform to build for (e.g. linux/amd64, linux/arm64)",
},
&cli.StringFlag{
Name: "progress",
Usage: "buildkit progress output mode. Values: auto, plain, tty",
Expand Down Expand Up @@ -63,13 +67,19 @@ var BuildCommand = &cli.Command{

secretsHash := getSecretsHash(env)

platform, err := getPlatform(cmd.String("platform"))
if err != nil {
return cli.Exit(err, 1)
}

err = buildkit.BuildWithBuildkitClient(app.Source, buildResult.Plan, buildkit.BuildWithBuildkitClientOptions{
ImageName: cmd.String("name"),
DumpLLB: cmd.Bool("llb"),
OutputDir: cmd.String("output"),
ProgressMode: cmd.String("progress"),
SecretsHash: secretsHash,
Secrets: env.Variables,
Platform: platform,
})
if err != nil {
return cli.Exit(err, 1)
Expand All @@ -79,6 +89,21 @@ var BuildCommand = &cli.Command{
},
}

func getPlatform(platformStr string) (buildkit.BuildPlatform, error) {
var platform buildkit.BuildPlatform
if platformStr == "" {
platform = buildkit.DetermineBuildPlatformFromHost()
} else if platformStr == "linux/arm64" {
platform = buildkit.PlatformLinuxARM64
} else if platformStr != "linux/amd64" {
return buildkit.BuildPlatform{}, fmt.Errorf("unsupported platform: %s. Must be one of: linux/amd64, linux/arm64", platformStr)
} else {
platform = buildkit.PlatformLinuxAMD64
}

return platform, nil
}

func validateSecrets(plan *plan.BuildPlan, env *app.Environment) error {
for _, secret := range plan.Secrets {
if _, ok := env.Variables[secret]; !ok {
Expand Down

0 comments on commit 293ae93

Please sign in to comment.