##
##  tank, Import and Store Files for AURA
##  Copyright (C) 2017-2020 Christian Pointner <equinox@helsinki.at>
##
##  This program is free software: you can redistribute it and/or modify
##  it under the terms of the GNU Affero General Public License as
##  published by the Free Software Foundation, either version 3 of the
##  License, or (at your option) any later version.
##
##  This program is distributed in the hope that it will be useful,
##  but WITHOUT ANY WARRANTY; without even the implied warranty of
##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
##  GNU Affero General Public License for more details.
##
##  You should have received a copy of the GNU Affero General Public License
##  along with this program.  If not, see <https://www.gnu.org/licenses/>.
##

GOCMD := go
ifdef GOROOT
	GOCMD = $(GOROOT)/bin/go
endif

ifndef $(GOPATH)
    GOPATH=$(shell go env GOPATH)
    export GOPATH
endif

SWAG = $(GOPATH)/bin/swag
SWAG_ARGS := -d api/v1/,cmd/tank/ -g api.go

EXECUTABLE := tank

version := $(shell grep -oP 'app\.Version = "\K(.*)(?=")' cmd/tank/main.go)

all: build
.PHONY: vet format ui build clean distclean

init.dev::
	go get -u github.com/swaggo/swag/cmd/swag
	go install github.com/swaggo/swag/cmd/swag@latest
	curl -sSfL https://github.com/pre-commit/pre-commit/releases/download/v3.7.0/pre-commit-3.7.0.pyz -o pre-commit.pyz && python3 pre-commit.pyz && rm -f pre-commit.pyz

vet:
	$(GOCMD) vet ./...

format:
	$(GOCMD) fmt ./...

ui:
	$(GOCMD) generate ./ui

fmt-api-docs:
	$(SWAG) fmt $(SWAG_ARGS)

api-docs:
	$(SWAG) init $(SWAG_ARGS) --pd -o api/docs

# build target actually depends on api-docs
# to allow building binary without generating api docs first, we put api/docs/docs.go under version control
# see #30
build: ui
	$(GOCMD) build -o $(EXECUTABLE) ./cmd/tank

dev:
	$(GOCMD) build -o $(EXECUTABLE) -tags=dev ./cmd/tank

test-all:
	gitlab-runner exec docker test-all

coverage:
	gitlab-runner exec docker test-all | grep 'ok.*of statements'

release:
	git tag ${version}
	git push origin ${version}
	@echo "Release '${version}' tagged and pushed successfully."

clean:
	rm -f $(EXECUTABLE)

distclean: clean
	rm -f ui/assets_vfsdata.go