From d8308b0d0bf436b9da0431bb12f1cf4fff82a5b3 Mon Sep 17 00:00:00 2001 From: Kasper Marinus Date: Mon, 2 Feb 2026 14:39:20 +0100 Subject: [PATCH] chore: remove hooks --- .githooks/check-branch-name.sh | 77 ------------------ .githooks/check-commit-msg.sh | 138 --------------------------------- .husky/commit-msg | 1 - .husky/pre-commit | 3 - package-lock.json | 17 ---- package.json | 4 +- 6 files changed, 1 insertion(+), 239 deletions(-) delete mode 100755 .githooks/check-branch-name.sh delete mode 100755 .githooks/check-commit-msg.sh delete mode 100644 .husky/commit-msg delete mode 100644 .husky/pre-commit diff --git a/.githooks/check-branch-name.sh b/.githooks/check-branch-name.sh deleted file mode 100755 index 6a6669a..0000000 --- a/.githooks/check-branch-name.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env bash - -# This script checks if the current branch name follows the specified format. -# It's designed to be used as a 'pre-commit' git hook. - -# Format: / -# Example: feat/add-user-login - -# --- Configuration --- -# An array of allowed commit types -ALLOWED_TYPES=(feat fix refactor perf style test docs build chore revert) -# An array of branches to ignore -IGNORED_BRANCHES=(main dev demo) - -# --- Colors for Output --- -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -NC='\033[0m' # No Color - -# --- Helper Functions --- -error_exit() { - echo -e "${RED}ERROR: $1${NC}" >&2 - echo -e "${YELLOW}Branch name format is incorrect. Aborting commit.${NC}" >&2 - exit 1 -} - -# --- Main Logic --- - -# 1. Get the current branch name -BRANCH_NAME=$(git symbolic-ref --short HEAD) - -# 2. Check if the current branch is in the ignored list -for ignored_branch in "${IGNORED_BRANCHES[@]}"; do - if [ "$BRANCH_NAME" == "$ignored_branch" ]; then - echo -e "${GREEN}Branch check skipped for default branch: $BRANCH_NAME${NC}" - exit 0 - fi -done - -# 3. Validate the overall structure: / -if ! [[ "$BRANCH_NAME" =~ ^[a-z]+/.+$ ]]; then - error_exit "Branch name must be in the format: /\nExample: feat/add-user-login" -fi - -# 4. Extract the type and description -TYPE=$(echo "$BRANCH_NAME" | cut -d'/' -f1) -DESCRIPTION=$(echo "$BRANCH_NAME" | cut -d'/' -f2-) - -# 5. Validate the -type_valid=false -for allowed_type in "${ALLOWED_TYPES[@]}"; do - if [ "$TYPE" == "$allowed_type" ]; then - type_valid=true - break - fi -done - -if [ "$type_valid" == false ]; then - error_exit "Invalid type '$TYPE'.\nAllowed types are: ${ALLOWED_TYPES[*]}" -fi - -# 6. Validate the -# Regex breakdown: -# ^[a-z0-9]+ - Starts with one or more lowercase letters/numbers (the first word). -# (-[a-z0-9]+){0,5} - Followed by a group of (dash + word) 0 to 5 times. -# $ - End of the string. -# This entire pattern enforces 1 to 6 words total, separated by dashes. -DESCRIPTION_REGEX="^[a-z0-9]+(-[a-z0-9]+){0,5}$" - -if ! [[ "$DESCRIPTION" =~ $DESCRIPTION_REGEX ]]; then - error_exit "Invalid short description '$DESCRIPTION'.\nIt must be a maximum of 6 words, all lowercase, separated by dashes.\nExample: add-new-user-authentication-feature" -fi - -# If all checks pass, exit successfully -echo -e "${GREEN}Branch name '$BRANCH_NAME' is valid.${NC}" -exit 0 diff --git a/.githooks/check-commit-msg.sh b/.githooks/check-commit-msg.sh deleted file mode 100755 index 2dd592c..0000000 --- a/.githooks/check-commit-msg.sh +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env bash - -# This script checks if a commit message follows the specified format. -# It's designed to be used as a 'commit-msg' git hook. - -# Format: -# : -# -# [optional] -# -# [ref/close]: - -# --- Configuration --- -# An array of allowed commit types -ALLOWED_TYPES=(feat fix refactor perf style test docs build chore revert) - -# --- Colors for Output --- -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -NC='\033[0m' # No Color - -# The first argument to the hook is the path to the file containing the commit message -COMMIT_MSG_FILE=$1 - -# --- Automated Commit Detection --- - -# Read the first line (header) for initial checks -HEADER=$(head -n 1 "$COMMIT_MSG_FILE") - -echo 'Given commit message:' -echo $HEADER - -# Check for Merge commits (covers 'git merge' and PR merges from GitHub/GitLab) -# Examples: "Merge branch 'main' into ...", "Merge pull request #123 from ..." -MERGE_PATTERN="^Merge (remote-tracking )?(branch|pull request|tag) .*" -if [[ "$HEADER" =~ $MERGE_PATTERN ]]; then - echo -e "${GREEN}Merge commit detected by message content. Skipping validation.${NC}" - exit 0 -fi - -# Check for Revert commits -# Example: "Revert "feat: add new feature"" -REVERT_PATTERN="^Revert \".*\"" -if [[ "$HEADER" =~ $REVERT_PATTERN ]]; then - echo -e "${GREEN}Revert commit detected by message content. Skipping validation.${NC}" - exit 0 -fi - -# Check for Cherry-pick commits (this pattern appears at the end of the message) -# Example: "(cherry picked from commit deadbeef...)" -# We use grep -q to search the whole file quietly. -CHERRY_PICK_PATTERN="\(cherry picked from commit [a-f0-9]{7,40}\)" -if grep -qE "$CHERRY_PICK_PATTERN" "$COMMIT_MSG_FILE"; then - echo -e "${GREEN}Cherry-pick detected by message content. Skipping validation.${NC}" - exit 0 -fi - -# Check for Squash -# Example: "Squash commits ..." -SQUASH_PATTERN="^Squash .+" -if [[ "$HEADER" =~ $SQUASH_PATTERN ]]; then - echo -e "${GREEN}Squash commit detected by message content. Skipping validation.${NC}" - exit 0 -fi - -# --- Validation Functions --- - -# Function to print an error message and exit -# Usage: error_exit "Your error message here" -error_exit() { - # >&2 redirects echo to stderr - echo -e "${RED}ERROR: $1${NC}" >&2 - echo -e "${YELLOW}Commit message format is incorrect. Aborting commit.${NC}" >&2 - exit 1 -} - -# --- Main Logic --- - -# 1. Read the header (first line) of the commit message -HEADER=$(head -n 1 "$COMMIT_MSG_FILE") - -# 2. Validate the header format: : -# Regex breakdown: -# ^(type1|type2|...) - Starts with one of the allowed types -# : - Followed by a literal colon -# \s - Followed by a single space -# .+ - Followed by one or more characters for the description -# $ - End of the line -TYPES_REGEX=$( - IFS="|" - echo "${ALLOWED_TYPES[*]}" -) -HEADER_REGEX="^($TYPES_REGEX): .+$" - -if ! [[ "$HEADER" =~ $HEADER_REGEX ]]; then - error_exit "Invalid header format.\n\nHeader must be in the format: : \nAllowed types: ${ALLOWED_TYPES[*]}\nExample: feat: add new user authentication feature" -fi - -# Only validate footer if commit type is not chore -TYPE=$(echo "$HEADER" | cut -d':' -f1) -if [ "$TYPE" != "chore" ]; then - # 3. Validate the footer (last line) of the commit message - FOOTER=$(tail -n 1 "$COMMIT_MSG_FILE") - - # Regex breakdown: - # ^(ref|close) - Starts with 'ref' or 'close' - # : - Followed by a literal colon - # \s - Followed by a single space - # N25B- - Followed by the literal string 'N25B-' - # [0-9]+ - Followed by one or more digits - # $ - End of the line - FOOTER_REGEX="^(ref|close): N25B-[0-9]+$" - - if ! [[ "$FOOTER" =~ $FOOTER_REGEX ]]; then - error_exit "Invalid footer format.\n\nFooter must be in the format: [ref/close]: \nExample: ref: N25B-123" - fi -fi - -# 4. If the message has more than 2 lines, validate the separator -# A blank line must exist between the header and the body. -LINE_COUNT=$(wc -l <"$COMMIT_MSG_FILE" | xargs) # xargs trims whitespace - -# We only care if there is a body. Header + Footer = 2 lines. -# Header + Blank Line + Body... + Footer > 2 lines. -if [ "$LINE_COUNT" -gt 2 ]; then - # Get the second line - SECOND_LINE=$(sed -n '2p' "$COMMIT_MSG_FILE") - - # Check if the second line is NOT empty. If it's not, it's an error. - if [ -n "$SECOND_LINE" ]; then - error_exit "Missing blank line between header and body.\n\nThe second line of your commit message must be empty if a body is present." - fi -fi - -# If all checks pass, exit with success -echo -e "${GREEN}Commit message is valid.${NC}" -exit 0 diff --git a/.husky/commit-msg b/.husky/commit-msg deleted file mode 100644 index 297870d..0000000 --- a/.husky/commit-msg +++ /dev/null @@ -1 +0,0 @@ -sh .githooks/check-commit-msg.sh $1 diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100644 index 822552c..0000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,3 +0,0 @@ -sh .githooks/check-branch-name.sh - -npm run lint diff --git a/package-lock.json b/package-lock.json index 31d1339..f6dbdd7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,6 @@ "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.20", "globals": "^16.4.0", - "husky": "^9.1.7", "identity-obj-proxy": "^3.0.0", "jest": "^30.2.0", "jest-environment-jsdom": "^30.2.0", @@ -5544,22 +5543,6 @@ "node": ">=10.17.0" } }, - "node_modules/husky": { - "version": "9.1.7", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", - "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", - "dev": true, - "license": "MIT", - "bin": { - "husky": "bin.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", diff --git a/package.json b/package.json index a9837a1..55101ca 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,7 @@ "build": "tsc -b && vite build", "lint": "eslint src test", "preview": "vite preview", - "test": "jest", - "prepare": "husky" + "test": "jest" }, "dependencies": { "@neodrag/react": "^2.3.1", @@ -35,7 +34,6 @@ "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.20", "globals": "^16.4.0", - "husky": "^9.1.7", "identity-obj-proxy": "^3.0.0", "jest": "^30.2.0", "jest-environment-jsdom": "^30.2.0",