| // Copyright 2023 Google LLC |
| // |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| package main |
| |
| import ( |
| "context" |
| "flag" |
| "fmt" |
| "path/filepath" |
| |
| sk_exec "go.skia.org/infra/go/exec" |
| "go.skia.org/infra/task_driver/go/lib/os_steps" |
| "go.skia.org/infra/task_driver/go/td" |
| "go.skia.org/skia/infra/bots/task_drivers/common" |
| ) |
| |
| var ( |
| // Required properties for this task. |
| projectId = flag.String("project_id", "", "ID of the Google Cloud project.") |
| taskId = flag.String("task_id", "", "ID of this task.") |
| taskName = flag.String("task_name", "", "Name of the task.") |
| pathInSkia = flag.String("path_in_skia", "example/external_client", "The directory from which to run the Bazel commands in Docker") |
| workdir = flag.String("workdir", ".", "Working directory, the root directory of a full Skia checkout") |
| |
| // Optional flags. |
| local = flag.Bool("local", false, "True if running locally (as opposed to on the CI/CQ)") |
| output = flag.String("o", "", "If provided, dump a JSON blob of step data to the given file. Prints to stdout if '-' is given.") |
| ) |
| |
| const ( |
| // Made from //skia/infra/gcc/Debian11/Dockerfile |
| dockerImage = "gcr.io/skia-public/gcc-debian11@sha256:1117ea368f43e45e0f543f74c8e3bf7ff6932df54ddaa4ba1fe6131209110d3d" |
| // pathToScript is the path inside the mounted docker container for the script |
| pathToScript = "/SRC/infra/bots/task_drivers/external_client/bazel_build_with_docker.sh" |
| ) |
| |
| func main() { |
| bazelFlags := common.MakeBazelFlags(common.MakeBazelFlagsOpts{ |
| Label: true, |
| }) |
| |
| // StartRun calls flag.Parse() |
| ctx := td.StartRun(projectId, taskId, taskName, output, local) |
| defer td.EndRun(ctx) |
| |
| bazelFlags.Validate(ctx) |
| |
| wd, err := os_steps.Abs(ctx, *workdir) |
| if err != nil { |
| td.Fatal(ctx, err) |
| } |
| skiaDir := filepath.Join(wd, "skia") |
| |
| if err := runDocker(ctx, skiaDir, *pathInSkia, *bazelFlags.Label); err != nil { |
| td.Fatal(ctx, err) |
| } |
| } |
| |
| func runDocker(ctx context.Context, checkoutDir, subpath, target string) error { |
| step := fmt.Sprintf("Running Bazel from inside Docker to build %s", target) |
| return td.Do(ctx, td.Props(step), func(ctx context.Context) error { |
| runCmd := &sk_exec.Command{ |
| Name: "docker", |
| Args: []string{ |
| "run", |
| "--shm-size=4gb", // more RAM for Bazel and compilation/linking |
| fmt.Sprintf("--mount=type=bind,source=%s,target=/SRC", checkoutDir), |
| dockerImage, |
| pathToScript, |
| subpath, |
| target, |
| }, |
| LogStdout: true, |
| LogStderr: true, |
| } |
| _, err := sk_exec.RunCommand(ctx, runCmd) |
| if err != nil { |
| return err |
| } |
| return nil |
| }) |
| } |