BINARY_NAME=educdn
BUILD_DIRECTROY=./dist
VERSION=dev-make

CGO_ENABLED=0
GOARCH=amd64
GOOS=linux

PWD=$(shell pwd)
DEPLOYMENT_DIR=${PWD}/deployment
TEMPLATE_DIR=${PWD}/assets/templates
CERT_DIR=${DEPLOYMENT_DIR}/certs
CONFIG_PATH=${DEPLOYMENT_DIR}/config.yaml

# CONTAINER_IMAGE=registry.gitlab.ost.ch:45023/ramon.bister/educdn:latest
CONTAINER_IMAGE=educdn:dev-make

build:
	mkdir -p ${BUILD_DIRECTROY}
	GOARCH=${GOARCH} GOOS=${GOOS} go build -ldflags "-s -w -X 'ost.ch/educdn/cmd.version=${VERSION}'" -trimpath -o ${BUILD_DIRECTROY}/${BINARY_NAME} main.go

run: build
	${BUILD_DIRECTROY}/${BINARY_NAME}

clean:
	go clean
	rm -rf ${BUILD_DIRECTROY}

test:
	go clean -testcache
	go test ./...

test_coverage:
	go test ./... -coverprofile=coverage.out

dep:
	go mod download

build-docker:
	docker image rm educdn:${VERSION} -f
	docker buildx build . -t educdn:${VERSION} --build-arg VERSION=${VERSION}

bootstrap-docker:
	docker run --volume ${CONFIG_PATH}:${CONFIG_PATH} --volume ${DEPLOYMENT_DIR}:/deployment --volume ${TEMPLATE_DIR}:/templates ${CONTAINER_IMAGE} bootstrap --config ${CONFIG_PATH} --cert-dir ${CERT_DIR} --template-dir /templates --deployment-dir /deployment --container-image ${CONTAINER_IMAGE}

run-docker: bootstrap-docker create-certs
	cd ${DEPLOYMENT_DIR} && docker compose up -d --remove-orphans

stop-docker:
	cd ${DEPLOYMENT_DIR} && docker compose down

clean-docker: stop-docker
	docker volume prune -a
	docker container prune -f
	rm -f ${DEPLOYMENT_DIR}/compose.yaml
	rm -f ${DEPLOYMENT_DIR}/init_minio.sh
	rm -f ${DEPLOYMENT_DIR}/create_ca.sh
	rm -f ${DEPLOYMENT_DIR}/create_certs.sh
	rm -f ${DEPLOYMENT_DIR}/.env

restart-docker: build-docker stop-docker run-docker

configure-storage:
	docker run --volume ${DEPLOYMENT_DIR}/init_minio.sh:/init_minio.sh --network educdn-net --entrypoint '' minio/mc:RELEASE.2025-02-21T16-00-46Z-cpuv1 /bin/bash /init_minio.sh

create-ca:
	docker run --volume ${DEPLOYMENT_DIR}/:${DEPLOYMENT_DIR} --entrypoint '' alpine/openssl:3.3.3 sh ${DEPLOYMENT_DIR}/create_ca.sh
	sudo chown -R ${USER}:${USER} ${CERT_DIR}

create-certs:
	docker run --volume ${DEPLOYMENT_DIR}/:${DEPLOYMENT_DIR} --entrypoint '' alpine/openssl:3.3.3 sh ${DEPLOYMENT_DIR}/create_certs.sh
	sudo chown -R ${USER}:${USER} ${CERT_DIR}

clean-certs:
	rm -rf ${CERT_DIR}/
