| #!/usr/bin/env bash | |
| set -e -o pipefail | |
| REPODIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../" && pwd)" | |
| # CI platforms differ, so per-platform GOLANGCI_LINT_OPTS can be set | |
| # from a platform-specific Dockerfile, otherwise let's just set | |
| # (somewhat pessimistic) default of 10 minutes. | |
| : "${GOLANGCI_LINT_OPTS=--timeout=10m}" | |
| [ -n "${TESTDEBUG}" ] && set -x | |
| # TODO find a way to share this code with hack/make.sh | |
| if pkg-config 'libsystemd' 2> /dev/null; then | |
| DOCKER_BUILDTAGS+=" journald" | |
| fi | |
| # Note: exclude github.com/docker/docker/man as it contains no Go code. | |
| mods=($(find "${REPODIR}" -name "go.mod" -type f -exec dirname {} \; | grep -v "/man" | sort -u)) | |
| for mod in "${mods[@]}"; do | |
| pushd "${mod}" > /dev/null | |
| echo -e "\n\033[0;36mINFO\033[0m Start validation for module '${mod}' with golang-ci-lint" | |
| # TODO use --out-format=junit-xml and store artifacts | |
| # shellcheck disable=SC2086 | |
| GOGC=75 golangci-lint run \ | |
| ${GOLANGCI_LINT_OPTS} \ | |
| --build-tags="${DOCKER_BUILDTAGS}" \ | |
| --verbose \ | |
| --config "${REPODIR}/.golangci.yml" | |
| popd > /dev/null | |
| done |