DefinitelyTyped の PR をサポートしてくれる Bot

TS の型定義を管理する巨大 repository があり、それがDefinitelyTyped
過去にDefinitelyTyped へ PR を作成した際に、typescript-botの連携が素晴らしかったので紹介。
なお、貢献方法は公式の READMEと、DefinitelyTyped に型定義ファイルを作ってコントリビュートする手順 | I am mitsuruogに譲ることする。
日本語での解説記事でわかりやすかった。

Board に追加

fork して定義書いて test や lint をローカルで pass して PR を出したあとは、まず Bot がPR をボードに追加してくれて、status を Waiting for Code Reviews にしてくれる。
これは DT メンテナが PR の状況を把握しやすいようにするため。

メンション付きフィードバック

Bot が PR にコメントを書いてサポートをしてくれる。
このセクションの画像のように、PR の status を教えてくれる。
このコメントは、Bot が随時書き直してくれる。
例えば test が fail から pass へ変更されたらチェックマークの絵文字に変更してくれる。

DT メンテナか定義所有者へのメンション

PR が出されたことを、Bot が DT メンテナか定義所有者にメンションを付けてコメントしてくれる。
すでに定義所有者がいる場合は定義所有者にメンションが行き、自分で初めてライブラリの型を追加する場合は定義所有者がいないので、DT メンテナにメンションが行く。
定義所有者は型定義ファイルの先頭のコメントのDefinitions byの人たちのこと。
僕は apollo-upload-client っていうライブラリの型定義の定義所有者なので、apollo-upload-client の型定義に対して PR 投げると僕にもメンションが行く。

// Type definitions for apollo-upload-client 14.1
// Project: https://github.com/jaydenseric/apollo-upload-client#readme
// Definitions by: Edward Sammut Alessi <https://github.com/Slessi>, tyankatsu <https://github.com/tyankatsu0105>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 3.6

過去 PR 出すときに自分で定義所有者にメンション飛ばすやらかしをやってしまったことがあるので、自動でやってくれることを知っておいてこれを防いでおきたいところ

Bot からマージコメントを書くように催促

ステータスが全部OKになると、ステータスを記述した Bot のコメントに、「全部 status よさそうだからReady to mergeってコメントすると merge するからお願い」ってコメントを残してくれる。

publish したフィードバック

Ready to mergeでマージすると、npm に publish したというコメントが Bot からから来て、作業は終了になる。

気をつけておくこと

status が全部 OK になるまで待つ

型定義の変更したけど test の変更がない場合や、型定義の変更によってパフォーマンスが落ちる場合、定義所有者の approve があるとしても DT メンテナによるチェックが入る。
DT メンテナが merge してくれることもあるし、DT メンテナが PR のステータスをボードで移してくれて PR 作成者が merge できることもある。
いずれにせよ型定義の変更によって懸念が残る場合は DT メンテナによるチェックを待つ必要がある。

DT メンテナとは

ここに書いてある

  • DT メンテナ(The DT maintainers)
  • 定義所有者(The definition owners)
  • その他(PR 送ったけど定義所有者になることを希望してない人とか)
    っていう3つに分類してる。
    上2つの用語の分類は特に重要で、DT メンテナにしか権限がない場合があるので、定義所有者になんとかしてと言ってもなんともならないので注意。

lint は dtslint

lint は eslint や tslint じゃなくて、dtslintっていうのを使っているので、解消の仕方はdtslint の docs を参照しよう

test は git diff を検知して起動する

DefinitelyTyped-tools の dtslint-runnerは commit しないでいると

Error: 'git diff' should be empty. Following files changed:
types/apollo-upload-client/index.d.ts

って出ちゃうので、git commit してから test する。

Bot で PR がスムーズに

issue template も PR template も記述量多いし、fork して clone するのも、でかいので時間かかるし、テストや lint や prettier による format もしないといけないけど、PR 出したあとは導いてくれるので、PR 出すまでは頑張ろう!!!

参考