Publishing schemas to GraphOS
Using the Rover CLI
Whenever you make changes to a graph's schema, you should publish those changes to Apollo GraphOS using the Rover CLI. Doing so ensures that Apollo always has an up-to-date understanding of your graph.
⚠️ If you haven't installed Rover yet:
- Install the Rover CLI.
- Authenticate Rover with GraphOS.
Subgraph schemas
Every supergraph in GraphOS includes one or more subgraphs. You individually publish each subgraph's schema to Apollo with rover subgraph publish
:
rover subgraph publish --schema ./products.graphql --name products docs-example-graph@current --routing-url https://products.example.com
To publish a subgraph schema to Apollo:
Identify the name of the subgraph you're publishing to. You can view the names of your existing subgraphs from your variant's Subgraphs page in Apollo Studio.
If you're publishing a subgraph for the first time, also obtain the routing URL for that subgraph. This is the URL that your router will use to communicate with the subgraph.
- If GraphOS already knows your subgraph's routing URL, you don't need to provide this value unless you're changing it.
Run the
rover subgraph publish
command and provide it your subgraph's schema in one of the ways shown:# Provide a local .graphql file pathrover subgraph publish my-graph@my-variant --name locations --routing-url https://flyby-locations-sub.herokuapp.com/ --schema ./schema.graphql# Provide an introspection result via stdinrover subgraph introspect http://localhost:4000 | rover subgraph publish my-graph@my-variant --name locations --routing-url https://flyby-locations-sub.herokuapp.com/ --schema -
Whenever you publish a subgraph schema, GraphOS attempts to compose all latest versions of your subgraph schemas into a single supergraph schema for your router:
If this composition succeeds, your router is updated with the result. This enables clients to query any newly added fields, and it prevents them from querying any removed fields.
You can manually fetch your router's latest supergraph schema with the rover supergraph fetch
command, or retrieve it from your supergraph's Schema > SDL page in Apollo Studio.
Publishing with continuous delivery
To get the most out of GraphOS, you should publish each update to any production schema as soon as it occurs. Consequently, schema publishing should be part of your continuous delivery pipeline.
Here's a sample continuous delivery configuration for schema publishing in CircleCI:
version: 2jobs:build:docker:- image: circleci/node:8steps:- checkout- run: npm install- run:name: Install Rovercommand: |# Download and install Rover# This is pinned to a specific version for predictability in CIcurl -sSL https://rover.apollo.dev/nix/v0.8.1 | sh# This allows the PATH changes to persist to the next `run` stepecho 'export PATH=$HOME/.rover/bin:$PATH' >> $BASH_ENV# Start the GraphQL server. If a different command is used to# start the server, use it in place of `npm start` here.- run:name: Starting servercommand: npm startbackground: true# make sure the server has enough time to start up before running# commands against it- run: sleep 5# When running on the 'main' branch, push the latest version# of the schema to GraphOS.- run: |if [ "${CIRCLE_BRANCH}" == "main" ]; thenrover subgraph publish my-graph@my-variant \--schema ./schema.graphql \--name locations \--routing-url https://products.example.comfi
Monolith schemas
⚠️ These instructions apply only to monographs, which are not recommended.
If you haven't yet:
- Install the Rover CLI
- Authenticate Rover with GraphOS.
Decide how you'll provide your server's schema to Rover. You can either:
- Use a
.gql
or.graphql
file saved on your local machine, or - Perform an introspection query on your running server to fetch the schema
- Use a
Run the
rover graph publish
command, providing your schema in one of the ways shown:# Provide a local .graphql file pathrover graph publish my-graph@my-variant --schema ./schema.graphql# Provide an introspection result via stdinrover graph introspect http://localhost:4000 | rover graph publish my-graph@my-variant --schema -As shown, the first positional argument you provide
rover graph publish
is a graph ref, a string that specifies a particular variant of a particular graph in GraphOS.