# must create a .env file with info
# must have compose installed
include .env
export
OS:=${shell go env GOOS}
ARCH=$(shell go env GOARCH)
OOSS="linux"
ARRCHS="arm 386"
DEBUG=1
SERVICE=tgbuser-grpc
VERSION=0.0.0_7
BINAME=$(SERVICE)-$(OS)-amd64-$(VERSION)
BINAMEARM=$(SERVICE)-$(OS)-arm64-$(VERSION)
# can be docker or podman or whatever
CONTAINERS=docker
COMPOSE=$(CONTAINERS)-compose
# Configure local registry
REGADDR=192.168.0.151:32000
K8SRSNAME=$(shell kubectl get rs --no-headers -o custom-columns=":metadata.name" | grep $(SERVICE))
.phony: all clean build test clean-image build-image build-image-debug run-image run-image-debug run-local


build-image: build 
# here we made the images and push to registry with buildx 
	@$(CONTAINERS) buildx build --build-arg="BINAME=$(BINAMEARM)" --platform linux/arm64 --push -t $(REGADDR)/$(SERVICE):latest .

# Here we upload it to local 

build-test-image:
	@$(CONTAINERS) buildx build --build-arg="BINAME=$(BINAMEARM)" --platform linux/arm64 --push  -t $(REGADDR)/$(SERVICE):latest .

run-image: build-image
	@$(CONTAINERS) compose -f docker-compose.yaml up

build-image-debug: clean
	@$(CONTAINERS) compose -f docker-compose-debug.yaml build

run-image-debug: build-image-debug
	@$(CONTAINERS) compose -f docker-compose-debug.yaml up

run-local:clean build
	@bin/$(BINAME)

build: clean
	#@mkdir dolardb
	@protoc -I ./proto --go_out ./proto/golang --go_opt paths=source_relative --go-grpc_out ./proto/golang --go-grpc_opt paths=source_relative ./proto/tgbuser/tgbuser.proto
	@env CGO_ENABLED=0 GOOS=$(OS) GOARCH=amd64 go build -o ./bin/$(BINAME) ./cmd/.
	@env CGO_ENABLED=0 GOOS=$(OS) GOARCH=arm64 go build -o ./bin/$(BINAMEARM) ./cmd/.

create-descriptors:
	@envsubst < k8s/deployment.yml.template > k8s/deployment.yml

deploy: build-image create-descriptors
	@kubectl apply -f k8s/deployment.yml
	@kubectl scale rs $(K8SRSNAME) --replicas=0
	@kubectl scale rs  $(K8SRSNAME) --replicas=1

test:
	@go -count=1 test ./...
clean:
	@rm -rf ./bin 

clean-image:
	@$(CONTAINERS) system prune -f


