Last active
May 12, 2016 11:22
-
-
Save Lexty/d665212030ddf7759eabbb56aaff8683 to your computer and use it in GitHub Desktop.
Makefile for golang projects
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
FROM golang:1.6.2 | |
MAINTAINER Alexandr Medvedev <[email protected]> | |
RUN go get github.com/golang/lint/golint | |
ADD . /go/src/github.com/user/project | |
RUN cd /go/src/github.com/user/project && go get ./... |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Targets | |
# all: Builds the code | |
# build: Builds the code | |
# gofmt: Formats the source files | |
# govet: Examines the source code with Vet | |
# golint: Examines the source code with Vet | |
# clean: Cleans the code | |
# release: Builds the code and compress build to .zip and .tar.gz | |
######################## | |
# Configurable options # | |
# Build version | |
VERSION=0.0.0 | |
# Build tags | |
TAGS= | |
# Binary file name | |
BINARY=run | |
# Project path | |
SOURCE=github.com/user/project | |
# Other build flags | |
BUILD_FLAGS=-v | |
# Docker build image (can be "golang") | |
DOCKER_BUILD_IMAGE=local/build-golang-project | |
# Release folder name | |
RELEASE_NAME=$(BINARY) | |
# Files and folders which be moved to release | |
RELEASE_FILES=LICENSE README.md | |
# Releases root folder | |
RELEASE_ROOT=release | |
############################ | |
# Not configurable options # | |
BUILD_TIME=$(shell date -u '+%Y-%m-%d %I:%M:%S %Z') | |
BUILD_GIT_HASH=$(shell git rev-parse HEAD) | |
LDFLAGS += -X "${SOURCE}/cmd.BuildVersion=${VERSION}" | |
LDFLAGS += -X "${SOURCE}/cmd.BuildTime=${BUILD_TIME}" | |
LDFLAGS += -X "${SOURCE}/cmd.BuildGitHash=${BUILD_GIT_HASH}" | |
CMD_PREFIX=docker run --rm -v "${PWD}":/go/src/$(SOURCE) -w /go/src/$(SOURCE) $(DOCKER_BUILD_IMAGE) | |
CMD_GO=$(CMD_PREFIX) go | |
NOW = $(shell date -u '+%Y%m%d%I%M%S') | |
RELEASE_FILE_NAME=$(RELEASE_NAME)-$(NOW)-$(VERSION) | |
.PHONY: build govet gofmt golint build-dev pack pack-prepare pack-zip pack-tar-gz release get-deps clean | |
build: | |
····$(CMD_GO) build $(BUILD_FLAGS) -ldflags '$(LDFLAGS)' -tags '$(TAGS)' -o $(GOPATH)/bin/$(BINARY) | |
govet: | |
····$(CMD_GO) tool vet -composites=false -methods=false -structtags=false . | |
gofmt: | |
····$(CMD_PREFIX) gofmt -w . | |
# https://github.com/golang/lint | |
# go get github.com/golang/lint/golint | |
golint: | |
····$(CMD_PREFIX) golint ./... | |
build-dev: govet | |
····$(CMD_GO) build $(BUILD_FLAGS) -race -tags '$(TAGS)' -o $(BINARY) | |
····cp '$(GOPATH)/bin/$(BINARY)' $(BINARY) | |
get-deps: | |
····docker build -t $(DOCKER_BUILD_IMAGE) . | |
pack-prepare: | |
····rm -rf "$(RELEASE_ROOT)/$(RELEASE_NAME)" | |
····mkdir -p "$(RELEASE_ROOT)/$(RELEASE_NAME)" | |
····cp -r $(RELEASE_NAME) $(RELEASE_FILES) "$(RELEASE_ROOT)/$(RELEASE_NAME)" | |
pack-zip: pack-prepare | |
····cd $(RELEASE_ROOT) && zip -r "$(RELEASE_FILE_NAME).zip" "$(RELEASE_NAME)" | |
pack-tar-gz: pack-prepare | |
····cd $(RELEASE_ROOT) && tar -zcvf $(RELEASE_FILE_NAME).tar.gz "$(RELEASE_NAME)" | |
pack: pack-zip pack-tar-gz | |
release: build pack | |
clean: | |
····$(CMD_GO) clean -i ./... | |
····rm -f $(BINARY) | |
····rm -rf "$(RELEASE_ROOT)/$(RELEASE_NAME)" | |
····docker rmi $(DOCKER_BUILD_IMAGE) | |
clean-mac: clean | |
····find . -name ".DS_Store" -print0 | xargs -0 rm | |
test: | |
····$(CMD_GO) test -cover -race ./... | |
fixme: | |
····grep -rnw "FIXME" . | |
todo: | |
····grep -rnw "TODO" . |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment