[build-images] Include source commit information in CLs
Bug: skia:13861
Change-Id: I854e8df812ecf31b05518dfe0d5231f2b8446bcb
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/600776
Reviewed-by: Ravi Mistry <rmistry@google.com>
Commit-Queue: Eric Boren <borenet@google.com>
diff --git a/cd/go/build-images/BUILD.bazel b/cd/go/build-images/BUILD.bazel
index 769a2b4..d2bbb80 100644
--- a/cd/go/build-images/BUILD.bazel
+++ b/cd/go/build-images/BUILD.bazel
@@ -11,10 +11,13 @@
importpath = "go.skia.org/infra/cd/go/build-images",
visibility = ["//visibility:private"],
deps = [
+ "//go/auth",
"//go/exec",
"//go/gerrit/rubberstamper",
"//go/git",
"//go/gitauth",
+ "//go/gitiles",
+ "//go/httputils",
"//go/louhi",
"//go/louhi/pubsub",
"//go/skerr",
@@ -22,6 +25,7 @@
"//task_driver/go/lib/git_steps",
"//task_driver/go/td",
"@com_github_urfave_cli_v2//:cli",
+ "@org_golang_x_oauth2//google",
],
)
diff --git a/cd/go/build-images/main.go b/cd/go/build-images/main.go
index 581798a..ffaea2c 100644
--- a/cd/go/build-images/main.go
+++ b/cd/go/build-images/main.go
@@ -30,6 +30,8 @@
flagLouhiPubSubProject = "louhi-pubsub-project"
flagRBE = "rbe"
flagRepo = "repo"
+ flagSourceRepo = "source-repo"
+ flagSourceCommit = "source-commit"
flagTarget = "target"
flagUser = "user"
flagWorkspace = "workspace"
@@ -50,7 +52,7 @@
},
&cli.StringFlag{
Name: flagRepo,
- Usage: "Repository URL.",
+ Usage: "URL of the repo to update.",
Required: true,
},
&cli.StringFlag{
@@ -69,6 +71,16 @@
Value: false,
},
&cli.StringFlag{
+ Name: flagSourceCommit,
+ Usage: "Commit hash which triggered the build.",
+ Required: false,
+ },
+ &cli.StringFlag{
+ Name: flagSourceRepo,
+ Usage: "URL of the repo which triggered the build.",
+ Required: false,
+ },
+ &cli.StringFlag{
Name: flagUser,
Usage: "User name to attribute the build.",
Required: true,
@@ -120,7 +132,7 @@
},
},
Action: func(ctx *cli.Context) error {
- return updateRefs(ctx.Context, ctx.String(flagRepo), ctx.String(flagWorkspace), ctx.String(flagUser), ctx.String(flagEmail), ctx.String(flagLouhiPubSubProject), ctx.String(flagLouhiExecutionID))
+ return updateRefs(ctx.Context, ctx.String(flagRepo), ctx.String(flagWorkspace), ctx.String(flagUser), ctx.String(flagEmail), ctx.String(flagLouhiPubSubProject), ctx.String(flagLouhiExecutionID), ctx.String(flagSourceRepo), ctx.String(flagSourceCommit))
},
},
},
diff --git a/cd/go/build-images/update-refs.go b/cd/go/build-images/update-refs.go
index b2a9ab9..56d4466 100644
--- a/cd/go/build-images/update-refs.go
+++ b/cd/go/build-images/update-refs.go
@@ -5,24 +5,29 @@
"fmt"
"io/fs"
"io/ioutil"
+ "path"
"path/filepath"
"regexp"
"strings"
+ "go.skia.org/infra/go/auth"
"go.skia.org/infra/go/exec"
"go.skia.org/infra/go/gerrit/rubberstamper"
"go.skia.org/infra/go/git"
"go.skia.org/infra/go/gitauth"
+ "go.skia.org/infra/go/gitiles"
+ "go.skia.org/infra/go/httputils"
"go.skia.org/infra/go/louhi"
"go.skia.org/infra/go/louhi/pubsub"
"go.skia.org/infra/go/skerr"
"go.skia.org/infra/task_driver/go/lib/git_steps"
"go.skia.org/infra/task_driver/go/td"
+ "golang.org/x/oauth2/google"
)
var uploadedCLRegex = regexp.MustCompile(`https://.*review\.googlesource\.com.*\d+`)
-func updateRefs(ctx context.Context, repo, workspace, username, email, louhiPubsubProject, executionID string) error {
+func updateRefs(ctx context.Context, repo, workspace, username, email, louhiPubsubProject, executionID, srcRepo, srcCommit string) error {
ctx = td.StartStep(ctx, td.Props("Update References"))
defer td.EndStep(ctx)
@@ -116,13 +121,39 @@
// Did we change anything?
if _, err := exec.RunCwd(ctx, checkoutDir, gitExec, "diff", "--exit-code"); err != nil {
// If so, create a CL.
+
+ // Build the commit message.
imageList := make([]string, 0, len(imageInfo.Images))
for _, image := range imageInfo.Images {
- imageList = append(imageList, image.Image)
+ imageList = append(imageList, path.Base(image.Image))
}
- commitMsg := fmt.Sprintf(`Update %s
+ commitMsg := fmt.Sprintf("Update %s", strings.Join(imageList, ", "))
+ if srcCommit != "" {
+ shortCommit := srcCommit
+ if len(shortCommit) > 12 {
+ shortCommit = shortCommit[:12]
+ }
+ commitMsg += " for " + shortCommit
+ }
+ commitMsg += "\n\n"
+ if srcRepo != "" && srcCommit != "" {
+ ts, err := google.DefaultTokenSource(ctx, auth.ScopeUserinfoEmail)
+ if err != nil {
+ return td.FailStep(ctx, err)
+ }
+ client := httputils.DefaultClientConfig().WithTokenSource(ts).Client()
+ gitilesRepo := gitiles.NewRepo(srcRepo, client)
+ commitDetails, err := gitilesRepo.Details(ctx, srcCommit)
+ if err != nil {
+ return td.FailStep(ctx, err)
+ }
+ commitMsg += fmt.Sprintf("%s/+/%s\n\n", srcRepo, srcCommit)
+ commitMsg += commitDetails.Subject
+ commitMsg += "\n\n"
+ }
+ commitMsg += rubberstamper.RandomChangeID()
-%s`, strings.Join(imageList, ", "), rubberstamper.RandomChangeID())
+ // Commit and push.
if _, err := exec.RunCwd(ctx, checkoutDir, gitExec, "commit", "-a", "-m", commitMsg); err != nil {
return td.FailStep(ctx, err)
}
@@ -130,6 +161,8 @@
if err != nil {
return td.FailStep(ctx, err)
}
+
+ // Send a pub/sub message.
if louhiPubsubProject != "" && executionID != "" {
match := uploadedCLRegex.FindString(output)
if match == "" {