blob: 372e5e9521b48fd2e8ed2166508fa4509e2e4ce2 [file] [log] [blame]
// 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
})
}