Git: Hooks run “npm install” on checkout

When working on a project you usually install various packages from npm.
Of course these packages are maintained and updated, adding more features and security fixes, and stability patches.

One person on your team should run npm outdated once per week to see what all has been updated and test if you can integrate the packages into your project.
Thus the package.json is updated and causes a grand problem for all other developers on the project. If a package has major breaking changes the code will need to be adjusted, however that code will not run on the other develoepers environment. The other developers working on the project they have to run npm update to install the missing / outdated packages in their environment.

The solution to this problem are “git hooks”, essentially git can execute code on specific events, like before commiting your code, or pre push etc.
git hooks. For my use case I would like to run npm update after a developer checks out from the git repository, this is the event “post-checkout”.

Native Git Hooks

To create a git hook you need to add a file in your project called .git/hooks/post-checkout (On linux add the executable bit with chmod +x)

You will test this and say, yes this works as intended – lets commit it to the repository. – Now you will discover that you cannot commit files in .git to the repository.
In fact git does not allow you to do this, due to security concerns as git hooks can execute any shell script.

The work around for this issue is to simply add it into a folder called git-hooks/ and tell the developers to copy the file when they set up their dev environment.


As always if there is a Problem for development with javascript there is a npm package to solve the problem.
Husky uses the package.json to define the scripts that are executed via git hooks.
Simply Install Husky
npm install husky -D

Then edit the package.json:

The Husky solution would also allow you to execute your own js file, maybe also doing some cleanup of files or running tests etc.

Posted by happyneal in Programming, Web Technologies, 0 comments

NPM: Use Github Patch Instead of Repository

Recently I was playing around with the HEXO static site generator.
For my setup I was using Hexo in combination with Gitlab CI and the ftp deploy method.

The module hexo-deployer-ftpsync has an issue that you need to manually confirm that the ftp deployment succeded.
In essence it does not exit on its own, thus a CI environment would not be able to automatically verify the success or failure of the build, it would just run forever.

Github allows you to fork existing code, improve upon it and issue a pull request, that your code will be integrated into the main software build.
I changed a couple of lines to ensure that the ftp deploy process would terminate.

To use my patch instead of the current master build of the module you need to adjust the package.json file.
Simply replace the version-number with the github url <username/project>#

Original: With Version Number

New: With github path to patch

If the owner of the project integrates my suggestion on how to fix the bug, then the line can be changed back to the offical master branch of the code.
However for the time being, gitlab CI uses the alternative code and successfully deploys my code to the server.

Posted by happyneal in Programming, 0 comments