From 7288d7e2b7287bd801e4b90e55c6c03f8449bd2d Mon Sep 17 00:00:00 2001 From: vickydotbat Date: Sat, 23 May 2026 00:52:16 +0200 Subject: [PATCH] Fix topdata lock file generation --- internal/topdata/generated_assets.go | 3 ++ internal/topdata/topdata_test.go | 49 ++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/internal/topdata/generated_assets.go b/internal/topdata/generated_assets.go index 620512b..37bcbdd 100644 --- a/internal/topdata/generated_assets.go +++ b/internal/topdata/generated_assets.go @@ -80,6 +80,9 @@ func buildGenerated2DAAssetGroup(p *project.Project, cfg project.GeneratedTopDat if err := rejectGenerated2DATLKValues(cfg.ID, collected); err != nil { return nil, err } + if _, _, err := saveNativeLockfiles(collected); err != nil { + return nil, fmt.Errorf("save generated topdata 2DA lockfiles %s: %w", cfg.ID, err) + } tableRegistry, err := newResolvedTableRegistry(collected) if err != nil { diff --git a/internal/topdata/topdata_test.go b/internal/topdata/topdata_test.go index 02708ae..0aef30b 100644 --- a/internal/topdata/topdata_test.go +++ b/internal/topdata/topdata_test.go @@ -6362,6 +6362,55 @@ func TestBuildGenerated2DAAssetsAppendsCachedModelsFromHeadVisualeffects(t *test } } +func TestBuildGenerated2DAAssetsWritesLockfilesForSelectedDatasets(t *testing.T) { + root := testProjectRoot(t) + mkdirAll(t, filepath.Join(root, "assets")) + mkdirAll(t, filepath.Join(root, "topdata", "data", "cachedmodels", "modules")) + writeFile(t, filepath.Join(root, "topdata", "data", "cachedmodels", "base.json"), `{ + "columns": ["Model"], + "rows": [ + {"id": 0, "key": "cachedmodels:base_model", "Model": "base_model"} + ] +}`+"\n") + writeFile(t, filepath.Join(root, "topdata", "data", "cachedmodels", "modules", "add_chatbubble.json"), `{ + "entries": { + "cachedmodels:vdr_chatbubble": { + "Model": "vdr_chatbubble" + } + } +}`+"\n") + + p := testProject(root) + p.Config.Paths.Assets = "assets" + p.Config.Generated.TopData2DA = []project.GeneratedTopData2DAConfig{ + { + ID: "cachedmodels", + Source: "topdata", + Output: ".cache/generated-assets/cachedmodels-2da", + IncludeDatasets: []string{"cachedmodels"}, + PackageRoot: "vfxs", + }, + } + + if _, err := BuildGenerated2DAAssets(p, nil); err != nil { + t.Fatalf("BuildGenerated2DAAssets failed: %v", err) + } + + lockBytes, err := os.ReadFile(filepath.Join(root, "topdata", "data", "cachedmodels", "lock.json")) + if err != nil { + t.Fatalf("read generated cachedmodels lockfile: %v", err) + } + lockText := string(lockBytes) + for _, want := range []string{ + `"cachedmodels:base_model": 0`, + `"cachedmodels:vdr_chatbubble": 1`, + } { + if !strings.Contains(lockText, want) { + t.Fatalf("expected generated asset lockfile to contain %q, got:\n%s", want, lockText) + } + } +} + func TestNormalizeProjectImportsLegacyLoadscreens(t *testing.T) { root := testProjectRoot(t) mkdirAll(t, filepath.Join(root, "topdata", "data"))