Skip to content

Instantly share code, notes, and snippets.

@xav-b
Created October 10, 2015 19:02
Show Gist options
  • Save xav-b/8b2270ce966fa7f0fd6f to your computer and use it in GitHub Desktop.
Save xav-b/8b2270ce966fa7f0fd6f to your computer and use it in GitHub Desktop.
Makfile for Go project, powered by Docker, glide and goxc
# Makefile
# vim:ft=make
PROJECT := $(shell basename $(PWD))
SOURCEDIR=.
SOURCES := $(shell find $(SOURCEDIR) -path './vendor' -prune -o -type f -name '*.go' -print)
PACKAGES=$(shell go list ./... | grep -v /vendor/)
GIT_COMMIT=`git rev-parse HEAD`
GIT_USER=`git config --get user.name`
GO_PROJECTS="/go/src/github.com/$(GIT_USER)"
# docker-compose based container name
CONTAINER="$(GIT_USER)/$(PROJECT)"
BUILD_PATH="./_build"
# FIXME error EXEC=$SHELL make: can't open input file: go
EXEC ?= "docker exec -it $(PROJECT)_lab_1"
GO_VERSION:=$(shell eval $(EXEC) go version)
# ldflags does't support spaces in variables
CLEAN_GO_VERSION=$(shell echo "${GO_VERSION}" | sed -e 's/[^a-zA-Z0-9]/_/g')
BINARY=${PROJECT}
VERSION="0.1.3"
BUILD_TIME=`date +%FT%T%z`
LDFLAGS="-ldflags \"-X main.Version=${VERSION} -X main.BuildTime=${BUILD_TIME} -X main.GoVersion=${CLEAN_GO_VERSION} -X main.GitCommit=${GIT_COMMIT}\""
all: $(BINARY)
container:
docker build --rm -t $(CONTAINER) .
docker run -d --name $(PROJECT) \
-v $(PWD):$(GO_PROJECTS)/$(PROJECT) \
-w $(GO_PROJECTS)/$(PROJECT) $(CONTAINER) sleep infinity
crossbuild: $(SOURCES)
eval $(EXEC) glide install
eval $(EXEC) goxc bump
eval $(EXEC) goxc -tasks=xc -d=$(BUILD_PATH)
release: doc crossbuild
eval $(EXEC) goxc -tasks=archive -d=$(BUILD_PATH)
eval $(EXEC) goxc bintray
eval $(EXEC) goxc publish-github
mkdocs gh-deploy --clean
shell:
eval $(EXEC) bash
# FIXME compile twice
$(BINARY): $(SOURCES)
eval $(EXEC) go build -v ${LDFLAGS} -o ${BINARY}
.PHONY: install
install:
eval $(EXEC) go install ${LDFLAGS}
lint:
eval $(EXEC) gometalinter --exclude=vendor ./...
tests:
eval $(EXEC) go test $(shell go list ./... | grep -v /vendor/) $(TESTARGS)
doc:
cp readme.md ./docs/index.md
cp _build/$(VERSION)/bintray.md ./docs/downloads.md
mkdocs build --clean
.PHONY: godoc
godoc:
eval $(EXEC) godoc -http=0.0.0.0:6060
.PHONY: clean
clean:
docker-compose stop && docker-compose rm -v
[[ -d ${BUILD_PATH} ]] && rm -rf ${BUILD_PATH}
if [ -f ${BINARY} ] ; then rm ${BINARY} ; fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment