一部の reviewdog が `exit status 128` で落ちる件について

4595 ワード

2022/4/13 現在、 GitHub Actions 上で動かしてしている reviewdog のチェックで、一部エラーが発生し、CI が落ちている状態になっていました。

実際にエラーになっていたものは reviewdog/action-misspell などで、 Docker 上で reviewdog のチェックを行っているものが対象です。

エラーの内容は以下の通り

reviewdog: failed to run 'git rev-parse --show-prefix': exit status 128

結論

workspace 上にあるディレクトリ、ファイルの所有権を root:root に変更します。

  jobs:
    misspell:
      name: runner / misspell
      runs-on: ubuntu-latest
      steps:
        - name: Check out code.
          uses: actions/checkout@v1
+       - run: |
+           sudo chown -R root:root $GITHUB_WORKSPACE
        - name: misspell
          uses: reviewdog/action-misspell@v1
          with:
            github_token: ${{ secrets.github_token }}
            locale: "US"

原因

reviewdog を Docker コンテナ上で実行するもので、このようなエラーが発生しているようです。

.git が他の所有者のものの場合、 git の操作ができないように仕様が変わっています

コンテナ上のユーザは、多くの場合 root であり、ホスト( GitHub Actions Runner )上のユーザは runner です。マウントしているディレクトリの所有者が runner で、コンテナ上のユーザと所有者が異なるため、以下のようなエラーが発生し、reviewdog の実行が失敗しているようです。

fatal: unsafe repository ('/github/workspace' is owned by someone else)
To add an exception for this directory, call:

	git config --global --add safe.directory /github/workspace

よって、各ライブラリが対応するまで、暫定的に chown で所有者を変更する必要があります。
なぜ、このような仕様になったかは、 https://github.blog/2022-04-12-git-security-vulnerability-announced/ の CVE-2022-24765 を参照してください。