
services = docker-deploy-central docker-deploy-management-portal-server docker-deploy-billing2 \
  docker-deploy-core-server docker-deploy-metrics-server docker-deploy-pipeline-server

docker-deploy-all: $(services)

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

docker-deploy-sem-migrate: docker-deploy-base
	./central/build/sem-migrate/build.sh

docker-deploy-management-portal-server: docker-deploy-base
	./admin/build/server/build.sh

docker-deploy-billing2: docker-deploy-base
	./billing2/build/server/build.sh

docker-deploy-core-server: docker-deploy-base
	./core/build/server/build.sh

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

docker-deploy-internal-portal-server: docker-deploy-base
	./internalportal/build/server/build.sh

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

docker-deploy-base: ./central/build/base/.make/build-docker-base-image

./central/build/base/.make/build-docker-base-image: ./central/build/base/Dockerfile ./central/build/base/build.sh
	./central/build/base/build.sh

clean:
	make -C ./idl clean
	make -C ./central clean
	make -C ./admin clean
	make -C ./billing2 clean
	make -C ./core clean
	make -C ./metrics clean

# TODO(chenfei): just for now, should move `generate` and `generate4test` in each service directory
generate:
	make -C ./central generate
	make -C ./billing2 generate
	make -C ./idl generate
	make -C ./core generate
	make -C ./metrics generate

generate4test:
	./hack/gen_mock.sh
	make -C ./core generate4test

check: check-golang check-pulumi

check-golang: generate generate4test
	./hack/check_golanglint.sh
	make -C ./idl check
	make -C ./core 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/... ./admin/...)
	make -C ./core test
	./hack/start-db-server.sh bash -c "cd billing2;gotestsum --junitfile ../unit-tests-billing2.xml -- -p=1 ./..."
	make -C ./idl test

test-pulumi:
	cd ./deploy/monitoring/testing/integration && go 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

.PHONY: generate check test check-golang check-pulumi $(services) docker-deploy-base
