
services = docker-deploy-metrics-api docker-deploy-metrics-server docker-deploy-metrics-pipeline docker-deploy-metrics-db-migration-worker

docker-deploy-all: $(services)

# some magic code, so must named as docker-deploy-server for central
docker-deploy-metrics-api: 
	./build/api/build.sh

docker-deploy-metrics-server: 
	./build/server/build.sh

docker-deploy-metrics-pipeline: 
	./build/pipeline/build.sh

docker-deploy-metrics-db-migration-worker:
	./build/db-migration-worker/build.sh

build: build-bin

# Go build
build-bin: bin/api bin/server bin/pipeline bin/db-migration-worker

# Binary build
bin/api: generate
	./scripts/go-build -o build/api/metrics-api cmd/central_metrics/main.go

bin/server: generate
	./scripts/go-build -o build/server/metrics-server cmd/scrape_gateway/main.go

bin/pipeline: generate
	./scripts/go-build -o build/pipeline/metrics-pipeline cmd/push_pipeline/main.go

bin/db-migration-worker: generate
	./scripts/go-build -o build/db-migration-worker/metrics-db-migration-worker cmd/db_migration/main.go

clean:
	make -C ./idl clean
	rm -f ./build/api/metrics-api
	rm -f ./build/server/metrics-server
	rm -f ./build/pipeline/metrics-pipeline
	rm -f ./build/db-migration-worker/metrics-db-migration-worker
	rm -f central/db/entity/autogenerated_entity.go

generate: db/entity/autogenerated_entity.go
	./hack/gen_mock.sh
	make -C ./idl generate
	make -C ./tools bin/mdatagen
	go generate codegen.go

GENQS := PATH="tools/bin:$(PATH)" go generate entity.go
db/entity/autogenerated_entity.go: central/db/entity/entity.go
	cd tools/ && make bin/goqueryset
	cd central/db/entity && ($(GENQS) || ( go build entity.go && $(GENQS) ))

swagger-combine:
	./scripts/swagger-combine 'swagger-combine ./docs/config.json -o ./docs/mergedSwagger.json --includeDefinitions'

generate4test:
	./hack/gen_mock.sh

lint:
	@echo "skip lint now"

check: check-golang check-pulumi
	@./scripts/check

check-golang: generate generate4test
	./hack/check_golanglint.sh
	make -C ./idl check

check-pulumi:
	./hack/check_pulumi.sh

# TODO(chenfei): add `test` entrypoint for each service directory, then use make -C xxx test to instead.
test: generate generate4test
	go install gotest.tools/gotestsum@latest
	@(env AWS_WEB_IDENTITY_TOKEN_FILE=fake GCP_WORKLOAD_IDENTITY_AUDIENCE=fake GCP_IMPERSONATE_SA=fake \
	./hack/start-db-server.sh \
	gotestsum --junitfile unit-tests.xml -- -p=1 ./central/... ./pkg/... )
	make -C ./idl test

# TODO use builtin embed mechanism after go1.16
# generate the pkg/embed/autogen_pkger.go to embed files in code
# after files in pkg/embed/files updated, you can run this.
# then you can use `embed.ReadFile(path)` to read the file.
# example:
# to read the file `pkg/embed/files/update_lightning_info.sh
# embed.ReadFile("/files/update_lightning_info.sh")
pkger:
	@go run tools/pkger/main.go -s pkg/embed/files/ -d pkg/embed

verify: check test

cover:
	go test -cover -coverprofile=coverage.out -race ./...
	go tool cover -html=coverage.out
	rm -f coverage.out

.PHONY: build generate check test check-golang check-pulumi $(services)
