From 9a79c004175904c36fbfeea5def4ca3f7f5c7053 Mon Sep 17 00:00:00 2001 From: Evgeniy Kulikov Date: Mon, 26 Aug 2019 17:26:42 +0300 Subject: [PATCH] Fix build node and docker-image - Make Dockerfile useful and minimal - Update Makefile commands build / image - Docker should not ignore vendor (go build -mod=vendor) --- .dockerignore | 1 - Dockerfile | 42 +++++++++++++++++++++++++++++++++--------- Makefile | 25 +++++++++++++++---------- 3 files changed, 48 insertions(+), 20 deletions(-) diff --git a/.dockerignore b/.dockerignore index 8f94841fb..6ebc43372 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,2 @@ -vendor .git chains diff --git a/Dockerfile b/Dockerfile index 160a732e0..c8114db1c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,40 @@ -FROM vidsyhq/go-base:latest -LABEL maintainers="anthdm,stevenjack" +# Builder image +FROM golang:1.12-alpine3.10 as builder -ENV NETMODE=testnet +RUN set -x \ + && apk add --no-cache git \ + && mkdir -p /tmp -ARG VERSION +COPY . /neo-go + +WORKDIR /neo-go + +ARG REPO=repository +ARG VERSION=dev + +# https://github.com/golang/go/wiki/Modules#how-do-i-use-vendoring-with-modules-is-vendoring-going-away +# go build -mod=vendor +RUN set -x \ + && export BUILD_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ") \ + && export GOGC=off \ + && export CGO_ENABLED=0 \ + && export LDFLAGS="-X ${REPO}/config.Version=${VERSION} -X ${REPO}/config.BuildTime=${BUILD_TIME}" \ + && go build -v -mod=vendor -ldflags "${LDFLAGS}" -o /go/bin/node ./cli/main.go + +# Executable image +FROM alpine:3.10 + +ENV NETMODE=testnet +ARG VERSION LABEL version=$VERSION -ADD bin/neo-go /usr/bin/neo-go -ADD config /config +WORKDIR / -RUN chmod u+x /usr/bin/neo-go -RUN mkdir -p /chains +ENV NETMODE=testnet +COPY --from=builder /neo-go/config /config +COPY --from=builder /go/bin/node /usr/bin/node +COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ + +ENTRYPOINT ["/usr/bin/node"] -ENTRYPOINT ["neo-go"] CMD ["node", "--config-path", "./config", "--testnet"] diff --git a/Makefile b/Makefile index bbd31495c..02d05f42a 100644 --- a/Makefile +++ b/Makefile @@ -3,18 +3,22 @@ BUILD_TIME = "$(shell date -u +\"%Y-%m-%dT%H:%M:%SZ\")" REPONAME = "neo-go" NETMODE ?= "privnet" +REPO ?= "$(shell go list -m)" VERSION ?= "$(shell git describe --tags 2>/dev/null | sed 's/^v//')" +BUILD_FLAGS = "-X $(REPO)/config.Version=$(VERSION) -X $(REPO)/config.BuildTime=$(BUILD_TIME)" -build: - @echo "=> Building darwin binary" - @go build -i -ldflags "-X github.com/CityOfZion/neo-go/config.Version=${VERSION}-dev -X github.com/CityOfZion/neo-go/config.BuildTime=${BUILD_TIME}" -o ./bin/neo-go ./cli/main.go +build: deps + @echo "=> Building binary" + @set -x \ + && export GOGC=off \ + && export CGO_ENABLED=0 \ + && echo $(VERSION)-$(BUILD_TIME) \ + && go build -v -mod=vendor -ldflags $(BUILD_FLAGS) -o ./bin/node ./cli/main.go -build-image: - docker build -t cityofzion/neo-go --build-arg VERSION=${VERSION} . - -build-linux: - @echo "=> Building linux binary" - @GOOS=linux go build -i -ldflags "-X github.com/CityOfZion/neo-go/config.Version=${VERSION}-dev -X github.com/CityOfZion/neo-go/config.BuildTime=${BUILD_TIME}" -o ./bin/neo-go ./cli/main.go +image: deps + @echo "=> Building image" + @docker build -t cityofzion/neo-go:latest --build-arg REPO=$(REPO) --build-arg VERSION=$(VERSION) . + @docker build -t cityofzion/neo-go:$(VERSION) --build-arg REPO=$(REPO) --build-arg VERSION=$(VERSION) . check-version: git fetch && (! git rev-list ${VERSION}) @@ -26,7 +30,8 @@ clean-cluster: @docker-compose rm -f deps: - @dep ensure + @go mod tidy -v + @go mod vendor push-tag: git checkout ${BRANCH}