GitHub Actions + reviewdog で textlint を実行する

Posts

この記事では、文章校正ツールである textlint のチェックでエラーになったときの結果を、GitHub の Pull Request へコメントする設定について説明します。 textlint は GitHub Actions を使って実行し、reviewdogを使って Pull Request へコメントします。

reviewdog は GitHub Actions で使える Docker ベースの Public reviewdog actions を公開しています。

しかし textlint 用の actions はないので、この記事ではワークフローの定義ファイルを自作します。

動作を確認した環境

GitHub Actions のワークフローの作成

  1. GitHub Actions を設定するリポジトリを準備します。

  2. GitHub Actions のワークフローの定義ファイルは .github/workflows の下に置きます。この記事では、ワークフローの定義ファイルは reviewdog.yml としました。

    mkdir -p .github/workflows
    touch .github/workflows/reviewdog.yml
    
  3. .github/workflows/reviewdog.yml のファイルの内容には、以下を記述します。

    name: 'Run textlint with reviewdog'
    on: [pull_request]
    jobs:
      textlint:
        runs-on: Ubuntu-latest
        container:
          image: node:current-alpine
          env:
            LEVEL: error
            FLAGS: src/
        steps:
          - uses: actions/[email protected]
          - name: setup-reviewdog
            run: |
              mkdir -p $HOME/bin && wget -O - -q https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh \
                | sh -s -- -b /usr/local/bin/ v0.9.13
              apk --update add git && \
                rm -rf /var/lib/apt/lists/*
          - name: installl-textlint
            run: |
              cd "$GITHUB_WORKSPACE"
              if [ ! -f "$(npm bin)/textlint" ]; then
                npm install
              fi
          - name: run-reviewdog
            env:
              REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
            run: |
              $(npm bin)/textlint -f checkstyle "${FLAGS:-'.'}" \
                | reviewdog -f=checkstyle -name="textlint" -diff="git diff ${{ github.event.pull_request.base.ref }}" -reporter=github-pr-review -level="${LEVEL}"
    
    • LEVEL は reviewdog のエラーレベルを設定します。infowarningerror を指定できます。
    • FLAGS は textlint をかけたい Markdown ファイルがあるディレクトリを指定します。
    • ${{ secrets.GITHUB_TOKEN }} と記述すると、GitHub 側が自動で GitHub トークンを作成します。このトークンは${{ secrets.GITHUB_TOKEN }} を使ったステップでのみ参照されます。

textlint の設定

textlint のルールプリセットは preset-ja-technical-writing を使っています。

  1. 利用する npm パッケージを package.json に追加します。

    npm init -y
    npm install -D textlint textlint-rule-preset-ja-technical-writing
    
  2. .textlintrc を作成し、次の内容を追記します。

    {
      "plugins": {
        "@textlint/markdown": {
          "extensions": [".md"]
        }
      },
      "rules": {
        "preset-ja-technical-writing": true
      }
    }
    

GitHub への反映

作成したファイル群を定義ファイルをリモートにプッシュします。

git add .
git commit -m "Added: reviewdog workflow"
git push origin master

動作確認

わざと lint エラーになるファイルを作成し、別ブランチに push してプルリクを作ってみます。

  1. example ブランチを作成し、src/example.md としてエラーになるファイルを作ります。

    git checkout -b example
    mkdir src
    touch src/example.md
    
  2. src/example.md の内容はこんな感じです。

    # Example
    
    これはサンプルです。
    `src` ディレクトリ以下に textlint を実行したい Markdown ファイルを置きます。
    このディレクトリは `.github/workflows/reviewdog.yml``FLAGS` で変更することができます。
    
  3. リモートに push します。

    git add src/example.md
    git commit -m "Added: error sample file"
    git push origin example
    
  4. GitHub.com の画面を開きます。master ブランチに対して、example をマージするプルリクを作成します。

  5. [Actions]タブを開きます。プルリクを作成すると、Actions の実行ログを確認できます。

  6. lint エラーが発生している場合は、こんな風にプルリクに対してエラー内容がコメントされます。

参考