Skip to content

Instantly share code, notes, and snippets.

@endocrimes
Last active October 8, 2017 13:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save endocrimes/8b7e3fbe822691f308c335f80928dded to your computer and use it in GitHub Desktop.
Save endocrimes/8b7e3fbe822691f308c335f80928dded to your computer and use it in GitHub Desktop.
Golang Makefile Template
CIRCLE_BUILD_NUM ?= DEV
TAG = 0.0.$(CIRCLE_BUILD_NUM)-$(shell git rev-parse --short HEAD)
GOCMD=go
GOBUILD=$(GOCMD) build
GOCLEAN=$(GOCMD) clean
GOTEST=$(GOCMD) test
GOGET=$(GOCMD) get
GOFILES = $(shell find . -name '*.go' -not -path './vendor/*')
GOPACKAGES = $(shell go list ./...)
UNAME = $(shell uname | tr A-Z a-z)
LDFLAGS= -ldflags "-w"
BINARY_NAME=hello-world
BUILD_DIR=build
DOCKER_IMAGE=dantoml/$(BINARY_NAME)
all: test build
default: build
.PHONY: build
build: $(BUILD_DIR)/linux/$(BINARY_NAME) $(BUILD_DIR)/darwin/$(BINARY_NAME)
.PHONY: test
test:
$(GOTEST) -v $(GOPACKAGES)
.PHONY: clean
clean:
rm -f $(BUILD_DIR)
$(GOCLEAN)
.PHONY: run
run: $(BUILD_DIR)/$(UNAME)/$(BINARY_NAME)
./$(BUILD_DIR)/$(UNAME)/$(BINARY_NAME)
.PHONY: deps
deps:
$(GOGET)
.PHONY: docker-build
docker-build: $(BUILD_DIR)/linux/$(BINARY_NAME)
docker build -t $(DOCKER_IMAGE):$(TAG) .
.PHONY: docker-publish
docker-publish: docker-build
docker push $(DOCKER_IMAGE):$(TAG)
.PHONY: docker-publish-latest
docker-publish-latest: $(BUILD_DIR)/linux/$(BINARY_NAME)
docker build -t $(DOCKER_IMAGE):latest
docker push $(DOCKER_IMAGE):latest
$(BUILD_DIR)/%/$(BINARY_NAME): $(GOFILES)
GOOS=$* GOARCH=amd64 CGO_ENABLED=0 go build $(LDFLAGS) -o $(BUILD_DIR)/$*/$(BINARY_NAME) .
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment