Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
165 lines (127 loc) · 6.3 KB
/
Copy pathMakefile
File metadata and controls
165 lines (127 loc) · 6.3 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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# Build Information
BUILD_DATE := $(shell date +%Y-%m-%dT%H:%M:%SZ)
GIT_COMMIT := $(shell git rev-parse --short HEAD)
VERSION := $(shell git describe --tags --abbrev=0)
VERSION_PKG := github.com/liquidmetal-dev/flintlock/internal/version
OS := $(shell go env GOOS)
ARCH := $(shell go env GOARCH)
UNAME := $(shell uname -s)
# Directories
REPO_ROOT := $(shell git rev-parse --show-toplevel)
BIN_DIR := bin
OUT_DIR := out
FLINTLOCKD_CMD := cmd/flintlockd
FLINTLOCK_METRICS_CMD := cmd/flintlock-metrics
FLINTLOCK_PROVISION_CMD := cmd/flintlock-provision
TEST_E2E_DIR := test/e2e
$(BIN_DIR):
mkdir -p $@
$(OUT_DIR):
mkdir -p $@
# Useful things
test_image = liquidmetal-dev/flintlock-e2e
.DEFAULT_GOAL := help
##@ Build
.PHONY: build
build: build-flintlockd build-flintlock-metrics build-flintlock-provision ## Build the binaries
.PHONY: build-flintlockd
build-flintlockd: $(BIN_DIR) ## Build flintlockd binary
go build -o $(BIN_DIR)/flintlockd ./$(FLINTLOCKD_CMD)
.PHONY: build-flintlock-metrics ## Build flintlock-metrics binary
build-flintlock-metrics: $(BIN_DIR)
go build -o $(BIN_DIR)/flintlock-metrics ./$(FLINTLOCK_METRICS_CMD)
.PHONY: build-flintlock-provision ## Build flintlock-provision binary
build-flintlock-provision: $(BIN_DIR)
go build -o $(BIN_DIR)/flintlock-provision ./$(FLINTLOCK_PROVISION_CMD)
.PHONY: build-release
build-release: build-release-flintlockd build-release-flintlock-metrics build-release-flintlock-provision ## Build the release binaries
.PHONY: build-release-flintlockd
build-release-flintlockd: $(BIN_DIR) ## Build flintlockd release binaries
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -o $(BIN_DIR)/flintlockd_amd64 -ldflags "-X $(VERSION_PKG).Version=$(VERSION) -X $(VERSION_PKG).BuildDate=$(BUILD_DATE) -X $(VERSION_PKG).CommitHash=$(GIT_COMMIT)" ./$(FLINTLOCKD_CMD)
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o $(BIN_DIR)/flintlockd_arm64 -ldflags "-X $(VERSION_PKG).Version=$(VERSION) -X $(VERSION_PKG).BuildDate=$(BUILD_DATE) -X $(VERSION_PKG).CommitHash=$(GIT_COMMIT)" ./$(FLINTLOCKD_CMD)
.PHONY: build-release-flintlock-metrics
build-release-flintlock-metrics: $(BIN_DIR) ## Build flintlock-metrics release binaries
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -o $(BIN_DIR)/flintlock-metrics_amd64 -ldflags "-X $(VERSION_PKG).Version=$(VERSION) -X $(VERSION_PKG).BuildDate=$(BUILD_DATE) -X $(VERSION_PKG).CommitHash=$(GIT_COMMIT)" ./$(FLINTLOCK_METRICS_CMD)
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o $(BIN_DIR)/flintlock-metrics_arm64 -ldflags "-X $(VERSION_PKG).Version=$(VERSION) -X $(VERSION_PKG).BuildDate=$(BUILD_DATE) -X $(VERSION_PKG).CommitHash=$(GIT_COMMIT)" ./$(FLINTLOCK_METRICS_CMD)
.PHONY: build-release-flintlock-provision
build-release-flintlock-provision: $(BIN_DIR) ## Build flintlock-provision release binaries
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -o $(BIN_DIR)/flintlock-provision_amd64 -ldflags "-X $(VERSION_PKG).Version=$(VERSION) -X $(VERSION_PKG).BuildDate=$(BUILD_DATE) -X $(VERSION_PKG).CommitHash=$(GIT_COMMIT)" ./$(FLINTLOCK_PROVISION_CMD)
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o $(BIN_DIR)/flintlock-provision_arm64 -ldflags "-X $(VERSION_PKG).Version=$(VERSION) -X $(VERSION_PKG).BuildDate=$(BUILD_DATE) -X $(VERSION_PKG).CommitHash=$(GIT_COMMIT)" ./$(FLINTLOCK_PROVISION_CMD)
.PHONY: release-snapshot
release-snapshot: ## Build a local goreleaser snapshot release (binaries + deb/rpm packages), no publishing
goreleaser release --snapshot --clean
##@ Generate
.PHONY: generate
generate: ## Generate code
$(MAKE) generate-go
$(MAKE) generate-proto
$(MAKE) generate-di
.PHONY: generate-go
generate-go: ## Generate Go Code
mise exec -- go generate ./infrastructure/mock
.PHONY: generate-proto ## Generate protobuf/grpc code
generate-proto:
buf dep update
buf generate
.PHONY: generate-di ## Generate the dependency injection code
generate-di:
wire gen github.com/liquidmetal-dev/flintlock/internal/inject
##@ Linting
.PHONY: lint
lint: ## Lint code
golangci-lint run -v --fast=false $(GOLANGCI_LINT_EXTRA_ARGS)
.PHONY: lint-fix
lint-fix: ## Lint the codebase and run auto-fixers if supported by the linter
GOLANGCI_LINT_EXTRA_ARGS=--fix $(MAKE) lint
.PHONY: lint-new
lint-new: ## Lint only files changed vs main (fast local iteration)
golangci-lint run -v --new-from-rev=main $(GOLANGCI_LINT_EXTRA_ARGS)
.PHONY: proto-lint
proto-lint: ## Lint protobuf/grpc
buf lint
.PHONY: proto-breaking
proto-breaking: ## Check protobuf/grpc for breaking changes against the published BSR schema
buf breaking --against buf.build/liquidmetal-dev/flintlock:main
##@ Testing
.PHONY: test
test: ## Run unit tests
go test -v -race ./...
.PHONY: test-with-cov
test-with-cov: ## Run unit tests with coverage
go test -v -race -timeout 2m -p 1 -covermode=atomic -coverprofile=coverage.txt -exec "sudo --preserve-env=CTR_SOCK_PATH" ./...
.PHONY: test-e2e
test-e2e: compile-e2e ## Run e2e tests locally
./test/e2e/test.sh $(E2E_ARGS)
.PHONY: test-e2e-docker
test-e2e-docker: compile-e2e ## Run e2e tests locally in a container
docker run --rm -it \
--privileged \
--volume /dev:/dev \
--volume /run/udev/control:/run/udev/control \
--volume $(REPO_ROOT):/src/flintlock \
--ipc=host \
--workdir=/src/flintlock \
$(test_image):latest \
/bin/bash -c "make test-e2e"
.PHONY: test-e2e-metal
test-e2e-metal: ## Run e2e tests in Equinix
echo "must set EQUINIX_ORG_ID"
./test/tools/run.py run-e2e -o $(EQUINIX_ORG_ID)
.PHONY: compile-e2e
compile-e2e: ## Test e2e compilation
go test -c -o /dev/null -tags=e2e ./test/e2e
##@ Docker
.PHONY: docker-build
docker-build: ## Build the e2e docker image
docker build -t $(test_image):latest -f test/docker/Dockerfile.e2e .
.PHONY: docker-push
docker-push: docker-build ## Push the e2e docker image to liquidmetal-dev/fl-e2e
docker push $(test_image):latest
##@ Utility
.PHONY: help
help: ## Display this help. Thanks to https://www.thapaliya.com/en/writings/well-documented-makefiles/
ifeq ($(OS),Windows_NT)
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make <target>\n"} /^[0-9a-zA-Z_-]+:.*?##/ { printf " %-40s %s\n", $$1, $$2 } /^##@/ { printf "\n%s\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
else
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[0-9a-zA-Z_-]+:.*?##/ { printf " \033[36m%-40s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
endif