[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 == "" {