This package enables to treat the git hooks and your script can be invoked via hooks.
$ npm install --save @yamadayuki/ogh
# or
$ yarn add @yamadayuki/ogh
Create your script file to perform your script for the package users. This sample means the users commit and then pre-commit
hook is invoked, the script prints the Hello world
string in the users console. This script holds the githooks installer and uninstaller. entrypoint
function's first parameter is your building package name.
// index.js
const { entrypoint, extractHookFromArgs } = require("@yamadayuki/ogh");
const perform = (args, config) => {
if (extractHookFromArgs(args) === "pre-commit") {
console.log("Hello world!");
}
};
entrypoint("foo", { scriptPath: "index.js", hooks: ["pre-commit"] })
.registerPerformHook(perform)
.parse(process.argv);
And register your postinstall
/ preuninstall
npm hook in your package's package.json
.
{
"name": "foo",
...,
"scripts": [
...,
"postinstall": "node index.js install",
"preuninstall": "node index.js uninstall"
]
}
And then your package users have the .git/hooks/pre-commit
file such as below.
#!/bin/sh
# DO NOT EDIT foo START
scriptPath="node_modules/foo/index.js"
hookName="pre-commit"
gitParams="$*"
if ! command -v node >/dev/null 2>&1; then
echo "Can't find node in PATH, trying to find a node binary on your system"
fi
if [ -f $scriptPath ]; then
node $scriptPath $hookName "$gitParams"
fi
# DO NOT EDIT foo END
A sample package is in the @yamadayuki/ogh-sample directory.
@yamadayuki/ogh
has 3 functions.
This function returns the Ogh
class instance.
packageName
indicates the name of your building package. It is required. This is used in constructing the content of the githook.
options
has some optional parameters.
options.scriptName
indicates the script path which is invoked via git hooks. It is relative path from the package root. Default value islib/index.js
.options.hooks
indicates the hooks which are installed. If you want to specify the hooks onlypre-commit
andpre-push
, you should pass the array as["pre-commit", "pre-push"]
. Default value is array of all githooks. See https://git-scm.com/docs/githooks.
It can retrieve the githook name from args
. This args
is process.argv
.
const perform = (args, config) => {
if (extractHookFromArgs(args) === "pre-commit") {
console.log("Hello world!");
}
};
It can retrieve the installed project root which has the .git
directory. This args
is process.argv
.
const perform = (args, config) => {
console.log(extractGitRootDirFromArgs(args)); // => /path/to/project/root
};