Autogen configuration enabled
This commit is contained in:
+59
-22
@@ -17,11 +17,12 @@ import (
|
||||
const autogenManifestCacheMaxAge = time.Hour
|
||||
|
||||
type autogenManifest struct {
|
||||
ID string `json:"id"`
|
||||
Repo string `json:"repo"`
|
||||
Ref string `json:"ref"`
|
||||
GeneratedAt string `json:"generated_at"`
|
||||
Entries []autogenManifestEntry `json:"entries"`
|
||||
ID string `json:"id"`
|
||||
Repo string `json:"repo"`
|
||||
Ref string `json:"ref"`
|
||||
GeneratedAt string `json:"generated_at"`
|
||||
HeadVisualeffects *project.HeadVisualeffectsConfig `json:"head_visualeffects,omitempty"`
|
||||
Entries []autogenManifestEntry `json:"entries"`
|
||||
}
|
||||
|
||||
type autogenManifestEntry struct {
|
||||
@@ -57,7 +58,7 @@ func applyAutogenConsumers(p *project.Project, collected []nativeCollectedDatase
|
||||
if !autogenConsumerTargetsCollectedDataset(result, consumer) {
|
||||
continue
|
||||
}
|
||||
entries, err := resolveAutogenConsumerEntries(p, consumer, progress)
|
||||
manifest, err := resolveAutogenConsumerManifest(p, consumer, progress)
|
||||
if err != nil {
|
||||
if consumer.Optional && isIgnorableOptionalAutogenError(err) {
|
||||
if progress != nil {
|
||||
@@ -67,6 +68,7 @@ func applyAutogenConsumers(p *project.Project, collected []nativeCollectedDatase
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
entries := manifest.Entries
|
||||
if len(entries) == 0 {
|
||||
continue
|
||||
}
|
||||
@@ -74,7 +76,7 @@ func applyAutogenConsumers(p *project.Project, collected []nativeCollectedDatase
|
||||
case "parts_rows":
|
||||
result = augmentWithAutogeneratedParts(result, autogenPartsInventory(entries))
|
||||
case "head_visualeffects":
|
||||
result, err = augmentWithAutogeneratedHeadVisualeffects(result, entries, consumer)
|
||||
result, err = augmentWithAutogeneratedHeadVisualeffects(result, entries, consumer, manifest.HeadVisualeffects)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -115,7 +117,7 @@ func isIgnorableOptionalAutogenError(err error) bool {
|
||||
strings.Contains(message, "entries is empty")
|
||||
}
|
||||
|
||||
func resolveAutogenConsumerEntries(p *project.Project, consumer project.AutogenConsumerConfig, progress func(string)) ([]autogenManifestEntry, error) {
|
||||
func resolveAutogenConsumerManifest(p *project.Project, consumer project.AutogenConsumerConfig, progress func(string)) (*autogenManifest, error) {
|
||||
overrideRoot, err := resolveAutogenLocalOverrideRoot(p, consumer)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -124,9 +126,13 @@ func resolveAutogenConsumerEntries(p *project.Project, consumer project.AutogenC
|
||||
if progress != nil {
|
||||
progress(fmt.Sprintf("Scanning local autogen override for %s from %s...", consumer.ID, overrideRoot))
|
||||
}
|
||||
return scanLocalAutogenEntries(overrideRoot, consumer)
|
||||
entries, err := scanLocalAutogenEntries(overrideRoot, consumer)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &autogenManifest{ID: consumer.Producer, Entries: entries}, nil
|
||||
}
|
||||
return resolveReleasedAutogenManifestEntries(p, consumer, progress)
|
||||
return resolveReleasedAutogenManifest(p, consumer, progress)
|
||||
}
|
||||
|
||||
func resolveAutogenLocalOverrideRoot(p *project.Project, consumer project.AutogenConsumerConfig) (string, error) {
|
||||
@@ -331,7 +337,7 @@ func deriveAutogenManifestEntry(rel string, derive project.AutogenDeriveConfig)
|
||||
return entry, true
|
||||
}
|
||||
|
||||
func resolveReleasedAutogenManifestEntries(p *project.Project, consumer project.AutogenConsumerConfig, progress func(string)) ([]autogenManifestEntry, error) {
|
||||
func resolveReleasedAutogenManifest(p *project.Project, consumer project.AutogenConsumerConfig, progress func(string)) (*autogenManifest, error) {
|
||||
cachePath := p.AutogenCachePath(consumer.Manifest.CacheName)
|
||||
if strings.TrimSpace(os.Getenv(p.AutogenRefreshEnv())) == "" {
|
||||
manifest, fresh, err := readFreshAutogenManifestCache(cachePath, p.AutogenCacheMaxAge())
|
||||
@@ -344,12 +350,12 @@ func resolveReleasedAutogenManifestEntries(p *project.Project, consumer project.
|
||||
if progress != nil {
|
||||
progress(fmt.Sprintf("Using cached released autogen manifest %s (remote check failed: %v)...", cachePath, err))
|
||||
}
|
||||
return manifest.Entries, nil
|
||||
return manifest, nil
|
||||
} else if current {
|
||||
if progress != nil {
|
||||
progress(fmt.Sprintf("Using cached released autogen manifest %s...", cachePath))
|
||||
}
|
||||
return manifest.Entries, nil
|
||||
return manifest, nil
|
||||
} else if progress != nil {
|
||||
progress(fmt.Sprintf("Refreshing released autogen manifest %s; remote asset changed at %s.", consumer.Manifest.CacheName, remoteTime.Format(time.RFC3339)))
|
||||
}
|
||||
@@ -383,6 +389,14 @@ func resolveReleasedAutogenManifestEntries(p *project.Project, consumer project.
|
||||
if err := writeAutogenManifestCache(cachePath, manifest); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return manifest, nil
|
||||
}
|
||||
|
||||
func resolveReleasedAutogenManifestEntries(p *project.Project, consumer project.AutogenConsumerConfig, progress func(string)) ([]autogenManifestEntry, error) {
|
||||
manifest, err := resolveReleasedAutogenManifest(p, consumer, progress)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return manifest.Entries, nil
|
||||
}
|
||||
|
||||
@@ -660,12 +674,12 @@ func augmentWithAutogeneratedCachedModels(collected []nativeCollectedDataset, en
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func augmentWithAutogeneratedHeadVisualeffects(collected []nativeCollectedDataset, entries []autogenManifestEntry, consumer project.AutogenConsumerConfig) ([]nativeCollectedDataset, error) {
|
||||
func augmentWithAutogeneratedHeadVisualeffects(collected []nativeCollectedDataset, entries []autogenManifestEntry, consumer project.AutogenConsumerConfig, manifestPolicy *project.HeadVisualeffectsConfig) ([]nativeCollectedDataset, error) {
|
||||
if len(entries) == 0 {
|
||||
return collected, nil
|
||||
}
|
||||
|
||||
policy := resolveHeadVisualeffectsPolicy(consumer)
|
||||
policy := resolveHeadVisualeffectsPolicy(consumer, manifestPolicy)
|
||||
result := append([]nativeCollectedDataset(nil), collected...)
|
||||
for i, dataset := range result {
|
||||
if dataset.Dataset.Name != "visualeffects" {
|
||||
@@ -771,20 +785,31 @@ type headVisualeffectsGroupPolicy struct {
|
||||
RowDefaults map[string]string
|
||||
}
|
||||
|
||||
func resolveHeadVisualeffectsPolicy(consumer project.AutogenConsumerConfig) headVisualeffectsPolicy {
|
||||
func resolveHeadVisualeffectsPolicy(consumer project.AutogenConsumerConfig, manifestPolicy *project.HeadVisualeffectsConfig) headVisualeffectsPolicy {
|
||||
policy := defaultHeadVisualeffectsPolicy()
|
||||
cfg := consumer.HeadVisualeffects
|
||||
if manifestPolicy != nil {
|
||||
applyHeadVisualeffectsConfig(&policy, *manifestPolicy)
|
||||
}
|
||||
applyHeadVisualeffectsConfig(&policy, consumer.HeadVisualeffects)
|
||||
return policy
|
||||
}
|
||||
|
||||
func applyHeadVisualeffectsConfig(policy *headVisualeffectsPolicy, cfg project.HeadVisualeffectsConfig) {
|
||||
for group, groupCfg := range cfg.Groups {
|
||||
group = strings.TrimSpace(group)
|
||||
prefix := strings.TrimSpace(groupCfg.Prefix)
|
||||
if group == "" || prefix == "" {
|
||||
continue
|
||||
}
|
||||
groupPolicy := headVisualeffectsGroupPolicy{
|
||||
Prefix: prefix,
|
||||
ModelColumns: normalizeHeadVisualeffectsModelColumns(groupCfg.ModelColumn, groupCfg.ModelColumns),
|
||||
RowDefaults: normalizeHeadVisualeffectsRowDefaults(groupCfg.RowDefaults),
|
||||
groupPolicy := policy.Groups[group]
|
||||
groupPolicy.Prefix = prefix
|
||||
if columns := normalizeHeadVisualeffectsModelColumns(groupCfg.ModelColumn, groupCfg.ModelColumns); len(columns) > 0 {
|
||||
groupPolicy.ModelColumns = columns
|
||||
}
|
||||
if groupPolicy.RowDefaults == nil {
|
||||
groupPolicy.RowDefaults = map[string]string{}
|
||||
}
|
||||
mergeStringMap(groupPolicy.RowDefaults, normalizeHeadVisualeffectsRowDefaults(groupCfg.RowDefaults))
|
||||
policy.Groups[group] = groupPolicy
|
||||
}
|
||||
if len(cfg.StripModelPrefixes) > 0 {
|
||||
@@ -800,7 +825,6 @@ func resolveHeadVisualeffectsPolicy(consumer project.AutogenConsumerConfig) head
|
||||
policy.ModelColumn = strings.TrimSpace(cfg.ModelColumn)
|
||||
}
|
||||
mergeStringMap(policy.RowDefaults, normalizeHeadVisualeffectsRowDefaults(cfg.RowDefaults))
|
||||
return policy
|
||||
}
|
||||
|
||||
func defaultHeadVisualeffectsPolicy() headVisualeffectsPolicy {
|
||||
@@ -964,9 +988,22 @@ func formatAutogenManifest(root string, producer project.AutogenProducerConfig,
|
||||
GeneratedAt: time.Now().UTC().Format(time.RFC3339),
|
||||
Entries: entries,
|
||||
}
|
||||
if autogenHeadVisualeffectsConfigConfigured(producer.HeadVisualeffects) {
|
||||
cfg := producer.HeadVisualeffects
|
||||
manifest.HeadVisualeffects = &cfg
|
||||
}
|
||||
return json.MarshalIndent(manifest, "", " ")
|
||||
}
|
||||
|
||||
func autogenHeadVisualeffectsConfigConfigured(cfg project.HeadVisualeffectsConfig) bool {
|
||||
return len(cfg.Groups) > 0 ||
|
||||
len(cfg.StripModelPrefixes) > 0 ||
|
||||
strings.TrimSpace(cfg.KeyFormat) != "" ||
|
||||
strings.TrimSpace(cfg.LabelFormat) != "" ||
|
||||
strings.TrimSpace(cfg.ModelColumn) != "" ||
|
||||
len(cfg.RowDefaults) > 0
|
||||
}
|
||||
|
||||
func parseAutogenManifestEntryList(raw []byte) ([]autogenManifestEntry, error) {
|
||||
var manifest autogenManifest
|
||||
if err := json.Unmarshal(raw, &manifest); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user