SHELL = /bin/bash
export PATH := ./node_modules/.bin/:${PATH}

MAKEFLAGS += --no-print-directory --silent

# Shows available commands
help:
	make -qp | grep '^[^\# \n\\.]' | grep '^[a-z]' | grep -v '=' | cut -f1 -d ":" | sort

test: setup clean lint
	mocha --reporter spec $(MOCHAFLAGS)

# Lints the code
lint:
	@grunt eslint

all: setup
	grunt

dev: all
	grunt watch

clean:
	rm -rf sc/ \
		sauce_connect.log* \
		npm-debug.log


# Creates new releases by running these steps
#
# 1. bump the version in your package.json file.
# 2. stage the package.json file's change.
# 3. commit that change with a message like "release 0.6.22".
# 4. create a new git tag for the release.
# 5. push the changes out to github.
# 6. also push the new tag out to github.
# 7. publish to npm.
release: test clean
	rm -f user.json
	grunt release$(RELEASEFLAGS)

# Releases updating only the patch number 0.0.#
release-patch:
	@RELEASEFLAGS=":patch" make release

# Releases updating the minor number 0.#.0 and setting the patch to 0
release-minor:
	@RELEASEFLAGS=":minor" make release

# Releases updating the major number #.0.0 and setting the minor and patch to 0
release-major:
	@RELEASEFLAGS=":major" make release

# Installs npm dependencies
# There is no output on npm install as we will need to run this
# step when running CI tests
setup:
	test -d node_modules || (\
		echo "# Setting up dev environment (this might take a while). If something goes wrong, please run: npm install; npm rebuild; manually"; \
		npm install --silent > /dev/null; \
	true);
	make setup-sauce

setup-sauce:
	[[ $$SAUCE_ACCESS_KEY && $$SAUCE_USERNAME ]] || make generate-user-file

generate-user-file:
	test -f user.json || (\
		read -p "Sauce Labs Username: " name && \
		read -p "Sauce Labs Access key: " key && \
		echo "{\"username\": \"$$name\", \"accessKey\": \"$$key\"}" > user.json \
		)

# Version
version:
	node -e "console.log(require('./package.json').version)"

.PHONY: default test clean help setup release release-major release-minor release-patch
