-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathMakefile
More file actions
127 lines (107 loc) · 2.84 KB
/
Makefile
File metadata and controls
127 lines (107 loc) · 2.84 KB
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
IMG_NAME ?= dds
IMG_TAG ?= latest
IMG ?= $(IMG_NAME):$(IMG_TAG)
# Directories
LOCALBIN ?= $(shell pwd)/bin
$(LOCALBIN):
mkdir -p $(LOCALBIN)
CONFIG_DIR ?= config
DEPLOY_DIR ?= deploy
# Tooling
GO ?= go
KUSTOMIZE_VERSION ?= v5.6.0
KUSTOMIZE ?= $(LOCALBIN)/kustomize
KUBECTL ?= kubectl
# --------------------------
# Build Targets
# --------------------------
.PHONY: all
all: build
.PHONY: build
build:
$(GO) build -o $(LOCALBIN)/dynamic-device-scaler cmd/main.go
.PHONY: run
run:
$(GO) run ./cmd/main.go
# --------------------------
# Testing Targets
# --------------------------
.PHONY: test
test:
$(GO) test ./... -coverprofile=coverage.out
.PHONY: coverage
coverage: test
$(GO) tool cover -html=coverage.out
# --------------------------
# Image Management
# --------------------------
.PHONY: docker-build
docker-build:
docker build -t $(IMG) .
.PHONY: docker-push
docker-push:
docker push $(IMG)
# --------------------------
# Code Quality
# --------------------------
.PHONY: fmt
fmt:
$(GO) fmt ./...
.PHONY: vet
vet:
$(GO) vet ./...
.PHONY: lint
lint: fmt vet
.PHONY: kustomize
kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary
$(KUSTOMIZE): $(LOCALBIN)
$(call go-install-tool,$(KUSTOMIZE),sigs.k8s.io/kustomize/kustomize/v5,$(KUSTOMIZE_VERSION))
define go-install-tool
@[ -f "$(1)-$(3)" ] || { \
set -e ;\
echo "Downloading $(2)@$(3)" ;\
GOBIN=$(LOCALBIN) $(GO) install $(2)@$(3) ;\
mv $(1) $(1)-$(3) ;\
} ;\
ln -sf $(1)-$(3) $(1)
endef
# --------------------------
# Deployment Management
# --------------------------
.PHONY: manifests
manifests: kustomize
@mkdir -p $(DEPLOY_DIR)
$(KUSTOMIZE) build $(CONFIG_DIR)/default > $(DEPLOY_DIR)/manifests.yaml
.PHONY: deploy
deploy: manifests
$(KUSTOMIZE) build $(CONFIG_DIR)/default | $(KUBECTL) apply -f -
.PHONY: undeploy
undeploy: manifests
$(KUSTOMIZE) build $(CONFIG_DIR)/default | $(KUBECTL) delete -f -
# --------------------------
# Utility Targets
# --------------------------
.PHONY: clean
clean:
rm -rf $(LOCALBIN)
rm -f coverage.out
rm -rf $(DEPLOY_DIR)
.PHONY: help
help:
@echo "Operator Makefile"
@echo ""
@echo "Usage:"
@echo " make build - Build operator binary"
@echo " make run - Run operator locally"
@echo " make test - Run tests"
@echo " make coverage - Generate test coverage report"
@echo " make docker-build - Build operator docker image"
@echo " make docker-push - Push operator docker image"
@echo " make fmt - Format source code"
@echo " make vet - Vet source code"
@echo " make lint - Run all linting checks"
@echo " make manifests - Generate deployment manifests"
@echo " make deploy - Deploy operator to cluster"
@echo " make undeploy - Undeploy operator from cluster"
@echo " make clean - Clean build artifacts"
@echo " make help - Show this help"