|
|
@ -0,0 +1,135 @@ |
|
|
|
#! /usr/bin/make -f
|
|
|
|
|
|
|
|
# Project variables.
|
|
|
|
PACKAGE := github.com/hermeznetwork/hermez-node |
|
|
|
VERSION := $(shell git describe --tags --always) |
|
|
|
BUILD := $(shell git rev-parse --short HEAD) |
|
|
|
BUILD_DATE := $(shell date +%Y-%m-%dT%H:%M:%S%z) |
|
|
|
PROJECT_NAME := $(shell basename "$(PWD)") |
|
|
|
|
|
|
|
# Go related variables.
|
|
|
|
GO_FILES ?= $$(find . -name '*.go' | grep -v vendor) |
|
|
|
GOBASE := $(shell pwd) |
|
|
|
GOBIN := $(GOBASE)/bin |
|
|
|
GOPKG := $(.) |
|
|
|
GOENVVARS := GOBIN=$(GOBIN) |
|
|
|
GOCMD := $(GOBASE)/cli/node |
|
|
|
GOPROOF := $(GOBASE)/test/proofserver/cli |
|
|
|
GOBINARY := node |
|
|
|
|
|
|
|
# Project configs.
|
|
|
|
MODE ?= sync |
|
|
|
CONFIG ?= $(GOBASE)/cli/node/cfg.buidler.toml |
|
|
|
POSTGRES_PASS ?= yourpasswordhere |
|
|
|
|
|
|
|
# Use linker flags to provide version/build settings.
|
|
|
|
LDFLAGS=-ldflags "-X=main.Version=$(VERSION) -X=main.Build=$(BUILD) -X=main.Date=$(BUILD_DATE)" |
|
|
|
|
|
|
|
# PID file will keep the process id of the server.
|
|
|
|
PID_PROOF_MOCK := /tmp/.$(PROJECT_NAME).proof.pid |
|
|
|
|
|
|
|
# Make is verbose in Linux. Make it silent.
|
|
|
|
MAKEFLAGS += --silent |
|
|
|
|
|
|
|
.PHONY: help |
|
|
|
help: Makefile |
|
|
|
@echo |
|
|
|
@echo " Choose a command run in "$(PROJECT_NAME)":" |
|
|
|
@echo |
|
|
|
@sed -n 's/^##//p' $< | column -t -s ':' | sed -e 's/^/ /' |
|
|
|
@echo |
|
|
|
|
|
|
|
## test: Run the application check and all tests.
|
|
|
|
test: govet gocilint test-unit |
|
|
|
|
|
|
|
## test-unit: Run all unit tests.
|
|
|
|
test-unit: |
|
|
|
@echo " > Running unit tests" |
|
|
|
$(GOENVVARS) go test -race -p 1 -failfast -timeout 300s -v ./... |
|
|
|
|
|
|
|
## test-api-server: Run the API server using the Go tests.
|
|
|
|
test-api-server: |
|
|
|
@echo " > Running unit tests" |
|
|
|
$(GOENVVARS) FAKE_SERVER=yes go test -timeout 0 ./api -p 1 -count 1 -v |
|
|
|
|
|
|
|
## gofmt: Run `go fmt` for all go files.
|
|
|
|
gofmt: |
|
|
|
@echo " > Format all go files" |
|
|
|
$(GOENVVARS) gofmt -w ${GO_FILES} |
|
|
|
|
|
|
|
## govet: Run go vet.
|
|
|
|
govet: |
|
|
|
@echo " > Running go vet" |
|
|
|
$(GOENVVARS) go vet ./... |
|
|
|
|
|
|
|
## golint: Run default golint.
|
|
|
|
golint: |
|
|
|
@echo " > Running golint" |
|
|
|
$(GOENVVARS) golint -set_exit_status ./... |
|
|
|
|
|
|
|
## gocilint: Run Golang CI Lint.
|
|
|
|
gocilint: |
|
|
|
@echo " > Running Golang CI Lint" |
|
|
|
$-golangci-lint run --timeout=5m -E whitespace -E gosec -E gci -E misspell -E gomnd -E gofmt -E goimports -E golint --exclude-use-default=false --max-same-issues 0 |
|
|
|
|
|
|
|
## exec: Run given command. e.g; make exec run="go test ./..."
|
|
|
|
exec: |
|
|
|
GOBIN=$(GOBIN) $(run) |
|
|
|
|
|
|
|
## clean: Clean build files. Runs `go clean` internally.
|
|
|
|
clean: |
|
|
|
@-rm $(GOBIN)/ 2> /dev/null |
|
|
|
@echo " > Cleaning build cache" |
|
|
|
$(GOENVVARS) go clean |
|
|
|
|
|
|
|
## build: Build the project.
|
|
|
|
build: install |
|
|
|
@echo " > Building Hermez binary..." |
|
|
|
@bash -c "$(MAKE) migration-pack" |
|
|
|
$(GOENVVARS) go build $(LDFLAGS) -o $(GOBIN)/$(GOBINARY) $(GOCMD) |
|
|
|
@bash -c "$(MAKE) migration-clean" |
|
|
|
|
|
|
|
## install: Install missing dependencies. Runs `go get` internally. e.g; make install get=github.com/foo/bar
|
|
|
|
install: |
|
|
|
@echo " > Checking if there is any missing dependencies..." |
|
|
|
$(GOENVVARS) go get $(GOCMD)/... $(get) |
|
|
|
|
|
|
|
## run: Run Hermez node.
|
|
|
|
run: |
|
|
|
@bash -c "$(MAKE) clean build" |
|
|
|
@echo " > Running $(PROJECT_NAME)" |
|
|
|
@$(GOBIN)/$(GOBINARY) --mode $(MODE) --cfg $(CONFIG) run |
|
|
|
|
|
|
|
## run-proof-mock: Run proof server mock API.
|
|
|
|
run-proof-mock: stop-proof-mock |
|
|
|
@echo " > Running Proof Server Mock" |
|
|
|
$(GOENVVARS) go build -o $(GOBIN)/proof $(GOPROOF) |
|
|
|
@$(GOBIN)/proof 2>&1 & echo $$! > $(PID_PROOF_MOCK) |
|
|
|
@cat $(PID_PROOF_MOCK) | sed "/^/s/^/ \> Proof Server Mock PID: /" |
|
|
|
|
|
|
|
## stop-proof-mock: Stop proof server mock API.
|
|
|
|
stop-proof-mock: |
|
|
|
@-touch $(PID_PROOF_MOCK) |
|
|
|
@-kill -s INT `cat $(PID_PROOF_MOCK)` 2> /dev/null || true |
|
|
|
@-rm $(PID_PROOF_MOCK) $(GOBIN)/proof 2> /dev/null || true |
|
|
|
|
|
|
|
## migration-pack: Pack the database migrations into the binary.
|
|
|
|
migration-pack: |
|
|
|
@echo " > Packing the migrations..." |
|
|
|
@cd /tmp && go get -u github.com/gobuffalo/packr/v2/packr2 && cd - |
|
|
|
@cd $(GOBASE)/db && packr2 && cd - |
|
|
|
|
|
|
|
## migration-clean: Clean the database migrations pack.
|
|
|
|
migration-clean: |
|
|
|
@echo " > Cleaning the migrations..." |
|
|
|
@cd $(GOBASE)/db && packr2 clean && cd - |
|
|
|
|
|
|
|
## run-database-container: Run the Postgres container
|
|
|
|
run-database-container: |
|
|
|
@echo " > Running the postgreSQL DB..." |
|
|
|
@-docker run --rm --name hermez-db -p 5432:5432 -e POSTGRES_DB=hermez -e POSTGRES_USER=hermez -e POSTGRES_PASSWORD="$(POSTGRES_PASS)" -d postgres |
|
|
|
|
|
|
|
## stop-database-container: Stop the Postgres container
|
|
|
|
stop-database-container: |
|
|
|
@echo " > Stopping the postgreSQL DB..." |
|
|
|
@-docker stop hermez-db |