commitlint
commitlint copied to clipboard
Can't run commitlint on project with tsconfig.json
When running commitlint on a typeScript project, I have an error because commitlint use the project tsconfig.json.
Expected Behavior
commitlint should not use the project typeScript configuration.
Current Behavior
commitlint produce the following traceback:
/usr/local/lib/node_modules/commitlint/node_modules/ts-node/src/index.ts:843
return new TSError(diagnosticText, diagnosticCodes, diagnostics);
^
TSError: ⨯ Unable to compile TypeScript:
error TS6053: File '@loopback/build/config/tsconfig.common.json' not found.
at createTSError (/usr/local/lib/node_modules/commitlint/node_modules/ts-node/src/index.ts:843:12)
at reportTSError (/usr/local/lib/node_modules/commitlint/node_modules/ts-node/src/index.ts:847:19)
at createFromPreloadedConfig (/usr/local/lib/node_modules/commitlint/node_modules/ts-node/src/index.ts:858:36)
at create (/usr/local/lib/node_modules/commitlint/node_modules/ts-node/src/index.ts:613:10)
at register (/usr/local/lib/node_modules/commitlint/node_modules/ts-node/src/index.ts:580:15)
at TypeScriptLoader (/usr/local/lib/node_modules/commitlint/node_modules/cosmiconfig-typescript-loader/dist/loader.js:7:51)
at loadConfig (/usr/local/lib/node_modules/commitlint/node_modules/@commitlint/load/src/utils/load-config.ts:35:27)
at load (/usr/local/lib/node_modules/commitlint/node_modules/@commitlint/load/src/load.ts:25:33)
at main (/usr/local/lib/node_modules/commitlint/node_modules/@commitlint/cli/src/cli.ts:199:27)
at processTicksAndRejections (node:internal/process/task_queues:95:5) {
diagnosticCodes: [ 6053 ]
}
Affected packages
- [X] cli
- [ ] core
- [ ] prompt
- [ ] config-angular
Possible Solution
Steps to Reproduce (for bugs)
- clone the repository https://gitlab.mim-libre.fr/alphabet/laboite-blog-api.git
- execute
commitlint --from HEAD~2 --to HEAD
commitlint.config.js
module.exports = {
extends: ['@commitlint/config-conventional'],
rules: {
'body-max-line-length': [2, 'always', 120],
'footer-max-line-length': [2, 'always', 120],
'header-max-length': [2, 'always', 72],
},
};
Context
We upgraded our commitlint container for our CI and now all typeScript project are failling.
Your Environment
| Executable | Version |
|---|---|
commitlint --version |
16.3.0 |
git --version |
2.36.1 |
node --version |
18.4.0 |
Pity, looks like it's somehow picking this up?: https://gitlab.mim-libre.fr/alphabet/laboite-blog-api/-/blob/dev/tsconfig.json#L3 Never had an issue with other projects using tsconfig.
Not sure when we can get to this.
Pity, looks like it's somehow picking this up?: https://gitlab.mim-libre.fr/alphabet/laboite-blog-api/-/blob/dev/tsconfig.json#L3 Never had an issue with other projects using tsconfig.
It looks like yes, I'm not sure it's a good idea for commitlint to load the project configuration but I don't know how to prevent that.
It looks like yes, I'm not sure it's a good idea for
commitlintto load the project configuration but I don't know how to prevent that.
I managed to work around this issue by cd /tmp and execute commitlint --cwd /my/sources
I'm getting the same error.
I'm getting the same error.
I'm getting the same error. Is this a bug that already exists?
I got a similar issue running commitlint on a GitLab CI job.
Here is the Dockerfile of my commitlint command:
FROM node:18.14-alpine
RUN apk add --no-cache git~=2 \
&& npm install --global @commitlint/[email protected] @commitlint/[email protected]
# Contains only commitlint.config.js
COPY rootfs /
USER node
ENTRYPOINT [ "commitlint", "--strict", "--config", "/commitlint.config.js" ]
The related CI job:
release:commitlint:
stage: release
needs: []
image:
name: registry.gitlab.com/company/images/commitlint
entrypoint: ['']
script:
- git config --global --add safe.directory ${CI_PROJECT_DIR}
- git fetch --quiet origin ${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}
- npx commitlint --version
- npx commitlint --strict --config /commitlint.config.js --from=origin/${CI_MERGE_REQUEST_TARGET_BRANCH_NAME}
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
allow_failure:
exit_codes: 2
Works on any of my project excepts the one using tsonfig.json, ending to a similar error.
My workaround was to add a rm -f tsconfig.json just before the commitlint command.
I managed to work around this issue by cd /tmp and execute commitlint --cwd /my/sources
@baby-gnu I ~try to~ can't wrap my head around how this should work 🤔
:thinking: It seems that we suffer from the same problem for the okp4/team-wiki project. The temporary solution was to delete the tsconfig.json file while linting the github action.
Just check the encoding of index.ts. In my case, somehow it was UTF-16. Once I changed it to UTF-8 (in Notepad++) - the problem is gone.
Just check the encoding of index.ts. In my case, somehow it was UTF-16. Once I changed it to UTF-8 (in Notepad++) - the problem is gone.
I'm getting the same UTF-16 file after following docs https://commitlint.js.org/#/guides-local-setup?id=install-commitlint with command
# Configure commitlint to use conventional config
echo "module.exports = { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js
Error log:
D:\dev\Project\node_modules\.pnpm\[email protected]_@[email protected][email protected]\node_modules\ts-node\src\index.ts:859
return new TSError(diagnosticText, diagnosticCodes, diagnostics);
^
TSError: ⨯ Unable to compile TypeScript:
commitlint.config.js(1,1): error TS1490: File appears to be binary.
The problem is solved after changing the file encoding to UTF-8 manually.
Just check the encoding of index.ts. In my case, somehow it was UTF-16. Once I changed it to UTF-8 (in Notepad++) - the problem is gone.
@TimeCoder Can you be a little more specific? Which index.ts file has this problem? I badly need to resolve this conflict
My error message still is:
/home/dwesley/www/node-config-template/node_modules/@commitlint/cli/lib/cli.js:123
throw err;
^
TypeError: value.replace is not a function
at normalizeSlashes (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/util.js:62:18)
at Object.getExtendsConfigPath (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/ts-internals.js:24:54)
at readConfig (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/configuration.js:127:64)
at findAndReadConfig (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/configuration.js:50:84)
at create (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/index.js:146:69)
at register (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/index.js:127:19)
at TypeScriptLoader (/home/dwesley/www/node-config-template/node_modules/cosmiconfig-typescript-loader/dist/cjs/index.js:52:54)
at loadConfig (/home/dwesley/www/node-config-template/node_modules/@commitlint/load/lib/utils/load-config.js:12:75)
at load (/home/dwesley/www/node-config-template/node_modules/@commitlint/load/lib/load.js:19:55)
at main (/home/dwesley/www/node-config-template/node_modules/@commitlint/cli/lib/cli.js:194:45)
Node.js v18.17.0
husky - commit-msg hook exited with code 1 (error)
Just check the encoding of index.ts. In my case, somehow it was UTF-16. Once I changed it to UTF-8 (in Notepad++) - the problem is gone.
@TimeCoder Can you be a little more specific? Which index.ts file has this problem? I badly need to resolve this conflict
My error message still is:
/home/dwesley/www/node-config-template/node_modules/@commitlint/cli/lib/cli.js:123 throw err; ^ TypeError: value.replace is not a function at normalizeSlashes (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/util.js:62:18) at Object.getExtendsConfigPath (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/ts-internals.js:24:54) at readConfig (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/configuration.js:127:64) at findAndReadConfig (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/configuration.js:50:84) at create (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/index.js:146:69) at register (/home/dwesley/www/node-config-template/node_modules/ts-node/dist/index.js:127:19) at TypeScriptLoader (/home/dwesley/www/node-config-template/node_modules/cosmiconfig-typescript-loader/dist/cjs/index.js:52:54) at loadConfig (/home/dwesley/www/node-config-template/node_modules/@commitlint/load/lib/utils/load-config.js:12:75) at load (/home/dwesley/www/node-config-template/node_modules/@commitlint/load/lib/load.js:19:55) at main (/home/dwesley/www/node-config-template/node_modules/@commitlint/cli/lib/cli.js:194:45) Node.js v18.17.0 husky - commit-msg hook exited with code 1 (error)
When I use the latest array values in my tsconfig/extends, I encounter this error. However, when I change it to a string, the error disappears. Therefore, I believe it's an issue with ts-node not supporting parsing of the latest ts configuration. Perhaps upgrading ts-node version could resolve this problem?
Perhaps upgrading ts-node version could resolve this problem?
According to the lock-file commitlint is on the latest version?:
ts-node@^10.8.1:
version "10.9.1"
Perhaps upgrading ts-node version could resolve this problem?
According to the lock-file commitlint is on the latest version?:
ts-node@^10.8.1: version "10.9.1"
Unfortunately, ts-node did not solve this problem.https://github.com/TypeStrong/ts-node/issues/2000 ts-node has not had a new release for a year, and its support for TypeScript 5.0 seems to be quite poor. Perhaps it's time to migrate to other libraries, such as @swc/register or sucrase
Perhaps it's time to migrate to other libraries [...]
Sounds like a good idea. You up for a PR?
Reopening because of #3641 This will then hopefully be fixed with a new mayor version. yolo
Another issue here is why TypeScriptLoader is being init in first place when loading the config does not require it. Most of us are using JS/JSON/YAML based configs. It would probably be better to lazy load that loader here: https://github.com/conventional-changelog/commitlint/blob/0281f55cf5fbc4cd74f0e17b673979e128d85681/%40commitlint/load/src/utils/load-config.ts#L16
All internal loaders of cosmiconfig are already lazily loaded. Refer this commit - https://github.com/cosmiconfig/cosmiconfig/pull/216/commits/08ebcd5fb544ac4e232ca854922428aba7a06a14