[libvirt-ci PATCH 0/2] add a 'go fmt' container for code style checks

This common container will be used across all our Go based projects Daniel P. Berrangé (2): gitlab: rename job for building check-dco container containers: add a standard container for running go fmt .gitlab-ci.yml | 7 ++++++- containers/go-fmt/Dockerfile | 9 +++++++++ containers/go-fmt/README.rst | 20 ++++++++++++++++++++ containers/go-fmt/go-fmt.sh | 24 ++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 containers/go-fmt/Dockerfile create mode 100644 containers/go-fmt/README.rst create mode 100755 containers/go-fmt/go-fmt.sh -- 2.25.4

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6de69d6..a1ac31a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -17,7 +17,7 @@ stages: after_script: - docker logout -build-dco: +check-dco-container: <<: *build_container_definition variables: NAME: check-dco -- 2.25.4

On Fri, 2020-05-01 at 11:52 +0100, Daniel P. Berrangé wrote:
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Reviewed-by: Andrea Bolognani <abologna@redhat.com> -- Andrea Bolognani / Red Hat / Virtualization

The "go fmt" code style checking tool is something we wish to run on all Go code, so it is useful to have a common container that can be used by all relevant projects. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- .gitlab-ci.yml | 5 +++++ containers/go-fmt/Dockerfile | 9 +++++++++ containers/go-fmt/README.rst | 20 ++++++++++++++++++++ containers/go-fmt/go-fmt.sh | 24 ++++++++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 containers/go-fmt/Dockerfile create mode 100644 containers/go-fmt/README.rst create mode 100755 containers/go-fmt/go-fmt.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a1ac31a..080c8d1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -22,6 +22,11 @@ check-dco-container: variables: NAME: check-dco +go-fmt-container: + <<: *build_container_definition + variables: + NAME: go-fmt + # Check that all commits are signed-off for the DCO. Skip # on master branch and -maint branches, since we only need # to test developer's personal branches. diff --git a/containers/go-fmt/Dockerfile b/containers/go-fmt/Dockerfile new file mode 100644 index 0000000..9079fea --- /dev/null +++ b/containers/go-fmt/Dockerfile @@ -0,0 +1,9 @@ +FROM golang:1.14 + +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + apt-get install --no-install-recommends -y \ + diffstat && \ + apt-get autoclean -y + +COPY go-fmt.sh /go-fmt diff --git a/containers/go-fmt/README.rst b/containers/go-fmt/README.rst new file mode 100644 index 0000000..0af6998 --- /dev/null +++ b/containers/go-fmt/README.rst @@ -0,0 +1,20 @@ +============================================= +Container for running go fmt code style check +============================================= + +This container provides a simple way to invoke ``go fmt`` to validate code +style across a Golang codebase. It should be integrated into a CI by adding +the following snippet to ``.gitlab-ci.yml`` + +:: + + go-fmt: + stage: prebuild + image: registry.gitlab.com/libvirt/libvirt-ci/go-fmt:master + script: + - /go-fmt + artifacts: + paths: + - go-fmt.patch + expire_in: 1 week + when: on_failure diff --git a/containers/go-fmt/go-fmt.sh b/containers/go-fmt/go-fmt.sh new file mode 100755 index 0000000..9fda79d --- /dev/null +++ b/containers/go-fmt/go-fmt.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +GOFMT=$(go env GOROOT)/bin/gofmt + +find -name '*.go' | xargs $GOFMT -d -e > go-fmt.patch + +if test -n go-fmt.patch +then + echo + echo "❌ ERROR: some files failed go fmt code style check" + echo + diffstat go-fmt.patch + echo + echo "See the go-fmt patch artifact for full details of mistakes." + echo + echo "For guidance on how to configure Emacs or Vim to automatically" + echo "run go fmt when saving files read" + echo + echo " https://blog.golang.org/gofmt" + echo + exit 1 +fi + +echo "✔ OK: all files passed go fmt code style check" -- 2.25.4

On Fri, May 01, 2020 at 11:52:32AM +0100, Daniel P. Berrangé wrote:
The "go fmt" code style checking tool is something we wish to run on all Go code, so it is useful to have a common container that can be used by all relevant projects.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- .gitlab-ci.yml | 5 +++++ containers/go-fmt/Dockerfile | 9 +++++++++ containers/go-fmt/README.rst | 20 ++++++++++++++++++++ containers/go-fmt/go-fmt.sh | 24 ++++++++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 containers/go-fmt/Dockerfile create mode 100644 containers/go-fmt/README.rst create mode 100755 containers/go-fmt/go-fmt.sh
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a1ac31a..080c8d1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -22,6 +22,11 @@ check-dco-container: variables: NAME: check-dco
+go-fmt-container: + <<: *build_container_definition + variables: + NAME: go-fmt + # Check that all commits are signed-off for the DCO. Skip # on master branch and -maint branches, since we only need # to test developer's personal branches. diff --git a/containers/go-fmt/Dockerfile b/containers/go-fmt/Dockerfile new file mode 100644 index 0000000..9079fea --- /dev/null +++ b/containers/go-fmt/Dockerfile @@ -0,0 +1,9 @@ +FROM golang:1.14 + +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + apt-get install --no-install-recommends -y \ + diffstat && \ + apt-get autoclean -y + +COPY go-fmt.sh /go-fmt diff --git a/containers/go-fmt/README.rst b/containers/go-fmt/README.rst new file mode 100644 index 0000000..0af6998 --- /dev/null +++ b/containers/go-fmt/README.rst @@ -0,0 +1,20 @@ +============================================= +Container for running go fmt code style check +============================================= + +This container provides a simple way to invoke ``go fmt`` to validate code +style across a Golang codebase. It should be integrated into a CI by adding +the following snippet to ``.gitlab-ci.yml`` + +:: + + go-fmt: + stage: prebuild + image: registry.gitlab.com/libvirt/libvirt-ci/go-fmt:master + script: + - /go-fmt + artifacts: + paths: + - go-fmt.patch + expire_in: 1 week + when: on_failure diff --git a/containers/go-fmt/go-fmt.sh b/containers/go-fmt/go-fmt.sh new file mode 100755 index 0000000..9fda79d --- /dev/null +++ b/containers/go-fmt/go-fmt.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +GOFMT=$(go env GOROOT)/bin/gofmt + +find -name '*.go' | xargs $GOFMT -d -e > go-fmt.patch + +if test -n go-fmt.patch
This was supposed to be "-z" not "-n" but I forgot to commit a chunk
+then + echo + echo "❌ ERROR: some files failed go fmt code style check" + echo + diffstat go-fmt.patch + echo + echo "See the go-fmt patch artifact for full details of mistakes." + echo + echo "For guidance on how to configure Emacs or Vim to automatically" + echo "run go fmt when saving files read" + echo + echo " https://blog.golang.org/gofmt" + echo + exit 1 +fi + +echo "✔ OK: all files passed go fmt code style check" -- 2.25.4
Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|

On Fri, May 01, 2020 at 12:03:02PM +0100, Daniel P. Berrangé wrote:
On Fri, May 01, 2020 at 11:52:32AM +0100, Daniel P. Berrangé wrote:
The "go fmt" code style checking tool is something we wish to run on all Go code, so it is useful to have a common container that can be used by all relevant projects.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- .gitlab-ci.yml | 5 +++++ containers/go-fmt/Dockerfile | 9 +++++++++ containers/go-fmt/README.rst | 20 ++++++++++++++++++++ containers/go-fmt/go-fmt.sh | 24 ++++++++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 containers/go-fmt/Dockerfile create mode 100644 containers/go-fmt/README.rst create mode 100755 containers/go-fmt/go-fmt.sh
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a1ac31a..080c8d1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -22,6 +22,11 @@ check-dco-container: variables: NAME: check-dco
+go-fmt-container: + <<: *build_container_definition + variables: + NAME: go-fmt + # Check that all commits are signed-off for the DCO. Skip # on master branch and -maint branches, since we only need # to test developer's personal branches. diff --git a/containers/go-fmt/Dockerfile b/containers/go-fmt/Dockerfile new file mode 100644 index 0000000..9079fea --- /dev/null +++ b/containers/go-fmt/Dockerfile @@ -0,0 +1,9 @@ +FROM golang:1.14 + +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + apt-get install --no-install-recommends -y \ + diffstat && \ + apt-get autoclean -y + +COPY go-fmt.sh /go-fmt diff --git a/containers/go-fmt/README.rst b/containers/go-fmt/README.rst new file mode 100644 index 0000000..0af6998 --- /dev/null +++ b/containers/go-fmt/README.rst @@ -0,0 +1,20 @@ +============================================= +Container for running go fmt code style check +============================================= + +This container provides a simple way to invoke ``go fmt`` to validate code +style across a Golang codebase. It should be integrated into a CI by adding +the following snippet to ``.gitlab-ci.yml`` + +:: + + go-fmt: + stage: prebuild + image: registry.gitlab.com/libvirt/libvirt-ci/go-fmt:master + script: + - /go-fmt + artifacts: + paths: + - go-fmt.patch + expire_in: 1 week + when: on_failure diff --git a/containers/go-fmt/go-fmt.sh b/containers/go-fmt/go-fmt.sh new file mode 100755 index 0000000..9fda79d --- /dev/null +++ b/containers/go-fmt/go-fmt.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +GOFMT=$(go env GOROOT)/bin/gofmt + +find -name '*.go' | xargs $GOFMT -d -e > go-fmt.patch + +if test -n go-fmt.patch
This was supposed to be "-z" not "-n" but I forgot to commit a chunk
You mean `-s`, right? Because `-z` and `-n` operate on strings, not filenames.
+then + echo + echo "❌ ERROR: some files failed go fmt code style check" + echo + diffstat go-fmt.patch + echo + echo "See the go-fmt patch artifact for full details of mistakes." + echo + echo "For guidance on how to configure Emacs or Vim to automatically" + echo "run go fmt when saving files read" + echo + echo " https://blog.golang.org/gofmt" + echo + exit 1 +fi + +echo "✔ OK: all files passed go fmt code style check" -- 2.25.4
Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|

On Mon, May 04, 2020 at 09:30:53AM +0200, Martin Kletzander wrote:
On Fri, May 01, 2020 at 12:03:02PM +0100, Daniel P. Berrangé wrote:
On Fri, May 01, 2020 at 11:52:32AM +0100, Daniel P. Berrangé wrote:
The "go fmt" code style checking tool is something we wish to run on all Go code, so it is useful to have a common container that can be used by all relevant projects.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- .gitlab-ci.yml | 5 +++++ containers/go-fmt/Dockerfile | 9 +++++++++ containers/go-fmt/README.rst | 20 ++++++++++++++++++++ containers/go-fmt/go-fmt.sh | 24 ++++++++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 containers/go-fmt/Dockerfile create mode 100644 containers/go-fmt/README.rst create mode 100755 containers/go-fmt/go-fmt.sh
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a1ac31a..080c8d1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -22,6 +22,11 @@ check-dco-container: variables: NAME: check-dco
+go-fmt-container: + <<: *build_container_definition + variables: + NAME: go-fmt + # Check that all commits are signed-off for the DCO. Skip # on master branch and -maint branches, since we only need # to test developer's personal branches. diff --git a/containers/go-fmt/Dockerfile b/containers/go-fmt/Dockerfile new file mode 100644 index 0000000..9079fea --- /dev/null +++ b/containers/go-fmt/Dockerfile @@ -0,0 +1,9 @@ +FROM golang:1.14 + +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + apt-get install --no-install-recommends -y \ + diffstat && \ + apt-get autoclean -y + +COPY go-fmt.sh /go-fmt diff --git a/containers/go-fmt/README.rst b/containers/go-fmt/README.rst new file mode 100644 index 0000000..0af6998 --- /dev/null +++ b/containers/go-fmt/README.rst @@ -0,0 +1,20 @@ +============================================= +Container for running go fmt code style check +============================================= + +This container provides a simple way to invoke ``go fmt`` to validate code +style across a Golang codebase. It should be integrated into a CI by adding +the following snippet to ``.gitlab-ci.yml`` + +:: + + go-fmt: + stage: prebuild + image: registry.gitlab.com/libvirt/libvirt-ci/go-fmt:master + script: + - /go-fmt + artifacts: + paths: + - go-fmt.patch + expire_in: 1 week + when: on_failure diff --git a/containers/go-fmt/go-fmt.sh b/containers/go-fmt/go-fmt.sh new file mode 100755 index 0000000..9fda79d --- /dev/null +++ b/containers/go-fmt/go-fmt.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +GOFMT=$(go env GOROOT)/bin/gofmt + +find -name '*.go' | xargs $GOFMT -d -e > go-fmt.patch + +if test -n go-fmt.patch
This was supposed to be "-z" not "-n" but I forgot to commit a chunk
You mean `-s`, right? Because `-z` and `-n` operate on strings, not filenames.
Sigh. Yes. Non-zero file size is what it is supposed to be checking.
+then + echo + echo "❌ ERROR: some files failed go fmt code style check" + echo + diffstat go-fmt.patch + echo + echo "See the go-fmt patch artifact for full details of mistakes." + echo + echo "For guidance on how to configure Emacs or Vim to automatically" + echo "run go fmt when saving files read" + echo + echo " https://blog.golang.org/gofmt" + echo + exit 1 +fi + +echo "✔ OK: all files passed go fmt code style check" -- 2.25.4
Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|

On Fri, 2020-05-01 at 11:52 +0100, Daniel P. Berrangé wrote:
+++ b/containers/go-fmt/go-fmt.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +GOFMT=$(go env GOROOT)/bin/gofmt + +find -name '*.go' | xargs $GOFMT -d -e > go-fmt.patch + +if test -n go-fmt.patch
As pointed out by Martin, this should be "-s". With that fixed, Reviewed-by: Andrea Bolognani <abologna@redhat.com> -- Andrea Bolognani / Red Hat / Virtualization
participants (3)
-
Andrea Bolognani
-
Daniel P. Berrangé
-
Martin Kletzander