forked from TrueCloudLab/neoneo-go
613f6e4350
1. Build privnet image for WSC. 2. Automatically define OS to build image and privnet image. 3. Unify image building code for Ubuntu and WSC.
137 lines
4.3 KiB
Makefile
137 lines
4.3 KiB
Makefile
BRANCH = "master"
|
|
REPONAME = "neo-go"
|
|
NETMODE ?= "privnet"
|
|
BINARY=./bin/neo-go$(shell go env GOEXE)
|
|
DESTDIR = ""
|
|
SYSCONFIGDIR = "/etc"
|
|
BINDIR = "/usr/bin"
|
|
SYSTEMDUNIT_DIR = "/lib/systemd/system"
|
|
UNITWORKDIR = "/var/lib/neo-go"
|
|
|
|
IMAGE_SUFFIX="$(shell if [ "$(OS)" = Windows_NT ]; then echo "_WindowsServerCore"; fi)"
|
|
D_FILE ?= "$(shell if [ "$(OS)" = Windows_NT ]; then echo "Dockerfile.wsc"; else echo "Dockerfile"; fi)"
|
|
DC_FILE ?= ".docker/docker-compose.yml" # Single docker-compose for Ubuntu/WSC, should be kept in sync with ENV_IMAGE_TAG.
|
|
ENV_IMAGE_TAG="env_neo_go_image"
|
|
|
|
REPO ?= "$(shell go list -m)"
|
|
VERSION ?= "$(shell git describe --tags 2>/dev/null | sed 's/^v//')"
|
|
MODVERSION ?= "$(shell cat go.mod | cat go.mod | sed -r -n -e 's|.*pkg/interop (.*)|\1|p')"
|
|
BUILD_FLAGS = "-X '$(REPO)/pkg/config.Version=$(VERSION)' -X '$(REPO)/cli/smartcontract.ModVersion=$(MODVERSION)'"
|
|
|
|
IMAGE_REPO=nspccdev/neo-go
|
|
|
|
# All of the targets are phony here because we don't really use make dependency
|
|
# tracking for files
|
|
.PHONY: build deps image image-latest image-push image-push-latest check-version clean-cluster push-tag \
|
|
test vet lint fmt cover
|
|
|
|
build: deps
|
|
@echo "=> Building binary"
|
|
@set -x \
|
|
&& export GOGC=off \
|
|
&& export CGO_ENABLED=0 \
|
|
&& go build -trimpath -v -ldflags $(BUILD_FLAGS) -o ${BINARY} ./cli/main.go
|
|
|
|
neo-go.service: neo-go.service.template
|
|
@sed -r -e 's_BINDIR_$(BINDIR)_' -e 's_UNITWORKDIR_$(UNITWORKDIR)_' -e 's_SYSCONFIGDIR_$(SYSCONFIGDIR)_' $< >$@
|
|
|
|
install: build neo-go.service
|
|
@echo "=> Installing systemd service"
|
|
@mkdir -p $(DESTDIR)$(SYSCONFIGDIR)/neo-go \
|
|
&& mkdir -p $(SYSTEMDUNIT_DIR) \
|
|
&& cp ./neo-go.service $(SYSTEMDUNIT_DIR) \
|
|
&& cp ./config/protocol.mainnet.yml $(DESTDIR)$(SYSCONFIGDIR)/neo-go \
|
|
&& cp ./config/protocol.privnet.yml $(DESTDIR)$(SYSCONFIGDIR)/neo-go \
|
|
&& cp ./config/protocol.testnet.yml $(DESTDIR)$(SYSCONFIGDIR)/neo-go \
|
|
&& install -m 0755 -t $(BINDIR) $(BINARY) \
|
|
|
|
postinst: install
|
|
@echo "=> Preparing directories and configs"
|
|
@id neo-go || useradd -s /usr/sbin/nologin -d $(UNITWORKDIR) neo-go \
|
|
&& mkdir -p $(UNITWORKDIR) \
|
|
&& chown -R neo-go:neo-go $(UNITWORKDIR) $(BINDIR)/neo-go \
|
|
&& systemctl enable neo-go.service
|
|
|
|
image: deps
|
|
@echo "=> Building image"
|
|
@echo " Dockerfile: $(D_FILE)"
|
|
@echo " Tag: $(IMAGE_REPO):$(VERSION)$(IMAGE_SUFFIX)"
|
|
@docker build -f $(D_FILE) -t $(IMAGE_REPO):$(VERSION)$(IMAGE_SUFFIX) --build-arg REPO=$(REPO) --build-arg VERSION=$(VERSION) .
|
|
|
|
image-latest: deps
|
|
@echo "=> Building image with 'latest' tag"
|
|
@echo " Dockerfile: Dockerfile" # Always use default Dockerfile for Ubuntu as `latest`.
|
|
@echo " Tag: $(IMAGE_REPO):latest"
|
|
@docker build -t $(IMAGE_REPO):latest --build-arg REPO=$(REPO) --build-arg VERSION=$(VERSION) .
|
|
|
|
image-push:
|
|
@echo "=> Publish image"
|
|
@echo " Tag: $(IMAGE_REPO):$(VERSION)$(IMAGE_SUFFIX)"
|
|
@docker push $(IMAGE_REPO):$(VERSION)$(IMAGE_SUFFIX)
|
|
|
|
image-push-latest:
|
|
@echo "=> Publish image for Ubuntu with 'latest' tag"
|
|
@docker push $(IMAGE_REPO):latest
|
|
|
|
check-version:
|
|
git fetch && (! git rev-list ${VERSION})
|
|
|
|
deps:
|
|
@CGO_ENABLED=0 \
|
|
go mod download
|
|
@CGO_ENABLED=0 \
|
|
go mod tidy -v
|
|
|
|
push-tag:
|
|
git checkout ${BRANCH}
|
|
git pull origin ${BRANCH}
|
|
git tag ${VERSION}
|
|
git push origin ${VERSION}
|
|
|
|
test:
|
|
@go test ./... -cover
|
|
|
|
vet:
|
|
@go vet ./...
|
|
|
|
lint:
|
|
@golangci-lint run
|
|
|
|
fmt:
|
|
@gofmt -l -w -s $$(find . -type f -name '*.go'| grep -v "/vendor/")
|
|
|
|
cover:
|
|
@go test -v -race ./... -coverprofile=coverage.txt -covermode=atomic -coverpkg=./pkg/...,./cli/...
|
|
@go tool cover -html=coverage.txt -o coverage.html
|
|
|
|
# --- Ubuntu/Windows environment ---
|
|
env_image:
|
|
@echo "=> Building env image"
|
|
@echo " Dockerfile: $(D_FILE)"
|
|
@echo " Tag: $(ENV_IMAGE_TAG)"
|
|
@docker build \
|
|
-f $(D_FILE) \
|
|
-t $(ENV_IMAGE_TAG) \
|
|
--build-arg REPO=$(REPO) \
|
|
--build-arg VERSION=$(VERSION) .
|
|
|
|
env_up:
|
|
@echo "=> Bootup environment"
|
|
@echo " Docker-compose file: $(DC_FILE)"
|
|
@docker-compose -f $(DC_FILE) up -d node_one node_two node_three node_four
|
|
|
|
env_single:
|
|
@echo "=> Bootup environment"
|
|
@docker-compose -f $(DC_FILE) up -d node_single
|
|
|
|
env_down:
|
|
@echo "=> Stop environment"
|
|
@docker-compose -f $(DC_FILE) down
|
|
|
|
env_restart:
|
|
@echo "=> Stop and start environment"
|
|
@docker-compose -f $(DC_FILE) restart
|
|
|
|
env_clean: env_down
|
|
@echo "=> Cleanup environment"
|
|
@docker volume rm docker_volume_chain
|