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

Commit 9fed341f authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "release_config: Inheritance should honor Redacted" into main

parents d74bf29d 6d418301
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -90,6 +90,9 @@ func MarshalFlagValue(config *rc_lib.ReleaseConfig, name string) (ret string, er
	if !ok {
		return "", fmt.Errorf("%s not found in %s", name, config.Name)
	}
	if fa.Redacted {
		return "==REDACTED==", nil
	}
	return rc_lib.MarshalValue(fa.Value), nil
}

+18 −6
Original line number Diff line number Diff line
@@ -84,9 +84,11 @@ func FlagArtifactsFactory(artifactsPath string) *FlagArtifacts {

func (fas *FlagArtifacts) SortedFlagNames() []string {
	var names []string
	for k, _ := range *fas {
	for k, v := range *fas {
		if !v.Redacted {
			names = append(names, k)
		}
	}
	slices.Sort(names)
	return names
}
@@ -183,15 +185,20 @@ func (src FlagArtifacts) Clone() (dst FlagArtifacts) {
//	error: any error encountered
func (fa *FlagArtifact) UpdateValue(flagValue FlagValue) error {
	name := *flagValue.proto.Name
	fa.Traces = append(fa.Traces, &rc_proto.Tracepoint{Source: proto.String(flagValue.path), Value: flagValue.proto.Value})
	if flagValue.proto.GetRedacted() {
		fa.Redacted = true
	redacted := flagValue.proto.GetRedacted()
	if redacted {
		fa.Redact()
		flagValue.proto.Value = fa.Value
		fmt.Printf("Redacting flag %s in %s\n", name, flagValue.path)
		return nil
	} else {
		// If we are assigning a value, then the flag is no longer redacted.
		fa.Redacted = false
	}
	fa.Traces = append(fa.Traces, &rc_proto.Tracepoint{Source: proto.String(flagValue.path), Value: flagValue.proto.Value})
	if fa.Value.GetObsolete() {
		return fmt.Errorf("Attempting to set obsolete flag %s. Trace=%v", name, fa.Traces)
	}

	var newValue *rc_proto.Value
	switch val := flagValue.proto.Value.Val.(type) {
	case *rc_proto.Value_StringValue:
@@ -213,6 +220,11 @@ func (fa *FlagArtifact) UpdateValue(flagValue FlagValue) error {
	return nil
}

func (fa *FlagArtifact) Redact() {
	fa.Redacted = true
	fa.Value = &rc_proto.Value{Val: &rc_proto.Value_StringValue{StringValue: "*REDACTED*"}}
}

// Marshal the FlagArtifact into a flag_artifact message.
func (fa *FlagArtifact) Marshal() (*rc_proto.FlagArtifact, error) {
	if fa.Redacted {
+16 −11
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import (
	"path/filepath"
	"regexp"
	"slices"
	"sort"
	"strings"

	rc_proto "android/soong/cmd/release_config/release_config_proto"
@@ -107,6 +106,9 @@ func (config *ReleaseConfig) InheritConfig(iConfig *ReleaseConfig) error {
		if !ok {
			return fmt.Errorf("Could not inherit flag %s from %s", name, iConfig.Name)
		}
		if fa.Redacted {
			myFa.Redact()
		}
		if name == "RELEASE_ACONFIG_VALUE_SETS" {
			// If there is a value assigned, add the trace.
			if len(fa.Value.GetStringValue()) > 0 {
@@ -166,6 +168,13 @@ func (config *ReleaseConfig) GenerateReleaseConfig(configs *ReleaseConfigs) erro
		}
		myInherits = append(myInherits, inherit)
		myInheritsSet[inherit] = true
		// TODO: there are some configs that rely on vgsbr being
		// present on branches where it isn't. Once the broken configs
		// are fixed, we can be more strict.  In the meantime, they
		// will wind up inheriting `trunk_stable` instead of the
		// non-existent (alias) that they reference today.  Once fixed,
		// this becomes:
		//    iConfig, err := configs.GetReleaseConfigStrict(inherit)
		iConfig, err := configs.GetReleaseConfig(inherit)
		if err != nil {
			return err
@@ -261,9 +270,6 @@ func (config *ReleaseConfig) GenerateReleaseConfig(configs *ReleaseConfigs) erro
			if err := fa.UpdateValue(*value); err != nil {
				return err
			}
			if fa.Redacted {
				delete(config.FlagArtifacts, name)
			}
		}
	}
	// Now remove any duplicates from the actual value of RELEASE_ACONFIG_VALUE_SETS
@@ -313,6 +319,10 @@ func (config *ReleaseConfig) GenerateReleaseConfig(configs *ReleaseConfigs) erro
		if err != nil {
			return err
		}
		// Redacted flags return nil when rendered.
		if artifact == nil {
			continue
		}
		for _, container := range v.FlagDeclaration.Containers {
			if _, ok := config.PartitionBuildFlags[container]; !ok {
				config.PartitionBuildFlags[container] = &rc_proto.FlagArtifacts{}
@@ -325,12 +335,7 @@ func (config *ReleaseConfig) GenerateReleaseConfig(configs *ReleaseConfigs) erro
		OtherNames: config.OtherNames,
		Flags: func() []*rc_proto.FlagArtifact {
			ret := []*rc_proto.FlagArtifact{}
			flagNames := []string{}
			for k := range config.FlagArtifacts {
				flagNames = append(flagNames, k)
			}
			sort.Strings(flagNames)
			for _, flagName := range flagNames {
			for _, flagName := range config.FlagArtifacts.SortedFlagNames() {
				flag := config.FlagArtifacts[flagName]
				ret = append(ret, &rc_proto.FlagArtifact{
					FlagDeclaration: flag.FlagDeclaration,
@@ -365,7 +370,7 @@ func (config *ReleaseConfig) WriteMakefile(outFile, targetRelease string, config
		}
	}
	for _, rcName := range extraAconfigReleaseConfigs {
		rc, err := configs.GetReleaseConfig(rcName)
		rc, err := configs.GetReleaseConfigStrict(rcName)
		if err != nil {
			return err
		}
+10 −2
Original line number Diff line number Diff line
@@ -410,6 +410,14 @@ func (configs *ReleaseConfigs) LoadReleaseConfigMap(path string, ConfigDirIndex
}

func (configs *ReleaseConfigs) GetReleaseConfig(name string) (*ReleaseConfig, error) {
	return configs.getReleaseConfig(name, configs.allowMissing)
}

func (configs *ReleaseConfigs) GetReleaseConfigStrict(name string) (*ReleaseConfig, error) {
	return configs.getReleaseConfig(name, false)
}

func (configs *ReleaseConfigs) getReleaseConfig(name string, allow_missing bool) (*ReleaseConfig, error) {
	trace := []string{name}
	for target, ok := configs.Aliases[name]; ok; target, ok = configs.Aliases[name] {
		name = *target
@@ -418,7 +426,7 @@ func (configs *ReleaseConfigs) GetReleaseConfig(name string) (*ReleaseConfig, er
	if config, ok := configs.ReleaseConfigs[name]; ok {
		return config, nil
	}
	if configs.allowMissing {
	if allow_missing {
		if config, ok := configs.ReleaseConfigs["trunk_staging"]; ok {
			return config, nil
		}
@@ -467,7 +475,7 @@ func (configs *ReleaseConfigs) GenerateReleaseConfigs(targetRelease string) erro
		dirName := filepath.Dir(contrib.path)
		for k, names := range contrib.FlagValueDirs {
			for _, rcName := range names {
				if config, err := configs.GetReleaseConfig(rcName); err == nil {
				if config, err := configs.getReleaseConfig(rcName, false); err == nil {
					rcPath := filepath.Join(dirName, "release_configs", fmt.Sprintf("%s.textproto", config.Name))
					if _, err := os.Stat(rcPath); err != nil {
						errors = append(errors, fmt.Sprintf("%s exists but %s does not contribute to %s",