cert-manager/hack/verify-staticcheck.sh
Ashley Davis 642161a963
make update-all & ensure bazel-only targets are runnable
this allows us to maintain the bazel build files until they're removed,
but tries to avoid accidentally encouraging their use

`make update-all` implementes a non-bazel version of
`hack/update-all.sh`, with `hack/update-all.sh` now calling make but
also doing the bazel stuff it used to.

Signed-off-by: Ashley Davis <ashley.davis@jetstack.io>
2022-06-30 12:47:30 +01:00

84 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# Copyright 2022 The cert-manager 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
# NB: This script requires bazel, and is no longer supported since we no longer support bazel
# We want to add something like this to make, but since this script was never part of any CI
# pipeline it's not a priority. The script is kept for backwards compatibility for now but may
# change or be removed in the future.
# See https://github.com/cert-manager/cert-manager/pull/3037#issue-440523030
# Currently only works on linux/amd64, darwin/amd64.
REPO_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../" > /dev/null && pwd )"
# See https://staticcheck.io/docs/checks
CHECKS=(
"all"
"-S1*" # Omit code simplifications for now.
"-ST1*" # Mostly stylistic, redundant w/ golint
)
export IFS=','; checks="${CHECKS[*]}"; unset IFS
cd "${REPO_ROOT}"
all_packages=()
while IFS='' read -r line; do
# Prepend './' to get staticcheck to treat these as paths, not packages.
all_packages+=("./$line")
done < <( find -L . \
\( \
-not \( \
\( \
-path ./_\* -o \
-path ./.\* -o \
-path ./vendor \
\) -prune \
\) \
\) \
-type f \
-name \*.go \
| sed 's|/[^/]*$||' \
| sed 's|^./||' \
| LC_ALL=C sort -u \
| grep -vE "(third_party|generated|clientset_generated|hack|/_|bazel-)"
)
some_failed=false
while read -r error; do
# Ignore compile errors caused by lack of files due to build tags.
# TODO: Add verification for these directories.
ignore_no_files="^-: build constraints exclude all Go files in .* \(compile\)"
if [[ $error =~ $ignore_no_files ]]; then
continue
fi
some_failed=true
file="${error%%:*}"
pkg="$(dirname "$file")"
echo "$error"
done < <(bazel run //hack/bin:staticcheck -- -checks "${checks}" "${all_packages[@]}" 2>/dev/null || true)
if $some_failed; then
echo
echo "Staticcheck failures detected, please fix and re-run this command."
exit 1
fi