GitHub APIのGraphQLスキーマでハマった話

2022/04/17 13:15

※ 商品のリンクをクリックして何かを購入すると私に少額の報酬が入ることがあります【広告表示】

GitHubのAPIを使ってリポジトリの状態を自動取得したいなー。春だし。

たまにはTypescriptで書こう → ハマる

ついPythonで書いてしまったのだけれど、GraphQL部分は同じだし、せっかくなのでTypescriptで書いてみようと思ったらハマった話。

何が起きたのか

vulnerabilityAlerts の states が OPEN なものを抽出しようと思ったのだけれど、GraphQLをcodegenしようとしたらstatesなんて知らんと言われてしまった。

  vulnerabilityAlerts(last: 100, states: OPEN) {

vulnerabilityAlertsのfilterがエラーになった。

  Error 0: GraphQLDocumentError: Unknown argument "states" on field "Repository.vulnerabilityAlerts".

なぜ起きたのか

node_modulesからスキーマのファイル探して確認してみると確かに無い。

APIドキュメントにはあるのにな、というかPythonでは動いてるのだから機能としてはあるんだよな、と思いつついつ頃追加されたものなのか確認したら

2022/02/16にRepositoryVulnerabilityAlertの項目が追加されていた

GraphQL APIのchangelog の日付は2022年2月16日になっている。比較的最近追加されたモノのようだ。

@octokit/graphql-schema の2022年4月17日時点のバージョン10.73.0は7month ago、 GitHubのリポジトリ をみるとv10.73.0リリースタグの日付は2022年10月1日でした。

最近追加されたモノのようだ。

解決する

どういう状態なのだろう?とPRやIssueを見てみると、 fixedAtを追加というPR はあるのだけれど、なぜfixedAtだけ?となる。

Contributeの流儀を確認するのめんどうだなーなんて思いつつREADMEを見ていたら(今か!!)、

Update schema files (GITHUB_TOKEN requires no scope) という記述がありましたよ?

Updateしてみる

forkしてローカルにcloneしてきました。READMEにはnpm updateしろと書いてあるので、

  yarn
  yarn run update

としましたよ。変更点の中からvulnerabilityAlertsを確認すると、ありますあります。statesありますね。

変更をpushしてから、package.jsonの@octokit/graphql-schemaをforkしたものに差し替えてライブラリ更新後にcodegenし直し → ちゃんとgraphqlのtsファイルを生成できました。

もちろん、statesでfilterできましたとさ。めでたしめでたし

おまけ

github.blogにあったdependabotのchangelog の日付は2022年2月15日。関係がよくわからない。

Prev Entry

Next Entry