Skip to content

Commit f222ed2

Browse files
add Makefile help target
1 parent 7a813a4 commit f222ed2

1 file changed

Lines changed: 45 additions & 32 deletions

File tree

Makefile

Lines changed: 45 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,23 @@ TOC_START=<\!--ts-->
5858
TOC_END=<\!--te-->
5959
TOC_PATH=toc.md
6060

61+
# Default target
62+
.PHONY: help
63+
help: ## Show the help
64+
@echo "Usage: make <target>"
65+
@echo
66+
@echo "Targets:"
67+
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-26s\033[0m %s\n", $$1, $$2}'
68+
@echo
69+
6170
all: prepare_test test build
6271
.PHONY: test test-ci coverage
6372
.PHONY: download download-restic-key
6473
.PHONY: build build-mac build-linux build-pi build-windows build-no-selfupdate build-all
6574
.PHONY: generate-config-reference generate-jsonschema generate-install generate-restic
6675
.PHONY: all verify prepare_test prepare_build install clean ramdisk rest-server nightly toc syslog checkdoc
6776

68-
verify:
77+
verify: ## Verify go installation
6978
ifeq ($(wildcard $(GOPATH)/.),)
7079
@echo "GOPATH not found, please check your go installation"
7180
exit 1
@@ -85,7 +94,7 @@ $(GOBIN)/github-markdown-toc.go: verify $(GOBIN)/eget
8594

8695
$(GOBIN)/mockery: verify $(GOBIN)/eget
8796
@echo "[*] $@"
88-
"$(GOBIN)/eget" vektra/mockery --tag v2.53.3 --upgrade-only --to '$(GOBIN)'
97+
"$(GOBIN)/eget" vektra/mockery --tag v2.53.5 --upgrade-only --to '$(GOBIN)'
8998

9099
$(GOBIN)/golangci-lint: verify $(GOBIN)/eget
91100
@echo "[*] $@"
@@ -95,81 +104,85 @@ $(GOBIN)/hugo: $(GOBIN)/eget
95104
@echo "[*] $@"
96105
"$(GOBIN)/eget" gohugoio/hugo --tag v0.145.0 --upgrade-only --asset=extended_0 --to '$(GOBIN)'
97106

107+
$(GOBIN)/muffet: verify $(GOBIN)/eget
108+
@echo "[*] $@"
109+
"$(GOBIN)/eget" raviqqe/muffet --upgrade-only --to '$(GOBIN)'
110+
98111
prepare_build: verify download
99112
@echo "[*] $@"
100113

101-
prepare_test: verify download $(GOBIN)/mockery
114+
prepare_test: verify download $(GOBIN)/mockery ## Generate mocks
102115
@echo "[*] $@"
103116
find . -path "*/mocks/*" -exec rm {} \;
104117
"$(GOBIN)/mockery" --config .mockery.yaml
105118

106-
download: verify
119+
download: verify ## Download dependencies
107120
@echo "[*] $@"
108121
GOPATH="$(GOPATH)" \
109122
$(GOMOD) download
110123

111-
download-restic-key:
124+
download-restic-key: ## Download restic GPG key
112125
@echo "[*] $@"
113126
KEY_FILE=$(abspath restic/gpg-key.asc)
114127
curl https://restic.net/gpg-key-alex.asc > $(KEY_FILE)
115128

116-
install: prepare_build
129+
install: prepare_build ## Install the binary (to $GOBIN)
117130
@echo "[*] $@"
118131
GOBIN="$(GOBIN)" \
119132
$(GOINSTALL) -v -ldflags "-X 'main.commit=${BUILD_COMMIT}' -X 'main.date=${BUILD_DATE}' -X 'main.builtBy=make'"
120133

121-
build: prepare_build
134+
build: prepare_build ## Build the binary
122135
@echo "[*] $@"
123136
GOPATH="$(GOPATH)" \
124137
$(GOBUILD) -o $(BINARY) -v -ldflags "-X 'main.commit=${BUILD_COMMIT}' -X 'main.date=${BUILD_DATE}' -X 'main.builtBy=make'"
125138

126-
build-no-selfupdate: prepare_build
139+
build-no-selfupdate: prepare_build ## Build the binary without self-update feature
127140
@echo "[*] $@"
128141
GOPATH="$(GOPATH)" \
129142
$(GOBUILD) -o $(BINARY) -v -tags no_self_update -ldflags "-X 'main.commit=${BUILD_COMMIT}' -X 'main.date=${BUILD_DATE}' -X 'main.builtBy=make'"
130143

131-
build-mac: prepare_build
144+
build-mac: prepare_build ## Build the binary for macOS
132145
@echo "[*] $@"
133146
GOPATH="$(GOPATH)" \
134147
GOOS="darwin" GOARCH="amd64" $(GOBUILD) -o $(BINARY_DARWIN_AMD64) -v -ldflags "-X 'main.commit=${BUILD_COMMIT}' -X 'main.date=${BUILD_DATE}' -X 'main.builtBy=make'"
135148
GOPATH="$(GOPATH)" \
136149
GOOS="darwin" GOARCH="arm64" $(GOBUILD) -o $(BINARY_DARWIN_ARM64) -v -ldflags "-X 'main.commit=${BUILD_COMMIT}' -X 'main.date=${BUILD_DATE}' -X 'main.builtBy=make'"
137150

138-
build-linux: prepare_build
151+
build-linux: prepare_build ## Build the binary for Linux
139152
@echo "[*] $@"
140153
GOPATH="$(GOPATH)" \
141154
GOOS="linux" GOARCH="amd64" $(GOBUILD) -o $(BINARY_LINUX_AMD64) -v -ldflags "-X 'main.commit=${BUILD_COMMIT}' -X 'main.date=${BUILD_DATE}' -X 'main.builtBy=make'"
142155
GOPATH="$(GOPATH)" \
143156
GOOS="linux" GOARCH="arm64" $(GOBUILD) -o $(BINARY_LINUX_ARM64) -v -ldflags "-X 'main.commit=${BUILD_COMMIT}' -X 'main.date=${BUILD_DATE}' -X 'main.builtBy=make'"
144157

145-
build-pi: prepare_build
158+
build-pi: prepare_build ## Build the binary for Raspberry Pi (armv6)
146159
@echo "[*] $@"
147160
GOPATH="$(GOPATH)" \
148161
GOOS="linux" GOARCH="arm" GOARM="6" $(GOBUILD) -o $(BINARY_PI) -v -ldflags "-X 'main.commit=${BUILD_COMMIT}' -X 'main.date=${BUILD_DATE}' -X 'main.builtBy=make'"
149162

150-
build-windows: prepare_build
163+
build-windows: prepare_build ## Build the binary for Windows
151164
@echo "[*] $@"
152165
GOPATH="$(GOPATH)" \
153166
GOOS="windows" GOARCH="amd64" $(GOBUILD) -o $(BINARY_WINDOWS_AMD64) -v -ldflags "-X 'main.commit=${BUILD_COMMIT}' -X 'main.date=${BUILD_DATE}' -X 'main.builtBy=make'"
154167
GOPATH="$(GOPATH)" \
155168
GOOS="windows" GOARCH="arm64" $(GOBUILD) -o $(BINARY_WINDOWS_ARM64) -v -ldflags "-X 'main.commit=${BUILD_COMMIT}' -X 'main.date=${BUILD_DATE}' -X 'main.builtBy=make'"
156169

157-
build-all: build-mac build-linux build-pi build-windows
170+
build-all: build-mac build-linux build-pi build-windows ## Build the binary for all platforms
158171

159-
test: prepare_test
172+
test: prepare_test ## Run unit tests
160173
@echo "[*] $@"
161174
$(GOTEST) $(TESTS)
162175

163-
test-ci: prepare_test
176+
test-ci: prepare_test ## Run unit tests with coverage (for CI)
164177
@echo "[*] $@"
165178
$(GOTEST) -v -race -short -coverprofile='coverage.out' ./...
166179

167-
coverage:
180+
coverage: ## Generate coverage report
168181
@echo "[*] $@"
169182
$(GOTEST) -coverprofile=$(COVERAGE_FILE) $(TESTS)
170183
$(GOTOOL) cover -html=$(COVERAGE_FILE)
171184

172-
clean:
185+
clean: ## Clean up the build artifacts
173186
@echo "[*] $@"
174187
$(GOCLEAN)
175188
rm -rf $(BINARY) \
@@ -188,7 +201,7 @@ clean:
188201
find . -path "*/mocks/*" -exec rm {} \;
189202
restic cache --cleanup
190203

191-
ramdisk: ${TMP_MOUNT}
204+
ramdisk: ${TMP_MOUNT} ## Create a ramdisk for testing
192205

193206
# Fixed size ramdisk for mac OS X
194207
${TMP_MOUNT_DARWIN}:
@@ -200,7 +213,7 @@ ${TMP_MOUNT_LINUX}:
200213
mkdir -p ${TMP_MOUNT_LINUX}
201214
sudo mount -t tmpfs -o "rw,relatime,size=2097152k,uid=`id -u`,gid=`id -g`" tmpfs ${TMP_MOUNT_LINUX}
202215

203-
rest-server:
216+
rest-server: ## Run rest-server docker container for testing
204217
@echo "[*] $@"
205218
REST_IMAGE=restic/rest-server
206219
REST_CONTAINER=rest_server
@@ -210,7 +223,7 @@ rest-server:
210223
docker pull ${REST_IMAGE}
211224
docker run -d -p 8000:8000 -v ${REST_DATA}:/data --name ${REST_CONTAINER} --restart always -e "OPTIONS=${REST_OPTIONS}" ${REST_IMAGE}
212225

213-
nightly: $(GOBIN)/goreleaser
226+
nightly: $(GOBIN)/goreleaser ## Create a nightly release (for testing goreleaser setup)
214227
@echo "[*] $@"
215228
GITLAB_TOKEN= goreleaser --snapshot --skip=publish --clean
216229

@@ -221,11 +234,11 @@ toc: $(GOBIN)/github-markdown-toc.go
221234
sed -i ".2" "/${TOC_START}/r ${TOC_PATH}" "${README}"
222235
rm ${README}.1 ${README}.2 ${TOC_PATH}
223236

224-
generate-install:
237+
generate-install: ## Generate the install script using godownloader
225238
@echo "[*] $@"
226239
godownloader .godownloader.yml -r creativeprojects/resticprofile -o install.sh
227240

228-
generate-restic:
241+
generate-restic: ## Generate the restic commands JSON file
229242
@echo "[*] $@"
230243
$(GOBUILD) -o $(RESTIC_GEN) $(abspath restic/generator)
231244

@@ -246,7 +259,7 @@ generate-restic:
246259

247260
cp $(RESTIC_CMD) restic/commands.json
248261

249-
generate-jsonschema: build
262+
generate-jsonschema: build ## Generate the JSON schema files
250263
@echo "[*] $@"
251264

252265
mkdir -p $(JSONSCHEMA_DIR) || echo "$(JSONSCHEMA_DIR) exists"
@@ -261,7 +274,7 @@ generate-jsonschema: build
261274
done ; \
262275
done
263276

264-
generate-config-reference: build
277+
generate-config-reference: build ## Generate the configuration reference documentation
265278
@echo "[*] $@"
266279

267280
META_TITLE="Resticprofile configuration reference" \
@@ -276,12 +289,12 @@ generate-config-reference: build
276289
$(abspath $(BINARY)) generate --config-reference --to $(CONFIG_REFERENCE_DIR)
277290

278291
.PHONY: documentation
279-
documentation: generate-jsonschema generate-config-reference $(GOBIN)/hugo
292+
documentation: generate-jsonschema generate-config-reference $(GOBIN)/hugo ## Generate the documentation site
280293
@echo "[*] $@"
281294
cd docs && hugo --minify
282295

283296
.PHONY: syslog-ng
284-
syslog-ng:
297+
syslog-ng: ## Run syslog-ng docker container for testing
285298
@echo "[*] $@"
286299
docker run -d \
287300
--name=syslog-ng \
@@ -295,27 +308,27 @@ syslog-ng:
295308
-v $(CURRENT_DIR)/log:/var/log \
296309
lscr.io/linuxserver/syslog-ng:latest
297310

298-
checkdoc:
311+
checkdoc: ## Check documentation
299312
@echo "[*] $@"
300313
$(GOCMD) run ./config/checkdoc -r docs/content -i changelog.md
301314

302315
.PHONY: checklinks
303-
checklinks:
316+
checklinks: $(GOBIN)/muffet ## Check for broken links in the documentation site
304317
@echo "[*] $@"
305318
muffet --buffer-size=8192 --max-connections-per-host=8 --rate-limit=20 \
306319
--exclude="(linux\.die\.net|scoop\.sh|commit)" \
307320
--header="User-Agent: Muffet/$$(muffet --version)" \
308321
http://127.0.0.1:1313/resticprofile/
309322

310323
.PHONY: lint
311-
lint: $(GOBIN)/golangci-lint
324+
lint: $(GOBIN)/golangci-lint ## Run golangci-lint
312325
@echo "[*] $@"
313326
GOOS=darwin golangci-lint run
314327
GOOS=linux golangci-lint run
315328
GOOS=windows golangci-lint run
316329

317330
.PHONY: fix
318-
fix: $(GOBIN)/golangci-lint
331+
fix: $(GOBIN)/golangci-lint ## Run golangci-lint with --fix
319332
@echo "[*] $@"
320333
$(GOCMD) mod tidy
321334
$(GOCMD) fix ./...
@@ -329,10 +342,10 @@ deploy-current: build-linux build-pi
329342
for server in $$(cat targets_amd64.txt); do \
330343
echo "Deploying to $$server" ; \
331344
rsync -avz --progress $(BINARY_LINUX_AMD64) $$server: ; \
332-
ssh $$server "sudo -S install $(BINARY_LINUX_AMD64) /usr/local/bin/resticprofile" ; \
345+
ssh -t $$server "sudo -S install $(BINARY_LINUX_AMD64) /usr/local/bin/resticprofile" ; \
333346
done
334347
for server in $$(cat targets_armv6.txt); do \
335348
echo "Deploying to $$server" ; \
336349
rsync -avz --progress $(BINARY_PI) $$server: ; \
337-
ssh $$server "sudo -S install $(BINARY_PI) /usr/local/bin/resticprofile" ; \
350+
ssh -t $$server "sudo -S install $(BINARY_PI) /usr/local/bin/resticprofile" ; \
338351
done

0 commit comments

Comments
 (0)