From 95bc6fa8be88eb4a048d2931c4d6b47bec72808e Mon Sep 17 00:00:00 2001
From: Adar Nimrod <nimrod@shore.co.il>
Date: Sun, 30 Apr 2017 09:38:21 +0300
Subject: [PATCH] - Added pre-commit checks, correct found issues. - Check for
 repo before running update-requirements.

---
 .bashrc                               | 52 +++++++++++++++------------
 .pre-commit-config.yaml               | 14 ++++++++
 .profile                              |  1 +
 Documents/Shore/cleanup/docker-clean  |  8 ++---
 Documents/Shore/cleanup/docker-update |  2 +-
 Documents/Shore/cleanup/vagrant-clean |  6 ++--
 Documents/train-wifi.sh               | 12 +++----
 7 files changed, 59 insertions(+), 36 deletions(-)
 create mode 100644 .pre-commit-config.yaml

diff --git a/.bashrc b/.bashrc
index 3b78b1f..a374349 100644
--- a/.bashrc
+++ b/.bashrc
@@ -1,3 +1,4 @@
+# shellcheck disable=SC2148,SC1091
 # If not running interactively, don't do anything
 [ -z "$PS1" ] && return
 
@@ -11,14 +12,14 @@ then
     shopt -s histappend
     shopt -s checkwinsize
     shopt -s cmdhist
-    if [ -f /etc/bash_completion ]; then
-        . /etc/bash_completion
-    fi
+    [ -f /etc/bash_completion ] && . /etc/bash_completion
 
-    [ -d $HOME/.bash_completion.d ] && . $HOME/.bash_completion.d/*
+    # shellcheck disable=SC2086,SC1090
+    [ -d "$HOME/.bash_completion.d" ] && . $HOME/.bash_completion.d/*
 
+    # shellcheck disable=SC1090
     # added by travis gem
-    [ -f $HOME/.travis/travis.sh ] && source $HOME/.travis/travis.sh
+    [ -f "$HOME/.travis/travis.sh" ] && . "$HOME/.travis/travis.sh"
 fi
 
 # make less more friendly for non-text input files, see lesspipe(1)
@@ -31,15 +32,13 @@ fi
 
 # enable color support of ls and also add handy aliases
 if [ -x /usr/bin/dircolors ]; then
-    eval "`dircolors -b`"
+    eval "$(dircolors -b)"
     alias ls='ls --color=auto'
     alias grep='grep --color=auto'
 fi
 
-if [ -f /usr/local/bin/virtualenvwrapper.sh ]
-then
-    . /usr/local/bin/virtualenvwrapper.sh
-fi
+# shellcheck disable=SC2142
+[ -f /usr/local/bin/virtualenvwrapper.sh ] && . /usr/local/bin/virtualenvwrapper.sh
 
 export REPREPRO_BASE_DIR=$HOME/Documents/Shore/debian-repository
 export EDITOR=vim
@@ -60,6 +59,7 @@ alias deborphan='deborphan -a --no-show-section --ignore-suggests'
 alias aptitude='aptitude --display-format %p --quiet'
 alias obsolete='aptitude search ?obsolete'
 alias missing-recommends="aptitude search '~RBrecommends:~i'"
+# shellcheck disable=2142
 alias deinstalled="dpkg --get-selections | awk '\$2==\"deinstall\" {print \$1}'"
 alias ansible-local='ansible localhost -c local -i localhost,'
 alias ansible-local-playbook='ansible-playbook -i localhost, -c local'
@@ -76,24 +76,27 @@ alias 0-day-cleanup='ssh xbmc.shore.co.il "sudo -u debian-transmission find /srv
 alias httpbin='tox -c $HOME/.tox.ini.httpbin --'
 
 deduce-aws-region () {
-    export AWS_DEFAULT_REGION="$(curl --silent \
+    AWS_DEFAULT_REGION="$(curl --silent \
         http://169.254.169.254/latest/dynamic/instance-identity/document \
         | sed -n 's/ *"region" : "\([a-z0-9\-]*\)"/\1/gp')"
+    export AWS_DEFAULT_REGION
     echo "$AWS_DEFAULT_REGION"
 }
 
 ssh-keyscan-add () {
-    (ssh-keyscan $@; cat $HOME/.ssh/known_hosts) | sort -u >> $HOME/.ssh/known_hosts
+    # shellcheck disable=SC2094
+    (ssh-keyscan "$@"; cat "$HOME/.ssh/known_hosts") | sort -u >> "$HOME/.ssh/known_hosts"
 }
 
 gen-csr () {
-    openssl req -new -newkey rsa:4096 -nodes -out $1.csr -keyout $1.key
+    openssl req -new -newkey rsa:4096 -nodes -out "$1.csr" -keyout "$1.key"
 }
 
 docker-dev () {
-    local root="$(git rev-parse --show-toplevel)"
-    local repo="$(basename $root)"
-    local uid="$(id -u)"
+    local root repo uid
+    root="$(git rev-parse --show-toplevel)"
+    repo="$(basename "$root")"
+    uid="$(id -u)"
     docker build -t "$repo:dev" "$root"
     docker run --interactive \
                --publish-all \
@@ -102,7 +105,7 @@ docker-dev () {
                --tty \
                --volume "$HOME:$HOME" \
                --volume "$root:$root" \
-               --user $uid \
+               --user "$uid" \
                --workdir "$PWD" "$repo:dev" /bin/sh -l
 }
 
@@ -113,14 +116,19 @@ sync-comics () {
 }
 
 update-requirements () {
-    cd $(git rev-parse --show-toplevel)
-    for file in $(git ls-files *requirements*.txt)
+    reporoot="$(git rev-parse --show-toplevel) || (echo Failed to find Git repo.
+    && return 1)"
+    # shellcheck disable=SC2164
+    cd "$reporoot"
+    for file in $(git ls-files "*requirements*.txt")
     do
-        pur --requirement $file
-        git add $file
+        pur --requirement "$file"
+        git add "$file"
     done
     git commit -m"- Updated requirements."
+    # shellcheck disable=SC2164
     cd - > /dev/null
 }
 
-. $HOME/Documents/Shore/bundle_certs/bundle_certs
+# shellcheck disable=SC1090
+. "$HOME/Documents/Shore/bundle_certs/bundle_certs"
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000..98d7033
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,14 @@
+-   repo: git://github.com/pre-commit/pre-commit-hooks
+    sha: v0.7.1
+    hooks:
+    -   id: check-added-large-files
+    -   id: check-merge-conflict
+    -   id: flake8
+        files: \.pythonstartup|Documents/Shore/cleanup/vagrant-.*
+-   repo: https://www.shore.co.il/git/shell-pre-commit/
+    sha: v0.4.0
+    hooks:
+    -   id: shell-lint
+        files: \.bash_completion\.d/molecule|\.bashrc|\.githooks/post-merge|\.profile|Documents/Shore/cleanup/.*-clean|Documents/train-wifi\.sh
+    -   id: shellcheck
+        files: \.bashrc|\.githooks/post-merge|\.profile|Documents/Shore/cleanup/docker-.*|Documents/train-wifi\.sh
diff --git a/.profile b/.profile
index e5e2087..bc7dc76 100644
--- a/.profile
+++ b/.profile
@@ -1 +1,2 @@
+# shellcheck disable=SC2148
 export ENV="$HOME/.bashrc"
diff --git a/Documents/Shore/cleanup/docker-clean b/Documents/Shore/cleanup/docker-clean
index 7808f82..6c9bb73 100755
--- a/Documents/Shore/cleanup/docker-clean
+++ b/Documents/Shore/cleanup/docker-clean
@@ -1,5 +1,5 @@
 #!/bin/sh
-docker rm $(docker ps --quiet --filter=status=exited) 2>/dev/null || true
-docker rm $(docker ps --quiet --filter=status=created) 2>/dev/null || true
-docker rmi $(docker images --quiet --filter=dangling=true) 2>/dev/null || true
-docker volume rm $(docker volume ls --quiet --filter=dangling=true) 2>/dev/null || true
+docker rm "$(docker ps --quiet --filter=status=exited)" 2>/dev/null || true
+docker rm "$(docker ps --quiet --filter=status=created)" 2>/dev/null || true
+docker rmi "$(docker images --quiet --filter=dangling=true)" 2>/dev/null || true
+docker volume rm "$(docker volume ls --quiet --filter=dangling=true)" 2>/dev/null || true
diff --git a/Documents/Shore/cleanup/docker-update b/Documents/Shore/cleanup/docker-update
index acefcfd..01a2c99 100755
--- a/Documents/Shore/cleanup/docker-update
+++ b/Documents/Shore/cleanup/docker-update
@@ -1,5 +1,5 @@
 #!/bin/sh -e
 for image in $(docker images | awk '$1!="<none>" && NR>1 {printf("%s:%s\n", $1, $2)}')
 do
-    docker pull $image || echo "Skipping..."
+    docker pull "$image" || echo "Skipping..."
 done
diff --git a/Documents/Shore/cleanup/vagrant-clean b/Documents/Shore/cleanup/vagrant-clean
index 0720048..dad88af 100755
--- a/Documents/Shore/cleanup/vagrant-clean
+++ b/Documents/Shore/cleanup/vagrant-clean
@@ -11,13 +11,13 @@ for line in vagrant.box("list"):
         if box['provider'] in boxes[box['name']]:
             boxes[box['name']][box['provider']].append(box['version'])
         else:
-            boxes[box['name']][box['provider']] = [ box['version'] ]
+            boxes[box['name']][box['provider']] = [box['version']]
     else:
-        boxes[box['name']] = {box['provider']: [ box['version'] ]}
+        boxes[box['name']] = {box['provider']: [box['version']]}
 for box in boxes:
     for provider in boxes[box]:
         for version in boxes[box][provider][:-1]:
             print('Removing box {0} version {1}.'.format(box, version))
-            vagrant.box('remove', '--force', '--provider', provider, 
+            vagrant.box('remove', '--force', '--provider', provider,
                         '--box-version', version, box)
 vagrant('global-status', '--prune')
diff --git a/Documents/train-wifi.sh b/Documents/train-wifi.sh
index 5cb8df8..90eaf0f 100755
--- a/Documents/train-wifi.sh
+++ b/Documents/train-wifi.sh
@@ -29,17 +29,17 @@
 set -eu
 
 die () {
-    logger -p user.err $@
+    logger -p user.err "$@"
     exit 1
 }
 
 iswifi () {
     # TODO: Check if a network interface is passed.
-    [ "$(nmcli --terse --fields GENERAL.TYPE device show $1 | awk -F: '{print $2}')" = 'wifi' ]
+    [ "$(nmcli --terse --fields GENERAL.TYPE device show "$1" | awk -F: '{print $2}')" = 'wifi' ]
 }
 
 wifi_connection () {
-    nmcli --terse --fields GENERAL.CONNECTION device show $1 | awk -F: '{print $2}'
+    nmcli --terse --fields GENERAL.CONNECTION device show "$1" | awk -F: '{print $2}'
 }
 
 if [ $# -ne 2 ]
@@ -58,14 +58,14 @@ which nmcli > /dev/null || die "Can't login to the train wifi, nmcli is not inst
 
 [ "$action" = 'up' ] || die "Can't login to the train wifi, action $action isn't up."
 iswifi "$interface" || die "Can't login to the train wifi, interface $interface isn't wifi."
-connection="$(wifi_connection $interface)"
+connection="$(wifi_connection "$interface")"
 [ "$connection" = "ISRAEL-RAILWAYS" ] || die "Can't login to the train wifi, wifi network $connection isn't ISRAEL-RAILWAYS."
 
 redirect_url="$(curl --output /dev/null --silent --write-out '%{redirect_url}' http://google.com/)"
 logger -p user.debug "Train wifi redirect url: $redirect_url"
 login_ip="$(echo "$redirect_url" | grep --only-matching '[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*')" || die "Can't login to the train wifi, redirect URL doesn't contain an IP."
-logger -p user.debug "Train wifi login IP: $ip"
-login_url="http://$ip/loginHandler.php?allowAccess=true"
+logger -p user.debug "Train wifi login IP: $login_ip"
+login_url="http://$login_ip/loginHandler.php?allowAccess=true"
 logger -p user.debug "Train wifi login URL: $login_url"
 http_code="$(curl --output /dev/null --silent --write-out '%{http_code}' "$login_url")"
 logger -p user.debug "Train wifi login HTTP code: $http_code"
-- 
GitLab