github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/Makefile (about) 1 BRANCH = "master" 2 REPONAME = "neo-go" 3 NETMODE ?= "privnet" 4 BINARY=neo-go 5 BINARY_PATH=./bin/$(BINARY)$(shell go env GOEXE) 6 GO_VERSION ?= 1.20 7 DESTDIR = "" 8 SYSCONFIGDIR = "/etc" 9 BINDIR = "/usr/bin" 10 SYSTEMDUNIT_DIR = "/lib/systemd/system" 11 UNITWORKDIR = "/var/lib/neo-go" 12 13 IMAGE_SUFFIX="$(shell if [ "$(OS)" = Windows_NT ]; then echo "_WindowsServerCore"; fi)" 14 D_FILE ?= "$(shell if [ "$(OS)" = Windows_NT ]; then echo "Dockerfile.wsc"; else echo "Dockerfile"; fi)" 15 DC_FILE ?= ".docker/docker-compose.yml" # Single docker-compose for Ubuntu/WSC, should be kept in sync with ENV_IMAGE_TAG. 16 ENV_IMAGE_TAG="env_neo_go_image" 17 18 REPO ?= "$(shell go list -m)" 19 VERSION ?= "$(shell git describe --tags --match "v*" --abbrev=8 2>/dev/null | sed -r 's,^v([0-9]+\.[0-9]+)\.([0-9]+)(-.*)?$$,\1 \2 \3,' | while read mm patch suffix; do if [ -z "$$suffix" ]; then echo $$mm.$$patch; else patch=`expr $$patch + 1`; echo $$mm.$${patch}-pre$$suffix; fi; done)" 20 MODVERSION ?= "$(shell cat go.mod | cat go.mod | sed -r -n -e 's|.*pkg/interop (.*)|\1|p')" 21 BUILD_FLAGS = "-X '$(REPO)/pkg/config.Version=$(VERSION)' -X '$(REPO)/cli/smartcontract.ModVersion=$(MODVERSION)'" 22 23 IMAGE_REPO=nspccdev/neo-go 24 25 # All of the targets are phony here because we don't really use make dependency 26 # tracking for files 27 .PHONY: build $(BINARY) deps image docker/$(BINARY) image-latest image-push image-push-latest clean-cluster \ 28 test vet lint fmt cover version gh-docker-vars 29 30 build: deps 31 @echo "=> Building binary" 32 @set -x \ 33 && export GOGC=off \ 34 && export CGO_ENABLED=0 \ 35 && go build -trimpath -v -ldflags $(BUILD_FLAGS) -o ${BINARY_PATH} ./cli/main.go 36 37 $(BINARY): build 38 39 docker/$(BINARY): 40 @echo "=> Building binary using clean Docker environment" 41 @docker run --rm -t \ 42 -v `pwd`:/src \ 43 -w /src \ 44 -u "$$(id -u):$$(id -g)" \ 45 --env HOME=/src \ 46 golang:$(GO_VERSION) make $(BINARY) 47 48 neo-go.service: neo-go.service.template 49 @sed -r -e 's_BINDIR_$(BINDIR)_' -e 's_UNITWORKDIR_$(UNITWORKDIR)_' -e 's_SYSCONFIGDIR_$(SYSCONFIGDIR)_' $< >$@ 50 51 install: build neo-go.service 52 @echo "=> Installing systemd service" 53 @mkdir -p $(DESTDIR)$(SYSCONFIGDIR)/neo-go \ 54 && mkdir -p $(SYSTEMDUNIT_DIR) \ 55 && cp ./neo-go.service $(SYSTEMDUNIT_DIR) \ 56 && cp ./config/protocol.mainnet.yml $(DESTDIR)$(SYSCONFIGDIR)/neo-go \ 57 && cp ./config/protocol.privnet.yml $(DESTDIR)$(SYSCONFIGDIR)/neo-go \ 58 && cp ./config/protocol.testnet.yml $(DESTDIR)$(SYSCONFIGDIR)/neo-go \ 59 && install -m 0755 -t $(BINDIR) $(BINARY_PATH) \ 60 61 postinst: install 62 @echo "=> Preparing directories and configs" 63 @id neo-go || useradd -s /usr/sbin/nologin -d $(UNITWORKDIR) neo-go \ 64 && mkdir -p $(UNITWORKDIR) \ 65 && chown -R neo-go:neo-go $(UNITWORKDIR) $(BINDIR)/neo-go \ 66 && systemctl enable neo-go.service 67 68 image: deps 69 @echo "=> Building image" 70 @echo " Dockerfile: $(D_FILE)" 71 @echo " Tag: $(IMAGE_REPO):$(VERSION)$(IMAGE_SUFFIX)" 72 @docker build -f $(D_FILE) -t $(IMAGE_REPO):$(VERSION)$(IMAGE_SUFFIX) --build-arg REPO=$(REPO) --build-arg VERSION=$(VERSION) . 73 74 image-latest: deps 75 @echo "=> Building image with 'latest' tag" 76 @echo " Dockerfile: Dockerfile" # Always use default Dockerfile for Ubuntu as `latest`. 77 @echo " Tag: $(IMAGE_REPO):latest" 78 @docker build -t $(IMAGE_REPO):latest --build-arg REPO=$(REPO) --build-arg VERSION=$(VERSION) . 79 80 image-push: 81 @echo "=> Publish image" 82 @echo " Tag: $(IMAGE_REPO):$(VERSION)$(IMAGE_SUFFIX)" 83 @docker push $(IMAGE_REPO):$(VERSION)$(IMAGE_SUFFIX) 84 85 image-push-latest: 86 @echo "=> Publish image for Ubuntu with 'latest' tag" 87 @docker push $(IMAGE_REPO):latest 88 89 deps: 90 @CGO_ENABLED=0 \ 91 go mod download 92 @CGO_ENABLED=0 \ 93 go mod tidy -v 94 95 version: 96 @echo $(VERSION) 97 98 gh-docker-vars: 99 @echo "file=$(D_FILE)" 100 @echo "version=$(VERSION)" 101 @echo "repo=$(IMAGE_REPO)" 102 @echo "suffix=$(IMAGE_SUFFIX)" 103 104 test: 105 @go test ./... -cover 106 107 vet: 108 @go vet ./... 109 110 lint: 111 @golangci-lint run 112 113 fmt: 114 @gofmt -l -w -s $$(find . -type f -name '*.go'| grep -v "/vendor/") 115 116 cover: 117 @go test -v -race ./... -coverprofile=coverage.txt -covermode=atomic -coverpkg=./pkg/...,./cli/... 118 @go tool cover -html=coverage.txt -o coverage.html 119 120 # --- Ubuntu/Windows environment --- 121 env_image: 122 @echo "=> Building env image" 123 @echo " Dockerfile: $(D_FILE)" 124 @echo " Tag: $(ENV_IMAGE_TAG)" 125 @docker build \ 126 -f $(D_FILE) \ 127 -t $(ENV_IMAGE_TAG) \ 128 --build-arg REPO=$(REPO) \ 129 --build-arg VERSION=$(VERSION) . 130 131 env_up: 132 @echo "=> Bootup environment" 133 @echo " Docker-compose file: $(DC_FILE)" 134 @docker-compose -f $(DC_FILE) up -d node_one node_two node_three node_four 135 136 env_single: 137 @echo "=> Bootup environment" 138 @docker-compose -f $(DC_FILE) up -d node_single 139 140 env_down: 141 @echo "=> Stop environment" 142 @docker-compose -f $(DC_FILE) down 143 144 env_restart: 145 @echo "=> Stop and start environment" 146 @docker-compose -f $(DC_FILE) restart 147 148 env_clean: env_down 149 @echo "=> Cleanup environment" 150 @docker volume rm docker_volume_chain