Anchor dependency preparation to checkout root
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user