-
Notifications
You must be signed in to change notification settings - Fork 470
/
Copy pathMakefile
142 lines (107 loc) · 3.46 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
# A Self-Documenting Makefile: http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
export PATH := $(abspath bin/):${PATH}
##@ General
# Targets commented with ## will be visible in "make help" info.
# Comments marked with ##@ will be used as categories for a group of targets.
.PHONY: help
default: help
help: ## Display this help
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
##@ Development
.PHONY: up
up: ## Start development environment
docker compose up -d
.PHONY: down
down: ## Destroy development environment
docker compose down -v
##@ Build
PACKAGE_NAME := github.com/bank-vaults/bank-vaults
GORELEASER_CROSS_VERSION ?= v1.23.0
.PHONY: build
build: ## Build binary
@mkdir -p build
go build -race -o build/ ./cmd/bank-vaults
.PHONY: artifacts
artifacts: container-image binary-snapshot
artifacts: ## Build artifacts
.PHONY: container-image
container-image: ## Build container image
docker build .
.PHONY: binary-snapshot
binary-snapshot: ## Build binary snapshot
@docker run \
--rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v `pwd`:/go/src/$(PACKAGE_NAME) \
-w /go/src/$(PACKAGE_NAME) \
ghcr.io/goreleaser/goreleaser-cross:${GORELEASER_CROSS_VERSION} \
--clean --skip=publish --snapshot
.PHONY: release
release: ## Release the project
@docker run \
--rm \
--env-file .release-env \
-v /var/run/docker.sock:/var/run/docker.sock \
-v `pwd`:/go/src/$(PACKAGE_NAME) \
-w /go/src/$(PACKAGE_NAME) \
ghcr.io/goreleaser/goreleaser-cross:${GORELEASER_CROSS_VERSION} \
release
##@ Checks
.PHONY: check
check: test test-integration lint ## Run tests and linters
.PHONY: test
test: ## Run tests
go test -race -v ./...
.PHONY: test-integration
test-integration: ## Run integration tests
go test -race -v -tags=integration ./...
.PHONY: lint
lint: lint-go lint-docker lint-yaml
lint: ## Run linters
.PHONY: lint-go
lint-go:
$(GOLANGCI_LINT_BIN) run $(if ${CI},--out-format colored-line-number,)
.PHONY: lint-docker
lint-docker:
$(HADOLINT_BIN) Dockerfile
.PHONY: lint-yaml
lint-yaml:
$(YAMLLINT_BIN) $(if ${CI},-f github,) --no-warnings .
.PHONY: fmt
fmt: ## Format code
$(GOLANGCI_LINT_BIN) run --fix
.PHONY: license-check
license-check: ## Run license check
$(LICENSEI_BIN) check
$(LICENSEI_BIN) header
##@ Autogeneration
.PHONY: generate
generate: gen-docs
generate: ## Run generation jobs
.PHONY: gen-docs
gen-docs: ## Generate CLI documentation
@mkdir -p "build/docs"
go run -tags=gen_docs ./cmd/bank-vaults gen-docs "build/docs"
##@ Dependencies
# Dependency versions
GOLANGCI_LINT_VERSION = 1.62.2
LICENSEI_VERSION = 0.9.0
# Dependency binaries
GOLANGCI_LINT_BIN := golangci-lint
LICENSEI_BIN := licensei
# TODO: add support for hadolint and yamllint dependencies
HADOLINT_BIN := hadolint
YAMLLINT_BIN := yamllint
deps: bin/golangci-lint bin/licensei
deps: ## Install dependencies
# If we have "bin" dir, use those binaries instead
ifneq ($(wildcard ./bin/.),)
GOLANGCI_LINT_BIN := bin/$(GOLANGCI_LINT_BIN)
LICENSEI_BIN := bin/$(LICENSEI_BIN)
endif
bin/golangci-lint:
@mkdir -p bin
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | bash -s -- v${GOLANGCI_LINT_VERSION}
bin/licensei:
@mkdir -p bin
curl -sfL https://raw.githubusercontent.com/goph/licensei/master/install.sh | bash -s -- v${LICENSEI_VERSION}