SHELL := /bin/bash

SHA  := $(shell git rev-parse --short HEAD )
REPO := quay.io/quay/quay
TAG  := $(REPO):$(SHA)

.PHONY: all unit test pkgs build run clean

all: clean pkgs test build

pkgs: requirements.txt requirements-dev.txt requirements-tests.txt
	pip install -r $<

requirements.txt: requirements-nover.txt
	# Create a new virtualenv and activate it
	pyenv virtualenv 2.7.12 quay-deps
	pyenv activate quay-deps

	# Install unversioned dependencies with your changes
	pip install -r requirements-nover.txt

	# Run the unit test suite
	$(MAKE) unit

	# Freeze the versions of all of the dependencies
	pip freeze > requirements.txt

	# Delete the virtualenv
	pyenv uninstall quay-deps

QUAY_CONFIG ?= ../quay-config
conf/stack/license: $(QUAY_CONFIG)/local/license
	mkdir -p conf/stack
	ln -s $(QUAY_CONFIG)/local/license conf/stack/license

unit:
	TEST=true PYTHONPATH="." py.test --timeout=3600 --verbose -x ./

test: unit test/registry_tests.py
	TEST=true PYTHONPATH="." py.test --timeout=3600 --verbose --show-count -x \
		test/registry_tests.py


WEBPACK := node_modules/.bin/webpack
$(WEBPACK): package.json
	npm install webpack
	npm install

BUNDLE := static/js/build/bundle.js
$(BUNDLE): $(WEBPACK) tsconfig.json webpack.config.js typings.json
	$(WEBPACK)

GRUNT := grunt/node_modules/.bin/grunt
$(GRUNT): grunt/package.json
	cd grunt && npm install

JS  := quay-frontend.js quay-frontend.min.js template-cache.js
CSS := quay-frontend.css
DIST := $(addprefix static/dist/, $(JS) $(CSS) cachebusters.json)
$(DIST): $(GRUNT)
	cd grunt && ../$(GRUNT)

build: $(WEBPACK) $(GRUNT)

docker-build: pkgs build
	ifneq (0,$(shell git status --porcelain | awk 'BEGIN {print $N}'))
	echo 'dirty build not supported - run `FORCE=true make clean` to remove'
	exit 1
	endif
	# get named head (ex: branch, tag, etc..)
	NAME = $(shell git rev-parse --abbrev-ref HEAD)
	# checkout commit so .git/HEAD points to full sha (used in Dockerfile)
	git checkout $(SHA)
	docker build -t $(TAG) .
	git checkout $(NAME)
	echo $(TAG)

run: license
	goreman start


clean:
	find . -name "*.pyc" -exec rm -rf {} \;
	rm -rf node_modules 2> /dev/null
	rm -rf grunt/node_modules 2> /dev/null
	rm -rf dest 2> /dev/null
	rm -rf dist 2> /dev/null
	rm -rf .cache 2> /dev/null
	rm -rf static/js/build
	rm -rf static/build
	rm -rf static/dist
	rm -rf build
	rm -rf conf/stack
	rm -rf screenshots