Dev Testing + AutoGen Activation

This commit is contained in:
2026-04-25 08:57:10 +02:00
parent b6fff4bed4
commit 4009931fd0
5 changed files with 329 additions and 10 deletions
+68 -2
View File
@@ -32,6 +32,13 @@ type autogenManifestEntry struct {
RowID int `json:"row_id,omitempty"`
}
type ProducedAutogenManifest struct {
ID string
AssetName string
OutputPath string
Payload []byte
}
func applyAutogenConsumers(p *project.Project, collected []nativeCollectedDataset, progress func(string)) ([]nativeCollectedDataset, error) {
if len(p.Config.Autogen.Consumers) == 0 {
return collected, nil
@@ -152,6 +159,10 @@ func resolveAutogenLocalOverrideRoot(p *project.Project, consumer project.Autoge
func scanLocalAutogenEntries(overrideRoot string, consumer project.AutogenConsumerConfig) ([]autogenManifestEntry, error) {
scanRoot := filepath.Join(overrideRoot, consumer.Root)
return scanConfiguredAutogenEntries(scanRoot, consumer.Include, consumer.Derive)
}
func scanConfiguredAutogenEntries(scanRoot string, include []string, derive project.AutogenDeriveConfig) ([]autogenManifestEntry, error) {
info, err := os.Stat(scanRoot)
if err != nil {
if os.IsNotExist(err) {
@@ -176,10 +187,10 @@ func scanLocalAutogenEntries(overrideRoot string, consumer project.AutogenConsum
return err
}
rel = filepath.ToSlash(rel)
if !matchesAutogenInclude(rel, consumer.Include) {
if !matchesAutogenInclude(rel, include) {
return nil
}
entry, ok := deriveAutogenManifestEntry(rel, consumer.Derive)
entry, ok := deriveAutogenManifestEntry(rel, derive)
if !ok {
return nil
}
@@ -196,6 +207,61 @@ func scanLocalAutogenEntries(overrideRoot string, consumer project.AutogenConsum
return entries, nil
}
func ProduceAutogenManifests(p *project.Project) ([]ProducedAutogenManifest, error) {
if len(p.Config.Autogen.Producers) == 0 {
return nil, nil
}
assetsRoot := strings.TrimSpace(p.AssetsDir())
if assetsRoot == "" {
return nil, fmt.Errorf("autogen producers require paths.assets to be configured")
}
info, err := os.Stat(assetsRoot)
if err != nil {
return nil, fmt.Errorf("stat assets root %s: %w", assetsRoot, err)
}
if !info.IsDir() {
return nil, fmt.Errorf("assets root %s is not a directory", assetsRoot)
}
repo, ref := autogenManifestSourceMetadata(p.Root)
results := make([]ProducedAutogenManifest, 0, len(p.Config.Autogen.Producers))
for _, producer := range p.Config.Autogen.Producers {
scanRoot := filepath.Join(assetsRoot, producer.Root)
entries, err := scanConfiguredAutogenEntries(scanRoot, producer.Include, producer.Derive)
if err != nil {
return nil, fmt.Errorf("scan autogen producer %s: %w", producer.ID, err)
}
if len(entries) == 0 {
return nil, fmt.Errorf("autogen producer %s discovered no matching entries under %s", producer.ID, scanRoot)
}
payload, err := formatAutogenManifest(p.Root, producer, repo, ref, entries)
if err != nil {
return nil, fmt.Errorf("format autogen producer %s manifest: %w", producer.ID, err)
}
payload = append(payload, '\n')
results = append(results, ProducedAutogenManifest{
ID: producer.ID,
AssetName: producer.Manifest.AssetName,
OutputPath: filepath.Join(p.BuildDir(), producer.Manifest.AssetName),
Payload: payload,
})
}
return results, nil
}
func autogenManifestSourceMetadata(root string) (repo string, ref string) {
if remote, err := gitOutput(root, "remote", "get-url", "origin"); err == nil {
if spec, ok := parseRepoSpec(strings.TrimSpace(remote)); ok {
repo = spec.Owner + "/" + spec.Repo
}
}
if head, err := gitOutput(root, "rev-parse", "HEAD"); err == nil {
ref = strings.TrimSpace(head)
}
return repo, ref
}
func matchesAutogenInclude(rel string, include []string) bool {
rel = filepath.ToSlash(rel)
for _, pattern := range include {