Dev Testing + AutoGen Activation
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user