Drop merged GraphQL schema for split files

Relay no longer needs a single merged schema.graphql: each project in
relay.config.json now reads the split graphql/*.graphql files directly
via `schema` (base.graphql) plus `schemaExtensions`. gqlgen already
consumed the split files, so the merge step only fed Relay and the
optional IDE GraphQL extension.

Remove the merge machinery (contrib/merge-graphql-schema.sh, the
RELAY_SCHEMAS make rules, and the gitignore entry) and drop the
graphql-config files (apps/trust/graphql.config.yml and the root
package.json graphql field); the Relay extension provides schema-aware
language features from relay.config.json on its own.

relay-compiler keeps generated artifacts in sync (stale ones are
removed automatically), so the relay npm script just runs the local
relay-compiler and the make target delegates to it.

Signed-off-by: Émile Ré <emile@probo.com>
This commit is contained in:
Émile Ré
2026-06-19 13:49:13 +02:00
parent 89427845c4
commit 7e943c8105
7 changed files with 10 additions and 78 deletions

1
.gitignore vendored
View File

@@ -21,7 +21,6 @@ compose/keycloak/probo-realm.json
# Generated files (codegen) # Generated files (codegen)
__generated__/ __generated__/
pkg/server/api/*/v1/types/types.go pkg/server/api/*/v1/types/types.go
pkg/server/api/*/v1/schema.graphql
cfg/dev_local.yaml cfg/dev_local.yaml
cfg/dev.yaml cfg/dev.yaml
.env .env

View File

@@ -282,30 +282,14 @@ $(PROBO_AGENT_BIN):
@probo/emails: @probo/emails:
$(NPM) --workspace $@ run build $(NPM) --workspace $@ run build
RELAY_SCHEMAS = \
pkg/server/api/connect/v1/schema.graphql \
pkg/server/api/console/v1/schema.graphql \
pkg/server/api/trust/v1/schema.graphql
.PHONY: relay .PHONY: relay
relay: $(RELAY_SCHEMAS) relay:
$(NPX) relay-compiler $(NPM) run relay
MERGE_GRAPHQL = contrib/merge-graphql-schema.sh
CONNECT_GQL = $(wildcard pkg/server/api/connect/v1/graphql/*.graphql) CONNECT_GQL = $(wildcard pkg/server/api/connect/v1/graphql/*.graphql)
CONSOLE_GQL = $(wildcard pkg/server/api/console/v1/graphql/*.graphql) CONSOLE_GQL = $(wildcard pkg/server/api/console/v1/graphql/*.graphql)
TRUST_GQL = $(wildcard pkg/server/api/trust/v1/graphql/*.graphql) TRUST_GQL = $(wildcard pkg/server/api/trust/v1/graphql/*.graphql)
pkg/server/api/connect/v1/schema.graphql: pkg/server/api/connect/v1/graphql $(CONNECT_GQL)
$(MERGE_GRAPHQL) $@ pkg/server/api/connect/v1/graphql
pkg/server/api/console/v1/schema.graphql: pkg/server/api/console/v1/graphql $(CONSOLE_GQL)
$(MERGE_GRAPHQL) $@ pkg/server/api/console/v1/graphql
pkg/server/api/trust/v1/schema.graphql: pkg/server/api/trust/v1/graphql $(TRUST_GQL)
$(MERGE_GRAPHQL) $@ pkg/server/api/trust/v1/graphql
.PHONY: @probo/console .PHONY: @probo/console
@probo/console: NODE_ENV=production @probo/console: NODE_ENV=production
@probo/console: relay @probo/console: relay

View File

@@ -1,5 +0,0 @@
schema: '../../pkg/server/api/trust/v1/schema.graphql'
extensions:
endpoints:
TrustCenter:
url: http://localhost:8080/api/trust/v1/graphql

View File

@@ -41,7 +41,7 @@ Individual codegen is driven by `go generate`:
- `go generate ./pkg/server/api/mcp/v1` — MCP (mcpgen) - `go generate ./pkg/server/api/mcp/v1` — MCP (mcpgen)
- `go generate ./pkg/llm` — LLM model registry from OpenRouter (`make genmodels`) - `go generate ./pkg/llm` — LLM model registry from OpenRouter (`make genmodels`)
`make relay` merges split `.graphql` schema files and runs `relay-compiler`. `make relay` runs `relay-compiler`, which reads the split `.graphql` schema files directly (via each project's `schema` + `schemaExtensions` in `relay.config.json`) and keeps generated artifacts in sync (stale ones are removed automatically).
## Coverage ## Coverage

View File

@@ -1,44 +0,0 @@
#!/bin/sh
# Merge split GraphQL schema files into a single file for Relay.
# Strips "type Mutation" and "extend type Mutation { ... }" blocks,
# then appends a single "type Mutation { ... }" with all collected fields.
#
# Usage: merge-graphql-schema.sh <output> <graphql-dir>
set -eu
output="$1"
graphql_dir="$2"
base="$graphql_dir/base.graphql"
mutation_fields=$(mktemp)
schema_body=$(mktemp)
trap 'rm -f "$mutation_fields" "$schema_body"' EXIT
process_file() {
awk -v mf="$mutation_fields" '
/^type Mutation$/ { next }
/^(extend )?type Mutation \{/ { skip=1; depth=1; next }
skip {
if (/\{/) depth++
if (/\}/) { depth--; if (depth==0) { skip=0; next } }
if (skip) { print >> mf; next }
}
{ print }
' "$1"
}
{
process_file "$base"
for f in "$graphql_dir"/*.graphql; do
[ "$f" = "$base" ] && continue
process_file "$f"
done
} > "$schema_body"
{
cat "$schema_body"
printf '\ntype Mutation {\n'
cat "$mutation_fields"
printf '}\n'
} > "$output"

View File

@@ -15,17 +15,12 @@
"dev": "turbo run dev", "dev": "turbo run dev",
"lint": "turbo run lint", "lint": "turbo run lint",
"check": "turbo run check", "check": "turbo run check",
"relay-clean": "find apps -type d -name __generated__ -exec rm -rf {} +", "relay": "relay-compiler"
"relay-compile": "npx relay-compiler",
"relay": "npm run relay-clean && npm run relay-compile"
}, },
"devDependencies": { "devDependencies": {
"relay-compiler": "^21.0.1", "relay-compiler": "^21.0.1",
"turbo": "^2.9.14" "turbo": "^2.9.14"
}, },
"graphql": {
"schema": "./pkg/server/api/console/v1/graphql/"
},
"overrides": { "overrides": {
"brace-expansion": "^5.0.5", "brace-expansion": "^5.0.5",
"minimatch@3": { "minimatch@3": {

View File

@@ -10,7 +10,8 @@
}, },
"projects": { "projects": {
"core": { "core": {
"schema": "pkg/server/api/console/v1/schema.graphql", "schema": "pkg/server/api/console/v1/graphql/base.graphql",
"schemaExtensions": ["pkg/server/api/console/v1/graphql"],
"language": "typescript", "language": "typescript",
"noFutureProofEnums": true, "noFutureProofEnums": true,
"output": "apps/console/src/__generated__/core", "output": "apps/console/src/__generated__/core",
@@ -25,7 +26,8 @@
} }
}, },
"iam": { "iam": {
"schema": "pkg/server/api/connect/v1/schema.graphql", "schema": "pkg/server/api/connect/v1/graphql/base.graphql",
"schemaExtensions": ["pkg/server/api/connect/v1/graphql"],
"language": "typescript", "language": "typescript",
"noFutureProofEnums": true, "noFutureProofEnums": true,
"output": "apps/console/src/__generated__/iam", "output": "apps/console/src/__generated__/iam",
@@ -40,7 +42,8 @@
} }
}, },
"trust": { "trust": {
"schema": "pkg/server/api/trust/v1/schema.graphql", "schema": "pkg/server/api/trust/v1/graphql/base.graphql",
"schemaExtensions": ["pkg/server/api/trust/v1/graphql"],
"language": "typescript", "language": "typescript",
"noFutureProofEnums": true, "noFutureProofEnums": true,
"customScalarTypes": { "customScalarTypes": {