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@xxxxxxxxxx> > --- > .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 :|