#!/bin/bash
set -e
set +x

IMAGE=jc21/gotools:latest

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

BUILD_DATE=$(date '+%Y-%m-%d %T %Z')
NOW=$(date --rfc-3339=s)
cd $DIR/../..

if [ "$BUILD_COMMIT" = "" ]; then
	BUILD_COMMIT=$(git log -n 1 --format=%h)
fi

if [ "$BUILD_VERSION" = "" ]; then
	BUILD_VERSION=$(cat .version)
fi

echo -e "${BLUE}❯ ${GREEN}test-backend: ${YELLOW}${1:-}${RESET}"
echo "  BUILD_COMMIT:  ${BUILD_COMMIT:-notset}"
echo "  BUILD_DATE:    $BUILD_DATE"
echo "  BUILD_VERSION: $BUILD_VERSION"
echo "  CGO_ENABLED:   ${CGO_ENABLED:-not set}"
echo "  GO111MODULE:   ${GO111MODULE:-}"
echo "  GOPRIVATE:     ${GOPRIVATE:-}"
echo "  GOPROXY:       ${GOPROXY:-}"
echo "  NOW:           $NOW"

if [ "${1:-}" = "--inside-docker" ]; 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)" ]
	go test -json -cover ./internal/... | tparse
	golangci-lint -v run ./...
else
	# run this script from within docker
	docker pull "${IMAGE}"
	docker run --rm \
		-e BUILD_COMMIT="${BUILD_COMMIT:-notset}" \
		-e BUILD_DATE="$BUILD_DATE" \
		-e BUILD_VERSION="$BUILD_VERSION" \
		-e GOARCH="${2}" \
		-e GOOS="${1}" \
		-e GOPRIVATE="${GOPRIVATE:-}" \
		-e GOPROXY="${GOPROXY:-}" \
		-e NOW="$NOW" \
		-e SENTRY_DSN="${SENTRY_DSN:-}" \
		-e TZ="${TZ:-Australia/Brisbane}" \
		-v "$(pwd):/app" \
		-w '/app/backend' \
		"${IMAGE}" \
		/app/scripts/ci/test-backend --inside-docker
fi

echo -e "${BLUE}❯ ${GREEN}test-backend ${YELLOW}${1:-} ${GREEN}completed${RESET}"
exit 0