[libvirt-ci PATCH 2/2] containers: add a standard container for running go fmt

Daniel P. Berrangé posted 2 patches 5 years, 9 months ago
[libvirt-ci PATCH 2/2] containers: add a standard container for running go fmt
Posted by Daniel P. Berrangé 5 years, 9 months ago
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

Re: [libvirt-ci PATCH 2/2] containers: add a standard container for running go fmt
Posted by Andrea Bolognani 5 years, 9 months ago
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

Re: [libvirt-ci PATCH 2/2] containers: add a standard container for running go fmt
Posted by Daniel P. Berrangé 5 years, 9 months ago
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 :|

Re: [libvirt-ci PATCH 2/2] containers: add a standard container for running go fmt
Posted by Martin Kletzander 5 years, 9 months ago
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 :|
>
Re: [libvirt-ci PATCH 2/2] containers: add a standard container for running go fmt
Posted by Daniel P. Berrangé 5 years, 9 months ago
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 :|