Merge pull request #312 from im-kulikov/Update-Makefile_Dockerfile_Readme

- Make Dockerfile useful and minimal
- Update Makefile commands build / image
- Docker should not ignore vendor (go build -mod=vendor)
- Used git to receive version from tags (see #304)
- Version now displayed when start node (fix #102)
```
    Example:
    
    → ./bin/node --version
    neo-go version 0.44.10-245-g67d5e9f
    
    → ./bin/node -v
    neo-go version 0.44.10-245-g67d5e9f
```
- add go minimal version
- fix dependency manager
This commit is contained in:
Evgeniy Kulikov 2019-08-26 19:35:21 +03:00 committed by GitHub
commit 46ce10cbc3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 54 additions and 21 deletions

View file

@ -1,3 +1,2 @@
vendor
.git
chains

View file

@ -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"]

View file

@ -1,19 +1,24 @@
BRANCH = "master"
BUILD_TIME = "$(shell date -u +\"%Y-%m-%dT%H:%M:%SZ\")"
VERSION = $(shell cat ./VERSION)
REPONAME = "neo-go"
NETMODE ?= "privnet"
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
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-image:
docker build -t cityofzion/neo-go --build-arg VERSION=${VERSION} .
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-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})
@ -25,7 +30,8 @@ clean-cluster:
@docker-compose rm -f
deps:
@dep ensure
@go mod tidy -v
@go mod vendor
push-tag:
git checkout ${BRANCH}

View file

@ -31,9 +31,11 @@ A complete toolkit for the NEO blockchain, including:
## Installation
Go: 1.11+
Install dependencies.
`neo-go` uses [dep](https://github.com/golang/dep) as its dependency manager. After installing `deps` you can run:
`neo-go` uses [GoModules](https://github.com/golang/go/wiki/Modules) as dependency manager:
```
make deps

View file

@ -7,12 +7,14 @@ import (
"github.com/CityOfZion/neo-go/cli/smartcontract"
"github.com/CityOfZion/neo-go/cli/vm"
"github.com/CityOfZion/neo-go/cli/wallet"
"github.com/CityOfZion/neo-go/config"
"github.com/urfave/cli"
)
func main() {
ctl := cli.NewApp()
ctl.Name = "neo-go"
ctl.Version = config.Version
ctl.Usage = "Official Go client for Neo"
ctl.Commands = []cli.Command{