Index: ct/go/worker_scripts/build_repo/main.go |
diff --git a/ct/go/worker_scripts/build_repo/main.go b/ct/go/worker_scripts/build_repo/main.go |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d798e92b15569de9372d04189974599f55fc5908 |
--- /dev/null |
+++ b/ct/go/worker_scripts/build_repo/main.go |
@@ -0,0 +1,127 @@ |
+// Application that builds the specified repo and stores output to Google Storage. |
+package main |
+ |
+import ( |
+ "bytes" |
+ "flag" |
+ "fmt" |
+ "io/ioutil" |
+ "os" |
+ "path" |
+ "path/filepath" |
+ "strings" |
+ "time" |
+ |
+ "github.com/skia-dev/glog" |
+ |
+ "go.skia.org/infra/ct/go/util" |
+ "go.skia.org/infra/ct/go/worker_scripts/worker_common" |
+ "go.skia.org/infra/go/common" |
+ skutil "go.skia.org/infra/go/util" |
+) |
+ |
+var ( |
+ runID = flag.String("run_id", "", "The unique run id (typically requester + timestamp).") |
+ repoName = flag.String("repo", "chromium", "The name of the repo this script should build and store in Google Storage.") |
+ hashes = flag.String("hashes", "", "Comma separated list of hashes to checkout the specified repos to. Optional.") |
+ patches = flag.String("patches", "", "Comma separated names of patches to apply to the specified repo. Optional.") |
+ uploadSingleBuild = flag.Bool("single_build", true, "Whether only a single build should be created and uploaded to Google Storage.") |
+ targetPlatform = flag.String("target_platform", util.PLATFORM_LINUX, "The platform we want to build the specified repo for.") |
+ outDir = flag.String("out", "", "The out directory where hashes will be stored.") |
+) |
+ |
+func main() { |
+ defer common.LogPanic() |
+ worker_common.Init() |
+ defer util.TimeTrack(time.Now(), "Building Repo") |
+ defer glog.Flush() |
+ |
+ if *runID == "" { |
+ glog.Error("Must specify --run_id") |
+ return |
+ } |
+ if *outDir == "" { |
+ glog.Error("Must specify --out") |
+ return |
+ } |
+ |
+ // Instantiate GsUtil object. |
+ gs, err := util.NewGsUtil(nil) |
+ if err != nil { |
+ glog.Error(err) |
+ return |
+ } |
+ |
+ var remoteDirs []string |
+ if *repoName == "chromium" { |
+ if *patches != "" { |
+ for _, patch := range strings.Split(*patches, ",") { |
+ patchName := path.Base(patch) |
+ patchLocalPath := filepath.Join(os.TempDir(), patchName) |
+ fmt.Println(patchLocalPath) |
+ respBody, err := gs.GetRemoteFileContents(patch) |
+ if err != nil { |
+ glog.Errorf("Could not fetch %s: %s", patch, err) |
+ return |
+ } |
+ defer skutil.Close(respBody) |
+ buf := new(bytes.Buffer) |
+ if _, err := buf.ReadFrom(respBody); err != nil { |
+ glog.Errorf("Could not read from %s: %s", patch, err) |
+ return |
+ } |
+ if err := ioutil.WriteFile(patchLocalPath, buf.Bytes(), 0666); err != nil { |
+ glog.Errorf("Unable to create file %s: %s", patchLocalPath, err) |
+ return |
+ } |
+ } |
+ } |
+ pathToPyFiles := util.GetPathToPyFiles(!*worker_common.Local) |
+ chromiumHash, skiaHash, err := util.CreateChromiumBuildOnSwarming(*runID, *targetPlatform, "", "", pathToPyFiles, true, *uploadSingleBuild) |
+ if err != nil { |
+ glog.Errorf("Could not create chromium build: %s", err) |
+ return |
+ } |
+ |
+ if !*uploadSingleBuild { |
+ remoteDirs = append(remoteDirs, fmt.Sprintf("try-%s-%s-%s-nopatch", chromiumHash, skiaHash, *runID)) |
+ } |
+ remoteDirs = append(remoteDirs, fmt.Sprintf("try-%s-%s-%s-withpatch", chromiumHash, skiaHash, *runID)) |
+ } else if *repoName == "pdfium" { |
+ // Sync PDFium and build pdfium_test binary. |
+ if err := util.SyncDir(util.PDFiumTreeDir); err != nil { |
+ glog.Errorf("Could not sync PDFium: %s", err) |
+ return |
+ } |
+ if err := util.BuildPDFium(); err != nil { |
+ glog.Errorf("Could not build PDFium: %s", err) |
+ return |
+ } |
+ // Copy pdfium_test to Google Storage. |
+ pdfiumLocalDir := path.Join(util.PDFiumTreeDir, "out", "Debug") |
+ pdfiumRemoteDir := path.Join(util.BINARIES_DIR_NAME, *runID) |
+ // Instantiate GsUtil object. |
+ gs, err := util.NewGsUtil(nil) |
+ if err != nil { |
+ glog.Error(err) |
+ return |
+ } |
+ if err := gs.UploadFile(util.BINARY_PDFIUM_TEST, pdfiumLocalDir, pdfiumRemoteDir); err != nil { |
+ glog.Errorf("Could not upload %s to %s: %s", util.BINARY_PDFIUM_TEST, pdfiumRemoteDir, err) |
+ return |
+ } |
+ remoteDirs = append(remoteDirs, *runID) |
+ } |
+ |
+ // Record the remote dirs in the output file. |
+ buildDirsOutputFile := filepath.Join(*outDir, util.BUILD_OUTPUT_FILENAME) |
+ f, err := os.Create(buildDirsOutputFile) |
+ if err != nil { |
+ glog.Errorf("Could not create %s: %s", buildDirsOutputFile, err) |
+ return |
+ } |
+ defer f.Close() |
+ if _, err := f.WriteString(strings.Join(remoteDirs, ",")); err != nil { |
+ glog.Errorf("Could not write to %s: %s", buildDirsOutputFile, err) |
+ } |
+} |