Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3e63067b authored by Mark Dacek's avatar Mark Dacek Committed by Gerrit Code Review
Browse files

Merge "Add --bazel-exit-code parameter to soong_ui."

parents a152e268 d33c2fd5
Loading
Loading
Loading
Loading
+2 −10
Original line number Diff line number Diff line
@@ -94,7 +94,7 @@ var commands = []command{
	}, {
		flag:        "--upload-metrics-only",
		description: "upload metrics without building anything",
		config:      uploadOnlyConfig,
		config:      build.UploadOnlyConfig,
		stdio:       stdio,
		// Upload-only mode mostly skips to the metrics-uploading phase of soong_ui.
		// However, this invocation marks the true "end of the build", and thus we
@@ -451,14 +451,6 @@ func dumpVarConfig(ctx build.Context, args ...string) build.Config {
	return build.NewConfig(ctx)
}

// uploadOnlyConfig explicitly requires no arguments.
func uploadOnlyConfig(ctx build.Context, args ...string) build.Config {
	if len(args) > 0 {
		fmt.Printf("--upload-only does not require arguments.")
	}
	return build.UploadOnlyConfig(ctx)
}

func buildActionConfig(ctx build.Context, args ...string) build.Config {
	flags := flag.NewFlagSet("build-mode", flag.ContinueOnError)
	flags.SetOutput(ctx.Writer)
@@ -710,7 +702,7 @@ func updateTotalRealTime(ctx build.Context, config build.Config, args []string)
	}
	met := ctx.ContextImpl.Metrics

	err = met.UpdateTotalRealTime(data)
	err = met.UpdateTotalRealTimeAndNonZeroExit(data, config.BazelExitCode())
	if err != nil {
		ctx.Fatal(err)
	}
+16 −2
Original line number Diff line number Diff line
@@ -90,6 +90,7 @@ type configImpl struct {
	buildStartedTime         int64 // For metrics-upload-only - manually specify a build-started time
	buildFromTextStub        bool
	ensureAllowlistIntegrity bool  // For CI builds - make sure modules are mixed-built
	bazelExitCode            int32 // For b-runs - necessary for updating NonZeroExit

	// From the product config
	katiArgs        []string
@@ -298,11 +299,12 @@ func defaultBazelProdMode(cfg *configImpl) bool {
	return true
}

func UploadOnlyConfig(ctx Context, _ ...string) Config {
func UploadOnlyConfig(ctx Context, args ...string) Config {
	ret := &configImpl{
		environ:       OsEnvironment(),
		sandboxConfig: &SandboxConfig{},
	}
	ret.parseArgs(ctx, args)
	srcDir := absPath(ctx, ".")
	bc := os.Getenv("ANDROID_BUILD_ENVIRONMENT_CONFIG")
	if err := loadEnvConfig(ctx, ret, bc); err != nil {
@@ -883,6 +885,14 @@ func (c *configImpl) parseArgs(ctx Context, args []string) {
			}
		} else if arg == "--ensure-allowlist-integrity" {
			c.ensureAllowlistIntegrity = true
		} else if strings.HasPrefix(arg, "--bazel-exit-code=") {
			bazelExitCodeStr := strings.TrimPrefix(arg, "--bazel-exit-code=")
			val, err := strconv.Atoi(bazelExitCodeStr)
			if err == nil {
				c.bazelExitCode = int32(val)
			} else {
				ctx.Fatalf("Error parsing bazel-exit-code", err)
			}
		} else if len(arg) > 0 && arg[0] == '-' {
			parseArgNum := func(def int) int {
				if len(arg) > 2 {
@@ -1723,6 +1733,10 @@ func (c *configImpl) BuildStartedTimeOrDefault(defaultTime time.Time) time.Time
	return time.UnixMilli(c.buildStartedTime)
}

func (c *configImpl) BazelExitCode() int32 {
	return c.bazelExitCode
}

func GetMetricsUploader(topDir string, env *Environment) string {
	if p, ok := env.Get("METRICS_UPLOADER"); ok {
		metricsUploader := filepath.Join(topDir, p)
+3 −2
Original line number Diff line number Diff line
@@ -141,7 +141,7 @@ func parsePhaseTiming(line string) bazel_metrics_proto.PhaseTiming {
// This method takes a file created by bazel's --analyze-profile mode and
// writes bazel metrics data to the provided filepath.
// TODO(b/279987768) - move this outside of upload.go
func processBazelMetrics(bazelProfileFile string, bazelMetricsFile string, ctx Context) {
func processBazelMetrics(bazelProfileFile string, bazelMetricsFile string, ctx Context, config Config) {
	if bazelProfileFile == "" {
		return
	}
@@ -179,6 +179,7 @@ func processBazelMetrics(bazelProfileFile string, bazelMetricsFile string, ctx C
		return
	}
	bazelProto := readBazelProto(bazelProfileFile)
	bazelProto.ExitCode = proto.Int32(config.bazelExitCode)
	shared.Save(&bazelProto, bazelMetricsFile)
}

@@ -192,7 +193,7 @@ func UploadMetrics(ctx Context, config Config, simpleOutput bool, buildStarted t
	defer ctx.EndTrace()

	uploader := config.MetricsUploaderApp()
	processBazelMetrics(bazelProfileFile, bazelMetricsFile, ctx)
	processBazelMetrics(bazelProfileFile, bazelMetricsFile, ctx, config)

	if uploader == "" {
		// If the uploader path was not specified, no metrics shall be uploaded.
+4 −1
Original line number Diff line number Diff line
@@ -228,7 +228,7 @@ func (m *Metrics) SetBuildDateTime(buildTimestamp time.Time) {
	m.metrics.BuildDateTimestamp = proto.Int64(buildTimestamp.UnixNano() / int64(time.Second))
}

func (m *Metrics) UpdateTotalRealTime(data []byte) error {
func (m *Metrics) UpdateTotalRealTimeAndNonZeroExit(data []byte, bazelExitCode int32) error {
	if err := proto.Unmarshal(data, &m.metrics); err != nil {
		return fmt.Errorf("Failed to unmarshal proto", err)
	}
@@ -236,6 +236,9 @@ func (m *Metrics) UpdateTotalRealTime(data []byte) error {
	endTime := uint64(time.Now().UnixNano())

	*m.metrics.Total.RealTime = *proto.Uint64(endTime - startTime)

	bazelError := bazelExitCode != 0
	m.metrics.NonZeroExit = proto.Bool(bazelError)
	return nil
}