.cache used for credits

This commit is contained in:
2026-05-07 09:04:20 +02:00
parent f6bb4fe3d7
commit fa3dde4293
3 changed files with 41 additions and 8 deletions
+13 -3
View File
@@ -180,7 +180,7 @@ func planHAKs(p *project.Project, progress ProgressFunc) (BuildResult, error) {
return planOrBuildHAKs(p, progress, false, nil, "") return planOrBuildHAKs(p, progress, false, nil, "")
} }
func planOrBuildHAKs(p *project.Project, progress ProgressFunc, writeArchives bool, archiveNames []string, sourceManifestPath string) (BuildResult, error) { func planOrBuildHAKs(p *project.Project, progress ProgressFunc, writeArchives bool, archiveNames []string, sourceManifestPath string) (result BuildResult, err error) {
preserveExistingHAKs := envBool("SOW_BUILD_HAKS_KEEP_EXISTING") preserveExistingHAKs := envBool("SOW_BUILD_HAKS_KEEP_EXISTING")
progressf(progress, "Validating project...") progressf(progress, "Validating project...")
@@ -197,6 +197,11 @@ func planOrBuildHAKs(p *project.Project, progress ProgressFunc, writeArchives bo
if err != nil { if err != nil {
return BuildResult{}, err return BuildResult{}, err
} }
defer func() {
if cleanupErr := cleanupPreparedMusicAssets(musicAssets); cleanupErr != nil && err == nil {
err = cleanupErr
}
}()
assetResources, err := collectAssetResources(p, false, allowedAssets, musicAssets) assetResources, err := collectAssetResources(p, false, allowedAssets, musicAssets)
if err != nil { if err != nil {
return BuildResult{}, err return BuildResult{}, err
@@ -213,7 +218,7 @@ func planOrBuildHAKs(p *project.Project, progress ProgressFunc, writeArchives bo
} }
} }
result := BuildResult{HAKAssets: len(assetResources)} result = BuildResult{HAKAssets: len(assetResources)}
result.CreditsArtifactPaths = append(result.CreditsArtifactPaths, musicAssets.Artifacts...) result.CreditsArtifactPaths = append(result.CreditsArtifactPaths, musicAssets.Artifacts...)
if err := writeAutogenManifestOutputs(progress, autogenManifests); err != nil { if err := writeAutogenManifestOutputs(progress, autogenManifests); err != nil {
return BuildResult{}, err return BuildResult{}, err
@@ -1584,7 +1589,7 @@ func cleanupGeneratedHAKs(p *project.Project) error {
return nil return nil
} }
func plannedModuleHAKOrder(p *project.Project) ([]string, error) { func plannedModuleHAKOrder(p *project.Project) (order []string, err error) {
manifest, err := loadPreviousBuildManifest(p.HAKManifestPath()) manifest, err := loadPreviousBuildManifest(p.HAKManifestPath())
if err != nil { if err != nil {
return nil, err return nil, err
@@ -1597,6 +1602,11 @@ func plannedModuleHAKOrder(p *project.Project) ([]string, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer func() {
if cleanupErr := cleanupPreparedMusicAssets(musicAssets); cleanupErr != nil && err == nil {
err = cleanupErr
}
}()
assetResources, err := collectAssetResources(p, false, nil, musicAssets) assetResources, err := collectAssetResources(p, false, nil, musicAssets)
if err != nil { if err != nil {
return nil, err return nil, err
+22 -2
View File
@@ -48,6 +48,7 @@ type preparedMusicAssets struct {
Generated []assetResource Generated []assetResource
SkipSourceRel map[string]struct{} SkipSourceRel map[string]struct{}
Artifacts []string Artifacts []string
TempRoots []string
} }
type musicMetadata struct { type musicMetadata struct {
@@ -125,7 +126,8 @@ func prepareMusicAssets(p *project.Project) (*preparedMusicAssets, error) {
sort.Strings(dirs) sort.Strings(dirs)
generatedByDir := make(map[string][]creditsEntry) generatedByDir := make(map[string][]creditsEntry)
stageRoot := filepath.Join(p.BuildDir(), ".cache", "music") stageRoot := filepath.Join(p.Root, ".cache", "music")
result.TempRoots = append(result.TempRoots, stageRoot)
ffmpegPath, err := resolveFFmpegBinary() ffmpegPath, err := resolveFFmpegBinary()
if err != nil { if err != nil {
@@ -227,7 +229,10 @@ func prepareMusicAssets(p *project.Project) (*preparedMusicAssets, error) {
} }
func writeCreditsArtifacts(p *project.Project, generatedByDir map[string][]creditsEntry) ([]string, error) { func writeCreditsArtifacts(p *project.Project, generatedByDir map[string][]creditsEntry) ([]string, error) {
creditsRoot := filepath.Join(p.BuildDir(), "credits") creditsRoot := filepath.Join(p.Root, ".cache", "credits")
if err := os.RemoveAll(creditsRoot); err != nil {
return nil, fmt.Errorf("reset credits dir: %w", err)
}
if err := os.MkdirAll(creditsRoot, 0o755); err != nil { if err := os.MkdirAll(creditsRoot, 0o755); err != nil {
return nil, fmt.Errorf("create credits dir: %w", err) return nil, fmt.Errorf("create credits dir: %w", err)
} }
@@ -310,6 +315,21 @@ func writeCreditsArtifacts(p *project.Project, generatedByDir map[string][]credi
return artifacts, nil return artifacts, nil
} }
func cleanupPreparedMusicAssets(prepared *preparedMusicAssets) error {
if prepared == nil {
return nil
}
for _, root := range prepared.TempRoots {
if strings.TrimSpace(root) == "" {
continue
}
if err := os.RemoveAll(root); err != nil {
return fmt.Errorf("remove temporary music artifact root %s: %w", root, err)
}
}
return nil
}
func parseCreditsOverlay(path string) (creditsOverlay, error) { func parseCreditsOverlay(path string) (creditsOverlay, error) {
entries, err := parseCreditsMarkdown(path) entries, err := parseCreditsMarkdown(path)
if err != nil { if err != nil {
+6 -3
View File
@@ -2659,7 +2659,7 @@ func TestBuildHAKsConvertsMusicSourcesAndWritesCreditsArtifacts(t *testing.T) {
t.Fatalf("did not expect source mp3 in manifest, got %s", string(manifestRaw)) t.Fatalf("did not expect source mp3 in manifest, got %s", string(manifestRaw))
} }
creditsRaw, err := os.ReadFile(filepath.Join(root, "build", "credits", "envi", "music", "westgate", "CREDITS.md")) creditsRaw, err := os.ReadFile(filepath.Join(root, ".cache", "credits", "envi", "music", "westgate", "CREDITS.md"))
if err != nil { if err != nil {
t.Fatalf("read generated credits: %v", err) t.Fatalf("read generated credits: %v", err)
} }
@@ -2671,7 +2671,7 @@ func TestBuildHAKsConvertsMusicSourcesAndWritesCreditsArtifacts(t *testing.T) {
t.Fatalf("manual credits overlay should override bad metadata: %s", creditsText) t.Fatalf("manual credits overlay should override bad metadata: %s", creditsText)
} }
inventoryRaw, err := os.ReadFile(filepath.Join(root, "build", "credits", "credits.json")) inventoryRaw, err := os.ReadFile(filepath.Join(root, ".cache", "credits", "credits.json"))
if err != nil { if err != nil {
t.Fatalf("read credits inventory: %v", err) t.Fatalf("read credits inventory: %v", err)
} }
@@ -2679,7 +2679,10 @@ func TestBuildHAKsConvertsMusicSourcesAndWritesCreditsArtifacts(t *testing.T) {
if !strings.Contains(inventoryText, "assets/envi/music/westgate/CREDITS.md") { if !strings.Contains(inventoryText, "assets/envi/music/westgate/CREDITS.md") {
t.Fatalf("expected authored credits source in inventory: %s", inventoryText) t.Fatalf("expected authored credits source in inventory: %s", inventoryText)
} }
if !strings.Contains(inventoryText, "build/credits/envi/music/westgate/CREDITS.md") { if !strings.Contains(inventoryText, ".cache/credits/envi/music/westgate/CREDITS.md") {
t.Fatalf("expected generated credits source in inventory: %s", inventoryText) t.Fatalf("expected generated credits source in inventory: %s", inventoryText)
} }
if _, err := os.Stat(filepath.Join(root, ".cache", "music")); !os.IsNotExist(err) {
t.Fatalf("expected temporary music staging to be cleaned, got err=%v", err)
}
} }