Super-Linter에서 JSCPD ENOTDIR 오류가 발생한 경우 해결

소개



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 코드의 중복을 찾습니다 (가끔 copipe로 jscpd에 화가납니다)

jscpd가 심볼릭 링크 자체를 구문 분석하려고 할 때 오류가 발생한 것 같습니다.

Super-Linter 공식 Issue에도 있지만, 잡히지 않고 닫고 있습니다

대처



그래서 심볼릭 링크를 두는 대신 Super-Linter의 참조 대상을 변경하기로 결정했습니다.

Super-Linter 런타임 환경 변수 LINTER_RULES_PATH.을 지정합니다.
      - name: Super Linter
        uses: github/super-linter@v3
        env:
          LINTER_RULES_PATH: .
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

이제 프로젝트 루트 바로 아래의 구성 파일을 볼 수 있습니다.

공식이 심볼릭 링크에 대응해 줄 때까지는, 이쪽의 대처 밖에 사용할 수 없습니다

아무래도 심볼릭 링크를 사용하고 싶다면, 그 때는 또 생각합시다

관련



설정 파일을 지정하는 방법을 설명하는 기사입니다.

좋은 웹페이지 즐겨찾기