Skip to content
Snippets Groups Projects
Makefile 3.26 KiB
ROOT_DIR:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
TUNNEL_HOST:=arkindex-dev
TUNNEL_PORT:=8000

VERSION=$(shell git rev-parse --short HEAD)
TAG_APP=arkindex-app
TAG_BASE=arkindex-base
TAG_SHELL=arkindex-shell
.PHONY: build base

all: clean build

base: require-version
	echo $(version) > $(ROOT_DIR)/VERSION
	docker build $(ROOT_DIR)/base -t $(TAG_BASE):$(version) -t $(TAG_BASE):latest -t registry.gitlab.com/arkindex/backend:base-$(version)
	docker push registry.gitlab.com/arkindex/backend:base-$(version)
	git commit $(ROOT_DIR)/VERSION -m 'Bump to $(version)'

clean:
	rm -rf *.egg-info build dist .eggs
	find . -name '*.pyc' -exec rm {} \;

build:
	python setup.py sdist
	docker build --no-cache $(ROOT_DIR) -t $(TAG_APP):$(VERSION) -t $(TAG_APP):latest

build-shell:
	docker build -t $(TAG_SHELL):$(VERSION) -t $(TAG_SHELL):latest $(ROOT_DIR)/shell

publish-version: require-docker-auth
	[ -f $(ROOT_DIR)/arkindex/project/local_settings.py ] && mv $(ROOT_DIR)/arkindex/project/local_settings.py $(ROOT_DIR)/arkindex/project/local_settings.py.bak || true
	$(MAKE) build TAG_APP=registry.gitlab.com/arkindex/backend
	$(MAKE) build-shell TAG_SHELL=registry.gitlab.com/arkindex/backend/shell
	docker push registry.gitlab.com/arkindex/backend:$(VERSION)
	[ -f $(ROOT_DIR)/arkindex/project/local_settings.py.bak ] && mv $(ROOT_DIR)/arkindex/project/local_settings.py.bak $(ROOT_DIR)/arkindex/project/local_settings.py || true

latest:
	$(MAKE) publish-version VERSION=latest

release:
	$(eval version:=$(shell cat VERSION))
	$(MAKE) publish-version VERSION=$(version)
	docker push registry.gitlab.com/arkindex/backend:latest
	docker push registry.gitlab.com/arkindex/backend/shell:latest
	git tag $(version)

tunnel:
	ssh $(TUNNEL_HOST) -NR *:$(TUNNEL_PORT):localhost:$(TUNNEL_PORT)

test-fixtures:
	$(eval export PGPASSWORD=devdata)
	psql -h 127.0.0.1 -p 9100 -U devuser -c 'CREATE DATABASE arkindex_tmp_fixtures WITH TEMPLATE arkindex_dev' template1
	psql -h 127.0.0.1 -p 9100 -U devuser -c 'DROP DATABASE arkindex_dev' template1
	psql -h 127.0.0.1 -p 9100 -U devuser -c 'CREATE DATABASE arkindex_dev' template1
	# A "try...finally" block in a Makefile: ensure we bring back the dev database even when test-fixtures fails
	-$(MAKE) test-fixtures-run
	$(MAKE) test-fixtures-restore

test-fixtures-run:
	arkindex/manage.py migrate
	arkindex/manage.py build_fixtures
	arkindex/manage.py dumpdata --indent 4 dataimport documents images users > arkindex/documents/fixtures/data.json

test-fixtures-restore:
	# This first renaming ensures that arkindex_tmp_fixtures exists; we don't want to drop arkindex_dev without a backup
	psql -h 127.0.0.1 -p 9100 -U devuser -c 'ALTER DATABASE arkindex_tmp_fixtures RENAME TO arkindex_dev_replace' template1
	psql -h 127.0.0.1 -p 9100 -U devuser -c 'DROP DATABASE arkindex_dev' template1
	psql -h 127.0.0.1 -p 9100 -U devuser -c 'ALTER DATABASE arkindex_dev_replace RENAME TO arkindex_dev' template1

require-docker-auth:
	@grep registry.gitlab.com ~/.docker/config.json > /dev/null || (echo "Docker Login on registry.gitlab.com"; docker login registry.gitlab.com)

require-version:
	@if [ ! "$(version)" ]; then echo "Missing version to publish"; exit 1; fi
	@git rev-parse $(version) >/dev/null 2>&1 && (echo "Version $(version) already exists on local git repo !" && exit 1) || true