-
Notifications
You must be signed in to change notification settings - Fork 32
Expand file tree
/
Copy pathMakefile
More file actions
138 lines (114 loc) · 5.19 KB
/
Copy pathMakefile
File metadata and controls
138 lines (114 loc) · 5.19 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
TEST?=$$(go list ./... | grep -v 'vendor')
HOSTNAME=clickhouse.cloud
NAMESPACE=terraform
NAME=clickhouse
BINARY=terraform-provider-${NAME}
VERSION=0.1
OS_ARCH=darwin_arm64
default: install
build:
go build -o ${BINARY}
release:
GOOS=darwin GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_darwin_amd64
GOOS=freebsd GOARCH=386 go build -o ./bin/${BINARY}_${VERSION}_freebsd_386
GOOS=freebsd GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_freebsd_amd64
GOOS=freebsd GOARCH=arm go build -o ./bin/${BINARY}_${VERSION}_freebsd_arm
GOOS=linux GOARCH=386 go build -o ./bin/${BINARY}_${VERSION}_linux_386
GOOS=linux GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_linux_amd64
GOOS=linux GOARCH=arm go build -o ./bin/${BINARY}_${VERSION}_linux_arm
GOOS=openbsd GOARCH=386 go build -o ./bin/${BINARY}_${VERSION}_openbsd_386
GOOS=openbsd GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_openbsd_amd64
GOOS=solaris GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_solaris_amd64
GOOS=windows GOARCH=386 go build -o ./bin/${BINARY}_${VERSION}_windows_386
GOOS=windows GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_windows_amd64
install: build
mkdir -p ~/.terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAME}/${VERSION}/${OS_ARCH}
mv ${BINARY} ~/.terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAME}/${VERSION}/${OS_ARCH}
test:
go test -i $(TEST) || exit 1
echo $(TEST) | xargs -t -n4 go test $(TESTARGS) -timeout=30s -parallel=4
enable_git_hooks: ## Add githooks for code validation before commit, as symlink so they get updated automatically
mkdir -p .git/hooks
cd .git/hooks && ln -fs ../../.githooks/* .
echo "Git hooks were updated from .githooks/ into .git/hooks/"
docs: ensure-tfplugindocs
$(TFPLUGINDOCS) generate --provider-name=clickhouse
go run ./internal/tools/docsubcategory
docs-alpha: ensure-tfplugindocs
$(TFPLUGINDOCS) generate --provider-name=clickhouse --additional-go-build-args="-tags alpha"
go run -tags alpha ./internal/tools/docsubcategory
.PHONY: docs-validate
docs-validate: ensure-tfplugindocs ## Validate generated docs and pin subcategories to the registry's group names
$(TFPLUGINDOCS) validate --provider-name=clickhouse --allowed-resource-subcategories-file=allowed-subcategories.txt
fmt: ensure-golangci-lint
go fmt ./...
$(GOLANGCILINT) run --fix --allow-serial-runners
.PHONY: lint
lint: ensure-golangci-lint ## Run go vet and golangci-lint
go vet ./...
$(GOLANGCILINT) run
.PHONY: sec
sec: ensure-golangci-lint ## Run only the gosec security linter (honors .golangci.yml exclusions)
$(GOLANGCILINT) run --enable-only gosec ./...
.PHONY: testacc
testacc: ## Run acceptance tests (creates real resources)
TF_ACC=1 go test ./... -v -timeout=120m
.PHONY: cover-profile
cover-profile: ## Produce cover.out
go test ./... -coverprofile=./cover.out -covermode=atomic -coverpkg=./... -timeout=120s
.PHONY: cover
cover: cover-profile ## Enforce coverage thresholds from .testcoverage.yml
go tool go-test-coverage --config=./.testcoverage.yml
.PHONY: cover-html
cover-html: cover-profile ## Open an HTML coverage report
go tool cover -html=cover.out -o=cover.html
.PHONY: docs-check
docs-check: docs-alpha ## Fail if generated docs are stale (mirrors docs.yaml)
git diff --exit-code docs/ || (echo "docs are stale: run 'make docs-alpha' and commit" && exit 1)
.PHONY: goreleaser-check
goreleaser-check: ## Validate both goreleaser configs and do a snapshot build
goreleaser check --config .goreleaser-stable.yml
goreleaser check --config .goreleaser-alpha.yml
goreleaser build --config .goreleaser-stable.yml --snapshot --clean --single-target
.PHONY: adr
adr: ## Create an ADR: make adr title="..." statement="..."
go tool adr-tool short-adr -p ./decisions -t "$(title)" -s "$(statement)"
mock:
cd ./internal/api && minimock -i github.com/ClickHouse/terraform-provider-clickhouse/internal/api.Client -o client_mock.go -n ClientMock -p api && cd ../..
TFPLUGINDOCS = /tmp/tfplugindocs-patched
ensure-tfplugindocs: ## Download tfplugindocs locally if necessary.
$(call get-tfplugindocs,$(TFPLUGINDOCS),github.com/whites11/terraform-plugin-docs)
GOLANGCILINT = $(shell go env GOPATH)/bin/golangci-lint
# Test if golangci-lint is available in the GOPATH, if not, set to local and download if needed
ifneq ($(shell test -f $(GOLANGCILINT) && echo -n yes),yes)
GOLANGCILINT = /tmp/golangci-lint
endif
ensure-golangci-lint: export GOTOOLCHAIN := go1.26.0
ensure-golangci-lint: ## Download golangci-lint locally if necessary.
$(call go-get-tool,$(GOLANGCILINT),github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.12.2)
# go-get-tool will 'go get' any package $2 and install it to $1.
define go-get-tool
@[ -f $(1) ] || { \
set -e ;\
TMP_DIR=$$(mktemp -d) ;\
cd $$TMP_DIR ;\
go mod init tmp ;\
gobin="$$(dirname $(1))" ;\
echo "Downloading $(2) into $$gobin" ;\
GOBIN=$$gobin go install $(2) ;\
rm -rf $$TMP_DIR ;\
}
endef
define get-tfplugindocs
@[ -f $(1) ] || { \
set -e ;\
TMP_DIR=$$(mktemp -d) ;\
cd $$TMP_DIR ;\
echo "Cloning https://$(2).git into $$TMP_DIR" ;\
git clone https://$(2).git tfplugindocs ;\
cd tfplugindocs ;\
echo "Building tfplugindocs into $(1)" ;\
go build -o $(1) cmd/tfplugindocs/main.go ;\
rm -rf $$TMP_DIR ;\
}
endef