GitHub Actions textlint ツールでの reviewdog キャッチアップ : 修正サジェスト
action-textlint v2 available
どうも、action-textlintを作りました作者でございます。 いくつかの記事 (1, 2, 3)でも利用例を出していただいてうれしい限りです。
今回v2系へのアップデートと、それに伴う機能拡充があったので、どんなことをしたのかも含めて記事にします。
What is textlint
あらためてちょっとだけtextlintについて紹介。
textlintはnpmパッケージとして提供されている、テキストドキュメントをlint(プログラ
ミング方言かな、検査・検証)できるツールです。
プラグインでの拡張、ruleやその集合のpresetを導入することで柔軟な検査が行えます。
逆になにも入れてないときは、なにもしないですが。
What is reviewdog
reviewdogにもたいへんお世話になっているので、紹介を……。
と思うところですが、下で更新を説明していますので、そこで。
What is action-textlint
そしてaction-textlintですが、これをGitHub Actionsとして実行し、結果をコミット/PRに付与できるというものです。
reviewdog support suggestion feature
action-textlintはtextlintの結果をreviewdogというツールを利用してGitHubのコミット/PRへlint結果を出力しています。
先日、このreviewdogがv0.11.0へバージョンアップしました。
変更の内容はリンク先を見ていただくとして、重要なものの1つに「差分による修正サジェストに対応」があります。
ご承知のように、GitHubのPRではレビュアーよる変更方法のサジェストができ、一部ツールでも出してくれるものがあります。
今回のreviewdogの更新によって、通常の指摘内容より拡張された新フォーマットのrdjson、もしくは差分のdiff形式での修正サジェストをPRに出せるようになりました。
後述しますが、今回これに対応しています。
Node.js 15 / npm 7 release
参照:
これも先日ですが、Node.js 15およびそれに同梱のnpm 7がリリースされています。
これ自体はGitHub Actionsとは直接は関係しませんが(環境が固定的(ubuntu-latestが20.04になりますが)ですので、意図して使わなければ使うことがない)、その中に
その他、npxでの破壊的変更
にある内、このactionに影響のあるものがありました。
これの対応が必要だったので、それにも対応しています。
Changelog
変更ですが、これらについてv2系として対応しました。
最新はv2.2.0です。
やった内容です。
Deprecated parameters adopted during development
まず先に非互換について。
旧来のv1のパラメータですが、reviewdogとそれを利用するGitHub Actionsとして不慣れな面があったため、引数の一部があまり好ましいものではありませんでした。
開発系(v0相当)からリリース(v1)になった時点で実質利用しなくなっていましたが、残ってしまっていました。
これについて削除しています。
Catch up npm 7
また、上に上げているnpm(というかnpxの引数)での非互換になりうる箇所が実装にあり、これに対応するにあたってv2という明確な切れ目に合せました。
なお、現在のv2でもnpm7以前で正常に動作しますので、特に問題がなければv2系へ移行することをお勧めします。
Treat more options
また、これらと合せる形で、 reviewdogプロジェクトリポジトリ管理のGitHub Actions(eslintを掛けるものなど多数あります)の内容をパク……もとい参考にさせていただきました。
reviewdogへ与えるパラメータについて、これらと同等に設定可能になるように修正しています。
Hello suggestion
そして目玉ですが、textlintが提供する自動修正の結果に基づいて、PRでのサジェストとして出す機能を入れています。
これはreviewdogチームが提供している汎用の差分サジェストサポートaction、reviewdog/action-suggesterを参考にして出すようにしました。
実行例:
-
テスト実行での結果キャプチャ
利点としては、ここまでくれば手元で npm ci && npm run lint
などをしなくても、textlintでの修正結果までGitHub上だけで受け取れることでしょうか。
実施内容ですが、以下のようなことをしています。
詳細を述べるにしても内容はシンプルですので、ソースを見たりしてもらえればと思います。
- v1とそう変わらない、通常のlintによる確認と通知動作を行う
- reporter形式が
github-pr-review
であるときにサジェスト追加処理にはいる(3以降) -
textlint --fix
で修正を行う -
git diff
で差分ファイルを取り出す - reviewdogに差分ファイルを渡すことでサジェストをPRへ出力
- 差分ファイルの削除、作業環境への修正適用を巻き戻すなどのクリーンナップ
見ていただくと分りますが、新形式のrdjsonを生成するのはそうそうに諦めたこともあり、指摘とサジェストは分離してしまうこととなりました。
epilogue
現在もまだ改善の余地はありますが、かなり使えるようになる修正ではないかと自負しています。
ただ、無条件にサジェストも出しているので、これをオプション制御にするかなど、考えるべき所はまだまだあります。
これからもこのツールをよろしくお願いします。
Discussion