From 73d797d474190bc3e0db0f6e42b5d007112fb1a8 Mon Sep 17 00:00:00 2001 From: Han Kang Date: Wed, 3 Feb 2021 14:21:21 -0800 Subject: [PATCH 1/3] Wire up static-analysis so that it executes in the normal 'hack' flow --- hack/update-generated-stable-metrics.sh | 30 +++++++ hack/verify-generated-stable-metrics.sh | 80 +++++++++++++++++++ test/instrumentation/BUILD | 14 +++- test/instrumentation/stability-utils.sh | 65 +++++++++++++++ test/instrumentation/update-stable-metrics.sh | 15 +--- test/instrumentation/verify-stable-metrics.sh | 26 +----- 6 files changed, 194 insertions(+), 36 deletions(-) create mode 100755 hack/update-generated-stable-metrics.sh create mode 100755 hack/verify-generated-stable-metrics.sh create mode 100644 test/instrumentation/stability-utils.sh diff --git a/hack/update-generated-stable-metrics.sh b/hack/update-generated-stable-metrics.sh new file mode 100755 index 00000000000..6997480d71c --- /dev/null +++ b/hack/update-generated-stable-metrics.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +# Copyright 2020 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. + +# This file is not intended to be run automatically. It is meant to be run +# immediately before exporting docs. We do not want to check these documents in +# by default. + +set -o errexit +set -o nounset +set -o pipefail + +KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. +export KUBE_ROOT + +source "${KUBE_ROOT}/test/instrumentation/stability-utils.sh" + +kube::update::stablemetrics diff --git a/hack/verify-generated-stable-metrics.sh b/hack/verify-generated-stable-metrics.sh new file mode 100755 index 00000000000..88203775cab --- /dev/null +++ b/hack/verify-generated-stable-metrics.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash + +# Copyright 2021 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. + +# This script runs to ensure that we do not violate metric stability +# policies. +# Usage: `hack/verify-generated-stable-metrics.sh`. + +set -o errexit +set -o nounset +set -o pipefail + +KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. +source "${KUBE_ROOT}/hack/lib/init.sh" +source "${KUBE_ROOT}/hack/lib/util.sh" + +kube::golang::verify_go_version +extra_gopath=$(mktemp -d) +cd "${KUBE_ROOT}" +export KUBE_EXTRA_GOPATH=$extra_gopath +kube::golang::setup_env + +find_files() { + find . -not \( \ + \( \ + -wholename './output' \ + -o -wholename './_output' \ + -o -wholename './_gopath' \ + -o -wholename './release' \ + -o -wholename './target' \ + -o -wholename '*/third_party/*' \ + -o -wholename '*/vendor/*' \ + -o -wholename '*/hack/*' \ + -o -wholename '**/*_test.go' \ + \) -prune \ + \) \ + \( -wholename '**/*.go' \ + \) +} + +static_checked_files=$(find_files | grep -E ".*.go" | grep -v ".*_test.go") || true +pushd "${KUBE_EXTRA_GOPATH}" >/dev/null + GO111MODULE=on go get "gopkg.in/yaml.v2" +popd >/dev/null + +for i in "${static_checked_files[@]}" +do + temp_file=$(mktemp) + gopathfiles=$(find_files | grep -E 'test/instrumentation/.*.go' | grep -v "test/instrumentation/main.*go" | cut -c 3-) + # Deliberately allow word split here + # shellcheck disable=SC2086 + stabilitycheck=$(go run "test/instrumentation/main.go" $gopathfiles -- $i 1>$temp_file) + if ! $stabilitycheck; then + echo "!!! Metrics Stability static analysis has failed!" >&2 + echo "!!! Please run ./hack/update-generated-stable-metrics.sh to update the golden list." >&2 + exit 1 + fi + if diff -u "$KUBE_ROOT/test/instrumentation/testdata/stable-metrics-list.yaml" "$temp_file"; then + echo "PASS metrics stability verification" + else + echo "!!! Metrics Stability static analysis has failed!" >&2 + echo "!!! Please run ./hack/update-generated-stable-metrics.sh to update the golden list." >&2 + echo "!!! $temp_file" >&2 + exit 1 + fi +done + + diff --git a/test/instrumentation/BUILD b/test/instrumentation/BUILD index 75a6b7831c2..d0fa3ff18ff 100644 --- a/test/instrumentation/BUILD +++ b/test/instrumentation/BUILD @@ -48,13 +48,25 @@ genrule( tools = [":instrumentation"], ) +sh_library( + name = "stability_utils", + srcs = [ + "stability-utils.sh", + ], +) + sh_test( name = "verify_stable_metric", - srcs = ["verify-stable-metrics.sh"], + srcs = [ + "verify-stable-metrics.sh", + ], data = [ "testdata/stable-metrics-list.yaml", ":list_stable_metrics", ], + deps = [ + ":stability_utils", + ], ) go_test( diff --git a/test/instrumentation/stability-utils.sh b/test/instrumentation/stability-utils.sh new file mode 100644 index 00000000000..89571ed8145 --- /dev/null +++ b/test/instrumentation/stability-utils.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash +# Copyright 2019 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 + + +function kube::update::stablemetrics { + BAZEL_OUT_DIR="$KUBE_ROOT/bazel-bin" + BAZEL_GEN_DIR="$KUBE_ROOT/bazel-genfiles" + METRICS_LIST_PATH="test/instrumentation/stable-metrics-list.yaml" + + bazel build //test/instrumentation:list_stable_metrics + if [ -d "$BAZEL_OUT_DIR" ]; then + cp "$BAZEL_OUT_DIR/$METRICS_LIST_PATH" "$KUBE_ROOT/test/instrumentation/testdata/stable-metrics-list.yaml" + else + # Handle bazel < 0.25 + # https://github.com/bazelbuild/bazel/issues/6761 + echo "$BAZEL_OUT_DIR not found trying $BAZEL_GEN_DIR" + cp "$BAZEL_GEN_DIR/$METRICS_LIST_PATH" "$KUBE_ROOT/test/instrumentation/testdata/stable-metrics-list.yaml" + fi +} + + +function kube::verify::metrics { + BAZEL_OUT_DIR="$KUBE_ROOT/bazel-bin" + BAZEL_GEN_DIR="$KUBE_ROOT/bazel-genfiles" + METRICS_LIST_PATH="test/instrumentation/stable-metrics-list.yaml" + + if [ -z "${TEST_BINARY:-}" ]; then + + bazel build //test/instrumentation:list_stable_metrics --verbose_failures + + if [ -d "$BAZEL_OUT_DIR" ]; then + OUTPUT_FILE="$BAZEL_OUT_DIR/$METRICS_LIST_PATH" + else + # Handle bazel < 0.25 + # https://github.com/bazelbuild/bazel/issues/6761 + OUTPUT_FILE="$BAZEL_GEN_DIR/$METRICS_LIST_PATH" + fi + else + OUTPUT_FILE="$KUBE_ROOT/$METRICS_LIST_PATH" + fi + + if diff -u "$KUBE_ROOT/test/instrumentation/testdata/stable-metrics-list.yaml" "$OUTPUT_FILE"; then + echo "PASS metrics stability check" + else + echo 'Diffs in stable metrics detected, please run "test/instrumentation/update-stable-metrics.sh"' + exit 1 + fi +} diff --git a/test/instrumentation/update-stable-metrics.sh b/test/instrumentation/update-stable-metrics.sh index 4cd2c7e2226..82918a886b2 100755 --- a/test/instrumentation/update-stable-metrics.sh +++ b/test/instrumentation/update-stable-metrics.sh @@ -19,16 +19,7 @@ set -o nounset set -o pipefail KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/../.. -BAZEL_OUT_DIR="$KUBE_ROOT/bazel-bin" -BAZEL_GEN_DIR="$KUBE_ROOT/bazel-genfiles" -METRICS_LIST_PATH="test/instrumentation/stable-metrics-list.yaml" +export KUBE_ROOT +source "${KUBE_ROOT}/test/instrumentation/stability-utils.sh" -bazel build //test/instrumentation:list_stable_metrics -if [ -d "$BAZEL_OUT_DIR" ]; then - cp "$BAZEL_OUT_DIR/$METRICS_LIST_PATH" "$KUBE_ROOT/test/instrumentation/testdata/stable-metrics-list.yaml" -else - # Handle bazel < 0.25 - # https://github.com/bazelbuild/bazel/issues/6761 - echo "$BAZEL_OUT_DIR not found trying $BAZEL_GEN_DIR" - cp "$BAZEL_GEN_DIR/$METRICS_LIST_PATH" "$KUBE_ROOT/test/instrumentation/testdata/stable-metrics-list.yaml" -fi +kube::update::stablemetrics diff --git a/test/instrumentation/verify-stable-metrics.sh b/test/instrumentation/verify-stable-metrics.sh index d0e4cbc26d8..b8366707a18 100755 --- a/test/instrumentation/verify-stable-metrics.sh +++ b/test/instrumentation/verify-stable-metrics.sh @@ -18,28 +18,8 @@ set -o errexit set -o pipefail KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/../.. -BAZEL_OUT_DIR="$KUBE_ROOT/bazel-bin" -BAZEL_GEN_DIR="$KUBE_ROOT/bazel-genfiles" -METRICS_LIST_PATH="test/instrumentation/stable-metrics-list.yaml" +export KUBE_ROOT -# detect if run from bazel -if [ -z "${TEST_BINARY}" ]; then - bazel build //test/instrumentation:list_stable_metrics +source "${KUBE_ROOT}/test/instrumentation/stability-utils.sh" - if [ -d "$BAZEL_OUT_DIR" ]; then - OUTPUT_FILE="$BAZEL_OUT_DIR/$METRICS_LIST_PATH" - else - # Handle bazel < 0.25 - # https://github.com/bazelbuild/bazel/issues/6761 - OUTPUT_FILE="$BAZEL_GEN_DIR/$METRICS_LIST_PATH" - fi -else - OUTPUT_FILE="$KUBE_ROOT/$METRICS_LIST_PATH" -fi - -if diff -u "$KUBE_ROOT/test/instrumentation/testdata/stable-metrics-list.yaml" "$OUTPUT_FILE"; then - echo PASS - exit 0 -fi -echo 'Diffs in stable metrics detected, please run "test/instrumentation/update-stable-metrics.sh"' -exit 1 +kube::verify::metrics From db107b190c8c6f870103a03071bc27510b8d9f0f Mon Sep 17 00:00:00 2001 From: Han Kang Date: Thu, 4 Feb 2021 19:08:23 -0800 Subject: [PATCH 2/3] remove the rest of the bazel test wiring for metrics stability --- hack/update-generated-stable-metrics.sh | 5 +- hack/verify-generated-stable-metrics.sh | 55 +-------- test/instrumentation/BUILD | 32 ----- test/instrumentation/stability-utils.sh | 112 ++++++++++++------ test/instrumentation/update-stable-metrics.sh | 25 ---- test/instrumentation/verify-stable-metrics.sh | 25 ---- 6 files changed, 77 insertions(+), 177 deletions(-) delete mode 100755 test/instrumentation/update-stable-metrics.sh delete mode 100755 test/instrumentation/verify-stable-metrics.sh diff --git a/hack/update-generated-stable-metrics.sh b/hack/update-generated-stable-metrics.sh index 6997480d71c..b71bad69bfc 100755 --- a/hack/update-generated-stable-metrics.sh +++ b/hack/update-generated-stable-metrics.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# Copyright 2020 The Kubernetes Authors. +# Copyright 2021 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. @@ -23,8 +23,7 @@ set -o nounset set -o pipefail KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. -export KUBE_ROOT - source "${KUBE_ROOT}/test/instrumentation/stability-utils.sh" kube::update::stablemetrics + diff --git a/hack/verify-generated-stable-metrics.sh b/hack/verify-generated-stable-metrics.sh index 88203775cab..f10fd76f134 100755 --- a/hack/verify-generated-stable-metrics.sh +++ b/hack/verify-generated-stable-metrics.sh @@ -23,58 +23,7 @@ set -o nounset set -o pipefail KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. -source "${KUBE_ROOT}/hack/lib/init.sh" -source "${KUBE_ROOT}/hack/lib/util.sh" - -kube::golang::verify_go_version -extra_gopath=$(mktemp -d) -cd "${KUBE_ROOT}" -export KUBE_EXTRA_GOPATH=$extra_gopath -kube::golang::setup_env - -find_files() { - find . -not \( \ - \( \ - -wholename './output' \ - -o -wholename './_output' \ - -o -wholename './_gopath' \ - -o -wholename './release' \ - -o -wholename './target' \ - -o -wholename '*/third_party/*' \ - -o -wholename '*/vendor/*' \ - -o -wholename '*/hack/*' \ - -o -wholename '**/*_test.go' \ - \) -prune \ - \) \ - \( -wholename '**/*.go' \ - \) -} - -static_checked_files=$(find_files | grep -E ".*.go" | grep -v ".*_test.go") || true -pushd "${KUBE_EXTRA_GOPATH}" >/dev/null - GO111MODULE=on go get "gopkg.in/yaml.v2" -popd >/dev/null - -for i in "${static_checked_files[@]}" -do - temp_file=$(mktemp) - gopathfiles=$(find_files | grep -E 'test/instrumentation/.*.go' | grep -v "test/instrumentation/main.*go" | cut -c 3-) - # Deliberately allow word split here - # shellcheck disable=SC2086 - stabilitycheck=$(go run "test/instrumentation/main.go" $gopathfiles -- $i 1>$temp_file) - if ! $stabilitycheck; then - echo "!!! Metrics Stability static analysis has failed!" >&2 - echo "!!! Please run ./hack/update-generated-stable-metrics.sh to update the golden list." >&2 - exit 1 - fi - if diff -u "$KUBE_ROOT/test/instrumentation/testdata/stable-metrics-list.yaml" "$temp_file"; then - echo "PASS metrics stability verification" - else - echo "!!! Metrics Stability static analysis has failed!" >&2 - echo "!!! Please run ./hack/update-generated-stable-metrics.sh to update the golden list." >&2 - echo "!!! $temp_file" >&2 - exit 1 - fi -done +source "${KUBE_ROOT}/test/instrumentation/stability-utils.sh" +kube::validate::stablemetrics diff --git a/test/instrumentation/BUILD b/test/instrumentation/BUILD index d0fa3ff18ff..c2226c69807 100644 --- a/test/instrumentation/BUILD +++ b/test/instrumentation/BUILD @@ -37,38 +37,6 @@ filegroup( visibility = ["//visibility:public"], ) -genrule( - name = "list_stable_metrics", - srcs = [ - "//:all-srcs", - ], - outs = ["stable-metrics-list.yaml"], - cmd = "for loc in $(locations //:all-srcs); do echo $$loc; done | ./$(locations :instrumentation) - > $@", - message = "Listing all stable metrics.", - tools = [":instrumentation"], -) - -sh_library( - name = "stability_utils", - srcs = [ - "stability-utils.sh", - ], -) - -sh_test( - name = "verify_stable_metric", - srcs = [ - "verify-stable-metrics.sh", - ], - data = [ - "testdata/stable-metrics-list.yaml", - ":list_stable_metrics", - ], - deps = [ - ":stability_utils", - ], -) - go_test( name = "go_default_test", srcs = ["main_test.go"], diff --git a/test/instrumentation/stability-utils.sh b/test/instrumentation/stability-utils.sh index 89571ed8145..cdf419e2bc4 100644 --- a/test/instrumentation/stability-utils.sh +++ b/test/instrumentation/stability-utils.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash -# Copyright 2019 The Kubernetes Authors. + +# Copyright 2021 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. @@ -13,53 +14,86 @@ # See the License for the specific language governing permissions and # limitations under the License. - set -o errexit set -o nounset set -o pipefail +KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/../.. +source "${KUBE_ROOT}/hack/lib/init.sh" +source "${KUBE_ROOT}/hack/lib/util.sh" -function kube::update::stablemetrics { - BAZEL_OUT_DIR="$KUBE_ROOT/bazel-bin" - BAZEL_GEN_DIR="$KUBE_ROOT/bazel-genfiles" - METRICS_LIST_PATH="test/instrumentation/stable-metrics-list.yaml" - - bazel build //test/instrumentation:list_stable_metrics - if [ -d "$BAZEL_OUT_DIR" ]; then - cp "$BAZEL_OUT_DIR/$METRICS_LIST_PATH" "$KUBE_ROOT/test/instrumentation/testdata/stable-metrics-list.yaml" - else - # Handle bazel < 0.25 - # https://github.com/bazelbuild/bazel/issues/6761 - echo "$BAZEL_OUT_DIR not found trying $BAZEL_GEN_DIR" - cp "$BAZEL_GEN_DIR/$METRICS_LIST_PATH" "$KUBE_ROOT/test/instrumentation/testdata/stable-metrics-list.yaml" - fi +stability_check_setup() { + kube::golang::verify_go_version + kube::util::ensure-temp-dir + cd "${KUBE_ROOT}" + export KUBE_EXTRA_GOPATH=$KUBE_TEMP + kube::golang::setup_env + pushd "${KUBE_EXTRA_GOPATH}" >/dev/null + GO111MODULE=on go get "gopkg.in/yaml.v2" + popd >/dev/null } +find_files_to_check() { + find . -not \( \ + \( \ + -wholename './output' \ + -o -wholename './_output' \ + -o -wholename './_gopath' \ + -o -wholename './release' \ + -o -wholename './target' \ + -o -wholename '*/third_party/*' \ + -o -wholename '*/vendor/*' \ + -o -wholename '*/hack/*' \ + -o -wholename '**/*_test.go' \ + \) -prune \ + \) \ + \( -wholename '**/*.go' \ + \) +} -function kube::verify::metrics { - BAZEL_OUT_DIR="$KUBE_ROOT/bazel-bin" - BAZEL_GEN_DIR="$KUBE_ROOT/bazel-genfiles" - METRICS_LIST_PATH="test/instrumentation/stable-metrics-list.yaml" +red=$(tput setaf 1) +green=$(tput setaf 2) +reset=$(tput sgr0) - if [ -z "${TEST_BINARY:-}" ]; then - - bazel build //test/instrumentation:list_stable_metrics --verbose_failures - - if [ -d "$BAZEL_OUT_DIR" ]; then - OUTPUT_FILE="$BAZEL_OUT_DIR/$METRICS_LIST_PATH" - else - # Handle bazel < 0.25 - # https://github.com/bazelbuild/bazel/issues/6761 - OUTPUT_FILE="$BAZEL_GEN_DIR/$METRICS_LIST_PATH" +kube::validate::stablemetrics() { + stability_check_setup + static_checked_files=$(find_files_to_check | grep -E ".*.go" | grep -v ".*_test.go") || true + temp_file=$(mktemp) + gopathfiles=$(find_files_to_check | grep -E 'test/instrumentation/.*.go' | grep -v "test/instrumentation/main.*go" | cut -c 3-) + for i in "${static_checked_files[@]}" + do + # Deliberately allow word split here + # shellcheck disable=SC2086 + stabilitycheck=$(go run "test/instrumentation/main.go" $gopathfiles -- $i 1>$temp_file) + if $stabilitycheck; then + echo -e "${green}Diffing test/instrumentation/testdata/stable-metrics-list.yaml\n${reset}" + if diff -u "$KUBE_ROOT/test/instrumentation/testdata/stable-metrics-list.yaml" "$temp_file"; then + echo -e "${green}\nPASS metrics stability verification ${reset}" + return 0 + fi fi - else - OUTPUT_FILE="$KUBE_ROOT/$METRICS_LIST_PATH" - fi - - if diff -u "$KUBE_ROOT/test/instrumentation/testdata/stable-metrics-list.yaml" "$OUTPUT_FILE"; then - echo "PASS metrics stability check" - else - echo 'Diffs in stable metrics detected, please run "test/instrumentation/update-stable-metrics.sh"' + echo "${red}!!! Metrics Stability static analysis has failed!${reset}" >&2 + echo "${red}!!! Please run ./hack/update-generated-stable-metrics.sh to update the golden list.${reset}" >&2 exit 1 - fi + done } + +kube::update::stablemetrics() { + stability_check_setup + static_checked_files=$(find_files_to_check | grep -E ".*.go" | grep -v ".*_test.go") || true + temp_file=$(mktemp) + gopathfiles=$(find_files_to_check | grep -E 'test/instrumentation/.*.go' | grep -v "test/instrumentation/main.*go" | cut -c 3-) + for i in "${static_checked_files[@]}" + do + # Deliberately allow word split here + # shellcheck disable=SC2086 + stabilitycheck=$(go run "test/instrumentation/main.go" $gopathfiles -- $i 1>$temp_file) + if ! $stabilitycheck; then + echo "${red}!!! updating golden list of metrics has failed! ${reset}" >&2 + exit 1 + fi + mv -f "$temp_file" "${KUBE_ROOT}/test/instrumentation/testdata/stable-metrics-list.yaml" + echo "${green}Updated golden list of stable metrics.${reset}" + done +} + diff --git a/test/instrumentation/update-stable-metrics.sh b/test/instrumentation/update-stable-metrics.sh deleted file mode 100755 index 82918a886b2..00000000000 --- a/test/instrumentation/update-stable-metrics.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -# Copyright 2019 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 - -KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/../.. -export KUBE_ROOT -source "${KUBE_ROOT}/test/instrumentation/stability-utils.sh" - -kube::update::stablemetrics diff --git a/test/instrumentation/verify-stable-metrics.sh b/test/instrumentation/verify-stable-metrics.sh deleted file mode 100755 index b8366707a18..00000000000 --- a/test/instrumentation/verify-stable-metrics.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -# Copyright 2019 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 pipefail - -KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/../.. -export KUBE_ROOT - -source "${KUBE_ROOT}/test/instrumentation/stability-utils.sh" - -kube::verify::metrics From c3f550f3cb32cc580916ca3e87712ec07f27d91b Mon Sep 17 00:00:00 2001 From: Han Kang Date: Mon, 8 Feb 2021 11:44:47 -0800 Subject: [PATCH 3/3] fix arguments too long error --- test/instrumentation/main.go | 4 ++ test/instrumentation/stability-utils.sh | 53 ++++++++----------- .../testdata/stable-metrics-list.yaml | 1 - 3 files changed, 25 insertions(+), 33 deletions(-) diff --git a/test/instrumentation/main.go b/test/instrumentation/main.go index 0e5739a8426..961cbac95df 100644 --- a/test/instrumentation/main.go +++ b/test/instrumentation/main.go @@ -74,12 +74,16 @@ func main() { if len(errors) != 0 { os.Exit(1) } + if len(stableMetrics) == 0 { + os.Exit(0) + } sort.Sort(byFQName(stableMetrics)) data, err := yaml.Marshal(stableMetrics) if err != nil { fmt.Fprintf(os.Stderr, "%s\n", err) os.Exit(1) } + fmt.Print(string(data)) } diff --git a/test/instrumentation/stability-utils.sh b/test/instrumentation/stability-utils.sh index cdf419e2bc4..4a80f629b11 100644 --- a/test/instrumentation/stability-utils.sh +++ b/test/instrumentation/stability-utils.sh @@ -44,7 +44,7 @@ find_files_to_check() { -o -wholename '*/third_party/*' \ -o -wholename '*/vendor/*' \ -o -wholename '*/hack/*' \ - -o -wholename '**/*_test.go' \ + -o -wholename '*_test.go' \ \) -prune \ \) \ \( -wholename '**/*.go' \ @@ -57,43 +57,32 @@ reset=$(tput sgr0) kube::validate::stablemetrics() { stability_check_setup - static_checked_files=$(find_files_to_check | grep -E ".*.go" | grep -v ".*_test.go") || true temp_file=$(mktemp) - gopathfiles=$(find_files_to_check | grep -E 'test/instrumentation/.*.go' | grep -v "test/instrumentation/main.*go" | cut -c 3-) - for i in "${static_checked_files[@]}" - do - # Deliberately allow word split here - # shellcheck disable=SC2086 - stabilitycheck=$(go run "test/instrumentation/main.go" $gopathfiles -- $i 1>$temp_file) - if $stabilitycheck; then - echo -e "${green}Diffing test/instrumentation/testdata/stable-metrics-list.yaml\n${reset}" - if diff -u "$KUBE_ROOT/test/instrumentation/testdata/stable-metrics-list.yaml" "$temp_file"; then - echo -e "${green}\nPASS metrics stability verification ${reset}" - return 0 - fi + doValidate=$(find_files_to_check | grep -E ".*.go" | grep -v ".*_test.go" | sort | xargs -L 200 go run "test/instrumentation/main.go" "test/instrumentation/decode_metric.go" "test/instrumentation/find_stable_metric.go" "test/instrumentation/error.go" "test/instrumentation/metric.go" -- 1>"${temp_file}") + + if $doValidate; then + echo -e "${green}Diffing test/instrumentation/testdata/stable-metrics-list.yaml\n${reset}" + if diff -u "$KUBE_ROOT/test/instrumentation/testdata/stable-metrics-list.yaml" "$temp_file"; then + echo -e "${green}\nPASS metrics stability verification ${reset}" + return 0 fi - echo "${red}!!! Metrics Stability static analysis has failed!${reset}" >&2 - echo "${red}!!! Please run ./hack/update-generated-stable-metrics.sh to update the golden list.${reset}" >&2 - exit 1 - done + fi + + echo "${red}!!! Metrics Stability static analysis has failed!${reset}" >&2 + echo "${red}!!! Please run ./hack/update-generated-stable-metrics.sh to update the golden list.${reset}" >&2 + exit 1 } kube::update::stablemetrics() { stability_check_setup - static_checked_files=$(find_files_to_check | grep -E ".*.go" | grep -v ".*_test.go") || true temp_file=$(mktemp) - gopathfiles=$(find_files_to_check | grep -E 'test/instrumentation/.*.go' | grep -v "test/instrumentation/main.*go" | cut -c 3-) - for i in "${static_checked_files[@]}" - do - # Deliberately allow word split here - # shellcheck disable=SC2086 - stabilitycheck=$(go run "test/instrumentation/main.go" $gopathfiles -- $i 1>$temp_file) - if ! $stabilitycheck; then - echo "${red}!!! updating golden list of metrics has failed! ${reset}" >&2 - exit 1 - fi - mv -f "$temp_file" "${KUBE_ROOT}/test/instrumentation/testdata/stable-metrics-list.yaml" - echo "${green}Updated golden list of stable metrics.${reset}" - done + doCheckStability=$(find_files_to_check | grep -E ".*.go" | grep -v ".*_test.go" | sort | xargs -L 200 go run "test/instrumentation/main.go" "test/instrumentation/decode_metric.go" "test/instrumentation/find_stable_metric.go" "test/instrumentation/error.go" "test/instrumentation/metric.go" -- 1>"${temp_file}") + + if ! $doCheckStability; then + echo "${red}!!! updating golden list of metrics has failed! ${reset}" >&2 + exit 1 + fi + mv -f "$temp_file" "${KUBE_ROOT}/test/instrumentation/testdata/stable-metrics-list.yaml" + echo "${green}Updated golden list of stable metrics.${reset}" } diff --git a/test/instrumentation/testdata/stable-metrics-list.yaml b/test/instrumentation/testdata/stable-metrics-list.yaml index fe51488c706..e69de29bb2d 100644 --- a/test/instrumentation/testdata/stable-metrics-list.yaml +++ b/test/instrumentation/testdata/stable-metrics-list.yaml @@ -1 +0,0 @@ -[]