diff --git a/.gitignore b/.gitignore index 0dade22e..3212ac5b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ cmd/test testfile .neofs-cli.yml + +.cache diff --git a/Makefile b/Makefile index c44df3d1..bc986eb8 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ CMDS = neofs-node neofs-ir CMS = $(addprefix $(BIN)/, $(CMDS)) BINS = $(addprefix $(BIN)/, $(CMDS)) -.PHONY: help dep clean fmt +.PHONY: help all dep clean fmts fmt imports test lint docker/lint # To build a specific binary, use it's name prefix with bin/ as a target # For example `make bin/neofs-node` will build only storage node binary @@ -24,9 +24,9 @@ all: $(DIRS) $(BINS) $(BINS): $(DIRS) dep @echo "⇒ Build $@" - GOGC=off \ CGO_ENABLED=0 \ - go build -v -mod=vendor -trimpath \ + GO111MODULE=on \ + go build -v -trimpath \ -ldflags "-X ${REPO}/misc.Version=$(VERSION) -X ${REPO}/misc.Build=${BUILD}" \ -o $@ ./cmd/$(notdir $@) @@ -36,16 +36,21 @@ $(DIRS): # Pull go dependencies dep: - @printf "⇒ Ensure vendor: " - @go mod tidy -v && echo OK || (echo fail && exit 2) + @printf "⇒ Tidy requirements : " + CGO_ENABLED=0 \ + GO111MODULE=on \ + go mod tidy -v && echo OK @printf "⇒ Download requirements: " - @go mod download && echo OK || (echo fail && exit 2) - @printf "⇒ Store vendor locally: " - @go mod vendor && echo OK || (echo fail && exit 2) + CGO_ENABLED=0 \ + GO111MODULE=on \ + go mod download && echo OK + @printf "⇒ Install test requirements: " + CGO_ENABLED=0 \ + GO111MODULE=on \ + go test -i ./... && echo OK # Regenerate proto files: protoc: - @GOPRIVATE=github.com/nspcc-dev go mod tidy -v @GOPRIVATE=github.com/nspcc-dev go mod vendor # Install specific version for gogo-proto @go list -f '{{.Path}}/...@{{.Version}}' -m github.com/gogo/protobuf | xargs go get -v @@ -58,6 +63,7 @@ protoc: --proto_path=.:./vendor:./vendor/github.com/nspcc-dev/neofs-api-go:/usr/local/include \ --gofast_out=plugins=grpc,paths=source_relative:. $$f; \ done + rm -rf vendor # Build NeoFS Storage Node docker image image-storage: @@ -65,6 +71,7 @@ image-storage: @docker build \ --build-arg REPO=$(REPO) \ --build-arg VERSION=$(VERSION) \ + --rm \ -f Dockerfile \ -t $(HUB_IMAGE)-storage:$(HUB_TAG) . @@ -74,19 +81,42 @@ image-ir: @docker build \ --build-arg REPO=$(REPO) \ --build-arg VERSION=$(VERSION) \ + --rm \ -f Dockerfile.ir \ -t $(HUB_IMAGE)-ir:$(HUB_TAG) . # Build all Docker images images: image-storage image-ir +# Run all code formaters +fmts: fmt imports + # Reformat code fmt: - @[ ! -z `which goimports` ] || (echo "Install goimports" && exit 2) - @for f in `find . -type f -name '*.go' -not -path './vendor/*' -not -name '*.pb.go' -prune`; do \ - echo "⇒ Processing $$f"; \ - goimports -w $$f; \ - done + @echo "⇒ Processing gofmt check" + @GO111MODULE=on gofmt -s -w cmd/ pkg/ misc/ + +# Reformat imports +imports: + @echo "⇒ Processing goimports check" + @GO111MODULE=on goimports -w cmd/ pkg/ misc/ + +# Run Unit Test with go test +test: + @echo "⇒ Runnning go test" + @GO111MODULE=on go test ./... + +# Run linters +lint: + @golangci-lint run + +# Run linters in Docker +docker/lint: + docker run --rm -it \ + -v `pwd`:/src \ + -u `stat -c "%u:%g" .` \ + --env HOME=/src \ + golangci/golangci-lint:v1.30 bash -c 'cd /src/ && make lint' # Print version version: @@ -100,7 +130,7 @@ help: @echo '' @echo ' Targets:' @echo '' - @awk '/^#/{ comment = substr($$0,3) } comment && /^[a-zA-Z][a-zA-Z0-9_-]+ ?:/{ print " ", $$1, comment }' $(MAKEFILE_LIST) | column -t -s ':' | grep -v 'IGNORE' | sort | uniq + @awk '/^#/{ comment = substr($$0,3) } comment && /^[a-zA-Z][a-zA-Z0-9_-]+ ?:/{ print " ", $$1, comment }' $(MAKEFILE_LIST) | column -t -s ':' | grep -v 'IGNORE' | sort -u clean: rm -rf vendor