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