From 3ef4b2c4cf536154398c1e770dacab732f294618 Mon Sep 17 00:00:00 2001 From: Angira Kekteeva Date: Thu, 20 May 2021 23:57:51 +0300 Subject: [PATCH] [nspcc-dev/neofs-node#166] *: Add project files Create Makefile, go.mod, .golangci.yml. Add coverage and IDE entries to .gitignore Signed-off-by: Angira Kekteeva --- .gitignore | 8 +++++++ .golangci.yml | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile | 40 ++++++++++++++++++++++++++++++++++ go.mod | 9 ++++++++ go.sum | Bin 0 -> 27737 bytes 5 files changed, 116 insertions(+) create mode 100644 .golangci.yml create mode 100644 Makefile create mode 100644 go.mod create mode 100644 go.sum diff --git a/.gitignore b/.gitignore index 66fd13c..c558527 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,11 @@ # Dependency directories (remove the comment below to include it) # vendor/ + +# IDE +.idea +.vscode + +# coverage +coverage.txt +coverage.html \ No newline at end of file diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..79702d9 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,59 @@ +# This file contains all available configuration options +# with their default values. + +# options for analysis running +run: + # timeout for analysis, e.g. 30s, 5m, default is 1m + timeout: 5m + + # include test files or not, default is true + tests: true + +# output configuration options +output: + # colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number" + format: tab + +# all available settings of specific linters +linters-settings: + exhaustive: + # indicates that switch statements are to be considered exhaustive if a + # 'default' case is present, even if all enum members aren't listed in the + # switch + default-signifies-exhaustive: true + govet: + # report about shadowed variables + check-shadowing: false + +linters: + enable: + # mandatory linters + - govet + - golint + + # some default golangci-lint linters + - deadcode + - errcheck + - gosimple + - ineffassign + - staticcheck + - structcheck + - typecheck + - unused + - varcheck + + # extra linters + - exhaustive + - godot + - gofmt + - whitespace + - goimports + disable-all: true + fast: false + +issues: + include: + - EXC0002 # should have a comment + - EXC0003 # test/Test ... consider calling this + - EXC0004 # govet + - EXC0005 # C-style breaks diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..61bdecf --- /dev/null +++ b/Makefile @@ -0,0 +1,40 @@ +#!/usr/bin/make -f + +# Run tests +test: + @go test ./... -cover + +# Pull go dependencies +dep: + @printf "⇒ Download requirements: " + @CGO_ENABLED=0 \ + go mod download && echo OK + @printf "⇒ Tidy requirements: " + @CGO_ENABLED=0 \ + go mod tidy -v && echo OK + +# Run linters +lint: + @golangci-lint --timeout=5m run + +# Run tests with race detection and produce coverage output +cover: + @go test -v -race ./... -coverprofile=coverage.txt -covermode=atomic + @go tool cover -html=coverage.txt -o coverage.html + +# Reformat code +format: + @echo "⇒ Processing gofmt check" + @gofmt -s -w ./ + @echo "⇒ Processing goimports check" + @goimports -w ./ + +# Show this help prompt +help: + @echo ' Usage:' + @echo '' + @echo ' make ' + @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 -u \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..bad5cc6 --- /dev/null +++ b/go.mod @@ -0,0 +1,9 @@ +module github.com/nspcc-dev/neofs-sdk-go + +go 1.16 + +require ( + github.com/alecthomas/participle v0.7.1 + github.com/nspcc-dev/neofs-api-go v1.26.1 + github.com/stretchr/testify v1.6.1 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000000000000000000000000000000000000..b81a708f0244b6a000f71bbdecce8567496c6fce GIT binary patch literal 27737 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 literal 0 HcmV?d00001