go project scaffolding
This commit is contained in:
parent
bc0642a731
commit
4304cb7993
|
@ -0,0 +1,107 @@
|
||||||
|
PROGRAM := helium-blockchain-exporter
|
||||||
|
TARGET_DIR := ./bin
|
||||||
|
VERSION := $(shell git describe --tags --always)
|
||||||
|
|
||||||
|
SRC := $(shell find -name '*.go' -not -name '*_test.go' -type f)
|
||||||
|
BIN := $(TARGET_DIR)/$(PROGRAM)
|
||||||
|
|
||||||
|
# tests
|
||||||
|
ALL_SRC := $(shell find -name '*.go' -type f)
|
||||||
|
COVER_PROFILE := $(TARGET_DIR)/coverage.out
|
||||||
|
COVER_REPORT := $(TARGET_DIR)/coverage.html
|
||||||
|
|
||||||
|
# go
|
||||||
|
GO := go
|
||||||
|
GOFMT := $(GO) fmt
|
||||||
|
GORUN := $(GO) run -race
|
||||||
|
GOCLEAN := $(GO) clean
|
||||||
|
GOTEST := $(GO) test
|
||||||
|
GOCOVER := $(GO) tool cover
|
||||||
|
GOBUILD := $(GO) build
|
||||||
|
|
||||||
|
# docker
|
||||||
|
DOCKER := docker
|
||||||
|
DOCKERBUILD := $(DOCKER) build
|
||||||
|
DOCKERTAG := $(DOCKER) tag
|
||||||
|
DOCKERPUSH := $(DOCKER) push
|
||||||
|
DOCKER_TAGS := $(PROGRAM):$(VERSION)
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
all: build
|
||||||
|
|
||||||
|
.PHONY: help
|
||||||
|
help:
|
||||||
|
@echo "clean revert back to clean state"
|
||||||
|
@echo "lint lint and format the code"
|
||||||
|
@echo "run run without building"
|
||||||
|
@echo "prepare prepare environment for build"
|
||||||
|
@echo "test build and run short test suite"
|
||||||
|
@echo "coverage build and run full test suite and generate coverage report"
|
||||||
|
@echo "build build the binary"
|
||||||
|
@echo "build-docker build the docker image"
|
||||||
|
|
||||||
|
# clean: revert back to initial state
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
$(GOCLEAN)
|
||||||
|
rm -r $(TARGET_DIR)
|
||||||
|
|
||||||
|
# lint: lint and format the code
|
||||||
|
|
||||||
|
.PHONY: lint
|
||||||
|
lint:
|
||||||
|
$(GOFMT) ./...
|
||||||
|
|
||||||
|
# run: run without building with debug flags
|
||||||
|
ifeq (run,$(firstword $(MAKECMDGOALS)))
|
||||||
|
# use the rest as arguments for "run"
|
||||||
|
RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
||||||
|
# ...and turn them into do-nothing targets
|
||||||
|
$(eval $(RUN_ARGS):;@:)
|
||||||
|
endif
|
||||||
|
.PHONY: run
|
||||||
|
run: lint
|
||||||
|
$(GORUN) . $(RUN_ARGS)
|
||||||
|
|
||||||
|
# prepare: prepare environment for build
|
||||||
|
|
||||||
|
$(TARGET_DIR):
|
||||||
|
mkdir $(TARGET_DIR) &>/dev/null || true
|
||||||
|
|
||||||
|
.PHONY: prepare
|
||||||
|
prepare: $(TARGET_DIR)
|
||||||
|
|
||||||
|
# test: run short test suite
|
||||||
|
|
||||||
|
.PHONY: test
|
||||||
|
test: lint
|
||||||
|
$(GOTEST) -short ./...
|
||||||
|
|
||||||
|
# coverage: run full test suite with coverage report
|
||||||
|
|
||||||
|
$(COVER_PROFILE): $(TARGET_DIR) $(ALL_SRC)
|
||||||
|
$(GOTEST) -coverprofile=$(COVER_PROFILE) ./...
|
||||||
|
|
||||||
|
$(COVER_REPORT): $(TARGET_DIR) $(COVER_PROFILE)
|
||||||
|
$(GOCOVER) -html=$(COVER_PROFILE) -o=$(COVER_REPORT)
|
||||||
|
|
||||||
|
.PHONY: coverage
|
||||||
|
coverage: lint $(COVER_REPORT)
|
||||||
|
$(GOCOVER) -func=$(COVER_PROFILE)
|
||||||
|
|
||||||
|
# build: build the program for release
|
||||||
|
|
||||||
|
$(BIN): $(TARGET_DIR) $(SRC)
|
||||||
|
$(GOBUILD) -o=$(BIN)
|
||||||
|
|
||||||
|
.PHONY: build
|
||||||
|
build: lint $(BIN)
|
||||||
|
|
||||||
|
# build-docker: build the docker image
|
||||||
|
|
||||||
|
.PHONY: build-docker
|
||||||
|
build-docker: $(BIN)
|
||||||
|
$(DOCKERBUILD) -t $(PROGRAM) .
|
||||||
|
$(foreach tag,$(DOCKER_TAGS),$(DOCKERTAG) $(PROGRAM) $(tag);)
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
fmt.Println("Hello world!")
|
||||||
|
}
|
Reference in New Issue