SYSTEM := $(shell sh -c 'uname -s 2>/dev/null') bats: ifeq ($(SYSTEM),Darwin) ifneq ($(shell bats --version >/dev/null 2>&1 ; echo $$?),0) brew install bats-core endif else git clone https://github.com/josegonzalez/bats-core.git /tmp/bats cd /tmp/bats && sudo ./install.sh /usr/local rm -rf /tmp/bats endif shellcheck: ifneq ($(shell shellcheck --version >/dev/null 2>&1 ; echo $$?),0) ifeq ($(SYSTEM),Darwin) brew install shellcheck else sudo add-apt-repository 'deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse' sudo rm -rf /var/lib/apt/lists/* && sudo apt-get clean sudo apt-get update -qq && sudo apt-get install -qq -y shellcheck endif endif shfmt: ifneq ($(shell shfmt --version >/dev/null 2>&1 ; echo $$?),0) ifeq ($(shfmt),Darwin) brew install shfmt else wget -qO /tmp/shfmt https://github.com/mvdan/sh/releases/download/v2.6.2/shfmt_v2.6.2_linux_amd64 chmod +x /tmp/shfmt sudo mv /tmp/shfmt /usr/local/bin/shfmt endif endif readlink: ifeq ($(shell uname),Darwin) ifeq ($(shell greadlink > /dev/null 2>&1 ; echo $$?),127) brew install coreutils endif ln -nfs `which greadlink` tests/bin/readlink endif ci-dependencies: shellcheck bats readlink lint-setup: @mkdir -p test-results/shellcheck tmp/shellcheck @find . -not -path '*/\.*' -type f | xargs file | grep text | awk -F ':' '{ print $$1 }' | xargs head -n1 | egrep -B1 "bash" | grep "==>" | awk '{ print $$2 }' > tmp/shellcheck/test-files @cat tests/shellcheck-exclude | sed -n -e '/^# SC/p' | cut -d' ' -f2 | paste -d, -s - > tmp/shellcheck/exclude lint: lint-setup # these are disabled due to their expansive existence in the codebase. we should clean it up though @cat tests/shellcheck-exclude | sed -n -e '/^# SC/p' @echo linting... @cat tmp/shellcheck/test-files | xargs shellcheck -e $(shell cat tmp/shellcheck/exclude) | tests/shellcheck-to-junit --output test-results/shellcheck/results.xml --files tmp/shellcheck/test-files --exclude $(shell cat tmp/shellcheck/exclude) unit-tests: @echo running unit tests... @mkdir -p test-results/bats @cd tests && echo "executing tests: $(shell cd tests ; ls *.bats | xargs)" cd tests && bats --formatter bats-format-junit -e -T -o ../test-results/bats *.bats setup: bash tests/setup.sh $(MAKE) ci-dependencies test: lint unit-tests