Preserve child working directory in environment overlays
This commit is contained in:
@@ -14,10 +14,54 @@ import (
|
||||
|
||||
releasekit "go.maximumdirect.net/releasekit"
|
||||
"go.maximumdirect.net/releasekit/internal/git"
|
||||
"go.maximumdirect.net/releasekit/internal/gotool"
|
||||
)
|
||||
|
||||
const releaseNote = "# Sample App v1.2.3\n\nA source release.\n\nUpgrade notes stay intact.\n"
|
||||
|
||||
func TestPublishPreservesHookDirectoryEnvironment(t *testing.T) {
|
||||
if runtime.GOOS == "windows" {
|
||||
t.Skip("directory-derived PWD is a POSIX behavior")
|
||||
}
|
||||
repo := newPublishFixture(t)
|
||||
marker := filepath.Join(t.TempDir(), "hook-ran")
|
||||
t.Setenv("RELEASEKIT_HOOK_MARKER", marker)
|
||||
helperDir := t.TempDir()
|
||||
writeFile(t, helperDir, "main.go", `package main
|
||||
import "os"
|
||||
func main() {
|
||||
cwd, err := os.Getwd()
|
||||
if err != nil || os.Getenv("PWD") != cwd {
|
||||
os.Stderr.WriteString("pre-push PWD does not identify the selected repository\n")
|
||||
os.Exit(1)
|
||||
}
|
||||
if err := os.WriteFile(os.Getenv("RELEASEKIT_HOOK_MARKER"), []byte("checked"), 0600); err != nil {
|
||||
os.Exit(2)
|
||||
}
|
||||
}
|
||||
`)
|
||||
hooks := filepath.Join(repo.work, ".git", "hooks")
|
||||
if err := os.MkdirAll(hooks, 0o700); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
gitRun(t, repo.work, "config", "core.hooksPath", hooks)
|
||||
tool, err := gotool.New(t.Context(), repo.work)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := tool.Run(t.Context(), repo.work, gotool.Static, tool.HostTarget(), nil,
|
||||
"build", "-o", filepath.Join(hooks, "pre-push"), filepath.Join(helperDir, "main.go")); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
result, err := releasekit.Publish(t.Context(), releasekit.ReleaseRequest{RepositoryDir: repo.work, Product: "Sample App", Version: "v1.2.3"})
|
||||
if err != nil || result.State != releasekit.PublicationPublished {
|
||||
t.Fatalf("publication with directory-aware hook = %#v, %v", result, err)
|
||||
}
|
||||
if data, err := os.ReadFile(marker); err != nil || string(data) != "checked" {
|
||||
t.Fatalf("pre-push hook observation = %q, %v", data, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckRejectsInvalidDerivedTagBeforeValidation(t *testing.T) {
|
||||
for _, module := range []string{"module space", "module.lock"} {
|
||||
t.Run(module, func(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user