うちのいぬ Tech Blog

Tech Blog of Uchinoinu/My dog

Add pre-commit action before git commit to prevent me from getting in trouble.

初心者がAWSに手を出して$6,000請求されて、泣きそうになったお話 を読んで、わたしもきっとやるだろうなぁと思い、とりあえず自動でチェックしてもらうスクリプトだけでも入れておこうと思いました。

 

1. Git Templates

 

$ git config --global init.templatedir '~/.git-templates'

これによって各プロジェクトの.git/以下に~/.git-templates以下のファイルがコピられます。git initしたときに。

 

2. Global Hooksの為のディレクトリ作成

 

$ mkdir -p ~/.git-templates/hooks

3. ~/.git-templates/hooks/以下にコードを書きます。

 

#!/bin/sh

if git rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
else
# Initial commit: diff against an empty tree object
EMPTY_TREE=$(git hash-object -t tree /dev/null)
against=$EMPTY_TREE
fi

# Redirect output to stderr.
exec 1>&2

# Check changed files for an AWS keys
FILES=$(git diff --cached --name-only $against)

if [ -n "$FILES" ]; then
KEY_ID=$(grep -E --line-number '[^A-Z0-9][A-Z0-9]{20}[^A-Z0-9]' $FILES)
KEY=$(grep -E --line-number '[^A-Za-z0-9/+=][A-Za-z0-9/+=]{40}[^A-Za-z0-9/+=]' $FILES)

if [ -n "$KEY_ID" ] || [ -n "$KEY" ]; then
exec < /dev/tty # Capture input
echo "=========== Possible AWS Access Key IDs ==========="
echo "${KEY_ID}"
echo ""

echo "=========== Possible AWS Secret Access Keys ==========="
echo "${KEY}"
echo ""

while true; do
read -p "[AWS Key Check] Possible AWS keys found. Commit files anyway? (y/N) " yn
if [ "$yn" = "" ]; then
yn='N'
fi
case $yn in
[Yy] ) exit 0;;
[Nn] ) exit 1;;
* ) echo "Please answer y or n for yes or no.";;
esac
done
exec <&- # Release input
fi
fi

# Normal exit
exit 0

4. 実行可能にする

 

$ chmod a+x ~/.git-templates/hooks/post-commit

5. 上記を対応させたいプロジェクトでgit initします。

 

$ git init

https://coderwall.com/p/jp7d5q/create-a-global-git-commit-hook https://gist.github.com/DmZ/3a99d829f17af383712b