diff --git a/hack/update-conformance-yaml.sh b/hack/update-conformance-yaml.sh new file mode 100755 index 00000000000..fc66e411f24 --- /dev/null +++ b/hack/update-conformance-yaml.sh @@ -0,0 +1,27 @@ +#!/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. + +set -o errexit +set -o nounset +set -o pipefail + +KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. +cd "${KUBE_ROOT}" + +# generate json spec -> yaml +test/conformance/gen-conformance-yaml.sh +# replace checked-in yaml +cp _output/conformance.yaml test/conformance/testdata/conformance.yaml diff --git a/hack/verify-conformance-yaml.sh b/hack/verify-conformance-yaml.sh new file mode 100755 index 00000000000..0795d208e3f --- /dev/null +++ b/hack/verify-conformance-yaml.sh @@ -0,0 +1,33 @@ +#!/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. + +set -o errexit +set -o nounset +set -o pipefail + +KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. +cd "${KUBE_ROOT}" + +# generate json spec -> yaml +test/conformance/gen-conformance-yaml.sh + +# diff generated and checked-in +if diff -u test/conformance/testdata/conformance.yaml _output/conformance.yaml; then + echo PASS + exit 0 +fi +echo 'See instructions in test/conformance/README.md' +exit 1 diff --git a/test/conformance/README.md b/test/conformance/README.md index 7a5a82904f8..221bab4fa44 100644 --- a/test/conformance/README.md +++ b/test/conformance/README.md @@ -5,11 +5,6 @@ If you add or remove a conformance test, this test will fail and you will need to update the golden list of tests stored in `testdata/`. Changes to that file require review by sig-architecture. -To update the list, run - -```console -bazel build //test/conformance:list_conformance_tests -cp bazel-bin/test/conformance/conformance.yaml test/conformance/testdata -``` +To update the list, run `hack/update-conformance-yaml.sh` Add the changed file to your PR, then send for review. diff --git a/test/conformance/gen-conformance-yaml.sh b/test/conformance/gen-conformance-yaml.sh new file mode 100755 index 00000000000..4f25087670e --- /dev/null +++ b/test/conformance/gen-conformance-yaml.sh @@ -0,0 +1,28 @@ +#!/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. + +set -o errexit +set -o nounset +set -o pipefail + +# This will canonicalize the path +KUBE_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")"/../.. && pwd -P) +cd "${KUBE_ROOT}" + +# test sources -> json spec _output/specsummaries.json +test/conformance/gen-specsummaries.sh +# specsummaries.json -> conformance.yaml +test/conformance/spec-to-yaml.sh diff --git a/test/conformance/gen-specsummaries.sh b/test/conformance/gen-specsummaries.sh new file mode 100755 index 00000000000..16d9a1280e2 --- /dev/null +++ b/test/conformance/gen-specsummaries.sh @@ -0,0 +1,29 @@ +#!/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. + +set -o errexit +set -o nounset +set -o pipefail + +# This will canonicalize the path +KUBE_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")"/../.. && pwd -P) +cd "${KUBE_ROOT}" + +# build ginkgo and e2e.test +make WHAT='vendor/github.com/onsi/ginkgo/ginkgo test/e2e/e2e.test' + +# dump spec +./_output/bin/ginkgo --dryRun=true --focus='[Conformance]' ./_output/bin/e2e.test -- --spec-dump "${KUBE_ROOT}/_output/specsummaries.json" > /dev/null diff --git a/test/conformance/spec-to-yaml.sh b/test/conformance/spec-to-yaml.sh new file mode 100755 index 00000000000..14a39640d1c --- /dev/null +++ b/test/conformance/spec-to-yaml.sh @@ -0,0 +1,26 @@ +#!/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. + +set -o errexit +set -o nounset +set -o pipefail + +# This will canonicalize the path +KUBE_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")"/../.. && pwd -P) +cd "${KUBE_ROOT}" + +# convert dumped spec (see dump-spec.sh) to conformance.yaml +go run ./test/conformance/walk.go --source="${KUBE_ROOT}" ./_output/specsummaries.json > ./_output/conformance.yaml \ No newline at end of file