From a8ffa890114f564daec7fd902cf15d3bed11f49d Mon Sep 17 00:00:00 2001 From: Eric Rakestraw Date: Wed, 4 Nov 2026 00:47:38 +0000 Subject: [PATCH] Use the host target in the multi-module launcher --- cmd/releasekit/multi_module_example_test.go | 28 +++++++++++++++++++++ docs/roadmap/implementation.md | 2 ++ examples/multi-module/release.sh | 3 +++ 3 files changed, 33 insertions(+) diff --git a/cmd/releasekit/multi_module_example_test.go b/cmd/releasekit/multi_module_example_test.go index 69b79cc..d93639e 100644 --- a/cmd/releasekit/multi_module_example_test.go +++ b/cmd/releasekit/multi_module_example_test.go @@ -8,6 +8,7 @@ import ( "os" "os/exec" "path/filepath" + "runtime" "strconv" "strings" "testing" @@ -81,6 +82,11 @@ func TestMultiModuleLauncherUsesSelectedModuleAndProfile(t *testing.T) { shim := `#!/bin/sh set -eu printf 'cwd=%s args=%s\n' "$PWD" "$*" >> "$RELEASEKIT_TEST_GO_LOG" +if [ "$1" = env ]; then + case "$2" in GOHOSTOS) printf '%s\n' "$RELEASEKIT_TEST_HOST_OS" ;; GOHOSTARCH) printf '%s\n' "$RELEASEKIT_TEST_HOST_ARCH" ;; esac + exit 0 +fi +case " $* " in *" -deps "*) printf 'target=%s/%s\n' "$GOOS" "$GOARCH" >> "$RELEASEKIT_TEST_GO_LOG" ;; esac modfile= for argument in "$@"; do case "$argument" in -modfile=*) modfile=${argument#-modfile=} ;; esac @@ -98,6 +104,11 @@ fi t.Setenv("RELEASEKIT_MODULE_MAP", mapPath) t.Setenv("RELEASEKIT_TEST_GO_LOG", goLog) t.Setenv("RELEASEKIT_TEST_TOOL_ARGS", argsLog) + t.Setenv("RELEASEKIT_TEST_HOST_OS", runtime.GOOS) + t.Setenv("RELEASEKIT_TEST_HOST_ARCH", runtime.GOARCH) + foreignOS, foreignArch := foreignTarget() + t.Setenv("GOOS", foreignOS) + t.Setenv("GOARCH", foreignArch) launcher := filepath.Join(repository, "release.sh") command := exec.Command(launcher, "with space", "v1.2.4") var stdout, stderr bytes.Buffer @@ -115,6 +126,9 @@ fi if !strings.Contains(string(goCommands), "cwd="+wantModule) || !strings.Contains(string(goCommands), "v0.2.299") || strings.Contains(string(goCommands), "v0.2.197") { t.Fatalf("tool bootstrap did not use selected module metadata: %s", goCommands) } + if !strings.Contains(string(goCommands), "target="+runtime.GOOS+"/"+runtime.GOARCH) { + t.Fatalf("dependency inspection did not use host target: %s", goCommands) + } toolArgs, err := os.ReadFile(argsLog) if err != nil { t.Fatal(err) @@ -152,6 +166,9 @@ func TestMultiModuleLauncherRunsToolFromSelectedDependency(t *testing.T) { t.Setenv("GOPROXY", "file://"+filepath.ToSlash(proxy)) t.Setenv("GOSUMDB", "off") t.Setenv("GOTOOLCHAIN", "local") + foreignOS, foreignArch := foreignTarget() + t.Setenv("GOOS", foreignOS) + t.Setenv("GOARCH", foreignArch) moduleBefore, err := os.ReadFile(filepath.Join(repository, "integrations", "ckconfig", "go.mod")) if err != nil { t.Fatal(err) @@ -203,6 +220,17 @@ func TestMultiModuleLauncherRunsToolFromSelectedDependency(t *testing.T) { } } +func foreignTarget() (string, string) { + osName, arch := "windows", "arm64" + if runtime.GOOS == osName { + osName = "linux" + } + if runtime.GOARCH == arch { + arch = "amd64" + } + return osName, arch +} + func runModuleSelector(t *testing.T, helper, mode, value, mapPath string) string { t.Helper() command := exec.Command("sh", helper, mode, value) diff --git a/docs/roadmap/implementation.md b/docs/roadmap/implementation.md index 4d2675a..228b0b2 100644 --- a/docs/roadmap/implementation.md +++ b/docs/roadmap/implementation.md @@ -8,6 +8,8 @@ checks in Stage 6. ## Stage 1: Normalize the local multi-module launcher +**Completed.** + 1. In [the multi-module launcher](../../examples/multi-module/release.sh), after entering the selected module and exporting its existing `GOWORK=off` and `GOTOOLCHAIN=local` settings, insert the following before the first Go diff --git a/examples/multi-module/release.sh b/examples/multi-module/release.sh index 895f99b..7d02ad3 100755 --- a/examples/multi-module/release.sh +++ b/examples/multi-module/release.sh @@ -36,6 +36,9 @@ releasekit_module=go.maximumdirect.net/releasekit cd "$module_path" export GOWORK=off export GOTOOLCHAIN=local + releasekit_host_os=$(go env GOHOSTOS) || exit $? + releasekit_host_arch=$(go env GOHOSTARCH) || exit $? + export GOOS="$releasekit_host_os" GOARCH="$releasekit_host_arch" go list -mod=mod -modfile="$bootstrap_dir/releasekit.mod" -m "$releasekit_module" go mod edit -modfile="$bootstrap_dir/releasekit.mod" -tool="$releasekit_module/cmd/releasekit" go list -mod=mod -modfile="$bootstrap_dir/releasekit.mod" -deps "$releasekit_module/cmd/releasekit" > /dev/null