複数のリポジトリにまたがるGraphSQLスキーマからTypeScript型を連続的に生成する🚀
14856 ワード
GraphQL Code Generator (
ただし、最新のGraphSQLスキーマから型宣言を生成する問題があります
以下に最小限の例を示します:
参照GraphQL Code Generator's documentation 詳細は
次のセクションに進む前に、次のようにします.
私と一緒にレールアプリケーションです
私は
GraphSQLスキーマファイルを生成するスクリプト
Git pre commit hookまたはgithubアプリケーションを使用して、このファイル生成を自動化することをお勧めします.
あなたのGitHub個人アクセストークンをあなたの倉庫の秘密にセットしてください.私の場合、秘密の名前は
トークンはスコープにアクセスする必要があります
GraphSQLプロジェクトとクライアントアプリケーションが同じディレクトリまたは同じGITUBリポジトリにある場合、上記の基本的な例は十分です.一方、アプリケーションが異なるリポジトリで管理されている場合は、どうすればよいでしょうか?
その場合、リモートを指定できます
dotenvを使っているなら、codegenコマンドは
こちらが
前の節ではセットアップ方法を説明します
Githubアクションはそれを行う最良の方法かもしれません.3つのGithubワークフローを作成する必要があります. GraphSQLスキーマが更新された際にクライアント側のrepoに通知します. 実行する automerge pull request (クライアント側のレポ) (オプション)
GraphSQLのスキーマからほとんど同期してtypescriptタイピングを生成するには、サーバー側のRIPOは、GraphSQLスキーマが更新されるときにクライアント側のレポに通知しなければなりません.
以下の設定でrepoがトリガされます
警告!第三段階
マイ
時
プル要求が作成されるとき、1つはチェックして、PRを承認したいです、一方、もう一つは、自動的に合併されることを望みます.私は後者の考えが好きです
警告!第四段階
マイ
あなたがgithubワークフローでつくられるautomergateであるプル要求を望むならば.
番目のワークフローが新しいプルリクエストを作成し、
マイ
最後に、あなたのGraphSQLプロジェクトは、リポジトリを横切ってGraphSQLスキーマから型スクリプトを生成することができます!🚀
上記のすべてをうまく構成した場合、ワークフローはこのようになります.
Notify client-side repo when GraphQL schema is updated Execute Automerge Pull Request
ここでワークフローで作成された実際のプル要求を見ることができますayumitamai97/cont-codegen-sandbox-client#36 .
使用する場合に注意してください
このポストが役に立つならば、あるいは、あなたはこれらのことをするより良い方法を知っています.読んでくれてありがとう!👾
日本語版GraphQL スキーマの変更を検知し、TypeScript の型定義を自動的に生成する仕組み | Medium
graphql-codegen
) サーバー側でのGraphSQLとクライアント側の型スクリプトを使用するときに非常に便利です.GraphSQLとTypeScriptを使用する場合は、あなたのGraphSQLスキーマに基づいて型スクリプトを宣言します.1つずつタイプスクリプトを書く代わりに.graphql-codegen
スキーマに1 : 1のGraphSQLスキーマから型宣言を生成します.ただし、最新のGraphSQLスキーマから型宣言を生成する問題があります
graphql-codegen
ときに別のgithubリポジトリでAPIとクライアントアプリケーションを開発する.どのように解決すべきかの基本的な使い方
以下に最小限の例を示します:
schema: schema.graphql
generates:
./src/graphql-schema.ts:
plugins:
- typescript
schema
フィールドは1を参照します.*.graphql
またはJSON形式、3 )リモート*.graphql
githubリポジトリ内のファイルなど.参照GraphQL Code Generator's documentation 詳細は
前提条件
次のセクションに進む前に、次のようにします.
1 . GraphSQLプロジェクトとそれに対応するGithubリポジトリ
私と一緒にレールアプリケーションです
graphql-ruby
宝石は、アプリの名前cont-codegen-sandbox-api
.typescriptとその対応するgithubリポジトリで作られたアプリケーション
私は
cont-codegen-sandbox-client
.Graphicsスキーマジェネレータ
GraphSQLスキーマファイルを生成するスクリプト
schema.graphql
サーバ側で.使っているlib/graphql/rake_task.rb ( rake graphql:schema:idl
) これは.Git pre commit hookまたはgithubアプリケーションを使用して、このファイル生成を自動化することをお勧めします.
Github個人アクセストークン
あなたのGitHub個人アクセストークンをあなたの倉庫の秘密にセットしてください.私の場合、秘密の名前は
PERSONAL_ACCESS_TOKEN
.トークンはスコープにアクセスする必要があります
repo
.graphql-codegen
また、GithubアクションはREPOがプライベートかどうかトークンを使用します.repos全体のタイピングを生成する
GraphSQLプロジェクトとクライアントアプリケーションが同じディレクトリまたは同じGITUBリポジトリにある場合、上記の基本的な例は十分です.一方、アプリケーションが異なるリポジトリで管理されている場合は、どうすればよいでしょうか?
その場合、リモートを指定できます
schema.graphql
githubリポジトリ(プライベートリポジトリを含む)で✨). codegen.yml
構文に従う必要があります.schema:
- user/repo#branchName:path/to/schema.graphql:
token: ${PERSONAL_ACCESS_TOKEN}
token
フィールドは常に必要ですgraphql-codegen
あなたのリポジトリにアクセスできます.あなたのレポでさえ、公である必要がありますtoken
現在は2021年1月.これがバグかどうか知りません.dotenvを使っているなら、codegenコマンドは
graphql-codegen -r dotenv/config
.こちらが
codegen.yml
:schema:
- github:ayumitamai97/cont-codegen-sandbox-api#main:schema.graphql:
token: ${PERSONAL_ACCESS_TOKEN}
generates:
./types/graphql-schema.ts:
plugins:
- typescript
config:
apolloClientVersion: 2
今、私たちは打つことによってタイプスクリプトのために型の縮小を生成することができますyarn graphql-codegen -r dotenv/config
🔥REPOSを通して連続的に生成を生成する
前の節ではセットアップ方法を説明します
graphql-codegen
別のリポジトリでGraphSQLとTypesScriptプロジェクトを持つ場合.では、どのようにこのプロセスを自動化できるのでしょうか?Githubアクションはそれを行う最良の方法かもしれません.3つのGithubワークフローを作成する必要があります.
graphql-codegen
とプルリクエスト(クライアント側レポ)を作成する1 . GraphSQLスキーマの更新時にクライアント側のレポを通知する
GraphSQLのスキーマからほとんど同期してtypescriptタイピングを生成するには、サーバー側のRIPOは、GraphSQLスキーマが更新されるときにクライアント側のレポに通知しなければなりません.
以下の設定でrepoがトリガされます
repository_dispatch
コミットが押されるとき、他のrepoのイベントmain
枝schema.graphql
はファイルdiffである.警告!第三段階
Dispatch update-graphql-schema
) あなたの個人的なアクセストークン GITHUB_TOKEN
cannot trigger repository_dispatch
event .マイ
.github/workflows/dispatch_graphql_schema_update.yml
サーバサイドレポでname: Dispatch GraphQL Schema Update
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: technote-space/[email protected]
with:
PATTERNS: schema.graphql
- name: Dispatch update-graphql-schema
uses: peter-evans/repository-dispatch@v1
with:
repository: ayumitamai97/cont-codegen-sandbox-client
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
event-type: update-graphql-schema
if: env.GIT_DIFF
2 . GraphSQL CodeGenを実行し、プルリクエストを作成する
時
repository_dispatch
イベントは、クライアント側のレポでトリガされ、我々はしたいgraphql-codegen
最新のGraphSQLスキーマに基づいて型スクリプトを生成します.プル要求が作成されるとき、1つはチェックして、PRを承認したいです、一方、もう一つは、自動的に合併されることを望みます.私は後者の考えが好きです
pascalgn/automerge-action
.警告!第四段階
Create Pull Request
) 必要PERSONAL_ACCESS_TOKEN
あなたがプル要求をautomergeしたいならば.そうでなければ、GITHUB_TOKEN
十分です.マイ
.github/workflows/graphql_schema_updated.yml
クライアント側レポについて:name: Update GraphQL Schema
on:
repository_dispatch:
types: [update-graphql-schema]
jobs:
update-graphql-schema:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
- name: Install dependencies
run: yarn install
- name: Update GraphQL Schema
run: PERSONAL_ACCESS_TOKEN=${{ secrets.PERSONAL_ACCESS_TOKEN }} yarn codegen
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} # `GITHUB_TOKEN` unless using automerge-action
commit-message: '[bot] Update GraphQL Schema'
committer: GitHub <[email protected]>
author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
signoff: false
branch: feature/update-graphql-schema
branch-suffix: timestamp
delete-branch: true
title: '[bot] Update GraphQL Schema'
body: GraphQL schema has been updated
labels: automerge # required if using automerge-action
automerge pull request (オプション)
あなたがgithubワークフローでつくられるautomergateであるプル要求を望むならば.
pascalgn/automerge-action
参考です.このGithubアクションは、自動的にPRをマージしますautomerge
レーベル.番目のワークフローが新しいプルリクエストを作成し、
automerge
それへのラベル、PRがラベルされるとき、3番目(この)ワークフローは引き起こされなければなりません.マイ
.github/workflows/automerge.yml
クライアント側レポについて:name: Automerge
on:
pull_request:
types:
- labeled
jobs:
automerge:
runs-on: ubuntu-latest
steps:
- name: automerge
uses: pascalgn/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
実施例
最後に、あなたのGraphSQLプロジェクトは、リポジトリを横切ってGraphSQLスキーマから型スクリプトを生成することができます!🚀
上記のすべてをうまく構成した場合、ワークフローはこのようになります.
私のCodegenとワークフロー構成へのリンク
graphql-codegen
config graphql-codegen
and create Pull Request 例のプル要求へのリンク
ここでワークフローで作成された実際のプル要求を見ることができますayumitamai97/cont-codegen-sandbox-client#36 .
使用する場合に注意してください
GITHUB_TOKEN
for Create Pull Request
ステップ、コミッタはあなたのアカウントの代わりに“githubアクション(ボット)”になります.このポストが役に立つならば、あるいは、あなたはこれらのことをするより良い方法を知っています.読んでくれてありがとう!👾
日本語版GraphQL スキーマの変更を検知し、TypeScript の型定義を自動的に生成する仕組み | Medium
Reference
この問題について(複数のリポジトリにまたがるGraphSQLスキーマからTypeScript型を連続的に生成する🚀), 我々は、より多くの情報をここで見つけました https://dev.to/ayumitamai97/continuously-generate-typescript-typings-from-graphql-schema-across-multiple-repositories-37abテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol