Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: introduce sub Makefiles #83

Merged
merged 3 commits into from
Jul 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 11 additions & 65 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
include scripts/lint.mk
include scripts/clients.mk
.DEFAULT_GOAL := help

INSTALL_DIR:=~/go/bin
BIN_DIR=./bin
BIN_NAME:=polycli
BUILD_DIR:=./out
INSTALL_DIR := ~/go/bin
BIN_NAME := polycli
BUILD_DIR := ./out

GIT_SHA:=$(shell git rev-parse HEAD | cut -c 1-8)
GIT_TAG:=$(shell git describe --tags)
CUR_DATE:=$(shell date +%s)
GIT_SHA := $(shell git rev-parse HEAD | cut -c 1-8)
GIT_TAG := $(shell git describe --tags)
CUR_DATE := $(shell date +%s)

# strip debug and suppress warnings
# Strip debug and supress warnings.
LD_FLAGS=-s -w
LD_FLAGS += -X \"github.com/maticnetwork/polygon-cli/cmd/version.Version=$(GIT_TAG)\"
LD_FLAGS += -X \"github.com/maticnetwork/polygon-cli/cmd/version.Commit=$(GIT_SHA)\"
Expand Down Expand Up @@ -44,7 +46,7 @@ install: build ## Install the go binary.
cross: $(BUILD_DIR) ## Cross-compile go binaries using CGO.
env CC=aarch64-linux-gnu-gcc CGO_ENABLED=1 GOOS=linux GOARCH=arm64 go build -ldflags "$(STATIC_LD_FLAGS)" -tags netgo -o $(BUILD_DIR)/linux-arm64-$(BIN_NAME) main.go
env CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -ldflags "$(STATIC_LD_FLAGS)" -tags netgo -o $(BUILD_DIR)/linux-amd64-$(BIN_NAME) main.go
# mac builds - this will be functional but will still have secp issues
# MAC builds - this will be functional but will still have secp issues.
env GOOS=darwin GOARCH=arm64 go build -ldflags "$(LD_FLAGS)" -tags netgo -o $(BUILD_DIR)/darwin-arm64-$(BIN_NAME) main.go
env GOOS=darwin GOARCH=amd64 go build -ldflags "$(LD_FLAGS)" -tags netgo -o $(BUILD_DIR)/darwin-amd64-$(BIN_NAME) main.go

Expand All @@ -59,65 +61,9 @@ simplecross: $(BUILD_DIR) ## Cross-compile go binaries without using CGO.
clean: ## Clean the binary folder.
$(RM) -r $(BUILD_DIR)

##@ Lint

.PHONY: tidy
tidy: ## Add missing and remove unused modules.
go mod tidy

.PHONY: fmt
fmt: ## Run go fmt against code.
go fmt ./...

# shadow reports shadowed variables
# https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/shadow
# go install golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow@latest
.PHONY: vet
vet: ## Run go vet and shadow against code.
go vet ./...
shadow ./...

# golangci-lint runs gofmt, govet, staticcheck and other linters
# https://golangci-lint.run/usage/install/#local-installation
.PHONY: golangci-lint
golangci-lint: ## Run golangci-lint against code.
golangci-lint run --fix --timeout 5m

.PHONY: lint
lint: tidy vet golangci-lint ## Run all the linter tools against code.

##@ Clients
PORT?=8545

.PHONY: $(BIN_DIR)
$(BIN_DIR): ## Create the binary folder.
mkdir -p $(BIN_DIR)

.PHONY: geth
geth: $(BIN_DIR) ## Start a local geth node.
geth --dev --dev.period 2 --http --http.addr localhost --http.port $(PORT) --http.api admin,debug,web3,eth,txpool,personal,miner,net --verbosity 5 --rpc.gascap 50000000 --rpc.txfeecap 0 --miner.gaslimit 10 --miner.gasprice 1 --gpo.blocks 1 --gpo.percentile 1 --gpo.maxprice 10 --gpo.ignoreprice 2 --dev.gaslimit 50000000

.PHONY: avail
avail: $(BIN_DIR) ## Start a local avail node.
avail --dev --rpc-port $(PORT)

##@ Test

.PHONY: test
test: ## Run tests.
go test ./... -coverprofile=coverage.out
go tool cover -func coverage.out

LOADTEST_ACCOUNT=0x85da99c8a7c2c95964c8efd687e95e632fc533d6
LOADTEST_FUNDING_AMOUNT_ETH=5000
eth_coinbase := $(shell curl -s -H 'Content-Type: application/json' -d '{"jsonrpc": "2.0", "id": 2, "method": "eth_coinbase", "params": []}' http://127.0.0.1:${PORT} | jq -r ".result")
hex_funding_amount := $(shell echo "obase=16; ${LOADTEST_FUNDING_AMOUNT_ETH}*10^18" | bc)
.PHONY: geth-loadtest
geth-loadtest: build ## Fund test account with 5k ETH and run loadtest against an EVM/Geth chain.
curl -H "Content-Type: application/json" -d '{"jsonrpc":"2.0", "method":"eth_sendTransaction", "params":[{"from": "${eth_coinbase}","to": "${LOADTEST_ACCOUNT}","value": "0x${hex_funding_amount}"}], "id":1}' http://127.0.0.1:${PORT}
sleep 5
$(BUILD_DIR)/$(BIN_NAME) loadtest --verbosity 700 --chain-id 1337 --concurrency 1 --requests 1000 --rate-limit 5 --mode c http://127.0.0.1:$(PORT)

.PHONY: avail-loadtest
avail-loadtest: build ## Run loadtest against an Avail chain.
$(BUILD_DIR)/$(BIN_NAME) loadtest --verbosity 700 --chain-id 1256 --concurrency 1 --requests 1000 --rate-limit 5 --mode t --data-avail http://127.0.0.1:$(PORT)
24 changes: 24 additions & 0 deletions scripts/clients.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
##@ Clients
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The main Makefile should only contain targets related to build, install and test to keep it simple and easier to maintain.

Then where do we store other targets that may be useful? I suggest that we make use of sub Makefiles such as scripts/clients.mk and scripts/lint.mk.

We can import the targets from these files into the main Makefile using include scripts/clients.mk. This is useful if you still want to show these targets in the main help.

It's also possible to call a target from a sub Makefile without going through the main Makefile, for example $ make -f scripts/clients.mk geth.

@praetoriansentry wdyt?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like it. I would just confirm that your changes don't impact any of the github work flows / ci.

PORT?=8545

.PHONY: geth
geth: ## Start a local geth node.
geth --dev --dev.period 2 --http --http.addr localhost --http.port $(PORT) --http.api admin,debug,web3,eth,txpool,personal,miner,net --verbosity 5 --rpc.gascap 50000000 --rpc.txfeecap 0 --miner.gaslimit 10 --miner.gasprice 1 --gpo.blocks 1 --gpo.percentile 1 --gpo.maxprice 10 --gpo.ignoreprice 2 --dev.gaslimit 50000000

.PHONY: avail
avail: ## Start a local avail node.
avail --dev --rpc-port $(PORT)

LOADTEST_ACCOUNT=0x85da99c8a7c2c95964c8efd687e95e632fc533d6
LOADTEST_FUNDING_AMOUNT_ETH=5000
eth_coinbase := $(shell curl -s -H 'Content-Type: application/json' -d '{"jsonrpc": "2.0", "id": 2, "method": "eth_coinbase", "params": []}' http://127.0.0.1:${PORT} | jq -r ".result")
hex_funding_amount := $(shell echo "obase=16; ${LOADTEST_FUNDING_AMOUNT_ETH}*10^18" | bc)
.PHONY: geth-loadtest
geth-loadtest: build ## Fund test account with 5k ETH and run loadtest against an EVM/Geth chain.
curl -H "Content-Type: application/json" -d '{"jsonrpc":"2.0", "method":"eth_sendTransaction", "params":[{"from": "${eth_coinbase}","to": "${LOADTEST_ACCOUNT}","value": "0x${hex_funding_amount}"}], "id":1}' http://127.0.0.1:${PORT}
sleep 5
$(BUILD_DIR)/$(BIN_NAME) loadtest --verbosity 700 --chain-id 1337 --concurrency 1 --requests 1000 --rate-limit 5 --mode c http://127.0.0.1:$(PORT)

.PHONY: avail-loadtest
avail-loadtest: build ## Run loadtest against an Avail chain.
$(BUILD_DIR)/$(BIN_NAME) loadtest --verbosity 700 --chain-id 1256 --concurrency 1 --requests 1000 --rate-limit 5 --mode t --data-avail http://127.0.0.1:$(PORT)
29 changes: 29 additions & 0 deletions scripts/lint.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
##@ Lint

# Add missing and remove unused modules.
.PHONY: tidy
tidy:
go mod tidy

# Run `go fmt` against code.
.PHONY: fmt
fmt:
go fmt ./...

# Run `go vet` and `shadow` (which reports shadowed variables) against code.
# https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/shadow
# `go install golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow@latest`
.PHONY: vet
vet:
go vet ./...
shadow ./...

# Run `golangci-lint` against code.
# `golangci-lint` runs `gofmt`, `govet`, `staticcheck` and other linters.
# https://golangci-lint.run/usage/install/#local-installation
.PHONY: golangci-lint
golangci-lint:
golangci-lint run --fix --timeout 5m

.PHONY: lint
lint: tidy vet golangci-lint ## Run linters.