forked from sergelogvinov/proxmox-csi-plugin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
125 lines (96 loc) · 3.11 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
REGISTRY ?= ghcr.io
USERNAME ?= sergelogvinov
PROJECT ?= proxmox-csi
IMAGE ?= $(REGISTRY)/$(USERNAME)/$(PROJECT)
PLATFORM ?= linux/arm64,linux/amd64
PUSH ?= false
SHA ?= $(shell git describe --match=none --always --abbrev=8 --dirty)
TAG ?= $(shell git describe --tag --always --match v[0-9]\*)
GO_LDFLAGS := -ldflags "-w -s -X main.version=$(SHA)"
OS ?= $(shell go env GOOS)
ARCH ?= $(shell go env GOARCH)
ARCHS = amd64 arm64
BUILD_ARGS := --platform=$(PLATFORM)
ifeq ($(PUSH),true)
BUILD_ARGS += --push=$(PUSH)
else
BUILD_ARGS += --output type=docker
endif
############
# Help Menu
define HELP_MENU_HEADER
# Getting Started
To build this project, you must have the following installed:
- git
- make
- golang 1.20+
- golangci-lint
endef
export HELP_MENU_HEADER
help: ## This help menu
@echo "$$HELP_MENU_HEADER"
@grep -E '^[a-zA-Z0-9%_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
############
#
# Build Abstractions
#
build-all-archs:
@for arch in $(ARCHS); do $(MAKE) ARCH=$${arch} build ; done
.PHONY: clean
clean: ## Clean
rm -rf bin .cache
build-%:
CGO_ENABLED=0 GOOS=$(OS) GOARCH=$(ARCH) go build $(GO_LDFLAGS) \
-o bin/proxmox-csi-$*-$(ARCH) ./cmd/$*
.PHONY: build
build: build-controller build-node ## Build
.PHONY: run
run: build-controller ## Run
./bin/proxmox-csi-controller-$(ARCH) --cloud-config=hack/cloud-config.yaml -v=4
.PHONY: lint
lint: ## Lint Code
golangci-lint run --config .golangci.yml
.PHONY: unit
unit: ## Unit Tests
go test -tags=unit $(shell go list ./...) $(TESTARGS)
############
.PHONY: helm-unit
helm-unit: ## Helm Unit Tests
@helm lint charts/proxmox-csi-plugin
@helm template -f charts/proxmox-csi-plugin/ci/values.yaml proxmox-csi-plugin charts/proxmox-csi-plugin >/dev/null
.PHONY: docs
docs:
helm template -n csi-proxmox proxmox-csi-plugin \
-f charts/proxmox-csi-plugin/values.edge.yaml \
charts/proxmox-csi-plugin > docs/deploy/proxmox-csi-plugin.yml
helm template -n csi-proxmox proxmox-csi-plugin \
-f charts/proxmox-csi-plugin/values.talos.yaml \
--set-string image.tag=$(TAG) \
charts/proxmox-csi-plugin > docs/deploy/proxmox-csi-plugin-talos.yml
helm-docs --sort-values-order=file charts/proxmox-csi-plugin
release-update:
git-chglog --config hack/chglog-config.yml -o CHANGELOG.md
############
#
# Docker Abstractions
#
.PHONY: docker-init
docker-init:
docker run --rm --privileged multiarch/qemu-user-static:register --reset
docker context create multiarch ||:
docker buildx create --name multiarch --driver docker-container --use ||:
docker context use multiarch
docker buildx inspect --bootstrap multiarch
image-%:
docker buildx build $(BUILD_ARGS) \
--build-arg TAG=$(TAG) \
--build-arg SHA=$(SHA) \
-t $(IMAGE)-$*:$(TAG) \
--target $* \
-f Dockerfile .
.PHONY: images-checks
images-checks: images image-tools-check
trivy image --exit-code 1 --ignore-unfixed --severity HIGH,CRITICAL --no-progress $(IMAGE)-controller:$(TAG)
trivy image --exit-code 1 --ignore-unfixed --severity HIGH,CRITICAL --no-progress $(IMAGE)-node:$(TAG)
.PHONY: images
images: image-controller image-node ## Build images