From 326b254dcc242cc084d989fd4336acc488bd6e35 Mon Sep 17 00:00:00 2001 From: Manuel de Brito Fontes Date: Sat, 10 Oct 2026 22:22:36 -0300 Subject: [PATCH] refs: list the tasks without working out their status go-task 3.54 writes a task's sources checksum when --list-all --json computes its up_to_date, so every refs run marked every task whose sources had changed as up to date without running it. In spin's ci:local, lint ran refs before the e2e lane, whose e2e:bins then skipped the build and served a control plane with the previous dashboard in it. Reproduced: a checksum file set to junk is rewritten by --list-all --json and left by --list-all --json --no-status. Co-Authored-By: Claude Opus 5.5 (1M context) --- cmd/refs/main.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cmd/refs/main.go b/cmd/refs/main.go index 7cfa91b..a6ef041 100644 --- a/cmd/refs/main.go +++ b/cmd/refs/main.go @@ -117,14 +117,18 @@ func taskLister(root, taskExe string) refs.TaskLister { case err != nil: return nil, fmt.Errorf("refs: looking for %s: %w", filepath.Join(dir, "Taskfile.yml"), err) } - cmd := exec.Command(taskExe, "-d", dir, "--list-all", "--json") //nolint:gosec // the binary is the gate's own argument + // --no-status: working out each task's up_to_date writes its sources' checksum (go-task + // 3.54), so a listing left every task that had not run since its sources changed + // reporting itself as up to date. spin's e2e lane served a control plane built before the + // dashboard change it was gating, because `task refs` had run first in lint. + cmd := exec.Command(taskExe, "-d", dir, "--list-all", "--json", "--no-status") //nolint:gosec // the binary is the gate's own argument cmd.Dir = root cmd.Env = append(os.Environ(), "NO_COLOR=1") out, err := cmd.Output() if err != nil { var exit *exec.ExitError if errors.As(err, &exit) { - return nil, fmt.Errorf("refs: %s -d %s --list-all --json: %w\n%s", taskExe, dir, err, exit.Stderr) + return nil, fmt.Errorf("refs: %s -d %s --list-all --json --no-status: %w\n%s", taskExe, dir, err, exit.Stderr) } return nil, fmt.Errorf("refs: running %s: %w", taskExe, err) }