# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# NOTE: you have to use tabs in this file for make. Not spaces.
# https://stackoverflow.com/questions/920413/make-error-missing-separator
# https://tutorialedge.net/golang/makefiles-for-go-developers/

SHA ?= $(shell git show -s --format=%h)
TAG ?= $(shell git tag --points-at HEAD)
IMAGE_REPO ?= "apache"
VERSION = $(TAG)@$(SHA)

build-server-image:
	make build-server-image -C backend

build-config-ui-image:
	cd config-ui; docker build -t $(IMAGE_REPO)/devlake-config-ui:$(TAG) --file ./Dockerfile .

build-grafana-image:
	cd grafana; docker build -t $(IMAGE_REPO)/devlake-dashboard:$(TAG) --file ./backend/Dockerfile .

build-images: build-server-image build-config-ui-image build-grafana-image

push-server-image: build-server-image
	docker push $(IMAGE_REPO)/devlake:$(TAG)

push-config-ui-image: build-config-ui-image
	docker push $(IMAGE_REPO)/devlake-config-ui:$(TAG)

push-grafana-image: build-grafana-image
        docker push $(IMAGE_REPO)/devlake-dashboard:$(TAG)

push-images: push-server-image push-config-ui-image push-grafana-image

configure:
	docker-compose up config-ui

configure-dev:
	cd config-ui; npm install; npm start;

commit:
	git cz

restart:
	docker-compose down; docker-compose up -d

# Actually execute in ./backend
go-dep:
	make go-dep -C backend

python-dep:
	make python-dep -C backend

dep: go-dep python-dep

swag:
	make swag -C backend

build-plugin:
	make build-plugin -C backend

build-plugin-debug:
	make build-plugin-debug -C backend

build-worker:
	make build-worker -C backend

build-server:
	make build-server -C backend

build: build-plugin build-server

all: build build-worker

tap-models:
	make tap-models -C backend

run:
	make run -C backend

worker:
	make worker -C backend

dev:
	make dev -C backend

debug:
	make debug -C backend

mock:
	make mock -C backend

test: unit-test e2e-test

unit-test: mock unit-test-only

unit-test-only:
	make unit-test-only -C backend

e2e-test: build e2e-test-only

e2e-test-only:
	#PLUGIN_DIR=$(shell readlink -f bin/plugins) go test -timeout 300s -v ./test/...

e2e-plugins-test:
	make e2e-plugins-test -C backend

lint:
	make lint -C backend

fmt:
	make fmt -C backend

clean:
	make clean -C backend
