#!/bin/bash -e

# This script is run as part of the Dockerfile
# It will conduct golang testing and vuln lookups
# unless SKIP_TESTS=1 is defined

DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
. "$DIR/.common.sh"

echo -e "${BLUE}❯ ${CYAN}docker-gobuild${RESET}"
echo -e "  ${YELLOW}BUILD_COMMIT:  ${BUILD_COMMIT:-not set}${RESET}"
echo -e "  ${YELLOW}BUILD_VERSION: ${BUILD_VERSION:-not set}${RESET}"
echo -e "  ${YELLOW}CGO_ENABLED:   ${CGO_ENABLED:-not set}${RESET}"
echo -e "  ${YELLOW}GOPROXY:       ${GOPROXY:-not set}${RESET}"
echo -e "  ${YELLOW}GOPRIVATE:     ${GOPRIVATE:-not set}${RESET}"
echo -e "  ${YELLOW}GO111MODULE:   ${GO111MODULE:-not set}${RESET}"
echo -e "  ${YELLOW}SKIP_TESTS:    ${SKIP_TESTS:-not set}${RESET}"

echo -e "${BLUE}❯ ${CYAN}Downloading backend go modules${RESET}"
cd /app/backend
go mod download

# Testing and vulnerability lookup
if ! [ "${SKIP_TESTS:-}" = "1" ];  then
	mkdir -p /workspace
	echo -e "${BLUE}❯ ${CYAN}Nancy setup${RESET}"
	cd /workspace
	go get github.com/sonatype-nexus-community/nancy
	cp /app/backend/go.mod /app/backend/go.sum /app/backend/.nancy-ignore .
	go mod download

	echo -e "${BLUE}❯ ${CYAN}Nancy testing${RESET}"
	go list -json -m all | nancy sleuth --quiet --username "${NANCY_USER}" --token "${NANCY_TOKEN:-}"
	rm -rf /workspace

	echo -e "${BLUE}❯ ${CYAN}Testing backend code${RESET}"
	cd /app/backend
	[ -z "$(go tool fix -diff ./internal)" ]
	richgo test -cover -v ./internal/...
	richgo test -bench=. ./internal/...
	golangci-lint -v run ./...
fi

echo -e "${BLUE}❯ ${CYAN}Building backend binary${RESET}"
go build \
	-ldflags "-w -s -X main.commit=${BUILD_COMMIT} -X main.version=${BUILD_VERSION} -X main.sentryDSN=${SENTRY_DSN:-}" \
	-o ../dist/bin/server \
	-v ./cmd/server

echo -e "${BLUE}❯ ${CYAN}docker-gobuild ${GREEN}completed${RESET}"
