-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
110 lines (90 loc) · 3.94 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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
GOCMD = go
GOBUILD = $(GOCMD) build
GOTEST = $(GOCMD) test
VERSION_FILE = VERSION
BUILD_FILE = BUILD
RELEASE_DIR = .release
APP_NAME = quickrest
RELEASE_DIR_WINDOWS = $(RELEASE_DIR)/windows_amd64/
RELEASE_DIR_MACOS = $(RELEASE_DIR)/macos_amd64/
RELEASE_DIR_LINUX = $(RELEASE_DIR)/linux_amd64/
RELEASE_DIR_FREEBSD = $(RELEASE_DIR)/freebsd_amd64/
RELEASE_DIR_OPENBSD = $(RELEASE_DIR)/openbsd_amd64/
RELEASE_DIR_SOLARIS = $(RELEASE_DIR)/solaris_amd64/
WINDOWS_ARCH = amd64 386
MACOS_ARCH = amd64 arm64
LINUX_ARCH = amd64 386
FREEBSD_ARCH = amd64 386
OPENBSD_ARCH = amd64 386
SOLARIS_ARCH = amd64
BUILD_ARGS = -ldflags "-X main.Version=$(shell cat $(VERSION_FILE)) -X main.Build=$(shell cat $(BUILD_FILE))"
release: bump-build clean windows macos linux freebsd openbsd solaris
windows:
for arch in $(WINDOWS_ARCH); do \
version=$$(cat $(VERSION_FILE)).$$(cat $(BUILD_FILE)); \
release_name=${APP_NAME}_$${version}; \
target_name=$${release_name}_windows_$${arch}; \
build_dir=${RELEASE_DIR}/$${release_name}/$${target_name}; \
mkdir -p $$build_dir; \
GOOS=windows GOARCH=$${arch} $(GOBUILD) -o $$build_dir/ $(BUILD_ARGS) -v ./... ; \
tar -czf ${RELEASE_DIR}/$${release_name}/$${target_name}.tar.gz -C ${RELEASE_DIR}/$${release_name} $${target_name}; \
done
macos:
for arch in $(MACOS_ARCH); do \
version=$$(cat $(VERSION_FILE)).$$(cat $(BUILD_FILE)); \
release_name=${APP_NAME}_$${version}; \
target_name=$${release_name}_macos_$${arch}; \
build_dir=${RELEASE_DIR}/$${release_name}/$${target_name}; \
mkdir -p $$build_dir; \
GOOS=darwin GOARCH=$${arch} $(GOBUILD) -o $$build_dir/ $(BUILD_ARGS) -v ./... ; \
tar -czf ${RELEASE_DIR}/$${release_name}/$${target_name}.tar.gz -C ${RELEASE_DIR}/$${release_name} $${target_name}; \
done
linux:
for arch in $(LINUX_ARCH); do \
version=$$(cat $(VERSION_FILE)).$$(cat $(BUILD_FILE)); \
release_name=${APP_NAME}_$${version}; \
target_name=$${release_name}_linux_$${arch}; \
build_dir=${RELEASE_DIR}/$${release_name}/$${target_name}; \
mkdir -p $$build_dir; \
GOOS=linux GOARCH=$${arch} $(GOBUILD) -o $$build_dir/ $(BUILD_ARGS) -v ./... ; \
tar -czf ${RELEASE_DIR}/$${release_name}/$${target_name}.tar.gz -C ${RELEASE_DIR}/$${release_name} $${target_name}; \
done
freebsd:
for arch in $(FREEBSD_ARCH); do \
version=$$(cat $(VERSION_FILE)).$$(cat $(BUILD_FILE)); \
release_name=${APP_NAME}_$${version}; \
target_name=$${release_name}_freebsd_$${arch}; \
build_dir=${RELEASE_DIR}/$${release_name}/$${target_name}; \
mkdir -p $$build_dir; \
GOOS=freebsd GOARCH=$${arch} $(GOBUILD) -o $$build_dir/ $(BUILD_ARGS) -v ./... ; \
tar -czf ${RELEASE_DIR}/$${release_name}/$${target_name}.tar.gz -C ${RELEASE_DIR}/$${release_name} $${target_name}; \
done
openbsd:
for arch in $(OPENBSD_ARCH); do \
version=$$(cat $(VERSION_FILE)).$$(cat $(BUILD_FILE)); \
release_name=${APP_NAME}_$${version}; \
target_name=$${release_name}_openbsd_$${arch}; \
build_dir=${RELEASE_DIR}/$${release_name}/$${target_name}; \
mkdir -p $$build_dir; \
GOOS=openbsd GOARCH=$${arch} $(GOBUILD) -o $$build_dir/ $(BUILD_ARGS) -v ./... ; \
tar -czf ${RELEASE_DIR}/$${release_name}/$${target_name}.tar.gz -C ${RELEASE_DIR}/$${release_name} $${target_name}; \
done
solaris:
for arch in $(SOLARIS_ARCH); do \
version=$$(cat $(VERSION_FILE)).$$(cat $(BUILD_FILE)); \
release_name=${APP_NAME}_$${version}; \
target_name=$${release_name}_solaris_$${arch}; \
build_dir=${RELEASE_DIR}/$${release_name}/$${target_name}; \
mkdir -p $$build_dir; \
GOOS=solaris GOARCH=$${arch} $(GOBUILD) -o $$build_dir/ $(BUILD_ARGS) -v ./... ; \
tar -czf ${RELEASE_DIR}/$${release_name}/$${target_name}.tar.gz -C ${RELEASE_DIR}/$${release_name} $${target_name}; \
done
clean:
rm -rf $(RELEASE_DIR)
test:
$(GOTEST) -v ./...
bump-build:
@current_build=$$(cat $(BUILD_FILE)); \
next_build=$$(echo $$((current_build + 1))); \
echo $${next_build} > $(BUILD_FILE)
.PHONY: all windows macos linux freebsd openbsd solaris clean test bump-build