GitHub ActionsのVirtual Environmentの更新でnpmのバージョンが変わったことでreviewdog/action-eslintが動かなくなったという面白事例
- 社内のとあるリポジトリ
- yarn workspacesを使っていた
- npm 7でworkspace機能が入ったので、npmでも
package.json
のworkspaces
を認識する
- npm 7でworkspace機能が入ったので、npmでも
- yarn workspacesを使っていた
- 4月4日にGitHub ActionsのCIが突然エラーになるようになった
- Virtual Environmentのバージョンが変わっているようだった
- 20220227.1: npm 8.3.1
- 20220330.0: npm 8.5.0
- Virtual Environmentのバージョンが変わっているようだった
- 該当のワークフローでは、
reviewdog/action-eslint
をあるworkspaceの中で動かしていた- https://github.com/reviewdog/action-eslint#workdir
reviewdog/action-eslint
は内部でnpm bin
を使う- npm 8.5.0未満では、
workspaces
を定義しているルートのpackage.json
があるディレクトリでコマンドを打った時にworkspaceを認識して処理されていた- workspaceであるディレクトリ内でnpmコマンドを打ってもworkspaceであるとは認識されなかった
- npm 8.5.0以降では、workspaceであるディレクトリ内でコマンド打った時でも、上に遡って
package.json
を探して、そのディレクトリがworkspaceであると認識するようになった- https://github.com/npm/cli/pull/4372
- https://github.com/npm/config/pull/28
npm bin
はworkspaceに対応していないコマンドだったのでエラーになるようになった- npm 8.5.3で、binなどの一部のコマンドではworkspaceを無視するようになり、上記の状態でもエラーにならなくなった
- ということで、該当のワークフロー内で手動でnpmを更新することで対処した