forked from korrel8r/korrel8r
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
183 lines (143 loc) · 6.15 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
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# Makefile is self-documenting, comments starting with '##' are extracted as help text.
help: ## Display this help.
@echo; echo = Targets =
@grep -E '^[A-Za-z0-9_-]+:.*##' Makefile | sed 's/:.*##\s*/#/' | column -s'#' -t
@echo; echo = Variables =
@grep -E '^## [A-Z0-9_]+: ' Makefile | sed 's/^## \([A-Z0-9_]*\): \(.*\)/\1#\2/' | column -s'#' -t
## VERSION: Semantic version for release, use -dev for development pre-release versions.
VERSION?=0.7.3-dev
## REGISTRY_BASE: Image registry base, for example quay.io/somebody
REGISTRY_BASE?=$(error REGISTRY_BASE must be set to push images)
## IMGTOOL: May be podman or docker.
IMGTOOL?=$(or $(shell podman info > /dev/null 2>&1 && which podman), $(shell docker info > /dev/null 2>&1 && which docker))
## NAMESPACE: Namespace for `make deploy`
NAMESPACE=korrel8r
## CONFIG: Configuration file for `make run`
CONFIG?=etc/korrel8r/openshift-route.yaml
# Name of image.
IMG?=$(REGISTRY_BASE)/korrel8r
IMAGE=$(IMG):$(VERSION)
include .bingo/Variables.mk # Versioned tools
BIN ?= _bin
export PATH := $(abspath $(BIN)):$(PATH)
export GOCOVERDIR := $(abspath _cover)
$(BIN):
mkdir -p $(BIN)
_cover:
mkdir -p _cover
# Generated files
VERSION_TXT=internal/pkg/build/version.txt
SWAGGER_SPEC=pkg/rest/docs/swagger.json
GEN_SRC=$(VERSION_TXT) $(SWAGGER_SPEC) _cover
all: lint test _site image-build ## Build and test everything locally. Recommended before pushing.
build: $(GEN_SRC)
go build ./cmd/korrel8r
install: $(GEN_SRC)
go install ./cmd/korrel8r
clean: ## Remove generated files, including checked-in files.
rm -rf bin korrel8r _site $(GEN_SRC) doc/gen tmp $(BIN) $(GOCOVERDIR)
ifneq ($(VERSION),$(file <$(VERSION_TXT)))
.PHONY: $(VERSION_TXT) # Force update if VERSION_TXT does not match $(VERSION)
endif
$(VERSION_TXT):
echo $(VERSION) > $@
$(SWAGGER_SPEC): $(wildcard pkg/rest/*.go) $(SWAG)
@rm -f $@; mkdir -p $(dir $@)
$(SWAG) init -q -g pkg/rest/operations.go -o $(dir $@)
$(SWAG) fmt pkg/rest
@touch $@
SHELLCHECK:= $(BIN)/shellcheck
$(SHELLCHECK):
@mkdir -p $(dir $@)
./hack/install-shellcheck.sh $(BIN) 0.10.0
lint: $(GEN_SRC) $(GOLANGCI_LINT) $(SHFMT) $(SHELLCHECK) ## Run the linter to find and fix code style problems.
hack/copyright.sh
go mod tidy
$(GOLANGCI_LINT) run --fix
$(SHFMT) -l -w ./**/*.sh
$(SHELLCHECK) -x -S style hack/*.sh
.PHONY: test
test: $(GEN_SRC) ## Run all tests, requires an openshift cluster.
go test -race ./...
test-no-cluster: $(GEN_SRC) ## Run all tests that don't require an openshift cluster.
go test -race -skip '.*/Openshift' ./...
cover: $(GOCOVERDIR) ## Run tests with accumulated coverage stats in _cover. Use 'make -i' to see coverage when tests fail.
@echo == Individual package test coverage.
go test -cover ./... -test.gocoverdir=$(GOCOVERDIR)
@echo == Aggregate coverage across all tests.
go tool covdata percent -i $(GOCOVERDIR)
bench: $(GEN_SRC) ## Run all benchmarks.
go test -bench=. -run=NONE ./... | { type benchstat >/dev/null && benchstat /dev/stdin; }
$(GOCOVERDIR):
@mkdir -p $@
run: ## Run `korrel8r web` for debugging.
go run ./cmd/korrel8r web -c $(CONFIG)
image-build: $(GEN_SRC) ## Build image locally, don't push.
$(IMGTOOL) build --tag=$(IMAGE) -f Containerfile .
image: image-build ## Build and push image. IMG must be set to a writable image repository.
$(IMGTOOL) push -q $(IMAGE)
WAIT_DEPLOYMENT=hack/wait.sh rollout $(NAMESPACE) deployment.apps/korrel8r
DEPLOY_ROUTE=kubectl apply -k config/route -n $(NAMESPACE) || echo "skipping route" # Non-openshift cluster
kustomize-edit: $(KUSTOMIZE)
cd config; \
$(KUSTOMIZE) edit set image "quay.io/korrel8r/korrel8r=$(IMAGE)"; \
$(KUSTOMIZE) edit set namespace "$(NAMESPACE)"
deploy: image kustomize-edit ## Deploy to current cluster using kustomize.
kubectl apply -k config
$(DEPLOY_ROUTE)
$(WAIT_DEPLOYMENT)
undeploy: # Delete resources created by `make deploy`
@kubectl delete -k config/route || true
@kubectl delete -k config || true
## Documentation
ASCIIDOCTOR:=$(BIN)/asciidoctor
$(ASCIIDOCTOR):
@mkdir -p $(dir $@)
gem install asciidoctor --user-install --bindir $(BIN)
# From github.com:darshandsoni/asciidoctor-skins.git
CSS?=adoc-readthedocs.css
ADOC_FLAGS=-a allow-uri-read -a stylesdir=$(shell pwd)/doc/css -a stylesheet=$(CSS) -a revnumber=$(VERSION) -a revdate=$(shell date -I)
# _site is published to github pages by .github/workflows/asciidoctor-ghpages.yml.
_site: doc $(shell find doc/images etc/korrel8r) $(ASCIIDOCTOR) ## Generate the website HTML.
@mkdir -p $@
@cp -r doc/images etc/korrel8r $@
$(ASCIIDOCTOR) $(ADOC_FLAGS) -D_site doc/index.adoc
$(ASCIIDOCTOR) $(ADOC_FLAGS) -D_site/gen/cmd doc/gen/cmd/*.adoc
$(and $(shell type -p linkchecker),linkchecker --no-warnings --check-extern --ignore-url 'https?://localhost[:/].*' _site)
@touch $@
_site/man: $(shell find ./cmd) ## Generated man pages.
@mkdir -p $@
go run ./cmd/korrel8r doc man $@
@touch $@
doc: doc/gen/domains.adoc doc/gen/rest_api.adoc doc/gen/cmd
@touch $@
doc/gen/domains.adoc: $(shell find cmd/korrel8r-doc internal pkg -name '*.go') $(GEN_SRC)
@mkdir -p $(dir $@)
go run ./cmd/korrel8r-doc pkg/domains/* > $@
doc/gen/rest_api.adoc: $(SWAGGER_SPEC) $(shell find etc/swagger) $(SWAGGER)
@mkdir -p $(dir $@)
$(SWAGGER) -q generate markdown -T etc/swagger -f $(SWAGGER_SPEC) --output $@
KRAMDOC:=$(BIN)/kramdoc
$(KRAMDOC):
@mkdir -p $(dir $@)
gem install kramdown-asciidoc --user-install --bindir $(BIN)
doc/gen/cmd: $(shell find ./cmd/korrel8r) $(KORREL8RCLI) $(KRAMDOC) ## Generated command documentation
@mkdir -p $@
go run ./cmd/korrel8r doc markdown $@
$(KORREL8RCLI) doc markdown $@
hack/md-to-adoc.sh $(KRAMDOC) $@/*.md
@touch $@
pre-release: ## Prepare for a release. Push results before `make release`
$(MAKE) all image kustomize-edit
@echo Ready to release $(VERSION) to $(REGISTRY_BASE)
release: ## Push images and release tags for a release.
$(MAKE) clean
$(MAKE) pre-release
hack/tag-release.sh $(VERSION)
$(IMGTOOL) push -q "$(IMAGE)" "$(IMG):latest"
@echo Released $(VERSION) to $(REGISTRY_BASE)
BINGO=$(GOBIN)/bingo
$(BINGO): # Bootstrap bingo
go install github.com/bwplotka/[email protected]
tools: $(BINGO) $(ASCIIDOCTOR) $(KRAMDOC) $(SHELLCHECK) ## Download all tools needed for development
$(BINGO) get