This repository has been archived by the owner on Jan 28, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Makefile
86 lines (73 loc) · 2.3 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# Package configuration
PROJECT = go-stable
COMMANDS = cli/stable
DEPENDENCIES = golang.org/x/tools/cmd/cover
PACKAGES = .
ORGANIZATION = mcuadros
# Environment
BASE_PATH := $(shell pwd)
BUILD_PATH := $(BASE_PATH)/build
BUILD ?= $(shell date +"%m-%d-%Y_%H_%M_%S")
COMMIT ?= $(shell git log --format='%H' -n 1 | cut -c1-10)
BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
# Packages content
PKG_OS = darwin linux
PKG_ARCH = amd64
PKG_CONTENT = LICENSE
PKG_TAG = latest
# Go parameters
GOCMD = go
GOBUILD = $(GOCMD) build
GOCLEAN = $(GOCMD) clean
GOGET = $(GOCMD) get -v
GOTEST = $(GOCMD) test -v
GHRELEASE = github-release
# Coverage
COVERAGE_REPORT = coverage.txt
COVERAGE_MODE = atomic
# Docker
DOCKERCMD = docker
ifneq ($(origin TRAVIS_TAG), undefined)
BRANCH := $(TRAVIS_TAG)
endif
# Rules
all: clean upload
dependencies:
$(GOGET) -t ./...
for i in $(DEPENDENCIES); do $(GOGET) $$i; done
test: dependencies
for p in $(PACKAGES); do \
$(GOTEST) $${p}; \
done;
test-coverage: dependencies
echo "mode: $(COVERAGE_MODE)" > $(COVERAGE_REPORT); \
for p in $(PACKAGES); do \
$(GOTEST) $${p} -coverprofile=tmp_$(COVERAGE_REPORT) -covermode=$(COVERAGE_MODE); \
cat tmp_$(COVERAGE_REPORT) | grep -v "mode: $(COVERAGE_MODE)" >> $(COVERAGE_REPORT); \
rm tmp_$(COVERAGE_REPORT); \
done;
packages: dependencies
for os in $(PKG_OS); do \
for arch in $(PKG_ARCH); do \
cd $(BASE_PATH); \
mkdir -p $(BUILD_PATH)/$(PROJECT)_$${os}_$${arch}; \
for cmd in $(COMMANDS); do \
cd $${cmd} && GOOS=$${os} GOARCH=$${arch} $(GOCMD) build -ldflags "-X main.version=$(BRANCH) -X main.build=$(BUILD) -X main.commit=$(COMMIT)" -o $(BUILD_PATH)/$(PROJECT)_$${os}_$${arch}/$$(basename $${cmd}) .; \
cd $(BASE_PATH); \
done; \
for content in $(PKG_CONTENT); do \
cp -rf $${content} $(BUILD_PATH)/$(PROJECT)_$${os}_$${arch}/; \
done; \
cd $(BUILD_PATH) && tar -cvzf $(BUILD_PATH)/$(PROJECT)_$${os}_$${arch}.tar.gz $(PROJECT)_$${os}_$${arch}/; \
done; \
done;
push:
for cmd in $(COMMANDS); do \
cd $${cmd} && CGO_ENABLED=0 $(GOCMD) build -ldflags "-X main.version=$(BRANCH) -X main.build=$(BUILD) -X main.commit=$(COMMIT)" .; \
cd $(BASE_PATH); \
done;
$(DOCKERCMD) build -t $(ORGANIZATION)/$(PROJECT):$(BRANCH) .
$(DOCKERCMD) push $(ORGANIZATION)/$(PROJECT):$(BRANCH)
clean:
rm -rf $(BUILD_PATH)
$(GOCLEAN) .