#!/usr/bin/env bash
set -euo pipefail

export CGO_ENABLED=0

SERVICE_ROOT=$(cd $(dirname ${BASH_SOURCE[0]})/.. && pwd)
DBAAS_ROOT=$(cd ${SERVICE_ROOT}/.. && pwd)

cd ${DBAAS_ROOT}

# Check if cue scripts have been formatted
${SERVICE_ROOT}/scripts/verify-cue-fmt

service=$(basename ${SERVICE_ROOT})
PKGS=$(find ${service} -type f -name '*.go'|awk -F'/[^/]*$' '{print "github.com/pingcap/dbaas/"$1}'|sort -u)
PKGS="${PKGS[@]} $(find "pkg" -type f -name '*.go'|awk -F'/[^/]*$' '{print "github.com/pingcap/dbaas/"$1}'| sort -u)"


cd ${DBAAS_ROOT}/tools
echo checking packages: $PKGS
make bin/revive
make bin/golangci-lint

cd ${SERVICE_ROOT}
# Some linters only work if code is vendored
GO111MODULE=on go mod vendor

NO_LINT=${NO_LINT:-""}
if [[ -z $NO_LINT ]] ; then
  echo "linting"
  ${DBAAS_ROOT}/tools/bin/revive -formatter friendly -config ${SERVICE_ROOT}/conf/revive.toml ${PKGS}
fi

echo "checking ${SERVICE_ROOT}"
# golangci has a bug when given file arguments
${DBAAS_ROOT}/tools/bin/golangci-lint run
echo "checking ${DBAAS_ROOT}/pkg"
cd ${DBAAS_ROOT}/pkg
${DBAAS_ROOT}/tools/bin/golangci-lint run
