-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
82 lines (71 loc) · 2.47 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
# build
BUILD_PATH := $(CURDIR)/build
BIN_PATH := $(BUILD_PATH)/bin
PACKAGE_PATH := $(BUILD_PATH)/package
CHECKSUM_PATH := $(BUILD_PATH)/checksum
PACKAGE_FORMAT ?= zip
BIN_NAME := consul-snapshotter
# git
GIT_DIRTY := $(shell test -n "`git status --porcelain`" && echo "+CHANGES" || true)
GIT_SHA ?= $(shell git rev-parse --short HEAD)
GIT_TAG ?= $(shell git describe --tags --exact-match "$(GIT_SA)" 2>/dev/null || true)
# app
OS ?= linux
ARCH ?= amd64
BIN_TARGET := $(BIN_PATH)/$(OS)/$(ARCH)
VERSION ?= $(GIT_TAG:v%=%)
ifeq ($(VERSION),)
VERSION := dev
endif
BUILD_DATE ?= $(shell date --iso=seconds)
T := github.com/ruizink/consul-snapshotter
LDFLAGS := -X '$(T)/version.Version=$(VERSION)' -X '$(T)/version.BuildDate=$(BUILD_DATE)' -X '$(T)/version.GitCommit=$(GIT_SHA)$(GIT_DIRTY)'
.PHONY: mkdirs build build-docker package checksum clean start-docker-env stop-docker-env
build:
$(info Building binary for $(OS) $(ARCH))
GOOS=$(OS) GOARCH=$(ARCH) CGO_ENABLED=0 go build -ldflags "$(LDFLAGS)" -o $(BIN_TARGET)/ -trimpath -buildvcs=false
build-docker: export OS=linux
build-docker: build
$(info Building docker image for $(OS)/$(ARCH))
docker build \
--tag $(BIN_NAME):$(VERSION) \
--platform $(OS)/$(ARCH) \
--build-arg GO_VERSION=$(GO_VERSION) \
--target alpine \
.
mkdirs:
@mkdir -p $(PACKAGE_PATH)
@mkdir -p $(CHECKSUM_PATH)
package: mkdirs
ifneq ($(wildcard $(BIN_TARGET)/$(BIN_NAME)),)
ifeq ($(PACKAGE_FORMAT), zip)
$(info Creating zip for $(OS) $(ARCH))
zip --junk-paths $(PACKAGE_PATH)/$(BIN_NAME)_$(VERSION)_$(OS)_$(ARCH).zip $(BIN_TARGET)/$(BIN_NAME)
else
ifeq ($(PACKAGE_FORMAT), tgz)
$(info Creating tgz for $(OS) $(ARCH))
tar -czvf $(PACKAGE_PATH)/$(BIN_NAME)_$(VERSION)_$(OS)_$(ARCH).tar.gz -C $(BIN_TARGET) $(BIN_NAME)
endif
endif
else
$(error Could not find a build for $(OS) $(ARCH))
endif
checksum: mkdirs
ifneq ($(wildcard $(PACKAGE_PATH)/$(BIN_NAME)*),)
$(info Generating checksum)
@cd $(PACKAGE_PATH) && sha256sum $(BIN_NAME)* | tee $(CHECKSUM_PATH)/SHA256SUM
else
$(error Could not find files to checksum)
endif
clean:
$(info Cleaning go environment)
@go clean
$(info Removing $(BUILD_PATH) directory)
@rm -rf $(BUILD_PATH)
start-docker-env:
$(info Starting containers with docker compose)
@docker compose -f ./docker/docker-compose.yml up -d
stop-docker-env:
$(info Stopping containers with docker compose)
@docker compose -f ./docker/docker-compose.yml down
@docker compose -f ./docker/docker-compose.yml rm