#!/usr/bin/env bash

###### script header ######

lib=$(realpath @@BASE_LIB@@) || exit 1
stat "${lib}" >> /dev/null || exit 1

# shellcheck source=../sh/lib.bash
if ! source "${lib}"; then
  echo "Error: could not find import"
  exit 1
fi

golangcilint=$(realpath @@GOLANGCI-LINT@@)
stat "${golangcilint}" >> /dev/null
go=$(realpath @@GO@@)
stat "${go}" >> /dev/null

cd "${BUILD_WORKSPACE_DIRECTORY}"

###### script body ######

readarray -t <<< "$(${go} list -f '{{.Dir}}' -m)"
modules=("${MAPFILE[@]}")

excludeMods=(
  "hack/tools"
)

check() {
  echo "The following Go modules are excluded and won't be linted with golangci-lint:"
  for exclude in "${excludeMods[@]}"; do
    for i in "${!modules[@]}"; do
      if [[ ${modules[i]} == "${BUILD_WORKSPACE_DIRECTORY}/${exclude}" ]]; then
        echo "  ${modules[i]}"
        unset 'modules[i]'
      fi
    done
  done

  statuscode=0

  echo "Linting the following Go modules with golangci-lint:"
  for mod in "${modules[@]}"; do
    echo "  ${mod}"
    PATH="$(dirname "${go}"):${PATH}" GOROOT=$(${go} env GOROOT) GOPATH=$(${go} env GOPATH) GOCACHE=$(${go} env GOCACHE) CGO_ENABLED=0 ${golangcilint} run --timeout=15m "${mod}/..." >&2
    statuscode=$?
  done

  exit "${statuscode}"
}

if test -v SILENT; then
  check > /dev/null
else
  check
fi