-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
128 lines (110 loc) · 4.09 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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
export DOCKER_BUILDKIT=1
LDFLAG_LOCATION := github.com/metal-toolbox/conditionorc/internal/version
GIT_COMMIT := $(shell git rev-parse --short HEAD)
GIT_BRANCH := $(shell git symbolic-ref -q --short HEAD)
GIT_SUMMARY := $(shell git describe --tags --dirty --always)
VERSION := $(shell git describe --tags 2> /dev/null)
BUILD_DATE := $(shell date +%s)
GIT_COMMIT_FULL := $(shell git rev-parse HEAD)
GO_VERSION := $(shell expr `go version |cut -d ' ' -f3 |cut -d. -f2` \>= 16)
DOCKER_IMAGE ?= "ghcr.io/metal-toolbox/conditionorc"
REPO := "https://github.com/metal-toolbox/conditionorc.git"
.DEFAULT_GOAL := help
## lint
lint:
golangci-lint run --config .golangci.yml
## lint-fix - auto fix lint errors - for the linters that support auto fix
lint-fix:
golangci-lint run --config .golangci.yml --fix
## Go test
test: lint
go test -timeout 1m -v -covermode=atomic ./...
## Generate mocks
gen-mock:
go install github.com/vektra/mockery/[email protected]
mockery
go mod tidy
## build osx bin
build-osx:
ifeq (${GO_VERSION}, 0)
$(error build requies go version 1.17.n or higher)
endif
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o conditionorc \
-ldflags \
"-X ${LDFLAG_LOCATION}.GitCommit=${GIT_COMMIT} \
-X ${LDFLAG_LOCATION}.GitBranch=${GIT_BRANCH} \
-X ${LDFLAG_LOCATION}.GitSummary=${GIT_SUMMARY} \
-X ${LDFLAG_LOCATION}.AppVersion=${VERSION} \
-X ${LDFLAG_LOCATION}.BuildDate=${BUILD_DATE}"
## Build linux bin
build-linux:
ifeq (${GO_VERSION}, 0)
$(error build requies go version 1.16.n or higher)
endif
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o conditionorc \
-ldflags \
"-X ${LDFLAG_LOCATION}.GitCommit=${GIT_COMMIT} \
-X ${LDFLAG_LOCATION}.GitBranch=${GIT_BRANCH} \
-X ${LDFLAG_LOCATION}.GitSummary=${GIT_SUMMARY} \
-X ${LDFLAG_LOCATION}.AppVersion=${VERSION} \
-X ${LDFLAG_LOCATION}.BuildDate=${BUILD_DATE}"
## build docker image and tag as ghcr.io/metal-toolbox/conditionorc:latest
build-image: build-linux
docker build --rm=true -f Dockerfile -t ${DOCKER_IMAGE}:latest . \
--label org.label-schema.schema-version=1.0 \
--label org.label-schema.vcs-ref=${GIT_COMMIT_FULL} \
--label org.label-schema.vcs-url=${REPO}
## build and push devel docker image to KIND image repo
push-image-devel: build-image
docker tag ${DOCKER_IMAGE}:latest localhost:5001/conditionorc:latest
docker push localhost:5001/conditionorc:latest
kind load docker-image localhost:5001/conditionorc:latest
## push docker image
push-image:
docker push ${DOCKER_IMAGE}:latest
SWAG_INSTALLED := $(shell command -v swag 2> /dev/null)
## generate swagger docs for api
gen-docs:
ifndef SWAG_INSTALLED
echo "Attempting to install swagger . . ."
go install github.com/swaggo/swag/cmd/swag@latest
endif
swag init --parseDependency --parseDepth 1
# experimental
multistage-image:
docker build -f Dockerfile.builder -t ${DOCKER_IMAGE}:latest . \
--build-arg GIT_COMMIT=${GIT_COMMIT} \
--build-arg GIT_BRANCH=${GIT_BRANCH} \
--build-arg GIT_SUMMARY=${GIT_SUMMARY} \
--build-arg VERSION=${VERSION} \
--build-arg BUILD_DATE=${BUILD_DATE} \
--label org.label-schema.schema-version=1.0 \
--label org.label-schema.vcs-ref=${GIT_COMMIT_FULL} \
--label org.label-schema.vcs-url=${REPO}
push-ms-devel: multistage-image
docker tag ${DOCKER_IMAGE}:latest localhost:5001/conditionorc:latest
docker push localhost:5001/conditionorc:latest
kind load docker-image localhost:5001/conditionorc:latest
# https://gist.github.com/prwhite/8168133
# COLORS
GREEN := $(shell tput -Txterm setaf 2)
YELLOW := $(shell tput -Txterm setaf 3)
WHITE := $(shell tput -Txterm setaf 7)
RESET := $(shell tput -Txterm sgr0)
TARGET_MAX_CHAR_NUM=20
## Show help
help:
@echo ''
@echo 'Usage:'
@echo ' ${YELLOW}make${RESET} ${GREEN}<target>${RESET}'
@echo ''
@echo 'Targets:'
@awk '/^[a-zA-Z\-\\_0-9]+:/ { \
helpMessage = match(lastLine, /^## (.*)/); \
if (helpMessage) { \
helpCommand = substr($$1, 0, index($$1, ":")-1); \
helpMessage = substr(lastLine, RSTART + 3, RLENGTH); \
printf " ${YELLOW}%-${TARGET_MAX_CHAR_NUM}s${RESET} ${GREEN}%s${RESET}\n", helpCommand, helpMessage; \
} \
} \
{ lastLine = $$0 }' ${MAKEFILE_LIST}