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