-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
executable file
·141 lines (115 loc) · 4.96 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
FILES_TO_FMT ?= $(shell find . -name '*.go' -print)
# Ensure everything works even if GOPATH is not set, which is often the case.
# The `go env GOPATH` will work for all cases for Go 1.8+.
GOPATH ?= $(shell go env GOPATH)
GOBIN ?= $(firstword $(subst :, ,${GOPATH}))/bin
GOTEST_OPTS ?= --race -failfast -timeout 10m
GOPROXY ?= https://proxy.golang.org
# Support gsed on OSX (installed via brew), falling back to sed. On Linux
# systems gsed won't be installed, so will use sed as expected.
SED ?= $(shell which gsed 2>/dev/null || which sed)
GIT ?= $(shell which git)
BIN_DIR ?= /tmp/bin
OS ?= $(shell uname -s | tr '[A-Z]' '[a-z]')
ARCH ?= $(shell uname -m)
SHELLCHECK ?= $(BIN_DIR)/shellcheck
define require_clean_work_tree
@git update-index -q --ignore-submodules --refresh
@if ! git diff-files --quiet --ignore-submodules --; then \
echo >&2 "$1: you have unstaged changes."; \
git diff-files --name-status -r --ignore-submodules -- >&2; \
echo >&2 "Please commit or stash them."; \
exit 1; \
fi
@if ! git diff-index --cached --quiet HEAD --ignore-submodules --; then \
echo >&2 "$1: your index contains uncommitted changes."; \
git diff-index --cached --name-status -r --ignore-submodules HEAD -- >&2; \
echo >&2 "Please commit or stash them."; \
exit 1; \
fi
endef
help: ## Displays help.
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n\nTargets:\n"} /^[a-z0-9A-Z_-]+:.*?##/ { printf " \033[36m%-17s\033[0m %s\n", $$1, $$2 }' $(MAKEFILE_LIST)
.PHONY: deps
deps: ## Ensures fresh go.mod and go.sum.
@go mod tidy
@go mod verify
.PHONY: check-git
check-git:
ifneq ($(GIT),)
@test -x $(GIT) || (echo >&2 "No git executable binary found at $(GIT)."; exit 1)
else
@echo >&2 "No git binary found."; exit 1
endif
.PHONY: test
test: ## Run all project tests.
test:
go test $(GOTEST_OPTS) ./...
.PHONY: go-format
go-format: ## Formats Go code including imports.
go-format: $(GOIMPORTS)
@echo ">> formatting go code"
@SED_BIN="$(SED)" scripts/cleanup-white-noise.sh $(FILES_TO_FMT)
@gofmt -s -w $(FILES_TO_FMT)
@$(GOIMPORTS) -w $(FILES_TO_FMT)
.PHONY:format
format: ## Formats code including imports and cleans up white noise.
format: go-format
@SED_BIN="$(SED)" scripts/cleanup-white-noise.sh $(FILES_TO_FMT)
.PHONY:lint
lint: ## Runs various static analysis against our code.
lint: go-lint shell-lint
@echo ">> detecting white noise"
@find . -type f \( -name "*.md" -o -name "*.go" \) | SED_BIN="$(SED)" xargs scripts/cleanup-white-noise.sh
$(call require_clean_work_tree,'detected white noise, run make lint and commit changes')
# PROTIP:
# Add
# --cpu-profile-path string Path to CPU profile output file
# --mem-profile-path string Path to memory profile output file
# to debug big allocations during linting.
.PHONY: go-lint
go-lint: check-git deps
@echo ">> verifying modules being imported"
@faillint -paths "errors=github.com/pkg/errors" ./...
@faillint -paths "fmt.{Print,Printf,Println,Sprint}" -ignore-tests ./...
@echo ">> linting all of the Go files GOGC=${GOGC}"
@golangci-lint run
$(call require_clean_work_tree,'detected file changes, run make lint and commit changes')
.PHONY:shell-lint
shell-lint: $(SHELLCHECK)
@echo ">> linting all of the shell script files"
@$(SHELLCHECK) --severity=error -o all -s bash $(shell find . -type f -name "*.sh" -not -path "*vendor*" -not -path "tmp/*" -not -path "*node_modules*")
.PHONY: update-go-deps
update-go-deps: ## Update all golang dependencies.
@echo ">> updating Go dependencies"
@for m in $$($(GO) list -mod=readonly -m -f '{{ if and (not .Indirect) (not .Main)}}{{.Path}}{{end}}' all); do \
$(GO) get $$m; \
done
$(GO) mod tidy
$(BIN_DIR):
@mkdir -p $(BIN_DIR)
$(SHELLCHECK): $(BIN_DIR)
@echo "Downloading Shellcheck"
curl -sNL "https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.$(OS).$(ARCH).tar.xz" | tar --strip-components=1 -xJf - -C $(BIN_DIR)
.PHONY: test-ci
test-ci: install-deps build-prepare test
.PHONY: lint-ci
lint-ci: build-prepare lint
.PHONY: install-deps
install-deps:
go install github.com/fatih/faillint@latest
go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.49.0
.PHONY: build-prepare
build-prepare:
sed -i 's/replace github.com\/cryptoriums\/contraget => ..\/contraget//g' go.mod
go mod tidy
git config --global user.email "8903888+krasi-georgiev@users.noreply.github.com"
git config --global user.name "Krasi Georgiev"
git add -A
git diff-index --quiet HEAD || git commit -m "go mod"
.PHONY: setup-testing
setup-testing:
contraget --path=testing/contracts/source/Simple.sol --pkg-dst=testing/contracts/bindings --name=simple
contraget --path=0xf403c135812408bfbe8713b5a23a04b3d48aae31 --download-dst=testing/contracts/source --network=mainnet --pkg-dst=testing/contracts/bindings --name=booster
@sleep 6
contraget --path=0x1cEBdB0856dd985fAe9b8fEa2262469360B8a3a6 --download-dst=testing/contracts/source --network=mainnet --pkg-dst=testing/contracts/bindings --name=gauge