11# ------------------------------------------
2- # Makefile: Clojure Service
2+ # Practicalli Makefile
33#
44# Consistent set of targets to support local development of Clojure
55# and build the Clojure service during CI deployment
66#
7+ # `-` before a command ignores any errors returned
8+
79# Requirements
810# - cljstyle
9- # - Clojure CLI aliases
11+ # - Clojure CLI aliases from practicalli/clojure-cli-config
1012# - `:env/dev` to include `dev` directory on class path
1113# - `:env/test` to include `test` directory and libraries to support testing
1214# - `:test/run` to run kaocha kaocha test runner and supporting paths and dependencies
@@ -33,8 +35,8 @@ HELP-DESCRIPTION-SPACING := 24
3335# EDN-FILES := $(wildcard *.edn)
3436
3537# 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
3840# ------------------------------------ #
3941
4042# ------- Help ----------------------- #
@@ -46,7 +48,7 @@ help: ## Describe available tasks in Makefile
4648 awk -F ' :.*?## ' ' NF==2 {printf "\033[36m %-$(HELP-DESCRIPTION-SPACING)s\033[0m %s\n", $$1, $$2}'
4749# ------------------------------------ #
4850
49- # ------- Clojure Projects -------- #
51+ # -- Clojure Projects -------- -------- #
5052project-service : # # New project with practicalli/service template
5153 $(info --------- Create Service Project ---------)
5254 clojure -T:project/create :template practicalli/service :name practicalli/gameboard
@@ -70,27 +72,52 @@ landing-page: ## New project with practicalli/landing-page template local
7072outdated : # # Check deps.edn & GitHub actions for new versions
7173 $(info --------- Search for outdated libraries ---------)
7274 - clojure -T:search/outdated > $(OUTDATED_FILE )
75+ # ------------------------------------ #
7376
7477# ------- Clojure Workflow -------- #
75- repl : # # Run Clojure REPL with rich terminal UI (Rebel Readline)
78+ rebel : # # Run Clojure REPL with rich terminal UI (Rebel Readline)
7679 $(info --------- Run Rebel REPL ---------)
77- clojure -M:test/env:repl/reloaded
78-
80+ clojure -M:dev/env:test/env:repl/rebel
7981
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
8385
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
8689
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
9091 $(info --------- Clean Clojure classpath cache ---------)
9192 - rm -rf ./.cpcache ./.clj-kondo ./.lsp
9293# ------------------------------------ #
9394
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+
94121# ------- Testing -------------------- #
95122test-config : # # Print Kaocha test runner configuration
96123 $(info --------- Runner Configuration ---------)
@@ -101,39 +128,20 @@ test-profile: ## Profile unit test speed, showing 3 slowest tests
101128 clojure -M:test/env:test/run --plugin kaocha.plugin/profiling
102129
103130test : # # 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
106133
107134test-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
110137
111138test-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
114141
115142test-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
137145
138146# ------------------------------------ #
139147
@@ -165,41 +173,69 @@ megalinter-upgrade: ## Upgrade MegaLinter config to latest version
165173 npx mega-linter-runner@latest --upgrade
166174# ------------------------------------ #
167175
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+
168192# ------- Docker Containers ---------- #
169193# docker-build: ## Build Clojure project and run with docker compose
170194# $(info --------- Docker Compose Build ---------)
171195# docker compose up --build --detach
172196
173197# 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
176200
177201# 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
180212
213+ docker-container-prune : # # Prune docker containers
214+ $(info --------- Docker Container Prune ---------)
215+ docker container prune
181216
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
185218
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
189226# ------------------------------------ #
190227
191228# ------ Continuous Integration ------ #
192229# .DELETE_ON_ERROR: halts if command returns non-zero exit status
193230# https://makefiletutorial.com/#delete_on_error
194231
195232# 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
199236
200237# Run tests, build & package the Clojure code and clean up afterward
201238# `make all` used in Docker builder stage
202239.DELETE_ON_ERROR :
203240all : test-ci dist clean # # Call test-ci dist and clean targets, used for CI
204-
205241# ------------------------------------ #
0 commit comments