Files
moby/hack/validate/golangci-lint
Austin Vazquez c8aaeea285 ci: run golangci-lint for each Go module
Signed-off-by: Austin Vazquez <austin.vazquez@docker.com>
2025-12-23 14:58:53 -06:00

34 lines
1.1 KiB
Bash
Executable File

#!/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 . -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} \
--print-resources-usage \
--build-tags="${DOCKER_BUILDTAGS}" \
--verbose \
--config "${REPODIR}/.golangci.yml"
popd > /dev/null
done