diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index 86872664..9b422dd0 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -47,7 +47,7 @@ jobs: - name: Compile finschia run: | - make build-reproducible-${{ matrix.arch }} + make build-reproducible ARCH=${{ matrix.arch }} cd ./build mv fnsad-linux-${{ matrix.arch }} fnsad-${{ env.ID }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ecca5de..3fba04da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (ci) [\#185](https://github.com/Finschia/finschia/pull/185) update `tag.yml` github action * (ci) [\#189](https://github.com/Finschia/finschia/pull/189) add dependabot github action * (ci) [\#213](https://github.com/Finschia/finschia/pull/213) add mergify ci +* (build) [\#237](https://github.com/Finschia/finschia/pull/237) rearrange Dockerfile and Makefile commands ### Docs diff --git a/Makefile b/Makefile index c94fc518..8bcf5de2 100644 --- a/Makefile +++ b/Makefile @@ -18,15 +18,16 @@ GO_VERSION := $(shell cat go.mod | grep -E 'go [0-9].[0-9]+' | cut -d ' ' -f 2) OST_VERSION := $(shell go list -m github.com/Finschia/ostracon | sed 's:.* ::') # grab everything after the space in "github.com/Finschia/ostracon v0.34.7" DOCKER := $(shell which docker) BUILDDIR ?= $(CURDIR)/build -TEST_DOCKER_REPO=jackzampolin/linktest CGO_ENABLED ?= 1 -ARCH ?= x86_64 -TARGET_PLATFORM ?= linux/amd64 +ARCH ?= amd64 +TARGET_PLATFORM = linux/amd64 +TARGET_ARCH = x86_64 export GO111MODULE = on -ifeq ($(ARCH), aarch64) - TARGET_PLATFORM=linux/arm64 +ifeq ($(ARCH), arm64) + TARGET_PLATFORM = linux/arm64 + TARGET_ARCH = aarch64 endif # process build tags @@ -142,17 +143,13 @@ ifeq (darwin, $(shell go env GOOS)) LIBWASMVM ?= libwasmvm.dylib else ifeq (linux, $(shell go env GOOS)) - LIBWASMVM ?= libwasmvm.$(ARCH).so + LIBWASMVM ?= libwasmvm.$(TARGET_ARCH).so else echo "ERROR: unsupported platform: $(shell go env GOOS)" exit 1 endif endif -#$(info $$BUILD_FLAGS is [$(BUILD_FLAGS)]) - -# The below include contains the tools target. -include contrib/devtools/Makefile ############################################################################### ### Documentation ### @@ -165,29 +162,6 @@ build: BUILD_ARGS=-o $(BUILDDIR)/ build: go.sum $(BUILDDIR)/ dbbackend $(LIBSODIUM_TARGET) CGO_CFLAGS=$(CGO_CFLAGS) CGO_LDFLAGS=$(CGO_LDFLAGS) CGO_ENABLED=$(CGO_ENABLED) go build -mod=readonly $(BUILD_FLAGS) $(BUILD_ARGS) ./... -# USAGE: go env -w GOARCH={amd64|arm64} && make clean build-release-bundle VERSION=v0.0.0 -RELEASE_BUNDLE=finschia-$(VERSION)-$(shell go env GOOS)-$(shell go env GOARCH) -LIBWASMVM_VERSION=$(shell go list -m github.com/Finschia/wasmvm | awk '{print $$2}') -LIBWASMVM_PATH=$(shell find $(shell go env GOMODCACHE) -name $(LIBWASMVM) -type f | grep "$(LIBWASMVM_VERSION)") -build-release-bundle: build - @if [ "$(shell go env GOOS)" != "$(shell go env GOHOSTOS)" ]; then echo "ERROR: OS not match"; exit 1; fi - @if [ -z "${LIBWASMVM_PATH}" ]; then echo "ERROR: $(LIBWASMVM) $(LIBWASMVM_VERSION) not found: $(shell go env GOMODCACHE)"; exit 1; fi - @if [ ! -f "${LIBWASMVM_PATH}" ]; then echo "ERROR: Multiple version of $(LIBWASMVM) found: ${LIBWASMVM_PATH}"; exit 1; fi - @mkdir -p $(BUILDDIR)/$(RELEASE_BUNDLE) - @cp $(BUILDDIR)/fnsad $(BUILDDIR)/$(RELEASE_BUNDLE)/$(RELEASE_BUNDLE) - @cp "$(LIBWASMVM_PATH)" $(BUILDDIR)/$(RELEASE_BUNDLE)/ - @case "$(shell go env GOHOSTOS),$(shell go env GOHOSTARCH),$(shell go env GOARCH)" in \ - *,amd64,amd64 | *,arm64,arm64 | darwin,arm64,*) \ - LD_LIBRARY_PATH=$(BUILDDIR)/$(RELEASE_BUNDLE) $(BUILDDIR)/$(RELEASE_BUNDLE)/$(RELEASE_BUNDLE) version; \ - if [ $$? -ne 0 ]; then echo "ERROR: Test execution failed."; printenv; go env; exit 1; fi; \ - echo "OK: Test execution confirmed.";; \ - *) \ - echo "SKIP: Test execution unconfirmed.";; \ - esac - @cd $(BUILDDIR) && tar zcvf ./$(RELEASE_BUNDLE).tgz $(RELEASE_BUNDLE)/ > /dev/null 2>&1 - @rm -rf $(BUILDDIR)/$(RELEASE_BUNDLE)/ - @echo "Built: $(BUILDDIR)/$(RELEASE_BUNDLE).tgz" - install: go.sum $(BUILDDIR)/ dbbackend $(LIBSODIUM_TARGET) CGO_CFLAGS=$(CGO_CFLAGS) CGO_LDFLAGS=$(CGO_LDFLAGS) CGO_ENABLED=$(CGO_ENABLED) go install $(BUILD_FLAGS) $(BUILD_ARGS) ./cmd/fnsad @@ -230,9 +204,7 @@ else dbbackend: endif -build-reproducible: build-reproducible-amd64 build-reproducible-arm64 - -build-reproducible-amd64: go.sum +build-reproducible: go.sum mkdir -p $(BUILDDIR) $(DOCKER) buildx create --name finschiabuilder || true $(DOCKER) buildx use finschiabuilder @@ -242,39 +214,15 @@ build-reproducible-amd64: go.sum --build-arg GIT_COMMIT=$(COMMIT) \ --build-arg OST_VERSION=$(OST_VERSION) \ --build-arg RUNNER_IMAGE=alpine:3.17 \ - --platform linux/amd64 \ - -t finschia/finschianode:local-amd64 \ + --platform $(TARGET_PLATFORM) \ + -t finschia/finschianode:local-$(ARCH) \ --load \ -f Dockerfile . $(DOCKER) rm -f finschiabinary || true - $(DOCKER) create -ti --name finschiabinary finschia/finschianode:local-amd64 - $(DOCKER) cp finschiabinary:/usr/bin/fnsad $(BUILDDIR)/fnsad-linux-amd64 + $(DOCKER) create -ti --name finschiabinary finschia/finschianode:local-$(ARCH) + $(DOCKER) cp finschiabinary:/usr/bin/fnsad $(BUILDDIR)/fnsad-linux-$(ARCH) $(DOCKER) rm -f finschiabinary -build-reproducible-arm64: go.sum - mkdir -p $(BUILDDIR) - $(DOCKER) buildx create --name finschiabuilder || true - $(DOCKER) buildx use finschiabuilder - $(DOCKER) buildx build \ - --build-arg GO_VERSION=$(GO_VERSION) \ - --build-arg GIT_VERSION=$(VERSION) \ - --build-arg GIT_COMMIT=$(COMMIT) \ - --build-arg OST_VERSION=$(OST_VERSION) \ - --build-arg RUNNER_IMAGE=alpine:3.17 \ - --platform linux/arm64 \ - -t finschia/finschianode:local-arm64 \ - --load \ - -f Dockerfile . - $(DOCKER) rm -f finschiabinary || true - $(DOCKER) create -ti --name finschiabinary finschia/finschianode:local-arm64 - $(DOCKER) cp finschiabinary:/usr/bin/fnsad $(BUILDDIR)/fnsad-linux-arm64 - $(DOCKER) rm -f finschiabinary - - -build-contract-tests-hooks: - mkdir -p $(BUILDDIR) - go build -mod=readonly $(BUILD_FLAGS) -o $(BUILDDIR)/ ./cmd/contract_tests - go-mod-cache: go.sum @echo "--> Download go modules to local cache" @go mod download @@ -328,7 +276,7 @@ sync-docs: include sims.mk -test: test-unit test-build +test: test-unit test-all: test-race test-cover @@ -368,6 +316,7 @@ docker-build: --build-arg OST_VERSION=$(OST_VERSION) \ --platform=$(TARGET_PLATFORM) \ -f Dockerfile . +.PHONY: docker-build ############################################################################### ### Linting ### @@ -386,9 +335,6 @@ format: ### Localnet ### ############################################################################### -build-docker-finschianode: - $(MAKE) -C networks/local - localnet-docker-build: @DOCKER_BUILDKIT=1 docker build \ -t finschia/finschianode:localnet \ @@ -398,7 +344,7 @@ localnet-docker-build: --build-arg GIT_COMMIT=$(COMMIT) \ --build-arg OST_VERSION=$(OST_VERSION) \ --platform=$(TARGET_PLATFORM) \ - -f builders/Dockerfile.static . + -f networks/local/finschianode/Dockerfile . # Run a 4-node testnet locally localnet-start: localnet-stop localnet-docker-build localnet-build-nodes @@ -412,23 +358,11 @@ localnet-build-nodes: localnet-stop: docker-compose down -test-docker: - @docker build -f contrib/Dockerfile.test -t ${TEST_DOCKER_REPO}:$(shell git rev-parse --short HEAD) . - @docker tag ${TEST_DOCKER_REPO}:$(shell git rev-parse --short HEAD) ${TEST_DOCKER_REPO}:$(shell git rev-parse --abbrev-ref HEAD | sed 's#/#_#g') - @docker tag ${TEST_DOCKER_REPO}:$(shell git rev-parse --short HEAD) ${TEST_DOCKER_REPO}:latest - -test-docker-push: test-docker - @docker push ${TEST_DOCKER_REPO}:$(shell git rev-parse --short HEAD) - @docker push ${TEST_DOCKER_REPO}:$(shell git rev-parse --abbrev-ref HEAD | sed 's#/#_#g') - @docker push ${TEST_DOCKER_REPO}:latest - .PHONY: all install format lint \ go-mod-cache draw-deps clean build \ - setup-transactions setup-contract-tests-data start-link run-lcd-contract-tests contract-tests \ - test test-all test-build test-cover test-unit test-race \ + test test-all test-cover test-unit test-race \ benchmark \ - build-docker-finschianode localnet-start localnet-stop \ - docker-single-node + localnet-start localnet-stop ############################################################################### ### tools ### @@ -461,4 +395,5 @@ libsodium: proto-swagger-gen: @echo "Generating Protobuf Swagger" ./scripts/generate-docs.sh - $(GOPATH)/bin/statik -src=client/docs/swagger-ui -dest=client/docs -f -m + statik -src=client/docs/swagger-ui -dest=client/docs -f -m +.PHONY: proto-swagger-gen diff --git a/README.md b/README.md index d134558d..fdd1ab87 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ _Note1_ If you are using M1 mac, you need to specify build args like this: ``` -make docker-build ARCH=aarch64 +make docker-build ARCH=arm64 ``` **Configure** diff --git a/builders/Dockerfile.static b/builders/Dockerfile.static deleted file mode 100644 index f6c98b32..00000000 --- a/builders/Dockerfile.static +++ /dev/null @@ -1,79 +0,0 @@ -# Simple usage with a mounted data directory: -# > docker build --platform="linux/amd64" -t finschia/finschianode -f builders/Dockerfile.static . --build-arg ARCH=x86_64 -# > docker run -it -p 26656:26656 -p 26657:26657 -v ~/.finschia:/root/.finschia -v finschia/finschianode fnsad init -# > docker run -it -p 26656:26656 -p 26657:26657 -v ~/.finschia:/root/.finschia -v finschia/finschianode fnsad start --rpc.laddr=tcp://0.0.0.0:26657 --p2p.laddr=tcp://0.0.0.0:26656 - -ARG GO_VERSION="1.18" -ARG RUNNER_IMAGE="alpine:3.17" - -FROM golang:${GO_VERSION}-alpine AS build-env - -ARG FINSCHIA_BUILD_OPTIONS="" -ARG GIT_VERSION -ARG GIT_COMMIT -ARG OST_VERSION - -# Set up OS dependencies -RUN apk add --no-cache ca-certificates build-base linux-headers curl - -# Set WORKDIR to finschia -WORKDIR /finschia-build/finschia - -#COPY ./Makefile ./ -#COPY ./contrib ./contrib -#COPY ./sims.mk ./ - -# Install GO dependencies -COPY go.mod go.sum ./ -RUN --mount=type=cache,target=/root/.cache/go-build \ - --mount=type=cache,target=/root/go/pkg/mod \ - go mod download - -# Install libwasmvm.*.a -RUN ARCH=$(uname -m) && WASMVM_VERSION=$(go list -m github.com/Finschia/wasmvm | awk '{print $2}' | grep -o 'v\d\+\.\d\+\.\d\+-\d\+\.\d\+\.\d\+') && \ - curl -L -f -o /lib/libwasmvm_muslc.a https://github.com/Finschia/wasmvm/releases/download/$WASMVM_VERSION/libwasmvm_muslc.$ARCH.a && ls -al /lib/libwasmvm_muslc.a && \ - # verify checksum - curl -L -f -o /tmp/checksums.txt https://github.com/Finschia/wasmvm/releases/download/$WASMVM_VERSION/checksums.txt && ls -al /tmp/checksums.txt && \ - sha256sum /lib/libwasmvm_muslc.a | grep $(cat /tmp/checksums.txt | grep libwasmvm_muslc.$ARCH | cut -d ' ' -f 1) - -# Add source files -COPY . . - -# prepare dbbackend before building; this can be cached -#RUN make dbbackend FINSCHIA_BUILD_OPTIONS="$FINSCHIA_BUILD_OPTIONS" - -# Build fnsad binary -RUN --mount=type=cache,target=/root/.cache/go-build \ - --mount=type=cache,target=/root/go/pkg/mod \ - GOWORK=off go build \ - -mod=readonly \ - -tags "netgo,ledger,muslc,goleveldb" \ - -ldflags \ - "-X github.com/Finschia/finschia-sdk/version.Name=finschia \ - -X github.com/Finschia/finschia-sdk/version.AppName=fnsad \ - -X github.com/Finschia/finschia-sdk/version.Version=${GIT_VERSION} \ - -X github.com/Finschia/finschia-sdk/version.Commit=${GIT_COMMIT} \ - -X github.com/Finschia/ostracon/version.TMCoreSemVer=${OST_VERSION} \ - -X github.com/Finschia/finschia-sdk/types.DBBackend=goleveldb \ - -X github.com/Finschia/finschia-sdk/version.BuildTags=netgo,ledger,muslc,goleveldb \ - -w -s -linkmode=external -extldflags '-Wl,-z,muldefs -static'" \ - -trimpath \ - -o /finschia-build/finschia/build/fnsad \ - /finschia-build/finschia/cmd/fnsad - -# Final image -FROM ${RUNNER_IMAGE} - -# Set up OS dependencies -#RUN apk add --update --no-cache libstdc++ ca-certificates -COPY networks/local/finschianode/wrapper.sh /usr/bin/wrapper.sh - -VOLUME /finschia -# Copy over binaries from the build-env -COPY --from=build-env /finschia-build/finschia/build/fnsad /finschia/ -WORKDIR /finschia - -EXPOSE 26656 26657 -ENTRYPOINT ["/usr/bin/wrapper.sh"] -CMD ["start"] -STOPSIGNAL SIGTERM \ No newline at end of file diff --git a/builders/Dockerfile.static_centos7 b/builders/Dockerfile.static_centos7 deleted file mode 100644 index 0a8f8412..00000000 --- a/builders/Dockerfile.static_centos7 +++ /dev/null @@ -1,64 +0,0 @@ -# make image -# > docker build -t finschia/finschia-builder:static -f builders/Dockerfile.static_centos7 . -# -# run build -# > docker run -it --rm -v $(pwd):/code finschia/finschia-builder:static_centos7 -# -# make image and run build -# > docker run -it --rm -v $(pwd):/code -e FINSCHIA_BUILD_OPTIONS=rocksdb $(docker build -f builders/Dockerfile.static_centos7 -q .) - -FROM centos:centos7 - -ENV FINSCHIA_BUILD_OPTIONS="goleveldb" - - -RUN yum -y update && \ - yum -y install \ - ca-certificates \ - curl \ - gcc \ - gcc-c++ \ - glibc-devel \ - make \ - git \ - which \ - libstdc++ \ - libstdc++-static \ - wget \ - python3 - -# install rust -RUN mkdir /rust -WORKDIR /rust - -ENV RUSTUP_HOME=/usr/local/rustup -ENV CARGO_HOME=/usr/local/cargo -ENV PATH=$CARGO_HOME/bin:$PATH - -RUN wget "https://static.rust-lang.org/rustup/dist/x86_64-unknown-linux-gnu/rustup-init" -RUN chmod +x rustup-init -RUN ./rustup-init -y --no-modify-path --default-toolchain 1.53.0; rm rustup-init -RUN chmod -R a+w $RUSTUP_HOME $CARGO_HOME - -RUN sh -c "curl https://sh.rustup.rs -sSf | sh -s -- -y" -ENV PATH=$HOME/.cargo/bin:$PATH - -# install go -WORKDIR /tmp -ADD https://golang.org/dl/go1.18.5.linux-amd64.tar.gz . -RUN tar -C /usr/local -xzf go1.18.5.linux-amd64.tar.gz -ENV PATH=/usr/local/go/bin:$PATH - -# install cmake3(required by snappy, If use yum, it installs as version 2) -RUN wget https://cmake.org/files/v3.12/cmake-3.12.3.tar.gz -RUN tar zxvf cmake-3.* -RUN cd cmake-3.* && ./bootstrap --prefix=/usr/local -RUN cd cmake-3.* && make install - -WORKDIR /code - -# copy build script -COPY builders/scripts/build-static.sh builders/scripts/build-static.sh - -# build Finschia -ENTRYPOINT builders/scripts/build-static.sh diff --git a/contrib/Dockerfile.test b/contrib/Dockerfile.test deleted file mode 100644 index 4aecf89e..00000000 --- a/contrib/Dockerfile.test +++ /dev/null @@ -1,35 +0,0 @@ -# Simple usage with a mounted data directory: -# > docker build -t link . -# > docker run -it -p 46657:46657 -p 46656:46656 -v ~/.finschia:/root/.finschia -v ~/.linkcli:/root/.linkcli link fnsad init -# > docker run -it -p 46657:46657 -p 46656:46656 -v ~/.finschia:/root/.finschia -v ~/.linkcli:/root/.linkcli link fnsad start -FROM golang:1.18-alpine AS build-env - -# Set up dependencies -ENV PACKAGES curl make git libc-dev bash gcc linux-headers eudev-dev python3 - -# Set working directory for the build -WORKDIR /go/src/github.com/cosmos/link - -# Add source files -COPY . . - -# Install minimum necessary dependencies, build Cosmos SDK, remove packages -RUN apk add --no-cache $PACKAGES && \ - make install - -# Final image -FROM alpine:edge - -# Install ca-certificates -RUN apk add --update ca-certificates -WORKDIR /root - -# Copy over binaries from the build-env -COPY --from=build-env /go/bin/fnsad /usr/bin/fnsad - -COPY ./contrib/single-node.sh . - -EXPOSE 26657 - -ENTRYPOINT [ "./single-node.sh" ] -# NOTE: to run this image, docker run -d -p 26657:26657 ./single-node.sh {{chain_id}} {{genesis_account}} diff --git a/contrib/devtools/Makefile b/contrib/devtools/Makefile deleted file mode 100644 index 8cfcc905..00000000 --- a/contrib/devtools/Makefile +++ /dev/null @@ -1,114 +0,0 @@ -### -# Find OS and Go environment -# GO contains the Go binary -# FS contains the OS file separator -### -ifeq ($(OS),Windows_NT) - GO := $(shell where go.exe 2> NUL) - FS := \\ -else - GO := $(shell command -v go 2> /dev/null) - FS := / -endif - -ifeq ($(GO),) - $(error could not find go. Is it in PATH? $(GO)) -endif - -GOPATH ?= $(shell $(GO) env GOPATH) -GITHUBDIR := $(GOPATH)$(FS)src$(FS)github.com - -### -# Functions -### - -go_get = $(if $(findstring Windows_NT,$(OS)),\ -IF NOT EXIST $(GITHUBDIR)$(FS)$(1)$(FS) ( mkdir $(GITHUBDIR)$(FS)$(1) ) else (cd .) &\ -IF NOT EXIST $(GITHUBDIR)$(FS)$(1)$(FS)$(2)$(FS) ( cd $(GITHUBDIR)$(FS)$(1) && git clone https://github.com/$(1)/$(2) ) else (cd .) &\ -,\ -mkdir -p $(GITHUBDIR)$(FS)$(1) &&\ -(test ! -d $(GITHUBDIR)$(FS)$(1)$(FS)$(2) && cd $(GITHUBDIR)$(FS)$(1) && git clone https://github.com/$(1)/$(2)) || true &&\ -)\ -cd $(GITHUBDIR)$(FS)$(1)$(FS)$(2) && git fetch origin && git checkout -q $(3) - -go_install = $(call go_get,$(1),$(2),$(3)) && cd $(GITHUBDIR)$(FS)$(1)$(FS)$(2) && $(GO) install - -mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) -mkfile_dir := $(shell cd $(shell dirname $(mkfile_path)); pwd) - -############################################################################### -### Tools ### -############################################################################### - -BIN ?= /usr/local/bin -UNAME_S ?= $(shell uname -s) -UNAME_M ?= $(shell uname -m) - -TOOLS_DESTDIR ?= $(GOPATH)/bin -RUNSIM = $(TOOLS_DESTDIR)/runsim - -BUF_VERSION ?= 0.7.0 -PROTOC_VERSION ?= 3.11.2 - -ifeq ($(UNAME_S),Linux) - PROTOC_ZIP ?= protoc-3.11.2-linux-x86_64.zip -endif -ifeq ($(UNAME_S),Darwin) - PROTOC_ZIP ?= protoc-3.11.2-osx-x86_64.zip -endif - -all: tools - -tools: tools-stamp - -tools-stamp: $(RUNSIM) - touch $@ - -# Install the runsim binary with a temporary workaround of entering an outside -# directory as the "go get" command ignores the -mod option and will polute the -# go.{mod, sum} files. -# -# ref: https://github.com/golang/go/issues/30515 -runsim: $(RUNSIM) -$(RUNSIM): - @echo "Installing runsim..." - @(cd /tmp && go get github.com/cosmos/tools/cmd/runsim@v1.0.0) - -protoc: - @echo "Installing protoc compiler..." - @(cd /tmp; \ - curl -sSOL "https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/${PROTOC_ZIP}"; \ - unzip -o ${PROTOC_ZIP} -d /usr/local bin/protoc; \ - unzip -o ${PROTOC_ZIP} -d /usr/local 'include/*'; \ - rm -f ${PROTOC_ZIP}) - -protoc-gen-gocosmos: - @echo "Installing protoc-gen-gocosmos..." - @go install github.com/regen-network/cosmos-proto/protoc-gen-gocosmos - -buf: protoc-gen-buf-check-breaking protoc-gen-buf-check-lint - @echo "Installing buf..." - @(cd /tmp; \ - curl -sSOL "https://github.com/bufbuild/buf/releases/download/v${BUF_VERSION}/buf-${UNAME_S}-${UNAME_M}"; \ - mv buf-${UNAME_S}-${UNAME_M} "${BIN}/buf"; \ - chmod +x "${BIN}/buf") - -protoc-gen-buf-check-breaking: - @echo "Installing protoc-gen-buf-check-breaking..." - @(cd /tmp; \ - curl -sSOL "https://github.com/bufbuild/buf/releases/download/v${BUF_VERSION}/protoc-gen-buf-check-breaking-${UNAME_S}-${UNAME_M}"; \ - mv protoc-gen-buf-check-breaking-${UNAME_S}-${UNAME_M} "${BIN}/protoc-gen-buf-check-breaking"; \ - chmod +x "${BIN}/protoc-gen-buf-check-breaking") - -protoc-gen-buf-check-lint: - @echo "Installing protoc-gen-buf-check-lint..." - @(cd /tmp; \ - curl -sSOL "https://github.com/bufbuild/buf/releases/download/v${BUF_VERSION}/protoc-gen-buf-check-lint-${UNAME_S}-${UNAME_M}"; \ - mv protoc-gen-buf-check-lint-${UNAME_S}-${UNAME_M} "${BIN}/protoc-gen-buf-check-lint"; \ - chmod +x "${BIN}/protoc-gen-buf-check-lint") - -tools-clean: - rm -f $(RUNSIM) - rm -f tools-stamp - -.PHONY: all tools tools-clean protoc buf protoc-gen-buf-check-breaking protoc-gen-buf-check-lint protoc-gen-gocosmos diff --git a/networks/local/Makefile b/networks/local/Makefile deleted file mode 100644 index 565ec436..00000000 --- a/networks/local/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -# Makefile for the "finschianode" docker image. - -all: - docker build --tag finschia/finschianode finschianode - -.PHONY: all - diff --git a/networks/local/finschianode/Dockerfile b/networks/local/finschianode/Dockerfile index 88c84a08..ce273821 100644 --- a/networks/local/finschianode/Dockerfile +++ b/networks/local/finschianode/Dockerfile @@ -1,24 +1,73 @@ -#FROM alpine:3.10.2 -# -#RUN apk update && \ -# apk upgrade && \ -# apk --no-cache add curl jq file +# This Dockerfile is used for localnet multinode testing. +# Simple usage with a mounted data directory: +# > docker build --platform="linux/amd64" -t finschia/finschianode:localnet -f networks/local/finschianode . --build-arg ARCH=amd64 +# > docker run -it -p 26656:26656 -p 26657:26657 -v ~/.finschia:/root/.finschia -v networks/local/finschianode fnsad init +# > docker run -it -p 26656:26656 -p 26657:26657 -v ~/.finschia:/root/.finschia -v networks/local/finschianode fnsad start --rpc.laddr=tcp://0.0.0.0:26657 --p2p.laddr=tcp://0.0.0.0:26656 -# Changed from Alpine to Ubuntu because the keyring PR is linking to libc -# Alpine uses muslc instead of libc +ARG GO_VERSION="1.18" +ARG RUNNER_IMAGE="alpine:3.17" -FROM ubuntu:18.04 +FROM golang:${GO_VERSION}-alpine AS build-env -RUN apt-get update && \ - apt-get -y upgrade && \ - apt-get -y install curl jq file +ARG FINSCHIA_BUILD_OPTIONS="" +ARG GIT_VERSION +ARG GIT_COMMIT +ARG OST_VERSION -VOLUME [ /finschia ] +# Set up OS dependencies +RUN apk add --no-cache ca-certificates build-base linux-headers curl + +# Set WORKDIR to finschia +WORKDIR /finschia-build/finschia + +# Install GO dependencies +COPY go.mod go.sum ./ +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/root/go/pkg/mod \ + go mod download + +# Install libwasmvm.*.a +RUN ARCH=$(uname -m) && WASMVM_VERSION=$(go list -m github.com/Finschia/wasmvm | awk '{print $2}' | grep -o 'v\d\+\.\d\+\.\d\+-\d\+\.\d\+\.\d\+') && \ + curl -L -f -o /lib/libwasmvm_muslc.a https://github.com/Finschia/wasmvm/releases/download/$WASMVM_VERSION/libwasmvm_muslc.$ARCH.a && ls -al /lib/libwasmvm_muslc.a && \ + # verify checksum + curl -L -f -o /tmp/checksums.txt https://github.com/Finschia/wasmvm/releases/download/$WASMVM_VERSION/checksums.txt && ls -al /tmp/checksums.txt && \ + sha256sum /lib/libwasmvm_muslc.a | grep $(cat /tmp/checksums.txt | grep libwasmvm_muslc.$ARCH | cut -d ' ' -f 1) + +# Add source files +COPY . . + +# Build fnsad binary +RUN --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/root/go/pkg/mod \ + GOWORK=off go build \ + -mod=readonly \ + -tags "netgo,ledger,muslc,goleveldb" \ + -ldflags \ + "-X github.com/Finschia/finschia-sdk/version.Name=finschia \ + -X github.com/Finschia/finschia-sdk/version.AppName=fnsad \ + -X github.com/Finschia/finschia-sdk/version.Version=${GIT_VERSION} \ + -X github.com/Finschia/finschia-sdk/version.Commit=${GIT_COMMIT} \ + -X github.com/Finschia/ostracon/version.TMCoreSemVer=${OST_VERSION} \ + -X github.com/Finschia/finschia-sdk/types.DBBackend=goleveldb \ + -X github.com/Finschia/finschia-sdk/version.BuildTags=netgo,ledger,muslc,goleveldb \ + -w -s -linkmode=external -extldflags '-Wl,-z,muldefs -static'" \ + -trimpath \ + -o /finschia-build/finschia/build/fnsad \ + /finschia-build/finschia/cmd/fnsad + +# Final image +FROM ${RUNNER_IMAGE} + +# Set up OS dependencies +#RUN apk add --update --no-cache libstdc++ ca-certificates +COPY networks/local/finschianode/wrapper.sh /usr/bin/wrapper.sh + +VOLUME /finschia +# Copy over binaries from the build-env +COPY --from=build-env /finschia-build/finschia/build/fnsad /finschia/ WORKDIR /finschia + EXPOSE 26656 26657 ENTRYPOINT ["/usr/bin/wrapper.sh"] CMD ["start"] -STOPSIGNAL SIGTERM - -COPY wrapper.sh /usr/bin/wrapper.sh - +STOPSIGNAL SIGTERM \ No newline at end of file