Anchor dependency preparation to checkout root

This commit is contained in:
2026-11-01 21:12:05 +00:00
parent b47202a2e9
commit 5aba4c6c87
4 changed files with 83 additions and 8 deletions

View File

@@ -249,6 +249,65 @@ func TestPrepareBuildDependenciesUsesSelectedModuleDirectory(t *testing.T) {
}
}
func TestPrepareBuildDependenciesSelectsFromCheckoutRoot(t *testing.T) {
repo := t.TempDir()
buildGit(t, repo, "init")
nested := filepath.Join(repo, "nested")
child := filepath.Join(nested, "child")
if err := os.MkdirAll(child, 0o755); err != nil {
t.Fatal(err)
}
if err := os.Symlink("nested/child", filepath.Join(repo, "link")); err != nil {
t.Fatal(err)
}
bin := t.TempDir()
marker := filepath.Join(t.TempDir(), "directory")
if err := os.WriteFile(filepath.Join(bin, "go"), []byte("#!/bin/sh\nprintf '%s' \"$PWD\" > \"$PREPARE_DIR_MARKER\"\n"), 0o755); err != nil {
t.Fatal(err)
}
t.Setenv("PATH", bin+string(os.PathListSeparator)+os.Getenv("PATH"))
t.Setenv("PREPARE_DIR_MARKER", marker)
for _, tc := range []struct{ dir, module, want string }{
{repo, "", repo}, {child, "", repo}, {repo, "nested", nested},
{child, "nested", nested}, {child, "link/..", nested},
} {
err := releasekit.PrepareBuildDependencies(context.Background(), releasekit.DependencyPreparationRequest{RepositoryDir: tc.dir, ModuleDir: tc.module})
got, readErr := os.ReadFile(marker)
if err != nil || readErr != nil || string(got) != tc.want {
t.Fatalf("selection %q, %q = %q, error %v, read %v; want %q", tc.dir, tc.module, got, err, readErr, tc.want)
}
}
}
func TestPrepareBuildDependenciesWithoutGit(t *testing.T) {
repo := t.TempDir()
buildGit(t, repo, "init")
standalone := t.TempDir()
bin := t.TempDir()
marker := filepath.Join(t.TempDir(), "go-ran")
if err := os.WriteFile(filepath.Join(bin, "go"), []byte("#!/bin/sh\nprintf ran > \"$PREPARE_DIR_MARKER\"\n"), 0o755); err != nil {
t.Fatal(err)
}
t.Setenv("PATH", bin)
t.Setenv("PREPARE_DIR_MARKER", marker)
if err := releasekit.PrepareBuildDependencies(context.Background(), releasekit.DependencyPreparationRequest{RepositoryDir: standalone}); err != nil {
t.Fatal(err)
}
if _, err := os.Stat(marker); err != nil {
t.Fatalf("Go did not run: %v", err)
}
if err := os.Remove(marker); err != nil {
t.Fatal(err)
}
err := releasekit.PrepareBuildDependencies(context.Background(), releasekit.DependencyPreparationRequest{RepositoryDir: repo})
if !errors.Is(err, exec.ErrNotFound) {
t.Fatalf("checkout error = %v, want missing Git", err)
}
if _, err := os.Stat(marker); !os.IsNotExist(err) {
t.Fatalf("Go ran after discovery failure: %v", err)
}
}
func publishPreparationTag(t *testing.T, repository string) string {
t.Helper()
return publishPreparationTagNamed(t, repository, "v1.2.3")