From 4988a4442bfa68fead1cd8bb6abeccb9ae876405 Mon Sep 17 00:00:00 2001 From: caorushizi <84996057@qq.com> Date: Tue, 29 Sep 2026 05:00:49 +0800 Subject: [PATCH 1/2] fix(test): isolate e2e task artifact caches --- packages/cli/tests/e2e/e2e_helpers_test.go | 3 +++ packages/cli/tests/e2e/tasks_cache_test.go | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/cli/tests/e2e/e2e_helpers_test.go b/packages/cli/tests/e2e/e2e_helpers_test.go index 6ce5960..fae06a6 100644 --- a/packages/cli/tests/e2e/e2e_helpers_test.go +++ b/packages/cli/tests/e2e/e2e_helpers_test.go @@ -280,6 +280,9 @@ func isolateHome(t *testing.T, dir string) { for _, key := range []string{"XDG_DATA_HOME", "XDG_STATE_HOME", "MISE_CONFIG_DIR", "MISE_DATA_DIR", "MISE_STATE_DIR", "MISE_CACHE_DIR"} { t.Setenv(key, filepath.Join(dir, key)) } + // CI shares task artifacts across runs, independently of MISE_CACHE_DIR. + // Keep that outer cache from restoring outputs into a fresh test fixture. + t.Setenv("MISE_TASK_CACHE_DIR", filepath.Join(dir, "mise-task-artifacts")) for _, key := range []string{"CODEX_HOME", "CLAUDE_CONFIG_DIR", "VIBE_HOME"} { t.Setenv(key, "") } diff --git a/packages/cli/tests/e2e/tasks_cache_test.go b/packages/cli/tests/e2e/tasks_cache_test.go index 131e388..b7603e6 100644 --- a/packages/cli/tests/e2e/tasks_cache_test.go +++ b/packages/cli/tests/e2e/tasks_cache_test.go @@ -18,6 +18,15 @@ func appendRootTaskConfig(t *testing.T, root, value string) { } func TestE2E_TasksRestoreArtifactsAndInvalidateRootConfiguration(t *testing.T) { + // CI runs race and plain suites with the same outer artifact cache. A new + // fixture must execute its first build even when identical artifacts exist. + t.Setenv("MISE_TASK_CACHE_DIR", t.TempDir()) + for _, name := range []string{"first", "fresh-home"} { + t.Run(name, testTasksRestoreArtifactsAndInvalidateRootConfiguration) + } +} + +func testTasksRestoreArtifactsAndInvalidateRootConfiguration(t *testing.T) { root := buildFixture(t, true) for _, project := range []struct{ name, dir string }{{"web", "apps/web"}, {"lib", "packages/lib"}} { name, dir := project.name, project.dir @@ -139,9 +148,11 @@ func TestE2E_NativeMiseIncludedTOMLTask(t *testing.T) { } func TestE2E_TasksReuseArtifactsAcrossCheckouts(t *testing.T) { - t.Setenv("MISE_TASK_CACHE_DIR", t.TempDir()) + cache := t.TempDir() for i := 0; i < 2; i++ { root := buildFixture(t, true) + // Opt into sharing only after the fixture has isolated its home/cache. + t.Setenv("MISE_TASK_CACHE_DIR", cache) for _, project := range []struct{ name, dir string }{{"web", "apps/web"}, {"lib", "packages/lib"}} { name, dir := project.name, project.dir buildWrite(t, root, dir+"/build.sh", "#!/bin/sh\nmkdir -p dist\necho portable-artifact > dist/value\necho executed >> executions\n") From 3d3210e0db29a694d1dcadc97a369adf26e2ef32 Mon Sep 17 00:00:00 2001 From: caorushizi <84996057@qq.com> Date: Tue, 29 Sep 2026 05:16:36 +0800 Subject: [PATCH 2/2] fix(test): publish detached worker completion atomically --- .../cli/internal/platform/updatecheck/background_test.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/cli/internal/platform/updatecheck/background_test.go b/packages/cli/internal/platform/updatecheck/background_test.go index e40bc30..40d9ab0 100644 --- a/packages/cli/internal/platform/updatecheck/background_test.go +++ b/packages/cli/internal/platform/updatecheck/background_test.go @@ -139,9 +139,15 @@ func TestDetachedWorkerHelper(t *testing.T) { } closeParent() time.Sleep(100 * time.Millisecond) - if err := os.WriteFile(os.Getenv("ONE_UPDATE_TEST_MARKER"), []byte("finished"), 0o600); err != nil { + // Publish completion only after the contents are fully written and closed. + // Writing the marker directly lets the parent observe an empty file. + marker := os.Getenv("ONE_UPDATE_TEST_MARKER") + if err := os.WriteFile(marker+".tmp", []byte("finished"), 0o600); err != nil { os.Exit(5) } + if err := os.Rename(marker+".tmp", marker); err != nil { + os.Exit(6) + } os.Exit(0) } }