Echolot
コマンドラインとCI

echolot graphql diff

2つのGraphQLスキーマを比較し、破壊的変更があるときにビルドを失敗させます。

echolot graphql diff は、あるGraphQLスキーマから別のスキーマへの変更点を一覧表示し、各変更を評価します。これにより、APIのクライアントを壊す変更が入る前にビルドを止められます。

echolot graphql diff <old> <new> [--fail-on <level>] [--json]

<old> と <new> は、変更前と変更後のスキーマです:SDLファイル(.graphql)またはイントロスペクションの結果(JSON)で、どの組み合わせでも構いません。

2つのスキーマを比較する

git show main:specs/shop.graphql > before.graphql
echolot graphql diff before.graphql Alpenglow.echolot/specs/shop.graphql
Breaking (1)
  The field Product.weightGrams was removed
Dangerous (1)
  The argument inStock was added to Query.search
Safe (1)
  The field Product.colors was added
評価意味
Breaking(破壊的)以前は動いていたクエリが失敗する可能性があります:型、フィールド、入力フィールド、引数、列挙値、ディレクティブの削除。必須の引数や入力フィールドの追加。フィールドの型の変更(出力をnon-nullにする場合を除く)。ユニオンのメンバーやインターフェースの削除。
Dangerous(危険)クエリは動き続けますが、動作が変わる可能性があります:オプションの引数の追加、デフォルトの変更、列挙値やユニオンのメンバーの追加、新しいインターフェース、非推奨になったもの。
Safe(安全)既存のクエリが気づくことのない変更:型、フィールド、オプションの入力フィールド、ディレクティブの追加。説明の変更。非推奨の解除。

--json は、変更をJSON配列として出力します。各要素には severity、path、message があります。

[
  {
    "message" : "The field Product.weightGrams was removed",
    "path" : "Product.weightGrams",
    "severity" : "breaking"
  },
  {
    "message" : "The argument inStock was added to Query.search",
    "path" : "Query.search(inStock)",
    "severity" : "dangerous"
  }
]

オプション

オプション意味
--fail-on <level>breaking(デフォルト)は破壊的変更で終了コード1。dangerous は破壊的変更と危険な変更で終了コード1。none は常に0。
--json変更をJSONで出力します。

終了コード

コード条件
0--fail-on のレベル以上の変更はありません。
1--fail-on のレベル以上の変更があるか、スキーマを読み込めませんでした。

実行中のサーバからスキーマを取得するには、アプリのGraphQLリクエストでイントロスペクションクエリを送信するか、GraphQLリクエストを参照してください。

このページの内容