deno-task-hooks: Easily Manage Git Hooks as Deno Tasks

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub
Hello! Today I'd like to introduce deno-task-hooks, a package I developed. This tool is a simple yet useful package that allows you to use Deno tasks as Git hooks.
What Problem Does It Solve?
In development teams using Git, it's common to run validation tasks like linting and testing before committing or pushing code to maintain code quality. These tasks can be automated through Git hooks, but traditional approaches had several issues:
- Difficulty sharing Git hook scripts with team members (the .git directory is typically excluded from version control)
- The inconvenience of each developer having to set up hooks locally
- Challenges maintaining consistency in hook scripts
deno-task-hooks solves these problems by leveraging Deno's task runner. Deno tasks are defined in the deno.json file, which can be version-controlled, allowing the entire team to easily share the same Git hooks.
How Does It Work?
The operation of deno-task-hooks is straightforward:
- Define Deno tasks in the deno.json file that you want to use as Git hooks.
- Run the
hooks:install
task, which automatically installs the defined tasks in the .git/hooks/ directory. - When a Git hook is triggered during Git operations, the linked Deno task will execute.
Installation and Usage
1. Add the hooks:install Task
First, add the hooks:install
task to your deno.json file:
{
"tasks": {
"hooks:install": "deno run --allow-read=deno.json,.git/hooks/ --allow-write=.git/hooks/ jsr:@hongminhee/deno-task-hooks"
}
}
2. Define Git Hooks
Git hooks are defined by adding the hooks:
prefix followed by the hook name (in kebab-case). For example, to define a pre-commit
hook:
{
"tasks": {
"hooks:pre-commit": "deno check *.ts && deno lint"
}
}
3. Install the Hooks
Run the following command to install the defined hooks:
deno task hooks:install
Now, every time you execute a Git commit, the pre-commit
hook will automatically run, checking TypeScript files and performing lint checks.
Supported Git Hook Types
deno-task-hooks supports all of the following Git hook types:
applypatch-msg
commit-msg
fsmonitor-watchman
post-update
pre-applypatch
pre-commit
pre-merge-commit
pre-push
pre-rebase
pre-receive
prepare-commit-msg
push-to-checkout
sendemail-validate
update
Benefits
Using deno-task-hooks provides the following advantages:
- Easy Sharing: Define Git hooks in the deno.json file so the entire team can use the same hooks.
- Simple Setup: New team members can install all hooks with a single command after cloning the repository.
- Easy Maintenance: Hook scripts are centrally managed, making it easy to track and apply changes.
- Deno's Security: Leverage Deno's permission model to enhance the security of hook scripts.
Conclusion
While deno-task-hooks is a small package, it can significantly improve the development experience for teams using Git and Deno together. Try it out to maintain code quality and automate your development workflow!
The package can be downloaded from JSR, and you can check out the source code on GitHub.
Feedback and contributions are always welcome! 😊