1
1
# ------------------------------------------
2
- # Makefile: Clojure Service
2
+ # Practicalli Makefile
3
3
#
4
4
# Consistent set of targets to support local development of Clojure
5
5
# and build the Clojure service during CI deployment
6
6
#
7
+ # `-` before a command ignores any errors returned
8
+
7
9
# Requirements
8
10
# - cljstyle
9
- # - Clojure CLI aliases
11
+ # - Clojure CLI aliases from practicalli/clojure-cli-config
10
12
# - `:env/dev` to include `dev` directory on class path
11
13
# - `:env/test` to include `test` directory and libraries to support testing
12
14
# - `:test/run` to run kaocha kaocha test runner and supporting paths and dependencies
@@ -33,8 +35,8 @@ HELP-DESCRIPTION-SPACING := 24
33
35
# EDN-FILES := $(wildcard *.edn)
34
36
35
37
# Tool variables
36
- # MEGALINTER_RUNNER = npx mega-linter-runner --flavor documentation --env "'MEGALINTER_CONFIG=.github/config/megalinter.yaml'" --remove-container
37
- MEGALINTER_RUNNER = npx mega-linter-runner --flavor java --env "'MEGALINTER_CONFIG=.github/config/megalinter.yaml'" --remove-container
38
+ # MEGALINTER_RUNNER : = npx mega-linter-runner --flavor documentation --env "'MEGALINTER_CONFIG=.github/config/megalinter.yaml'" --remove-container
39
+ MEGALINTER_RUNNER : = npx mega-linter-runner --flavor java --env "'MEGALINTER_CONFIG=.github/config/megalinter.yaml'" --remove-container
38
40
# ------------------------------------ #
39
41
40
42
# ------- Help ----------------------- #
@@ -46,7 +48,7 @@ help: ## Describe available tasks in Makefile
46
48
awk -F ' :.*?## ' ' NF==2 {printf "\033[36m %-$(HELP-DESCRIPTION-SPACING)s\033[0m %s\n", $$1, $$2}'
47
49
# ------------------------------------ #
48
50
49
- # ------- Clojure Projects -------- #
51
+ # -- Clojure Projects -------- -------- #
50
52
project-service : # # New project with practicalli/service template
51
53
$(info --------- Create Service Project ---------)
52
54
clojure -T:project/create :template practicalli/service :name practicalli/gameboard
@@ -70,27 +72,52 @@ landing-page: ## New project with practicalli/landing-page template local
70
72
outdated : # # Check deps.edn & GitHub actions for new versions
71
73
$(info --------- Search for outdated libraries ---------)
72
74
- clojure -T:search/outdated > $(OUTDATED_FILE )
75
+ # ------------------------------------ #
73
76
74
77
# ------- Clojure Workflow -------- #
75
- repl : # # Run Clojure REPL with rich terminal UI (Rebel Readline)
78
+ rebel : # # Run Clojure REPL with rich terminal UI (Rebel Readline)
76
79
$(info --------- Run Rebel REPL ---------)
77
- clojure -M:test/env:repl/reloaded
78
-
80
+ clojure -M:dev/env:test/env:repl/rebel
79
81
80
- # deps: deps.edn ## Prepare dependencies for test and dist targets
81
- # $(info --------- Download test and service libraries ---------)
82
- # clojure -P -X:build
82
+ reloaded : # # Run Clojure REPL with rich terminal UI (Rebel Readline)
83
+ $(info --------- Run Rebel REPL ---------)
84
+ clojure -M:dev/env:test/env:repl/reloaded
83
85
84
- # dist: deps build-uberjar ## Build and package Clojure service
85
- # $(info --------- Build and Package Clojure service ---------)
86
+ deps : deps.edn # # Prepare dependencies for test and dist targets
87
+ $(info --------- Download test and service libraries ---------)
88
+ clojure -P -X:build
86
89
87
- # Remove files and directories after build tasks
88
- # `-` before the command ignores any errors returned
89
- clean : # # Clean build temporary files
90
+ clean : # # Clean Clojure tooling temporary files
90
91
$(info --------- Clean Clojure classpath cache ---------)
91
92
- rm -rf ./.cpcache ./.clj-kondo ./.lsp
92
93
# ------------------------------------ #
93
94
95
+ # -------- Build tasks --------------- #
96
+ build-config : # # Pretty print build configuration
97
+ $(info --------- View current build config ---------)
98
+ clojure -T:build config
99
+
100
+ # build-jar: ## Build a jar archive of Clojure project
101
+ $(info --------- Build library jar ---------)
102
+ clojure -T:build jar
103
+
104
+ # build-uberjar: ## Build a uberjar archive of Clojure project & Clojure runtime
105
+ $(info --------- Build service Uberjar ---------)
106
+ clojure -T:build uberjar
107
+
108
+ build-uberjar-echo : # # Build a uberjar archive of Clojure project & Clojure runtime
109
+ $(info --------- Build service Uberjar ---------)
110
+ $(info Prerequisites newer than target)
111
+ echo $?
112
+ clojure -T:build uberjar
113
+
114
+ build-clean : # # Clean build assets or given directory
115
+ $(info --------- Clean Build ---------)
116
+ clojure -T:build clean
117
+
118
+ dist : deps build-uberjar # # Build and package Clojure service
119
+ # ------------------------------------ #
120
+
94
121
# ------- Testing -------------------- #
95
122
test-config : # # Print Kaocha test runner configuration
96
123
$(info --------- Runner Configuration ---------)
@@ -101,39 +128,20 @@ test-profile: ## Profile unit test speed, showing 3 slowest tests
101
128
clojure -M:test/env:test/run --plugin kaocha.plugin/profiling
102
129
103
130
test : # # Run unit tests - stoping on first error
104
- $(info --------- Runner for unit tests ---------)
105
- clojure -X:test/env:test/run
131
+ $(info --------- Runner for unit tests ---------)
132
+ clojure -X:test/env:test/run
106
133
107
134
test-all : # # Run all unit tests regardless of failing tests
108
- $(info --------- Runner for all unit tests ---------)
109
- clojure -X:test/env:test/run :fail-fast? false
135
+ $(info --------- Runner for all unit tests ---------)
136
+ clojure -X:test/env:test/run :fail-fast? false
110
137
111
138
test-watch : # # Run tests when changes saved, stopping test run on first error
112
- $(info --------- Watcher for unit tests ---------)
113
- clojure -X:test/env:test/run :watch? true
139
+ $(info --------- Watcher for unit tests ---------)
140
+ clojure -X:test/env:test/run :watch? true
114
141
115
142
test-watch-all : # # Run all tests when changes saved, regardless of failing tests
116
- $(info --------- Watcher for unit tests ---------)
117
- clojure -X:test/env:test/run :fail-fast? false :watch? true
118
-
119
- # ------------------------------------ #
120
-
121
- # -------- Build tasks --------------- #
122
- build-config : # # Pretty print build configuration
123
- $(info --------- View current build config ---------)
124
- clojure -T:build config
125
-
126
- # build-jar: ## Build a jar archive of Clojure project
127
- # $(info --------- Build library jar ---------)
128
- # clojure -T:build jar
129
-
130
- # build-uberjar: ## Build a uberjar archive of Clojure project & Clojure runtime
131
- # $(info --------- Build service Uberjar ---------)
132
- # clojure -T:build uberjar
133
-
134
- build-clean : # # Clean build assets or given directory
135
- $(info --------- Clean Build ---------)
136
- clojure -T:build clean
143
+ $(info --------- Watcher for unit tests ---------)
144
+ clojure -X:test/env:test/run :fail-fast? false :watch? true
137
145
138
146
# ------------------------------------ #
139
147
@@ -165,41 +173,69 @@ megalinter-upgrade: ## Upgrade MegaLinter config to latest version
165
173
npx mega-linter-runner@latest --upgrade
166
174
# ------------------------------------ #
167
175
176
+ # ------- Version Control ------------ #
177
+ git-sr : # # status list of git repos under current directory
178
+ $(info --------- Multiple Git Status ---------)
179
+ mgitstatus -e --flatten
180
+
181
+ git-status : # # status details of git repos under current directory
182
+ $(info --------- Multiple Git Status ---------)
183
+ mgitstatus
184
+ # ------------------------------------ #
185
+
186
+ # ------- Documentation Generation ---------- #
187
+ docs : # # Run mkdocs server
188
+ $(info --------- Mkdocs Local Server ---------)
189
+ mkdocs serve --dev-addr localhost:7777
190
+ # ------------------------------------ #
191
+
168
192
# ------- Docker Containers ---------- #
169
193
# docker-build: ## Build Clojure project and run with docker compose
170
194
# $(info --------- Docker Compose Build ---------)
171
195
# docker compose up --build --detach
172
196
173
197
# docker-build-clean: ## Build Clojure project and run with docker compose, removing orphans
174
- # $(info --------- Docker Compose Build - remove orphans ---------)
175
- # docker compose up --build --remove-orphans --detach
198
+ $(info --------- Docker Compose Build - remove orphans ---------)
199
+ docker compose up --build --remove-orphans --detach
176
200
177
201
# docker-down: ## Shut down containers in docker compose
178
- # $(info --------- Docker Compose Down ---------)
179
- # docker compose down
202
+ $(info --------- Docker Compose Down ---------)
203
+ docker compose down
204
+
205
+ docker-inspect : # # Inspect given docker image - image-id=12e45fg89
206
+ $(info --------- Docker Image Prune ---------)
207
+ docker inspect --format=' {{json .Config}}' $(image-id ) | jq
208
+
209
+ docker-image-prune : # # Prune docker images
210
+ $(info --------- Docker Image Prune ---------)
211
+ docker image prune
180
212
213
+ docker-container-prune : # # Prune docker containers
214
+ $(info --------- Docker Container Prune ---------)
215
+ docker container prune
181
216
182
- # swagger-editor: ## Start Swagger Editor in Docker
183
- # $(info --------- Run Swagger Editor at locahost:8282 ---------)
184
- # docker compose -f swagger-editor.yml up -d swagger-editor
217
+ docker-prune : docker-image-prune docker-image-prune # # Prune docker images and containers
185
218
186
- # swagger-editor-down: ## Stop Swagger Editor in Docker
187
- # $(info --------- Run Swagger Editor at locahost:8282 ---------)
188
- # docker compose -f swagger-editor.yml down
219
+ swagger-editor : # # Start Swagger Editor in Docker
220
+ $(info --------- Run Swagger Editor at locahost:8282 ---------)
221
+ docker compose -f swagger-editor.yaml up -d swagger-editor --detatch
222
+
223
+ swagger-editor-down : # # Stop Swagger Editor in Docker
224
+ $(info --------- Run Swagger Editor at locahost:8282 ---------)
225
+ docker compose -f swagger-editor.yaml down
189
226
# ------------------------------------ #
190
227
191
228
# ------ Continuous Integration ------ #
192
229
# .DELETE_ON_ERROR: halts if command returns non-zero exit status
193
230
# https://makefiletutorial.com/#delete_on_error
194
231
195
232
# TODO: focus runner on ^:integration` tests
196
- # test-ci: deps ## Test runner for integration tests
197
- # $(info --------- Runner for integration tests ---------)
198
- # clojure -P -X:test/env:test/run
233
+ test-ci : deps # # Test runner for integration tests
234
+ $(info --------- Runner for integration tests ---------)
235
+ clojure -P -X:test/env:test/run
199
236
200
237
# Run tests, build & package the Clojure code and clean up afterward
201
238
# `make all` used in Docker builder stage
202
239
.DELETE_ON_ERROR :
203
240
all : test-ci dist clean # # Call test-ci dist and clean targets, used for CI
204
-
205
241
# ------------------------------------ #
0 commit comments