From 85f7c582dfb3af4810462c8681031078ee8acb45 Mon Sep 17 00:00:00 2001 From: Vinit Badrike Date: Mon, 10 Apr 2023 19:34:45 -0700 Subject: [PATCH 1/3] Adds gofmt verification --- .github/workflows/vet-code.yml | 30 ++++++++++++++++++ hack/update-gofmt.sh | 40 ++++++++++++++++++++++++ hack/verify-gofmt.sh | 57 ++++++++++++++++++++++++++++++++++ 3 files changed, 127 insertions(+) create mode 100644 .github/workflows/vet-code.yml create mode 100644 hack/update-gofmt.sh create mode 100644 hack/verify-gofmt.sh diff --git a/.github/workflows/vet-code.yml b/.github/workflows/vet-code.yml new file mode 100644 index 000000000..d3e464a79 --- /dev/null +++ b/.github/workflows/vet-code.yml @@ -0,0 +1,30 @@ +name: Code format verify + +on: + push: + branches: + - master + pull_request: + branches: + — master + +jobs: + gofmt: + name: Run gofmt verify + runs-on: ubuntu-latest + steps: + - name: Setup Go + uses: actions/setup-go@v2 + with: + go-version: '1.19' + stable: 'false' + + - name: Install dependencies + run: | + go version + go install golang.org/x/lint/golint@latest + - name: checkout + uses: actions/checkout@v2 + + - name: run gofmt tests + run: ./hack/verify-gofmt.sh \ No newline at end of file diff --git a/hack/update-gofmt.sh b/hack/update-gofmt.sh new file mode 100644 index 000000000..176472d24 --- /dev/null +++ b/hack/update-gofmt.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env 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. + +# GoFmt apparently is changing @ head... + +set -o errexit +set -o nounset +set -o pipefail + +ROOT=$(dirname "${BASH_SOURCE[0]}")/.. + +cd "${ROOT}" + +function git_find() { + # Similar to find but faster and easier to understand. We want to include + # modified and untracked files because this might be running against code + # which is not tracked by git yet. + git ls-files -cmo --exclude-standard \ + ':!:vendor/*' `# catches vendor/...` \ + ':!:*/vendor/*' `# catches any subdir/vendor/...` \ + ':!:third_party/*' `# catches third_party/...` \ + ':!:*/third_party/*' `# catches third_party/...` \ + ':(glob)**/*.go' \ + "$@" +} + +git_find -z | xargs -0 gofmt -s -w \ No newline at end of file diff --git a/hack/verify-gofmt.sh b/hack/verify-gofmt.sh new file mode 100644 index 000000000..9bad68bf1 --- /dev/null +++ b/hack/verify-gofmt.sh @@ -0,0 +1,57 @@ +#!/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 checks whether the source code needs to be formatted or not by +# `gofmt`. Run `hack/update-gofmt.sh` to actually format sources. +# +# Note: gofmt output can change between go versions. +# +# Usage: `hack/verify-gofmt.sh`. + +set -o errexit +set -o nounset +set -o pipefail + +ROOT=$(dirname "${BASH_SOURCE[0]}")/.. + +cd "${ROOT}" + +find_files() { + find . -not \( \ + \( \ + -wholename './output' \ + -o -wholename './.git' \ + -o -wholename './_output' \ + -o -wholename './_gopath' \ + -o -wholename './release' \ + -o -wholename './target' \ + -o -wholename '*/third_party/*' \ + -o -wholename '*/vendor/*' \ + \) -prune \ + \) -name '*.go' +} + +# gofmt exits with non-zero exit code if it finds a problem unrelated to +# formatting (e.g., a file does not parse correctly). Without "|| true" this +# would have led to no useful error message from gofmt, because the script would +# have failed before getting to the "echo" in the block below. +diff=$(find_files | xargs gofmt -d -s 2>&1) || true +if [[ -n "${diff}" ]]; then + echo "${diff}" >&2 + echo >&2 + echo "Run ./hack/update-gofmt.sh" >&2 + exit 1 +fi \ No newline at end of file From dee4f488b1317a0e1eb2be39411bcaf0b1e7618a Mon Sep 17 00:00:00 2001 From: Vinit Badrike Date: Wed, 12 Apr 2023 22:12:20 -0700 Subject: [PATCH 2/3] Updates as per reviewer comments --- hack/README.md | 3 ++- hack/update-gofmt.sh | 2 +- hack/verify-gofmt.sh | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) mode change 100644 => 100755 hack/verify-gofmt.sh diff --git a/hack/README.md b/hack/README.md index eaf01ea37..03ffb0370 100644 --- a/hack/README.md +++ b/hack/README.md @@ -149,7 +149,8 @@ pushing directly to a local registry and configuring kind to use this reg, so do isnt required. - Or a `tilt` recipe which hot reloads all kpng on code changes. - +## Code formating +**We should run `hack/verify-gofmt.sh` before submitting a PR it checks whether the source code needs to be formatted or not and if anything fails run `hack/update-gofmt.sh` to actually format sources**. diff --git a/hack/update-gofmt.sh b/hack/update-gofmt.sh index 176472d24..9f366ed41 100644 --- a/hack/update-gofmt.sh +++ b/hack/update-gofmt.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# Copyright 2014 The Kubernetes Authors. +# Copyright 2023 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. diff --git a/hack/verify-gofmt.sh b/hack/verify-gofmt.sh old mode 100644 new mode 100755 index 9bad68bf1..e00fb3c40 --- a/hack/verify-gofmt.sh +++ b/hack/verify-gofmt.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# Copyright 2021 The Kubernetes Authors. +# Copyright 2023 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. From 08a3d754ac9ba59b4f637c92b86869caa1efc0c7 Mon Sep 17 00:00:00 2001 From: Vinit Badrike Date: Tue, 18 Apr 2023 17:59:58 -0700 Subject: [PATCH 3/3] Updates as per reviewers comments --- hack/verify-gofmt.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hack/verify-gofmt.sh b/hack/verify-gofmt.sh index e00fb3c40..8811de044 100755 --- a/hack/verify-gofmt.sh +++ b/hack/verify-gofmt.sh @@ -52,6 +52,6 @@ diff=$(find_files | xargs gofmt -d -s 2>&1) || true if [[ -n "${diff}" ]]; then echo "${diff}" >&2 echo >&2 - echo "Run ./hack/update-gofmt.sh" >&2 + echo "Lint issues found, run ./hack/update-gofmt.sh to fix." >&2 exit 1 fi \ No newline at end of file