Precommit Hooks
The precommit hooks run automatically when you try to make a commit. They are a set of scripts that validate the commit. If the validation fails, the commit isn't committed.
Cheatsheet
Here are some useful ways to debug.
To run them yourself before you commit:
$ pre-commit run --all-files
To run a specific hook:
$ pre-commit run markdownlint --all-files
If they are not installed:
$ pre-commit install-hooks
Errors and Solutions
1. Error: Installing environment
For an error about installing the environment, try ensuring your nodenv or asdf manage node version is set correctly. This is what the error looks like, it stalls here for a while….
$ pre-commit install-hooks
[INFO] Installing environment for git://github.com/igorshubovych/markdownlint-cli.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
Solution 1
For this error you may need to set your global node version.
Check the current versions from inside the mymove folder,
asdf
~/mymove$ cat .tool-versions
golang <project-go-version>
nodejs <project-node-version>Verify which version of nodejs asdf is using (the version with the asterisk is currently selected)
~/mymove$ asdf list nodejs
<lower-node-version>
*<current-node-version>
<higher-node-version>nodenv
~/mymove$ cat .node-version
<project-node-version>
Outside mymove folder, set the global version,
- asdf
~/mymove$ cd ..
~/$ asdf global nodejs <project-node-version> - nodenv
~/mymove$ cd ..
~/$ asdf global <project-node-version>
Then inside mymove,
~/$ cd mymove
~/mymove$ pre-commit install-hooks
Solution 2
If the above solution does not work, and running the above still results in a hanging or incomplete installation, remove the pre-commit cache and the .client_deps.stamp
and try again
rm -rf ~/.cache/pre-commit
rm .client_deps.stamp
2. Golang-ci Error: “no go files to analyze”
For an error about context loading failing, clean your precommit cache.
level=error msg="Running error: context loading failed: no go files to analyze
Solution
rm -rf ~/.cache/pre-commit && pre-commit run -a
3. Golang-ci Error: "failed prerequisites"
This error about failed prerequisites is misleading. if you see a failure in …/[pkgname].test
it means there’s a test in there that likely isn’t building.
level=warning msg="[runner] Can't run linter goanalysis_metalinter: assign: failed prerequisites: inspect@github.com/transcom/mymove/pkg/handlers/ghcapi [github.com/transcom/mymove/pkg/handlers/ghcapi.test]"
level=error msg="Running error: assign: failed prerequisites: inspect@github.com/transcom/mymove/pkg/handlers/ghcapi [github.com/transcom/mymove/pkg/handlers/ghcapi.test]"
Solution
Probably an error in server tests. Run the tests and look for errors.
make server_test
One weird trick - you can compile but not run the tests using
go test -run=nope ./...
This is helpful to find the package with the compile error.
4. ESLint Error: "couldn't find the config react-app"
Oops! Something went wrong! :(
ESLint: 7.5.0
ESLint couldn't find the config "react-app" to extend from. Please check that the name of the config is correct.
Solution
For this error, run yarn install
. This will install the dependencies listed in package.json
.
5. Executable ... not found.
This error says you don't have some tool installed. You might see this with eslint
, prettier
and spectral
.
prettier.................................................................Failed
- hook id: prettier
- exit code: 1
Executable `node_modules/.bin/prettier` not found
Solution
Run yarn install
. This will install the dependencies listed in package.json
.
6. Module not found in gen
cannot find module providing package github.com/transcom/mymove/pkg/gen/*
Solution
Try running make server_generate
which should generate files for the gen
folder automatically.
7. Module not found in mocks
cannot find module providing package github.com/transcom/mymove/pkg/.../mocks
Solution
Try running make mocks_generate
which should auto generate mocks.
8. Failed prerequisites without an indication of an error
Can't run linter goanalysis_metalinter: assign: failed prerequisites: inspect@github.com/transcom/mymove/cmd/milmove
Solution
This could be due to the build failing. Try make server_build
to check.
Nix Error: SSL Certificate verify failed
This can happen because of the way certs need to be handled in this project and nix
.
Solution
To get around this issue, you can try running:
NIX_SSL_CERT_FILE=$HOME/.nix-profile/etc/ssl/certs/ca-bundle.crt <pre-commit related command>
E.g.
NIX_SSL_CERT_FILE=$HOME/.nix-profile/etc/ssl/certs/ca-bundle.crt pre-commit install-hooks