From f7070c43a43c628fafd22a2ab922e0e6caa9acdd Mon Sep 17 00:00:00 2001 From: Sacha Al Himdani Date: Mon, 20 Apr 2026 16:24:38 +0200 Subject: [PATCH] Serialize gqlgen codegen to fix build cache race Parallel gqlgen instances race on the Go build cache, causing Rewriter.getSource() to panic with "slice bounds out of range" when go/packages returns empty source. Chain gqlgen targets with order-only prerequisites in the Makefile and switch the CI build job to sequential generation. Signed-off-by: Sacha Al Himdani --- .github/workflows/make.yaml | 10 ++++------ GNUmakefile | 6 ++++-- pkg/server/api/console/v1/resolver.go | 14 -------------- 3 files changed, 8 insertions(+), 22 deletions(-) diff --git a/.github/workflows/make.yaml b/.github/workflows/make.yaml index 9afb56a28..637716f2d 100644 --- a/.github/workflows/make.yaml +++ b/.github/workflows/make.yaml @@ -216,12 +216,10 @@ jobs: echo dev-server > packages/emails/dist/placeholder - name: "Generate Go code" run: | - pids=() - go generate ./pkg/server/api/connect/v1 & pids+=($!) - go generate ./pkg/server/api/console/v1 & pids+=($!) - go generate ./pkg/server/api/trust/v1 & pids+=($!) - go generate ./pkg/server/api/mcp/v1 & pids+=($!) - for pid in "${pids[@]}"; do wait "$pid"; done + go generate ./pkg/server/api/connect/v1 + go generate ./pkg/server/api/console/v1 + go generate ./pkg/server/api/trust/v1 + go generate ./pkg/server/api/mcp/v1 - name: "Build binaries" env: CGO_ENABLED: "0" diff --git a/GNUmakefile b/GNUmakefile index 27c0ebcd2..1e0a49e4c 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -269,12 +269,14 @@ pkg/server/api/connect/v1/schema/schema.go \ pkg/server/api/connect/v1/types/types.go: pkg/server/api/connect/v1/gqlgen.yaml pkg/server/api/connect/v1/graphql $(CONNECT_GQL) $(GO_GENERATE) ./pkg/server/api/connect/v1 +# gqlgen instances must run sequentially: parallel runs race on the Go build +# cache and cause gqlgen's Rewriter.getSource() to panic with empty source. pkg/server/api/console/v1/schema/schema.go \ -pkg/server/api/console/v1/types/types.go: pkg/server/api/console/v1/gqlgen.yaml pkg/server/api/console/v1/graphql $(CONSOLE_GQL) +pkg/server/api/console/v1/types/types.go: pkg/server/api/console/v1/gqlgen.yaml pkg/server/api/console/v1/graphql $(CONSOLE_GQL) | pkg/server/api/connect/v1/types/types.go $(GO_GENERATE) ./pkg/server/api/console/v1 pkg/server/api/trust/v1/schema/schema.go \ -pkg/server/api/trust/v1/types/types.go: pkg/server/api/trust/v1/gqlgen.yaml pkg/server/api/trust/v1/graphql $(TRUST_GQL) +pkg/server/api/trust/v1/types/types.go: pkg/server/api/trust/v1/gqlgen.yaml pkg/server/api/trust/v1/graphql $(TRUST_GQL) | pkg/server/api/console/v1/types/types.go $(GO_GENERATE) ./pkg/server/api/trust/v1 pkg/server/api/mcp/v1/server/server.go \ diff --git a/pkg/server/api/console/v1/resolver.go b/pkg/server/api/console/v1/resolver.go index bfd289d9a..878b6e904 100644 --- a/pkg/server/api/console/v1/resolver.go +++ b/pkg/server/api/console/v1/resolver.go @@ -14,20 +14,6 @@ //go:generate go tool github.com/99designs/gqlgen generate -// Copyright (c) 2025 Probo Inc . -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -// PERFORMANCE OF THIS SOFTWARE. - package console_v1 import (