From dff45023e2dfd2232c268b370df39c7577b92c98 Mon Sep 17 00:00:00 2001 From: Robert Kaussow Date: Mon, 25 Apr 2022 12:55:25 +0200 Subject: [PATCH] ci: refactor build tools and ci setup (#11) --- .dockerignore | 2 + .drone.jsonnet | 29 ++++---------- .drone.yml | 26 +++++------- .gitignore | 1 + .golangci.yml | 31 +++++++++++++++ Makefile | 96 +++++++++++++++++++++++++++++++++++++++++++++ go.mod | 8 ---- go.sum | 22 ----------- template/helpers.go | 6 +-- tools.go | 8 ---- 10 files changed, 150 insertions(+), 79 deletions(-) create mode 100644 .dockerignore create mode 100644 .golangci.yml create mode 100644 Makefile delete mode 100644 tools.go diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..92d6c40 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +* +!dist/ diff --git a/.drone.jsonnet b/.drone.jsonnet index 2b8c056..4c0ab4f 100644 --- a/.drone.jsonnet +++ b/.drone.jsonnet @@ -7,14 +7,14 @@ local PipelineTest(deps=[],) = { }, steps: [ { - name: 'staticcheck', + name: 'deps', image: 'golang:1.18', commands: [ - 'go run honnef.co/go/tools/cmd/staticcheck ./...', + 'make deps', ], volumes: [ { - name: 'gopath', + name: 'godeps', path: '/go', }, ], @@ -23,24 +23,11 @@ local PipelineTest(deps=[],) = { name: 'lint', image: 'golang:1.18', commands: [ - 'go run golang.org/x/lint/golint -set_exit_status ./...', + 'make lint', ], volumes: [ { - name: 'gopath', - path: '/go', - }, - ], - }, - { - name: 'vet', - image: 'golang:1.18', - commands: [ - 'go vet ./...', - ], - volumes: [ - { - name: 'gopath', + name: 'godeps', path: '/go', }, ], @@ -49,11 +36,11 @@ local PipelineTest(deps=[],) = { name: 'test', image: 'golang:1.18', commands: [ - 'go test -cover ./...', + 'make test', ], volumes: [ { - name: 'gopath', + name: 'godeps', path: '/go', }, ], @@ -61,7 +48,7 @@ local PipelineTest(deps=[],) = { ], volumes: [ { - name: 'gopath', + name: 'godeps', temp: {}, }, ], diff --git a/.drone.yml b/.drone.yml index 4c47665..3fed305 100644 --- a/.drone.yml +++ b/.drone.yml @@ -7,40 +7,32 @@ platform: arch: amd64 steps: - - name: staticcheck + - name: deps image: golang:1.18 commands: - - go run honnef.co/go/tools/cmd/staticcheck ./... + - make deps volumes: - - name: gopath + - name: godeps path: /go - name: lint image: golang:1.18 commands: - - go run golang.org/x/lint/golint -set_exit_status ./... + - make lint volumes: - - name: gopath - path: /go - - - name: vet - image: golang:1.18 - commands: - - go vet ./... - volumes: - - name: gopath + - name: godeps path: /go - name: test image: golang:1.18 commands: - - go test -cover ./... + - make test volumes: - - name: gopath + - name: godeps path: /go volumes: - - name: gopath + - name: godeps temp: {} trigger: @@ -165,6 +157,6 @@ depends_on: --- kind: signature -hmac: 04aac91eaaeda8f096e860f3878ca029473d3403d082b2727b0b9d41252ee0c0 +hmac: b3a76d417349cf063ff7e732e1094818aa0c09511b1808b355ba09553a5e4360 ... diff --git a/.gitignore b/.gitignore index 3610817..eb841b5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +/dist/ /release/ /drone-template-lib* diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..7bb18ea --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,31 @@ +linters: + enable: + - gosimple + - deadcode + - typecheck + - govet + - errcheck + - staticcheck + - unused + - structcheck + - varcheck + - dupl + - gofmt + - misspell + - gocritic + - bidichk + - ineffassign + - revive + - gofumpt + - depguard + enable-all: false + disable-all: true + fast: false + +run: + timeout: 3m + +linters-settings: + gofumpt: + extra-rules: true + lang-version: "1.18" diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..cd19d18 --- /dev/null +++ b/Makefile @@ -0,0 +1,96 @@ +# renovate: datasource=github-releases depName=mvdan/gofumpt +GOFUMPT_PACKAGE_VERSION := v0.3.1 +# renovate: datasource=github-releases depName=golangci/golangci-lint +GOLANGCI_LINT_PACKAGE_VERSION := v1.45.2 + +EXECUTABLE := drone-template-lib + +DIST := dist +DIST_DIRS := $(DIST) +IMPORT := github.com/thegeeklab/$(EXECUTABLE) + +GO ?= go +CWD ?= $(shell pwd) +PACKAGES ?= $(shell go list ./...) +SOURCES ?= $(shell find . -name "*.go" -type f) + +GOFUMPT_PACKAGE ?= mvdan.cc/gofumpt@$(GOFUMPT_PACKAGE_VERSION) +GOLANGCI_LINT_PACKAGE ?= github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCI_LINT_PACKAGE_VERSION) +XGO_PACKAGE ?= src.techknowlogick.com/xgo@latest + +GENERATE ?= +XGO_VERSION := go-1.18.x +XGO_TARGETS ?= linux/amd64,linux/arm-6,linux/arm-7,linux/arm64 + +TAGS ?= netgo + +ifndef VERSION + ifneq ($(DRONE_TAG),) + VERSION ?= $(subst v,,$(DRONE_TAG)) + else + VERSION ?= $(shell git rev-parse --short HEAD) + endif +endif + +ifndef DATE + DATE := $(shell date -u +"%Y-%m-%dT%H:%M:%S%z") +endif + +LDFLAGS += -s -w -X "main.BuildVersion=$(VERSION)" -X "main.BuildDate=$(DATE)" + +.PHONY: all +all: clean build + +.PHONY: clean +clean: + $(GO) clean -i ./... + rm -rf $(DIST_DIRS) + +.PHONY: fmt +fmt: + $(GO) run $(GOFUMPT_PACKAGE) -extra -w $(SOURCES) + +.PHONY: golangci-lint +golangci-lint: + $(GO) run $(GOLANGCI_LINT_PACKAGE) run + +.PHONY: lint +lint: golangci-lint + +.PHONY: generate +generate: + $(GO) generate $(GENERATE) + +.PHONY: test +test: + $(GO) test -v -coverprofile coverage.out $(PACKAGES) + +.PHONY: build +build: $(DIST)/$(EXECUTABLE) + +$(DIST)/$(EXECUTABLE): $(SOURCES) + $(GO) build -v -tags '$(TAGS)' -ldflags '-extldflags "-static" $(LDFLAGS)' -o $@ ./cmd/$(EXECUTABLE) + +$(DIST_DIRS): + mkdir -p $(DIST_DIRS) + +.PHONY: xgo +xgo: | $(DIST_DIRS) + $(GO) run $(XGO_PACKAGE) -go $(XGO_VERSION) -v -ldflags '-extldflags "-static" $(LDFLAGS)' -tags '$(TAGS)' -targets '$(XGO_TARGETS)' -out $(EXECUTABLE) --pkg cmd/$(EXECUTABLE) . + cp /build/* $(CWD)/$(DIST) + ls -l $(CWD)/$(DIST) + +.PHONY: checksum +checksum: + cd $(DIST); $(foreach file,$(wildcard $(DIST)/$(EXECUTABLE)-*),sha256sum $(notdir $(file)) > $(notdir $(file)).sha256;) + ls -l $(CWD)/$(DIST) + +.PHONY: release +release: xgo checksum + +.PHONY: deps +deps: + $(GO) mod download + $(GO) install $(GOFUMPT_PACKAGE) + $(GO) install $(GOLANGCI_LINT_PACKAGE) + $(GO) install $(XGO_PACKAGE) diff --git a/go.mod b/go.mod index fba7a11..4e335a4 100644 --- a/go.mod +++ b/go.mod @@ -5,12 +5,9 @@ go 1.18 require ( github.com/Masterminds/sprig/v3 v3.2.2 github.com/flowchartsman/handlebars/v3 v3.0.1 - golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 - honnef.co/go/tools v0.3.0 ) require ( - github.com/BurntSushi/toml v1.0.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.1.1 // indirect github.com/google/uuid v1.3.0 // indirect @@ -21,9 +18,4 @@ require ( github.com/shopspring/decimal v1.3.1 // indirect github.com/spf13/cast v1.4.1 // indirect golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064 // indirect - golang.org/x/exp/typeparams v0.0.0-20220328175248-053ad81199eb // indirect - golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect - golang.org/x/sys v0.0.0-20220330033206-e17cdc41300f // indirect - golang.org/x/tools v0.1.11-0.20220316014157-77aa08bb151a // indirect - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect ) diff --git a/go.sum b/go.sum index d8c8a18..76cce13 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU= -github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= @@ -39,35 +37,15 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064 h1:S25/rfnfsMVgORT4/J61MJ7rdyseOZOyvLIrZEZ7s6s= golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/exp/typeparams v0.0.0-20220328175248-053ad81199eb h1:fP6C8Xutcp5AlakmT/SkQot0pMicROAsEX7OfNPuG10= -golang.org/x/exp/typeparams v0.0.0-20220328175248-053ad81199eb/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20220330033206-e17cdc41300f h1:rlezHXNlxYWvBCzNses9Dlc7nGFaNMJeqLolcmQSSZY= -golang.org/x/sys v0.0.0-20220330033206-e17cdc41300f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.1.11-0.20220316014157-77aa08bb151a h1:ofrrl6c6NG5/IOSx/R1cyiQxxjqlur0h/TvbUhkH0II= -golang.org/x/tools v0.1.11-0.20220316014157-77aa08bb151a/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -honnef.co/go/tools v0.3.0 h1:2LdYUZ7CIxnYgskbUZfY7FPggmqnh6shBqfWa8Tn3XU= -honnef.co/go/tools v0.3.0/go.mod h1:vlRD9XErLMGT+mDuofSr0mMMquscM/1nQqtRSsh6m70= diff --git a/template/helpers.go b/template/helpers.go index a69879e..a5ba832 100644 --- a/template/helpers.go +++ b/template/helpers.go @@ -120,7 +120,7 @@ func uppercaseFirst(s string) string { return s } -func regexReplace(pattern string, input string, replacement string) string { +func regexReplace(pattern, input, replacement string) string { re := regexp.MustCompile(pattern) return re.ReplaceAllString(input, replacement) } @@ -140,12 +140,12 @@ func validHelper(f interface{}) bool { int64, [][]interface{}, []interface{}, - interface{}, map[string]interface{}, map[string]string, []string, string, - time.Time: + time.Time, + interface{}: return true } return false diff --git a/tools.go b/tools.go deleted file mode 100644 index 464dc0a..0000000 --- a/tools.go +++ /dev/null @@ -1,8 +0,0 @@ -// +build tools - -package tools - -import ( - _ "golang.org/x/lint/golint" - _ "honnef.co/go/tools/cmd/staticcheck" -)