2024-07-05 22:20:13 -04:00
#!/usr/bin/make -f
PACKAGES_SIMTEST = $( shell go list ./... | grep '/simulation' )
VERSION := $( shell echo $( shell git describe --tags) | sed 's/^v//' )
COMMIT := $( shell git log -1 --format= '%H' )
LEDGER_ENABLED ?= true
SDK_PACK := $( shell go list -m github.com/cosmos/cosmos-sdk | sed 's/ /\@/g' )
BINDIR ?= $( GOPATH) /bin
SIMAPP = ./app
# for dockerized protobuf tools
DOCKER := $( shell which docker)
2024-09-14 14:27:45 -04:00
HTTPS_GIT := github.com/onsonr/sonr.git
2024-07-05 22:20:13 -04:00
export GO111MODULE = on
# process build tags
build_tags = netgo
i f e q ( $( LEDGER_ENABLED ) , t r u e )
ifeq ( $( OS) ,Windows_NT)
GCCEXE = $( shell where gcc.exe 2> NUL)
ifeq ( $( GCCEXE) ,)
$( error gcc.exe not installed for ledger support, please install or set LEDGER_ENABLED = false )
else
build_tags += ledger
endif
else
UNAME_S = $( shell uname -s)
ifeq ( $( UNAME_S) ,OpenBSD)
$( warning OpenBSD detected, disabling ledger support ( https://github.com/cosmos/cosmos-sdk/issues/1988) )
else
GCC = $( shell command -v gcc 2> /dev/null)
ifeq ( $( GCC) ,)
$( error gcc not installed for ledger support, please install or set LEDGER_ENABLED = false )
else
build_tags += ledger
endif
endif
endif
e n d i f
i f e q ( $( WITH_CLEVELDB ) , y e s )
build_tags += gcc
e n d i f
build_tags += $( BUILD_TAGS)
build_tags := $( strip $( build_tags) )
whitespace :=
empty = $( whitespace) $( whitespace)
comma := ,
build_tags_comma_sep := $( subst $( empty) ,$( comma) ,$( build_tags) )
# process linker flags
2024-07-06 03:17:04 -04:00
ldflags = -X github.com/cosmos/cosmos-sdk/version.Name= sonr \
2024-07-05 22:20:13 -04:00
-X github.com/cosmos/cosmos-sdk/version.AppName= sonrd \
-X github.com/cosmos/cosmos-sdk/version.Version= $( VERSION) \
-X github.com/cosmos/cosmos-sdk/version.Commit= $( COMMIT) \
-X " github.com/cosmos/cosmos-sdk/version.BuildTags= $( build_tags_comma_sep) "
i f e q ( $( WITH_CLEVELDB ) , y e s )
ldflags += -X github.com/cosmos/cosmos-sdk/types.DBBackend= cleveldb
e n d i f
i f e q ( $( LINK_STATICALLY ) , t r u e )
ldflags += -linkmode= external -extldflags "-Wl,-z,muldefs -static"
e n d i f
ldflags += $( LDFLAGS)
ldflags := $( strip $( ldflags) )
BUILD_FLAGS := -tags " $( build_tags_comma_sep) " -ldflags '$(ldflags)' -trimpath
# The below include contains the tools and runsim targets.
i n c l u d e c o n t r i b / d e v t o o l s / M a k e f i l e
all : install lint test
build : go .sum
i f e q ( $( OS ) , W i n d o w s _ N T )
$( error wasmd server not supported. Use "make build-windows-client" for client)
exit 1
e l s e
go build -mod= readonly $( BUILD_FLAGS) -o build/sonrd ./cmd/sonrd
e n d i f
build-windows-client : go .sum
GOOS = windows GOARCH = amd64 go build -mod= readonly $( BUILD_FLAGS) -o build/sonrd.exe ./cmd/sonrd
build-contract-tests-hooks :
i f e q ( $( OS ) , W i n d o w s _ N T )
go build -mod= readonly $( BUILD_FLAGS) -o build/contract_tests.exe ./cmd/contract_tests
e l s e
go build -mod= readonly $( BUILD_FLAGS) -o build/contract_tests ./cmd/contract_tests
e n d i f
install : go .sum
go install -mod= readonly $( BUILD_FLAGS) ./cmd/sonrd
########################################
### Tools & dependencies
go-mod-cache : go .sum
@echo "--> Download go modules to local cache"
@go mod download
go.sum : go .mod
@echo "--> Ensure dependencies have not been modified"
@go mod verify
draw-deps :
@# requires brew install graphviz or apt-get install graphviz
go install github.com/RobotsAndPencils/goviz@latest
@goviz -i ./cmd/sonrd -d 2 | dot -Tpng -o dependency-graph.png
clean :
rm -rf snapcraft-local.yaml build/
distclean : clean
rm -rf vendor/
########################################
### Testing
test : test -unit
test-all : test -race test -cover test -system
test-unit :
@VERSION= $( VERSION) go test -mod= readonly -tags= 'ledger test_ledger_mock' ./...
test-race :
@VERSION= $( VERSION) go test -mod= readonly -race -tags= 'ledger test_ledger_mock' ./...
test-cover :
@go test -mod= readonly -timeout 30m -race -coverprofile= coverage.txt -covermode= atomic -tags= 'ledger test_ledger_mock' ./...
benchmark :
@go test -mod= readonly -bench= . ./...
test-sim-import-export : runsim
@echo "Running application import/export simulation. This may take several minutes..."
@$( BINDIR) /runsim -Jobs= 4 -SimAppPkg= $( SIMAPP) -ExitOnFail 50 5 TestAppImportExport
test-sim-multi-seed-short : runsim
@echo "Running short multi-seed application simulation. This may take awhile!"
@$( BINDIR) /runsim -Jobs= 4 -SimAppPkg= $( SIMAPP) -ExitOnFail 50 5 TestFullAppSimulation
test-sim-deterministic : runsim
@echo "Running application deterministic simulation. This may take awhile!"
@$( BINDIR) /runsim -Jobs= 4 -SimAppPkg= $( SIMAPP) -ExitOnFail 1 1 TestAppStateDeterminism
test-system : install
$( MAKE) -C tests/system/ test
###############################################################################
### Linting ###
###############################################################################
format-tools :
go install mvdan.cc/gofumpt@v0.4.0
go install github.com/client9/misspell/cmd/misspell@v0.3.4
go install github.com/daixiang0/gci@v0.11.2
lint : format -tools
golangci-lint run --tests= false
find . -name '*.go' -type f -not -path "./vendor*" -not -path "./tests/system/vendor*" -not -path "*.git*" -not -path "*_test.go" | xargs gofumpt -d
format : format -tools
find . -name '*.go' -type f -not -path "./vendor*" -not -path "./tests/system/vendor*" -not -path "*.git*" -not -path "./client/lcd/statik/statik.go" | xargs gofumpt -w
find . -name '*.go' -type f -not -path "./vendor*" -not -path "./tests/system/vendor*" -not -path "*.git*" -not -path "./client/lcd/statik/statik.go" | xargs misspell -w
find . -name '*.go' -type f -not -path "./vendor*" -not -path "./tests/system/vendor*" -not -path "*.git*" -not -path "./client/lcd/statik/statik.go" | xargs gci write --skip-generated -s standard -s default -s "prefix(cosmossdk.io)" -s "prefix(github.com/cosmos/cosmos-sdk)" -s "prefix(github.com/CosmWasm/wasmd)" --custom-order
mod-tidy :
go mod tidy
cd interchaintest && go mod tidy
.PHONY : format -tools lint format mod -tidy
###############################################################################
### Protobuf ###
###############################################################################
protoVer = 0.13.2
protoImageName = ghcr.io/cosmos/proto-builder:$( protoVer)
protoImage = $( DOCKER) run --rm -v $( CURDIR) :/workspace --workdir /workspace $( protoImageName)
proto-all : proto -format proto -lint proto -gen format
proto-gen :
@echo "Generating Protobuf files"
@go install cosmossdk.io/orm/cmd/protoc-gen-go-cosmos-orm@latest
@$( protoImage) sh ./scripts/protocgen.sh
# generate the stubs for the proto files from the proto directory
spawn stub-gen
proto-format :
@echo "Formatting Protobuf files"
@$( protoImage) find ./ -name "*.proto" -exec clang-format -i { } \;
proto-swagger-gen :
@./scripts/protoc-swagger-gen.sh
proto-lint :
@$( protoImage) buf lint --error-format= json
proto-check-breaking :
@$( protoImage) buf breaking --against $( HTTPS_GIT) #branch=main
.PHONY : all install install -debug \
go-mod-cache draw-deps clean build format \
test test-all test-build test-cover test-unit test-race \
test-sim-import-export build-windows-client \
test-system
## --- Testnet Utilities ---
get-localic :
@echo "Installing local-interchain"
2024-09-14 14:27:45 -04:00
git clone --branch v8.7.0 https://github.com/strangelove-ventures/interchaintest.git interchaintest-downloader
2024-07-05 22:20:13 -04:00
cd interchaintest-downloader/local-interchain && make install
@echo ✅ local-interchain installed $( shell which local-ic)
is-localic-installed :
i f e q ( , $( shell which local -ic ) )
make get-localic
e n d i f
get-heighliner :
git clone https://github.com/strangelove-ventures/heighliner.git
cd heighliner && go install
local-image :
i f e q ( , $( shell which heighliner ) )
echo 'heighliner' binary not found. Consider running ` make get-heighliner`
e l s e
2024-09-14 14:27:45 -04:00
heighliner build -c sonrd --local -f chains.yaml
2024-07-05 22:20:13 -04:00
e n d i f
.PHONY : get -heighliner local -image is -localic -installed
###############################################################################
### e2e ###
###############################################################################
ictest-basic :
@echo "Running basic interchain tests"
@cd interchaintest && go test -race -v -run TestBasicChain .
ictest-ibc :
@echo "Running IBC interchain tests"
@cd interchaintest && go test -race -v -run TestIBC .
ictest-wasm :
@echo "Running cosmwasm interchain tests"
@cd interchaintest && go test -race -v -run TestCosmWasmIntegration .
ictest-packetforward :
@echo "Running packet forward middleware interchain tests"
@cd interchaintest && go test -race -v -run TestPacketForwardMiddleware .
ictest-poa :
@echo "Running proof of authority interchain tests"
@cd interchaintest && go test -race -v -run TestPOA .
ictest-tokenfactory :
@echo "Running token factory interchain tests"
@cd interchaintest && go test -race -v -run TestTokenFactory .
###############################################################################
### testnet ###
###############################################################################
setup-testnet : mod -tidy is -localic -installed install local -image set -testnet -configs setup -testnet -keys
# Run this before testnet keys are added
# chainid-1 is used in the testnet.json
set-testnet-configs :
2024-07-06 03:17:04 -04:00
sonrd config set client chain-id sonr-testnet-1
2024-07-05 22:20:13 -04:00
sonrd config set client keyring-backend test
sonrd config set client output text
# import keys from testnet.json into test keyring
setup-testnet-keys :
-` echo "decorate bright ozone fork gallery riot bus exhaust worth way bone indoor calm squirrel merry zero scheme cotton until shop any excess stage laundry" | sonrd keys add acc0 --recover`
-` echo "wealth flavor believe regret funny network recall kiss grape useless pepper cram hint member few certain unveil rather brick bargain curious require crowd raise" | sonrd keys add acc1 --recover`
# default testnet is with IBC
testnet : setup -testnet
spawn local-ic start ibc-testnet
testnet-basic : setup -testnet
spawn local-ic start testnet
sh-testnet : mod -tidy
2024-07-06 03:17:04 -04:00
CHAIN_ID = "sonr-testnet-1" BLOCK_TIME = "1000ms" CLEAN = true sh scripts/test_node.sh
2024-07-05 22:20:13 -04:00
.PHONY : setup -testnet set -testnet -configs testnet testnet -basic sh -testnet
2024-09-14 14:27:45 -04:00
###############################################################################
### templ & vault ###
###############################################################################
2024-09-23 12:25:15 -04:00
.PHONY : dwn motr xcaddy ipfs -cluster -start
2024-09-14 14:27:45 -04:00
dwn :
@echo "(dwn) Building dwn.wasm -> IPFS Vault"
2024-09-25 19:49:16 -04:00
GOOS = js GOARCH = wasm go build -o ./x/vault/internal/app.wasm ./x/vault/client/dwn/main.go
2024-09-23 12:25:15 -04:00
templ :
@echo "(templ) Generating templ files"
go install github.com/a-h/templ/cmd/templ@latest
templ generate
pkl :
@echo "(pkl) Building PKL"
go run github.com/apple/pkl-go/cmd/pkl-gen-go ./config/pkl/dwn.pkl
go run github.com/apple/pkl-go/cmd/pkl-gen-go ./config/pkl/orm.pkl
air :
@echo "(air) Building air"
go install github.com/air-verse/air@latest
air -c ./deploy/air.toml
2024-09-25 19:49:16 -04:00
ipfs :
2024-09-23 12:25:15 -04:00
@echo "(ipfs) Starting ipfs-cluster"
ipfs-cluster-service init --consensus crdt
ipfs-cluster-service daemon
2024-09-14 14:27:45 -04:00
###############################################################################
### help ###
###############################################################################
help :
@echo "Usage: make <target>"
@echo ""
@echo "Available targets:"
@echo " install : Install the binary"
@echo " local-image : Install the docker image"
@echo " proto-gen : Generate code from proto files"
@echo " testnet : Local devnet with IBC"
@echo " sh-testnet : Shell local devnet"
@echo " ictest-basic : Basic end-to-end test"
@echo " ictest-ibc : IBC end-to-end test"
@echo " templ : Generate templ files"
@echo " vault : Build vault.wasm"
.PHONY : help