#!/bin/bash

# Copyright 2014 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set -o errexit
set -o nounset
set -o pipefail

readonly VERSION="v1.43.0"
readonly KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..

cd "${KUBE_ROOT}"

# See configuration file in ${KUBE_ROOT}/.golangci.yml.
mkdir -p cache

docker run --rm -v $(pwd)/cache:/cache -v $(pwd):/app -e GOLANGCI_LINT_CACHE=/cache -w /app "golangci/golangci-lint:$VERSION" golangci-lint run

# ex: ts=2 sw=2 et filetype=sh

#!/bin/bash

# Copyright 2014 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set -o errexit
set -o nounset
set -o pipefail

readonly VERSION="v1.43.0"
readonly KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..

cd "${KUBE_ROOT}"

# See configuration file in ${KUBE_ROOT}/.golangci.yml.
mkdir -p cache

docker run --rm -v $(pwd)/cache:/cache -v $(pwd):/app --security-opt="label=disable" -e GOLANGCI_LINT_CACHE=/cache -w /app "golangci/golangci-lint:$VERSION" golangci-lint run

# ex: ts=2 sw=2 et filetype=sh

Fix golint on systems with selinux enforcing
Fix golint on systems with selinux enforcing

We run golangci-lint in a container with the local directory
bind-mounted as a volume. However, without relabelling the directory
contents, selinux will disallow access. We can use
--security-opt="label=disable" to turn off label separation.

An alternative approach would be to use the :Z volume option to ensure
relabelling occurs, but relabelling directories on the host OS could
have unforseen consequences.

On systems without selinux enforcing, this won't have any affect.

Without this change:

$ ./hack/verify-golint.sh
2022/03/28 11:59:12 Failed to write README file to cache dir /cache: stat /cache/README: no such file or directory

See docs like:
https://docs.docker.com/storage/bind-mounts/#configure-the-selinux-label
https://docs.docker.com/engine/reference/run/
https://docs.podman.io/en/latest/markdown/podman-run.1.html

See also https://github.com/kubernetes/test-infra/pull/25798
