# 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; yarn; yarn 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

python-unit-test:
	make python-unit-test -C backend

e2e-test: build e2e-test-only

e2e-test-only:
	make e2e-test-only -C backend

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

integration-test:
	make integration-test -C backend

lint:
	make lint -C backend

fmt:
	make fmt -C backend

clean:
	make clean -C backend
