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:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -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
|
||||||
|
|||||||
20
GNUmakefile
20
GNUmakefile
@@ -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
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
schema: '../../pkg/server/api/trust/v1/schema.graphql'
|
|
||||||
extensions:
|
|
||||||
endpoints:
|
|
||||||
TrustCenter:
|
|
||||||
url: http://localhost:8080/api/trust/v1/graphql
|
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
|
||||||
@@ -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": {
|
||||||
|
|||||||
@@ -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": {
|
||||||
|
|||||||
Reference in New Issue
Block a user