Skip to content

Commit 45f2290

Browse files
committed
Merge branch 'githooks' into next
2 parents 287b85c + 043ad03 commit 45f2290

File tree

7 files changed

+167
-1
lines changed

7 files changed

+167
-1
lines changed

.husky/hook-utils.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/bin/sh
2+
[ -z "$LOG_PREFIX" ] && LOG_PREFIX="[.husky/???]"
3+
4+
log() {
5+
echo "${LOG_PREFIX} $1"
6+
}
7+
8+
error() {
9+
echo >&2 "${LOG_PREFIX} $1"
10+
}

.husky/post-checkout

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#!/bin/sh
2+
. "$(dirname "$0")/_/husky.sh"
3+
4+
LOG_PREFIX="[.husky/post-checkout]"
5+
6+
. "$(dirname "$0")/hook-utils.sh"
7+
8+
HEAD_PREV="$1"
9+
HEAD_NEW="$2"
10+
CKOUT_TYPE_FLAG="$3" # 0 = retrieve file from index, 1 = changing branches
11+
12+
# check if this is a post-checkout after a `git clone`
13+
IS_CLONING=$( [ -z "$HEAD_PREV" ] && echo true || echo false )
14+
15+
update_npm_dependencies() {
16+
# Only run if chaning branches and not performing the initial `git clone`
17+
if [ $CKOUT_TYPE_FLAG == 1 ] && [ $IS_CLONING == false ]; then
18+
local changed_files=""
19+
# derived from https://gist.github.com/taurus227/28960de89e6c43bb3d492125368f1224
20+
changed_files="$(git diff-tree -r --name-only --no-commit-id $HEAD_PREV $HEAD_NEW)"
21+
22+
if echo "$changed_files" | grep --quiet "package-lock.json"; then
23+
log "CHANGE DETECTED: 'package-lock.json'"
24+
log "Dependency requirements changed! This will take a few seconds..."
25+
26+
local cmd="npm install --prefer-offline"
27+
if ! command -v npm &>/dev/null; then
28+
log "NPM not found on \$PATH, however '$cmd' is desired. Please accomplish manually."
29+
return
30+
fi
31+
log "$> $cmd"
32+
eval "$cmd"
33+
fi
34+
fi
35+
}
36+
37+
update_npm_dependencies

.husky/post-merge

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#!/bin/sh
2+
. "$(dirname "$0")/_/husky.sh"
3+
4+
[ -z "$LOG_PREFIX" ] && LOG_PREFIX="[.husky/post-merge]"
5+
6+
. "$(dirname "$0")/hook-utils.sh"
7+
8+
update_npm_dependencies() {
9+
# derived from https://gist.github.com/taurus227/28960de89e6c43bb3d492125368f1224
10+
local changed_files=""
11+
changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"
12+
13+
local NEEDS_INSTALL=true
14+
15+
if echo -e "$changed_files" | grep --quiet "package-lock.json"; then
16+
log "CHANGE DETECTED: 'package-lock.json'"
17+
log "Lock files rarely merge properly. Deleting and re-generating it..."
18+
19+
local output="$changed_files"
20+
output="$(echo -e "$output" | grep "package-lock.json")"
21+
local lockfiles=("$output") # make array of filepaths
22+
rm ${lockfiles[@]}
23+
24+
elif echo -e "$changed_files" | grep --quiet "package.json"; then
25+
log "CHANGE DETECTED: 'package.json'"
26+
log "Dependencies might of changed, lets make sure we are g2g!"
27+
else
28+
NEEDS_INSTALL=false
29+
fi
30+
31+
if [ "$NEEDS_INSTALL" == true ]; then
32+
cmd="npm install"
33+
if ! command -v npm &>/dev/null; then
34+
log "NPM not found on \$PATH, however '$cmd' is desired. Please accomplish manually."
35+
return
36+
fi
37+
log "$> $cmd"
38+
eval "$cmd"
39+
40+
changed_files="$(git diff --name-only --diff-filter=d)"
41+
if echo -e "$changed_files" | grep --quiet "package-lock.json"; then
42+
log "ALL FIXED! package-lock.json needed a refresh."
43+
44+
local lockfiles=($(echo -e "$changed_files" | grep "package-lock.json"))
45+
git add -- "${lockfiles[@]}"
46+
47+
for lockfile in "${lockfiles[@]}"; do
48+
log "STAGED: $lockfile"
49+
done
50+
51+
local filenoun="file"
52+
if [ "${#lockfiles[@]}" -gt 1 ]; then
53+
filenoun="${filenoun}s"
54+
fi
55+
log "Please commit the newly generated $filenoun for the team!"
56+
fi
57+
fi
58+
}
59+
60+
update_npm_dependencies

.husky/post-rewrite

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/bin/sh
2+
. "$(dirname "$0")/_/husky.sh"
3+
4+
CALLER_CMD="$1" # rebase || amend
5+
export LOG_PREFIX="[.husky/post-rewrite]"
6+
7+
. "$(dirname "$0")/hook-utils.sh"
8+
9+
# derived from https://gist.github.com/taurus227/28960de89e6c43bb3d492125368f1224
10+
if [ "$CALLER_CMD" == "rebase" ]; then
11+
log "DETECTED: git-rebase.";
12+
$(dirname "$0")/post-merge
13+
fi

.husky/pre-commit

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/bin/sh
2+
. "$(dirname "$0")/_/husky.sh"
3+
4+
export NODE_ENV=production
5+
6+
LOG_PREFIX="[.husky/pre-commit]"
7+
8+
. "$(dirname "$0")/hook-utils.sh"
9+
10+
if command -v npm &>/dev/null; then
11+
log "$> npm run lint"
12+
if ! npm run lint; then
13+
error "ERROR: Dirty code detected!"
14+
error "Fix the lint errors before committing to the repository."
15+
exit -1
16+
fi
17+
else
18+
error "NPM not found on \$PATH, unable to run pre-commit lint hook."
19+
exit -1
20+
fi

package-lock.json

Lines changed: 23 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@
4040
"format": "npm run lint -- --fix",
4141
"lint": "eslint . --ext ts,js,md",
4242
"test": "jest",
43-
"generate-readme-table": "ts-node build/generate-readme-table.ts"
43+
"generate-readme-table": "ts-node build/generate-readme-table.ts",
44+
"prepare": "is-ci || husky install"
4445
},
4546
"devDependencies": {
4647
"@types/eslint": "^7.28.0",
@@ -56,6 +57,8 @@
5657
"eslint-plugin-jest": "^24.5.0",
5758
"eslint-plugin-mdx": "^1.15.1",
5859
"eslint-plugin-prettier": "^4.0.0",
60+
"husky": "^7.0.2",
61+
"is-ci": "^3.0.0",
5962
"jest": "^27.2.4",
6063
"jest-extended": "^0.11.5",
6164
"prettier": "^2.4.1",

0 commit comments

Comments
 (0)