LoginSignup
1
1

More than 1 year has passed since last update.

Super-Linter で JSCPD の ENOTDIR エラーが出たときの対処

Last updated at Posted at 2021-06-17

はじめに

Super-Linter 便利ですよね!

かつては言語毎にlintの設定を GitHub Actions に一生懸命組み込んでいましたが、 Super-Linter が大概のものは勝手に見てくれます

しかし、新しく対応した linter に急に弾かれるようになったり、相反するルールを見るせいで弾かれたり、時々振り回されることもあります

先日、 Super-Linter を意気揚々と動かしたところ、以下のようなエラーが発生しました

2021-06-10 06:46:08 [ERROR]   Found errors in [jscpd] linter!
2021-06-10 06:46:08 [ERROR]   Error code: 1. Command output:
------
Error: ENOTDIR: not a directory, scandir '/github/workspace/.github/linters/.hadolint.yaml'
    at Object.readdirSync (node:fs:1048:3)
    at readdir (/node_modules/@nodelib/fs.scandir/out/providers/sync.js:39:31)
    at Object.read (/node_modules/@nodelib/fs.scandir/out/providers/sync.js:12:12)
    at SyncReader.scandirSync [as _scandir] (/node_modules/@nodelib/fs.scandir/out/index.js:17:17)
    at SyncReader._handleDirectory (/node_modules/@nodelib/fs.walk/out/readers/sync.js:28:34)
    at SyncReader._handleQueue (/node_modules/@nodelib/fs.walk/out/readers/sync.js:23:18)
    at SyncReader.read (/node_modules/@nodelib/fs.walk/out/readers/sync.js:15:14)
    at SyncProvider.read (/node_modules/@nodelib/fs.walk/out/providers/sync.js:11:29)
    at ReaderSync.walkSync [as _walkSync] (/node_modules/@nodelib/fs.walk/out/index.js:19:21)
    at ReaderSync.dynamic (/node_modules/fast-glob/out/readers/sync.js:13:21) {
  errno: -20,
  syscall: 'scandir',
  code: 'ENOTDIR',
  path: '/github/workspace/.github/linters/.hadolint.yaml'
}
------

jscpd め、、、

というわけで、対処した記録です

エラー原因

.hadolint.yaml は Dockerfile の linter である hadolint の設定ファイルです

hadolint をローカルで実行するときのため、この設定ファイルをプロジェクトのルートに配置しています

その上で、 Super-Linter からも参照できるように .github/linters/.hadolint.yaml にシンボリックリンクを貼りました

これで hadolint が通るはず、と思ったところ、上記エラーに逢いました

jscpd はコードの重複を探し出してくれます(ときどきコピペで jscpd に怒られます)

jscpd がシンボリックリンク自体を解析しようとしてエラーになったようです

Super-Linter の公式 Issue にもありますが、取り合ってもらえず閉じてますね :cry:

対処

というわけで、シンボリックリンクを置くのではなく、 Super-Linter の参照先を変えることにしました

Super-Linter 実行時の環境変数 LINTER_RULES_PATH. を指定します

      - name: Super Linter
        uses: github/super-linter@v3
        env:
          LINTER_RULES_PATH: .
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

これでプロジェクトのルート直下にある設定ファイルを参照できるようになります

公式がシンボリックリンクに対応してくれるまでは、こっちの対処しか使えません

どうしてもシンボリックリンクを使いたくなったら、、、その時はまた考えましょう

関連

設定ファイルの指定方法を解説してくれている記事です

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1