<!-- < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < ☺ v ✰ Thanks for creating a PR! ✰ v Before smashing the submit button please review the checkboxes. v If a checkbox is n/a - please still include it but + a little note why ☺ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > --> ## Description ref: #9183 After some more recent conversations w/ @aaronc, I decided to go back to his original proposal of setting up a subcommand for running in-process testnets. This PR splits the `simd testnet` command into two subcommands: - `simd testnet start` which starts an in-process n-node testnet - `simd testnet init-files` which sets up configuration & genesis files for an n-node testnet to be run as separate processes (one per node, most likely via Docker Compose) --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#pr-targeting)) - [x] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [x] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - **n/a** - [ ] Wrote unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#testing) - [x] Updated relevant documentation (`docs/`) or specification (`x/<module>/spec/`) - **see #9411** - [x] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [x] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [x] Re-reviewed `Files changed` in the Github PR explorer - [ ] Review `Codecov Report` in the comment section below once CI passes
506 lines
21 KiB
Makefile
506 lines
21 KiB
Makefile
#!/usr/bin/make -f
|
|
|
|
PACKAGES_NOSIMULATION=$(shell go list ./... | grep -v '/simulation')
|
|
PACKAGES_SIMTEST=$(shell go list ./... | grep '/simulation')
|
|
VERSION := $(shell echo $(shell git describe --always) | sed 's/^v//')
|
|
TMVERSION := $(shell go list -m github.com/tendermint/tendermint | sed 's:.* ::')
|
|
COMMIT := $(shell git log -1 --format='%H')
|
|
LEDGER_ENABLED ?= true
|
|
BINDIR ?= $(GOPATH)/bin
|
|
BUILDDIR ?= $(CURDIR)/build
|
|
SIMAPP = ./simapp
|
|
MOCKS_DIR = $(CURDIR)/tests/mocks
|
|
HTTPS_GIT := https://github.com/cosmos/cosmos-sdk.git
|
|
DOCKER := $(shell which docker)
|
|
DOCKER_BUF := $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace bufbuild/buf
|
|
|
|
export GO111MODULE = on
|
|
|
|
# process build tags
|
|
|
|
build_tags = netgo
|
|
ifeq ($(LEDGER_ENABLED),true)
|
|
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
|
|
endif
|
|
|
|
ifeq (cleveldb,$(findstring cleveldb,$(COSMOS_BUILD_OPTIONS)))
|
|
build_tags += gcc
|
|
endif
|
|
|
|
whitespace :=
|
|
whitespace += $(whitespace)
|
|
comma := ,
|
|
build_tags_comma_sep := $(subst $(whitespace),$(comma),$(build_tags))
|
|
|
|
# process linker flags
|
|
|
|
ldflags = -X github.com/cosmos/cosmos-sdk/version.Name=sim \
|
|
-X github.com/cosmos/cosmos-sdk/version.AppName=simd \
|
|
-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)" \
|
|
-X github.com/tendermint/tendermint/version.TMCoreSemVer=$(TMVERSION)
|
|
|
|
# DB backend selection
|
|
ifeq (cleveldb,$(findstring cleveldb,$(COSMOS_BUILD_OPTIONS)))
|
|
ldflags += -X github.com/cosmos/cosmos-sdk/types.DBBackend=cleveldb
|
|
endif
|
|
ifeq (badgerdb,$(findstring badgerdb,$(COSMOS_BUILD_OPTIONS)))
|
|
ldflags += -X github.com/cosmos/cosmos-sdk/types.DBBackend=badgerdb
|
|
BUILD_TAGS += badgerdb
|
|
endif
|
|
# handle rocksdb
|
|
ifeq (rocksdb,$(findstring rocksdb,$(COSMOS_BUILD_OPTIONS)))
|
|
CGO_ENABLED=1
|
|
BUILD_TAGS += rocksdb
|
|
ldflags += -X github.com/cosmos/cosmos-sdk/types.DBBackend=rocksdb
|
|
endif
|
|
# handle boltdb
|
|
ifeq (boltdb,$(findstring boltdb,$(COSMOS_BUILD_OPTIONS)))
|
|
BUILD_TAGS += boltdb
|
|
ldflags += -X github.com/cosmos/cosmos-sdk/types.DBBackend=boltdb
|
|
endif
|
|
|
|
ifeq (,$(findstring nostrip,$(COSMOS_BUILD_OPTIONS)))
|
|
ldflags += -w -s
|
|
endif
|
|
ldflags += $(LDFLAGS)
|
|
ldflags := $(strip $(ldflags))
|
|
|
|
build_tags += $(BUILD_TAGS)
|
|
build_tags := $(strip $(build_tags))
|
|
|
|
BUILD_FLAGS := -tags "$(build_tags)" -ldflags '$(ldflags)'
|
|
# check for nostrip option
|
|
ifeq (,$(findstring nostrip,$(COSMOS_BUILD_OPTIONS)))
|
|
BUILD_FLAGS += -trimpath
|
|
endif
|
|
|
|
all: tools build lint test
|
|
|
|
# The below include contains the tools and runsim targets.
|
|
include contrib/devtools/Makefile
|
|
|
|
###############################################################################
|
|
### Build ###
|
|
###############################################################################
|
|
|
|
BUILD_TARGETS := build install
|
|
|
|
build: BUILD_ARGS=-o $(BUILDDIR)/
|
|
build-linux:
|
|
GOOS=linux GOARCH=amd64 LEDGER_ENABLED=false $(MAKE) build
|
|
|
|
$(BUILD_TARGETS): go.sum $(BUILDDIR)/
|
|
go $@ -mod=readonly $(BUILD_FLAGS) $(BUILD_ARGS) ./...
|
|
|
|
$(BUILDDIR)/:
|
|
mkdir -p $(BUILDDIR)/
|
|
|
|
build-simd-all: go.sum
|
|
$(DOCKER) rm latest-build || true
|
|
$(DOCKER) run --volume=$(CURDIR):/sources:ro \
|
|
--env TARGET_PLATFORMS='linux/amd64 darwin/amd64 linux/arm64 windows/amd64' \
|
|
--env APP=simd \
|
|
--env VERSION=$(VERSION) \
|
|
--env COMMIT=$(COMMIT) \
|
|
--env LEDGER_ENABLED=$(LEDGER_ENABLED) \
|
|
--name latest-build cosmossdk/rbuilder:latest
|
|
$(DOCKER) cp -a latest-build:/home/builder/artifacts/ $(CURDIR)/
|
|
|
|
build-simd-linux: go.sum $(BUILDDIR)/
|
|
$(DOCKER) rm latest-build || true
|
|
$(DOCKER) run --volume=$(CURDIR):/sources:ro \
|
|
--env TARGET_PLATFORMS='linux/amd64' \
|
|
--env APP=simd \
|
|
--env VERSION=$(VERSION) \
|
|
--env COMMIT=$(COMMIT) \
|
|
--env LEDGER_ENABLED=false \
|
|
--name latest-build cosmossdk/rbuilder:latest
|
|
$(DOCKER) cp -a latest-build:/home/builder/artifacts/ $(CURDIR)/
|
|
cp artifacts/simd-*-linux-amd64 $(BUILDDIR)/simd
|
|
|
|
cosmovisor:
|
|
$(MAKE) -C cosmovisor cosmovisor
|
|
|
|
.PHONY: build build-linux build-simd-all build-simd-linux cosmovisor
|
|
|
|
mockgen_cmd=go run github.com/golang/mock/mockgen
|
|
|
|
mocks: $(MOCKS_DIR)
|
|
$(mockgen_cmd) -source=client/account_retriever.go -package mocks -destination tests/mocks/account_retriever.go
|
|
$(mockgen_cmd) -package mocks -destination tests/mocks/tendermint_tm_db_DB.go github.com/tendermint/tm-db DB
|
|
$(mockgen_cmd) -source=types/module/module.go -package mocks -destination tests/mocks/types_module_module.go
|
|
$(mockgen_cmd) -source=types/invariant.go -package mocks -destination tests/mocks/types_invariant.go
|
|
$(mockgen_cmd) -source=types/router.go -package mocks -destination tests/mocks/types_router.go
|
|
$(mockgen_cmd) -package mocks -destination tests/mocks/grpc_server.go github.com/gogo/protobuf/grpc Server
|
|
$(mockgen_cmd) -package mocks -destination tests/mocks/tendermint_tendermint_libs_log_DB.go github.com/tendermint/tendermint/libs/log Logger
|
|
.PHONY: mocks
|
|
|
|
$(MOCKS_DIR):
|
|
mkdir -p $(MOCKS_DIR)
|
|
|
|
distclean: clean tools-clean
|
|
clean:
|
|
rm -rf \
|
|
$(BUILDDIR)/ \
|
|
artifacts/ \
|
|
tmp-swagger-gen/
|
|
|
|
.PHONY: distclean clean
|
|
|
|
###############################################################################
|
|
### Tools & Dependencies ###
|
|
###############################################################################
|
|
|
|
go.sum: go.mod
|
|
echo "Ensure dependencies have not been modified ..." >&2
|
|
go mod verify
|
|
go mod tidy
|
|
|
|
###############################################################################
|
|
### Documentation ###
|
|
###############################################################################
|
|
|
|
update-swagger-docs: statik
|
|
$(BINDIR)/statik -src=client/docs/swagger-ui -dest=client/docs -f -m
|
|
@if [ -n "$(git status --porcelain)" ]; then \
|
|
echo "\033[91mSwagger docs are out of sync!!!\033[0m";\
|
|
exit 1;\
|
|
else \
|
|
echo "\033[92mSwagger docs are in sync\033[0m";\
|
|
fi
|
|
.PHONY: update-swagger-docs
|
|
|
|
godocs:
|
|
@echo "--> Wait a few seconds and visit http://localhost:6060/pkg/github.com/cosmos/cosmos-sdk/types"
|
|
godoc -http=:6060
|
|
|
|
# This builds a docs site for each branch/tag in `./docs/versions`
|
|
# and copies each site to a version prefixed path. The last entry inside
|
|
# the `versions` file will be the default root index.html.
|
|
build-docs:
|
|
@cd docs && \
|
|
while read -r branch path_prefix; do \
|
|
(git checkout $${branch} && npm install && VUEPRESS_BASE="/$${path_prefix}/" npm run build) ; \
|
|
mkdir -p ~/output/$${path_prefix} ; \
|
|
cp -r .vuepress/dist/* ~/output/$${path_prefix}/ ; \
|
|
cp ~/output/$${path_prefix}/index.html ~/output ; \
|
|
done < versions ;
|
|
.PHONY: build-docs
|
|
|
|
###############################################################################
|
|
### Tests & Simulation ###
|
|
###############################################################################
|
|
|
|
test: test-unit
|
|
test-all: test-unit test-ledger-mock test-race test-cover
|
|
|
|
TEST_PACKAGES=./...
|
|
TEST_TARGETS := test-unit test-unit-amino test-unit-proto test-ledger-mock test-race test-ledger test-race
|
|
|
|
# Test runs-specific rules. To add a new test target, just add
|
|
# a new rule, customise ARGS or TEST_PACKAGES ad libitum, and
|
|
# append the new rule to the TEST_TARGETS list.
|
|
test-unit: ARGS=-tags='cgo ledger test_ledger_mock norace'
|
|
test-unit-amino: ARGS=-tags='ledger test_ledger_mock test_amino norace'
|
|
test-ledger: ARGS=-tags='cgo ledger norace'
|
|
test-ledger-mock: ARGS=-tags='ledger test_ledger_mock norace'
|
|
test-race: ARGS=-race -tags='cgo ledger test_ledger_mock'
|
|
test-race: TEST_PACKAGES=$(PACKAGES_NOSIMULATION)
|
|
$(TEST_TARGETS): run-tests
|
|
|
|
# check-* compiles and collects tests without running them
|
|
# note: go test -c doesn't support multiple packages yet (https://github.com/golang/go/issues/15513)
|
|
CHECK_TEST_TARGETS := check-test-unit check-test-unit-amino
|
|
check-test-unit: ARGS=-tags='cgo ledger test_ledger_mock norace'
|
|
check-test-unit-amino: ARGS=-tags='ledger test_ledger_mock test_amino norace'
|
|
$(CHECK_TEST_TARGETS): EXTRA_ARGS=-run=none
|
|
$(CHECK_TEST_TARGETS): run-tests
|
|
|
|
run-tests:
|
|
ifneq (,$(shell which tparse 2>/dev/null))
|
|
go test -mod=readonly -json $(ARGS) $(EXTRA_ARGS) $(TEST_PACKAGES) | tparse
|
|
else
|
|
go test -mod=readonly $(ARGS) $(EXTRA_ARGS) $(TEST_PACKAGES)
|
|
endif
|
|
|
|
.PHONY: run-tests test test-all $(TEST_TARGETS)
|
|
|
|
test-sim-nondeterminism:
|
|
@echo "Running non-determinism test..."
|
|
@go test -mod=readonly $(SIMAPP) -run TestAppStateDeterminism -Enabled=true \
|
|
-NumBlocks=100 -BlockSize=200 -Commit=true -Period=0 -v -timeout 24h
|
|
|
|
test-sim-custom-genesis-fast:
|
|
@echo "Running custom genesis simulation..."
|
|
@echo "By default, ${HOME}/.gaiad/config/genesis.json will be used."
|
|
@go test -mod=readonly $(SIMAPP) -run TestFullAppSimulation -Genesis=${HOME}/.gaiad/config/genesis.json \
|
|
-Enabled=true -NumBlocks=100 -BlockSize=200 -Commit=true -Seed=99 -Period=5 -v -timeout 24h
|
|
|
|
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-after-import: runsim
|
|
@echo "Running application simulation-after-import. This may take several minutes..."
|
|
@$(BINDIR)/runsim -Jobs=4 -SimAppPkg=$(SIMAPP) -ExitOnFail 50 5 TestAppSimulationAfterImport
|
|
|
|
test-sim-custom-genesis-multi-seed: runsim
|
|
@echo "Running multi-seed custom genesis simulation..."
|
|
@echo "By default, ${HOME}/.gaiad/config/genesis.json will be used."
|
|
@$(BINDIR)/runsim -Genesis=${HOME}/.gaiad/config/genesis.json -SimAppPkg=$(SIMAPP) -ExitOnFail 400 5 TestFullAppSimulation
|
|
|
|
test-sim-multi-seed-long: runsim
|
|
@echo "Running long multi-seed application simulation. This may take awhile!"
|
|
@$(BINDIR)/runsim -Jobs=4 -SimAppPkg=$(SIMAPP) -ExitOnFail 500 50 TestFullAppSimulation
|
|
|
|
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 10 TestFullAppSimulation
|
|
|
|
test-sim-benchmark-invariants:
|
|
@echo "Running simulation invariant benchmarks..."
|
|
@go test -mod=readonly $(SIMAPP) -benchmem -bench=BenchmarkInvariants -run=^$ \
|
|
-Enabled=true -NumBlocks=1000 -BlockSize=200 \
|
|
-Period=1 -Commit=true -Seed=57 -v -timeout 24h
|
|
|
|
.PHONY: \
|
|
test-sim-nondeterminism \
|
|
test-sim-custom-genesis-fast \
|
|
test-sim-import-export \
|
|
test-sim-after-import \
|
|
test-sim-custom-genesis-multi-seed \
|
|
test-sim-multi-seed-short \
|
|
test-sim-multi-seed-long \
|
|
test-sim-benchmark-invariants
|
|
|
|
SIM_NUM_BLOCKS ?= 500
|
|
SIM_BLOCK_SIZE ?= 200
|
|
SIM_COMMIT ?= true
|
|
|
|
test-sim-benchmark:
|
|
@echo "Running application benchmark for numBlocks=$(SIM_NUM_BLOCKS), blockSize=$(SIM_BLOCK_SIZE). This may take awhile!"
|
|
@go test -mod=readonly -benchmem -run=^$$ $(SIMAPP) -bench ^BenchmarkFullAppSimulation$$ \
|
|
-Enabled=true -NumBlocks=$(SIM_NUM_BLOCKS) -BlockSize=$(SIM_BLOCK_SIZE) -Commit=$(SIM_COMMIT) -timeout 24h
|
|
|
|
test-sim-profile:
|
|
@echo "Running application benchmark for numBlocks=$(SIM_NUM_BLOCKS), blockSize=$(SIM_BLOCK_SIZE). This may take awhile!"
|
|
@go test -mod=readonly -benchmem -run=^$$ $(SIMAPP) -bench ^BenchmarkFullAppSimulation$$ \
|
|
-Enabled=true -NumBlocks=$(SIM_NUM_BLOCKS) -BlockSize=$(SIM_BLOCK_SIZE) -Commit=$(SIM_COMMIT) -timeout 24h -cpuprofile cpu.out -memprofile mem.out
|
|
|
|
.PHONY: test-sim-profile test-sim-benchmark
|
|
|
|
test-cover:
|
|
@export VERSION=$(VERSION); bash -x contrib/test_cover.sh
|
|
.PHONY: test-cover
|
|
|
|
test-rosetta:
|
|
docker build -t rosetta-ci:latest -f contrib/rosetta/node/Dockerfile .
|
|
docker-compose -f contrib/rosetta/docker-compose.yaml up --abort-on-container-exit --exit-code-from test_rosetta --build
|
|
.PHONY: test-rosetta
|
|
|
|
benchmark:
|
|
@go test -mod=readonly -bench=. $(PACKAGES_NOSIMULATION)
|
|
.PHONY: benchmark
|
|
|
|
###############################################################################
|
|
### Linting ###
|
|
###############################################################################
|
|
|
|
containerMarkdownLintImage=tmknom/markdownlint
|
|
containerMarkdownLint=cosmos-sdk-markdownlint
|
|
containerMarkdownLintFix=cosmos-sdk-markdownlint-fix
|
|
|
|
lint:
|
|
golangci-lint run --out-format=tab
|
|
@if docker ps -a --format '{{.Names}}' | grep -Eq "^${containerMarkdownLint}$$"; then docker start -a $(containerMarkdownLint); else docker run --name $(containerMarkdownLint) -i -v "$(CURDIR):/work" $(containerMarkdownLintImage); fi
|
|
|
|
lint-fix:
|
|
golangci-lint run --fix --out-format=tab --issues-exit-code=0
|
|
@if docker ps -a --format '{{.Names}}' | grep -Eq "^${containerMarkdownLintFix}$$"; then docker start -a $(containerMarkdownLintFix); else docker run --name $(containerMarkdownLintFix) -i -v "$(CURDIR):/work" $(containerMarkdownLintImage) . --fix; fi
|
|
|
|
.PHONY: lint lint-fix
|
|
|
|
format:
|
|
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -path "./client/docs/statik/statik.go" -not -path "./tests/mocks/*" -not -name '*.pb.go' | xargs gofmt -w -s
|
|
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -path "./client/docs/statik/statik.go" -not -path "./tests/mocks/*" -not -name '*.pb.go' | xargs misspell -w
|
|
find . -name '*.go' -type f -not -path "./vendor*" -not -path "*.git*" -not -path "./client/docs/statik/statik.go" -not -path "./tests/mocks/*" -not -name '*.pb.go' | xargs goimports -w -local github.com/cosmos/cosmos-sdk
|
|
.PHONY: format
|
|
|
|
###############################################################################
|
|
### Devdoc ###
|
|
###############################################################################
|
|
|
|
DEVDOC_SAVE = docker commit `docker ps -a -n 1 -q` devdoc:local
|
|
|
|
devdoc-init:
|
|
$(DOCKER) run -it -v "$(CURDIR):/go/src/github.com/cosmos/cosmos-sdk" -w "/go/src/github.com/cosmos/cosmos-sdk" tendermint/devdoc echo
|
|
# TODO make this safer
|
|
$(call DEVDOC_SAVE)
|
|
|
|
devdoc:
|
|
$(DOCKER) run -it -v "$(CURDIR):/go/src/github.com/cosmos/cosmos-sdk" -w "/go/src/github.com/cosmos/cosmos-sdk" devdoc:local bash
|
|
|
|
devdoc-save:
|
|
# TODO make this safer
|
|
$(call DEVDOC_SAVE)
|
|
|
|
devdoc-clean:
|
|
docker rmi -f $$(docker images -f "dangling=true" -q)
|
|
|
|
devdoc-update:
|
|
docker pull tendermint/devdoc
|
|
|
|
.PHONY: devdoc devdoc-clean devdoc-init devdoc-save devdoc-update
|
|
|
|
###############################################################################
|
|
### Protobuf ###
|
|
###############################################################################
|
|
|
|
containerProtoVer=v0.2
|
|
containerProtoImage=tendermintdev/sdk-proto-gen:$(containerProtoVer)
|
|
containerProtoGen=cosmos-sdk-proto-gen-$(containerProtoVer)
|
|
containerProtoGenSwagger=cosmos-sdk-proto-gen-swagger-$(containerProtoVer)
|
|
containerProtoFmt=cosmos-sdk-proto-fmt-$(containerProtoVer)
|
|
|
|
proto-all: proto-format proto-lint proto-gen
|
|
|
|
proto-gen:
|
|
@echo "Generating Protobuf files"
|
|
@if docker ps -a --format '{{.Names}}' | grep -Eq "^${containerProtoGen}$$"; then docker start -a $(containerProtoGen); else docker run --name $(containerProtoGen) -v $(CURDIR):/workspace --workdir /workspace $(containerProtoImage) \
|
|
sh ./scripts/protocgen.sh; fi
|
|
|
|
# This generates the SDK's custom wrapper for google.protobuf.Any. It should only be run manually when needed
|
|
proto-gen-any:
|
|
@echo "Generating Protobuf Any"
|
|
$(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(containerProtoImage) sh ./scripts/protocgen-any.sh
|
|
|
|
proto-swagger-gen:
|
|
@echo "Generating Protobuf Swagger"
|
|
@if docker ps -a --format '{{.Names}}' | grep -Eq "^${containerProtoGenSwagger}$$"; then docker start -a $(containerProtoGenSwagger); else docker run --name $(containerProtoGenSwagger) -v $(CURDIR):/workspace --workdir /workspace $(containerProtoImage) \
|
|
sh ./scripts/protoc-swagger-gen.sh; fi
|
|
|
|
proto-format:
|
|
@echo "Formatting Protobuf files"
|
|
@if docker ps -a --format '{{.Names}}' | grep -Eq "^${containerProtoFmt}$$"; then docker start -a $(containerProtoFmt); else docker run --name $(containerProtoFmt) -v $(CURDIR):/workspace --workdir /workspace tendermintdev/docker-build-proto \
|
|
find ./ -not -path "./third_party/*" -name "*.proto" -exec clang-format -i {} \; ; fi
|
|
|
|
|
|
proto-lint:
|
|
@$(DOCKER_BUF) lint --error-format=json
|
|
|
|
proto-check-breaking:
|
|
@$(DOCKER_BUF) breaking --against $(HTTPS_GIT)#branch=master
|
|
|
|
|
|
TM_URL = https://raw.githubusercontent.com/tendermint/tendermint/v0.34.0-rc6/proto/tendermint
|
|
GOGO_PROTO_URL = https://raw.githubusercontent.com/regen-network/protobuf/cosmos
|
|
COSMOS_PROTO_URL = https://raw.githubusercontent.com/regen-network/cosmos-proto/master
|
|
CONFIO_URL = https://raw.githubusercontent.com/confio/ics23/v0.6.3
|
|
|
|
TM_CRYPTO_TYPES = third_party/proto/tendermint/crypto
|
|
TM_ABCI_TYPES = third_party/proto/tendermint/abci
|
|
TM_TYPES = third_party/proto/tendermint/types
|
|
TM_VERSION = third_party/proto/tendermint/version
|
|
TM_LIBS = third_party/proto/tendermint/libs/bits
|
|
TM_P2P = third_party/proto/tendermint/p2p
|
|
|
|
GOGO_PROTO_TYPES = third_party/proto/gogoproto
|
|
COSMOS_PROTO_TYPES = third_party/proto/cosmos_proto
|
|
CONFIO_TYPES = third_party/proto/confio
|
|
|
|
proto-update-deps:
|
|
@mkdir -p $(GOGO_PROTO_TYPES)
|
|
@curl -sSL $(GOGO_PROTO_URL)/gogoproto/gogo.proto > $(GOGO_PROTO_TYPES)/gogo.proto
|
|
|
|
@mkdir -p $(COSMOS_PROTO_TYPES)
|
|
@curl -sSL $(COSMOS_PROTO_URL)/cosmos.proto > $(COSMOS_PROTO_TYPES)/cosmos.proto
|
|
|
|
## Importing of tendermint protobuf definitions currently requires the
|
|
## use of `sed` in order to build properly with cosmos-sdk's proto file layout
|
|
## (which is the standard Buf.build FILE_LAYOUT)
|
|
## Issue link: https://github.com/tendermint/tendermint/issues/5021
|
|
@mkdir -p $(TM_ABCI_TYPES)
|
|
@curl -sSL $(TM_URL)/abci/types.proto > $(TM_ABCI_TYPES)/types.proto
|
|
|
|
@mkdir -p $(TM_VERSION)
|
|
@curl -sSL $(TM_URL)/version/types.proto > $(TM_VERSION)/types.proto
|
|
|
|
@mkdir -p $(TM_TYPES)
|
|
@curl -sSL $(TM_URL)/types/types.proto > $(TM_TYPES)/types.proto
|
|
@curl -sSL $(TM_URL)/types/evidence.proto > $(TM_TYPES)/evidence.proto
|
|
@curl -sSL $(TM_URL)/types/params.proto > $(TM_TYPES)/params.proto
|
|
@curl -sSL $(TM_URL)/types/validator.proto > $(TM_TYPES)/validator.proto
|
|
@curl -sSL $(TM_URL)/types/block.proto > $(TM_TYPES)/block.proto
|
|
|
|
@mkdir -p $(TM_CRYPTO_TYPES)
|
|
@curl -sSL $(TM_URL)/crypto/proof.proto > $(TM_CRYPTO_TYPES)/proof.proto
|
|
@curl -sSL $(TM_URL)/crypto/keys.proto > $(TM_CRYPTO_TYPES)/keys.proto
|
|
|
|
@mkdir -p $(TM_LIBS)
|
|
@curl -sSL $(TM_URL)/libs/bits/types.proto > $(TM_LIBS)/types.proto
|
|
|
|
@mkdir -p $(TM_P2P)
|
|
@curl -sSL $(TM_URL)/p2p/types.proto > $(TM_P2P)/types.proto
|
|
|
|
@mkdir -p $(CONFIO_TYPES)
|
|
@curl -sSL $(CONFIO_URL)/proofs.proto > $(CONFIO_TYPES)/proofs.proto
|
|
## insert go package option into proofs.proto file
|
|
## Issue link: https://github.com/confio/ics23/issues/32
|
|
@sed -i '4ioption go_package = "github.com/confio/ics23/go";' $(CONFIO_TYPES)/proofs.proto
|
|
|
|
.PHONY: proto-all proto-gen proto-gen-any proto-swagger-gen proto-format proto-lint proto-check-breaking proto-update-deps
|
|
|
|
###############################################################################
|
|
### Localnet ###
|
|
###############################################################################
|
|
|
|
# Run a 4-node testnet locally via docker compose
|
|
localnet-start: build-linux localnet-stop
|
|
$(if $(shell $(DOCKER) inspect -f '{{ .Id }}' cosmossdk/simd-env 2>/dev/null),$(info found image cosmossdk/simd-env),$(MAKE) -C contrib/images simd-env)
|
|
if ! test -f build/node0/simd/config/genesis.json; then $(DOCKER) run --rm \
|
|
--user $(shell id -u):$(shell id -g) \
|
|
-v $(BUILDDIR):/simd:Z \
|
|
-v /etc/group:/etc/group:ro \
|
|
-v /etc/passwd:/etc/passwd:ro \
|
|
-v /etc/shadow:/etc/shadow:ro \
|
|
cosmossdk/simd-env testnet init-files --v 4 -o . --starting-ip-address 192.168.10.2 --keyring-backend=test ; fi
|
|
docker-compose up -d
|
|
|
|
localnet-stop:
|
|
docker-compose down
|
|
|
|
.PHONY: localnet-start localnet-stop
|
|
|
|
###############################################################################
|
|
### rosetta ###
|
|
###############################################################################
|
|
# builds rosetta test data dir
|
|
rosetta-data:
|
|
-docker container rm data_dir_build
|
|
docker build -t rosetta-ci:latest -f contrib/rosetta/node/Dockerfile .
|
|
docker run --name data_dir_build -t rosetta-ci:latest sh /rosetta/data.sh
|
|
docker cp data_dir_build:/tmp/data.tar.gz "$(CURDIR)/contrib/rosetta/node/data.tar.gz"
|
|
docker container rm data_dir_build
|
|
.PHONY: rosetta-data
|