Using C# code in your git hooks
You can use task runner exec
command to execute a C# script.
e.g
dotnet husky exec <csx-file-path>
# e.g
# dotnet husky exec .husky/csx/hello.csx
1
2
3
2
3
Also, you can use your csx scripts in your tasks.
{
"command": "dotnet",
"args": ["husky", "exec", ".husky/csx/hello.csx"]
}
1
2
3
4
2
3
4
Examples
Simple commit message linter
This repo is using a csharp script to lint the commit messages, you can check it here:
commit-lint.csxopen in new window
using System.Text.RegularExpressions;
private var pattern = @"^(?=.{1,90}$)(?:build|feat|ci|chore|docs|fix|perf|refactor|revert|style|test)(?:\(.+\))*(?::).{4,}(?:#\d+)*(?<![\.\s])quot;;
private var msg = File.ReadAllLines(Args[0])[0];
if (Regex.IsMatch(msg, pattern))
return 0;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Invalid commit message");
Console.ResetColor();
Console.WriteLine("e.g: 'feat(scope): subject' or 'fix: subject'");
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("more info: https://www.conventionalcommits.org/en/v1.0.0/");
return 1;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
commit-msg hookopen in new window
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
dotnet husky run --name "commit-message-linter" --args "$1"
echo
echo Great work! 🥂
echo
1
2
3
4
5
6
7
2
3
4
5
6
7
task-runner.jsonopen in new window
],
"tasks": [
{
"name": "commit-message-linter",
"command": "dotnet",
"args": ["husky", "exec", ".husky/csx/commit-lint.csx", "--args", "${args}"]
1
2
3
4
5
6
2
3
4
5
6