diff --git a/.bashrc b/.bashrc index 3b78b1fb9ce1b061470f9c068c148a161f1394dd..a374349efca677679d37996bcc3b077e3f99e4e6 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 0000000000000000000000000000000000000000..98d7033b7133e46e26617fa6ad097a85dc323362 --- /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 e5e20873dbe2e525ff89bc8c086da9ad2d23dd00..bc7dc76fce56de3d249b8184de17e5fe71a447fa 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 7808f82fe154d743abcfa485c8ab55d0291f07f9..6c9bb73009e2c47d6d1d4d8cbc58b97c4eda7768 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 acefcfdbd1c40aca9f2aedc0970813d5d7b06dd4..01a2c993b5e54c11835e5a1735d36d52afc9845d 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 0720048059d46f23aa3d130bf0b4e8392fb59251..dad88af9ada28fc1062223ed8897c60c204037a8 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 5cb8df8842a4908dea1d408df74ee6acc86815b2..90eaf0f5e258d1892756e4f028420b8fe55f8359 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"