Skip to content

Commit 2eeca84

Browse files
authored
Added make help commands (#3)
1 parent c1438a3 commit 2eeca84

File tree

4 files changed

+78
-98
lines changed

4 files changed

+78
-98
lines changed

Makefile

Lines changed: 28 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@ GREEN=\033[1;32m
3535
YELLOW=\033[1;33m
3636
NC=\033[0m # No Color
3737

38+
include help.mk # place after ALL target and before all other targets
39+
3840
# ───────────────────────────────────────────────────────────
3941
# 📝 CHECK & COPY .env IF MISSING
4042
# ───────────────────────────────────────────────────────────
41-
env:
43+
env: ## 📝 CHECK & COPY .env IF MISSING
4244
@echo -e "$(YELLOW)🔍 Checking for .env file...$(NC)"
4345
@if [ ! -f .env ]; then \
4446
echo -e "$(RED)⚠️ .env file not found! Creating from .env.example...$(NC)"; \
@@ -51,72 +53,48 @@ env:
5153
# ───────────────────────────────────────────────────────────
5254
# 🎨 FORMAT CODE (gofmt & goimports)
5355
# ───────────────────────────────────────────────────────────
54-
format:
56+
format: ## 🎨 FORMAT CODE (gofmt & goimports)
5557
@echo -e "$(YELLOW)🎨 Formatting Go code...$(NC)"
5658
@gofmt -w .
5759
@go install golang.org/x/tools/cmd/goimports@$(IMPORTS_VERSION)
5860
@goimports -w .
5961
@echo -e "$(GREEN)✅ Code formatted successfully!$(NC)"
6062

61-
# ───────────────────────────────────────────────────────────
62-
# 🔍 RUN GO VET (Code Inspection)
63-
# ───────────────────────────────────────────────────────────
64-
vet:
63+
vet: ## 🔍 RUN GO VET (Code Inspection)
6564
@echo -e "$(YELLOW)🔍 Running go vet...$(NC)"
6665
@go vet ./...
6766
@echo -e "$(GREEN)✅ go vet completed!$(NC)"
6867

69-
# ───────────────────────────────────────────────────────────
70-
# 🛡️ SECURITY SCAN (govulncheck)
71-
# ───────────────────────────────────────────────────────────
72-
security_scan:
68+
security_scan: ## 🛡️ SECURITY SCAN (govulncheck)
7369
@echo -e "$(RED)🛡️ Running security vulnerability scan...$(NC)"
7470
@go install golang.org/x/vuln/cmd/govulncheck@$(VULN_VERSION)
7571
@govulncheck ./...
7672
@echo -e "$(GREEN)✅ Security scan completed!$(NC)"
7773

78-
# ───────────────────────────────────────────────────────────
79-
# 🔄 Install DEPENDENCIES (go mod tidy & upgrade)
80-
# ───────────────────────────────────────────────────────────
81-
install_deps:
74+
install_deps: ## 🔄 Install DEPENDENCIES (go mod tidy & upgrade)
8275
@echo -e "$(YELLOW)🔄 Install Go dependencies....$(NC)"
8376
@go mod tidy
8477
@echo -e "$(GREEN)✅ Dependencies updated!$(NC)"
8578

86-
# ───────────────────────────────────────────────────────────
87-
# 🔎 LINT CODE (golangci-lint)
88-
# ───────────────────────────────────────────────────────────
89-
lint:
79+
lint: ## 🔎 LINT CODE (golangci-lint)
9080
@echo -e "$(YELLOW)🔎 Running golangci-lint...$(NC)"
9181
@which golangci-lint >/dev/null 2>&1 || (echo -e "$(RED)❌ golangci-lint not installed! Installing now...$(NC)" && go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(LINT_VERSION))
9282
@golangci-lint run ./...
9383

94-
# ───────────────────────────────────────────────────────────
95-
# 📢 STATIC CODE ANALYSIS (staticcheck)
96-
# ───────────────────────────────────────────────────────────
97-
staticcheck:
84+
staticcheck: ## 📢 STATIC CODE ANALYSIS (staticcheck)
9885
@echo -e "$(YELLOW)📢 Running staticcheck...$(NC)"
9986
@which staticcheck >/dev/null 2>&1 || (echo -e "$(RED)❌ staticcheck not installed! Installing now...$(NC)" && go install honnef.co/go/tools/cmd/staticcheck@latest)
10087
@staticcheck ./...
10188

102-
# ───────────────────────────────────────────────────────────
103-
# 🏃 RUN APPLICATION
104-
# ───────────────────────────────────────────────────────────
105-
run:
89+
run: ## 🏃 RUN APPLICATION
10690
@echo -e "$(BLUE)🚀 Running the application...$(NC)"
10791
@go run cmd/server/main.go
10892

109-
# ───────────────────────────────────────────────────────────
110-
# ✅ RUN TESTS
111-
# ───────────────────────────────────────────────────────────
112-
test:
93+
test: ## ✅ RUN TESTS
11394
@echo -e "$(YELLOW)🔍 Running tests...$(NC)"
11495
@go test -v ./...
11596

116-
# ───────────────────────────────────────────────────────────
117-
# 📊 GENERATE COVERAGE REPORT
118-
# ───────────────────────────────────────────────────────────
119-
html-coverage: $(COVERAGE_DIR)/coverage.out
97+
html-coverage: $(COVERAGE_DIR)/coverage.out ## 📊 GENERATE COVERAGE REPORT
12098
@echo -e "$(GREEN)📊 Generating HTML coverage report...$(NC)"
12199
@go tool cover -html=$(COVERAGE_DIR)/coverage.out -o $(COVERAGE_DIR)/coverage.html
122100
@echo -e "$(GREEN)✅ HTML coverage report generated at $(COVERAGE_DIR)/coverage.html$(NC)"
@@ -128,59 +106,40 @@ $(COVERAGE_DIR)/coverage.out: | $(COVERAGE_DIR)
128106
@echo -e "$(YELLOW)📈 Running coverage analysis...$(NC)"
129107
@go test -coverprofile=$(COVERAGE_DIR)/coverage.out ./...
130108

131-
# Ensure .coverage directory exists
132-
$(COVERAGE_DIR):
109+
$(COVERAGE_DIR): ## Ensure .coverage directory exists
133110
@mkdir -p $(COVERAGE_DIR)
134111

135-
# ───────────────────────────────────────────────────────────
136-
# 📥 INSTALL SWAG CLI TOOL & PACKAGES
137-
# ───────────────────────────────────────────────────────────
138-
install_swag:
112+
install_swag: ## 📥 INSTALL SWAG CLI TOOL & PACKAGES
139113
@echo -e "$(GREEN)📥 Installing Swag CLI and dependencies...$(NC)"
140114
@which swag >/dev/null 2>&1 || (echo -e "$(RED)❌ Swag CLI not found! Installing now...$(NC)" && go install github.com/swaggo/swag/cmd/swag@latest)
141115
@echo -e "$(YELLOW)🔄 Updating project dependencies for Swag...$(NC)"
142116
@go mod tidy
143117
@go mod download
144118
@echo -e "$(GREEN)✅ Swag installation complete!$(NC)"
145119

146-
# ───────────────────────────────────────────────────────────
147-
# 📜 GENERATE API DOCUMENTATION
148-
# ───────────────────────────────────────────────────────────
149-
generate_docs: install_swag
120+
generate_docs: install_swag ## 📜 GENERATE API DOCUMENTATION
150121
@echo -e "$(YELLOW)📜 Generating API documentation using Swag...$(NC)"
151122
@swag init --parseDependency --parseInternal --parseDepth 1 -g ./cmd/server/main.go -o ./docs
152123
@echo -e "$(GREEN)✅ API documentation generated successfully!$(NC)"
153124

154-
# ───────────────────────────────────────────────────────────
155-
# 🏗️ BUILD PROJECT
156-
# ───────────────────────────────────────────────────────────
157-
build:
125+
build: ## 🏗️ BUILD PROJECT
158126
@echo -e "$(BLUE)🏗️ Building the Go application...$(NC)"
159127
@mkdir -p $(BUILD_DIR) # ✅ Ensure the build directory exists
160128
@CGO_ENABLED=0 GOOS=linux go build $(GO_FLAGS) -o $(BUILD_DIR)/$(BUILD_NAME) $(CMD_DIR)/main.go
161129
@ls -lh $(BUILD_DIR) # ✅ Debug: List contents of the build directory
162130
@echo -e "$(GREEN)✅ Build complete: $(BUILD_DIR)/$(BUILD_NAME)$(NC)"
163131

164-
# ───────────────────────────────────────────────────────────
165-
# 🧹 CLEAN BUILD & COVERAGE FILES
166-
# ───────────────────────────────────────────────────────────
167-
clean:
132+
clean: ## 🧹 CLEAN BUILD & COVERAGE FILES
168133
@echo -e "$(YELLOW)🧹 Cleaning up build and coverage files...$(NC)"
169134
@rm -rf $(BUILD_DIR)
170135
@rm -rf $(COVERAGE_DIR)
171136
@echo -e "$(GREEN)✅ Cleanup complete!$(NC)"
172137

173-
# ───────────────────────────────────────────────────────────
174-
# 🔍 CHECK MIGRATION VERSION
175-
# ───────────────────────────────────────────────────────────
176-
version:
138+
version: ## 🔍 CHECK MIGRATION VERSION
177139
@echo -e "$(BLUE)🔍 Checking installed migrate version...$(NC)"
178140
@$(INSTALL_DIR)/migrate -version
179141

180-
# ───────────────────────────────────────────────────────────
181-
# 📥 INSTALL GOLANG-MIGRATE
182-
# ───────────────────────────────────────────────────────────
183-
install_migration:
142+
install_migration: ## 📥 INSTALL GOLANG-MIGRATE
184143
@echo -e "$(GREEN)📥 Installing golang-migrate ($(MIGRATE_VERSION))...$(NC)"
185144
@mkdir -p $(INSTALL_DIR)
186145
@curl -L https://github.com/golang-migrate/migrate/releases/download/$(MIGRATE_VERSION)/migrate.linux-amd64.tar.gz -o migrate.tar.gz
@@ -190,74 +149,45 @@ install_migration:
190149
@rm -f migrate.tar.gz
191150
@echo -e "$(GREEN)✅ Installation complete. Ensure $(INSTALL_DIR) is in your PATH.$(NC)"
192151

193-
# ───────────────────────────────────────────────────────────
194-
# 📦 CREATE A NEW DATABASE MIGRATION
195-
# ───────────────────────────────────────────────────────────
196-
create_migration:
152+
create_migration: ## 📦 CREATE A NEW DATABASE MIGRATION
197153
@echo -e "$(YELLOW)📦 Creating a new database migration...$(NC)"
198154
@$(INSTALL_DIR)/migrate create -ext=sql -dir=package/database/migrations -seq init
199155

200-
# ───────────────────────────────────────────────────────────
201-
# ⬆️ APPLY DATABASE MIGRATIONS
202-
# ───────────────────────────────────────────────────────────
203-
migrate_up:
156+
migrate_up: ## ⬆️ APPLY DATABASE MIGRATIONS
204157
@echo -e "$(GREEN)⬆️ Applying database migrations...$(NC)"
205158
@$(INSTALL_DIR)/migrate -path=package/database/migrations \
206159
-database "mysql://${DB_USER}:${DB_PASSWORD}@tcp(${DB_HOST}:${DB_PORT})/${DB_NAME}" \
207160
-verbose up
208-
209-
# ───────────────────────────────────────────────────────────
210-
# ⬇️ ROLLBACK DATABASE MIGRATIONS
211-
# ───────────────────────────────────────────────────────────
212-
migrate_down:
161+
migrate_down: ## ⬇️ ROLLBACK DATABASE MIGRATIONS
213162
@echo -e "$(RED)⬇️ Rolling back database migrations...$(NC)"
214163
@$(INSTALL_DIR)/migrate -path=package/database/migrations \
215164
-database "mysql://${DB_USER}:${DB_PASSWORD}@tcp(${DB_HOST}:${DB_PORT})/${DB_NAME}" \
216165
-verbose down
217-
218-
# ───────────────────────────────────────────────────────────
219-
# 🐳 BUILD DOCKER IMAGE
220-
# ───────────────────────────────────────────────────────────
221-
docker_build: env docker_down
166+
docker_build: env docker_down ## 🐳 BUILD DOCKER IMAGE
222167
@echo -e "$(BLUE)🐳 Building Docker image...$(NC)"
223168
@sudo docker-compose build
224169
@echo -e "$(GREEN)✅ Docker image built successfully!$(NC)"
225170

226-
# ───────────────────────────────────────────────────────────
227-
# 🚀 START DOCKER CONTAINERS
228-
# ───────────────────────────────────────────────────────────
229-
docker_up: docker_build
171+
docker_up: docker_build ## 🚀 START DOCKER CONTAINERS
230172
@echo -e "$(BLUE)🚀 Starting Docker containers...$(NC)"
231173
@sudo docker-compose up -d
232174
@echo -e "$(GREEN)✅ Docker containers started successfully!$(NC)"
233175

234-
# ───────────────────────────────────────────────────────────
235-
# 📦 STOP & REMOVE DOCKER CONTAINERS
236-
# ───────────────────────────────────────────────────────────
237-
docker_down:
176+
docker_down: ## 🛑 STOP & REMOVE DOCKER CONTAINERS
238177
@echo -e "$(YELLOW)🛑 Stopping and removing Docker containers...$(NC)"
239178
@sudo docker-compose down
240179
@echo -e "$(GREEN)✅ Docker containers stopped and removed!$(NC)"
241180

242-
# ───────────────────────────────────────────────────────────
243-
# 📜 VIEW DOCKER LOGS
244-
# ───────────────────────────────────────────────────────────
245-
docker_logs:
181+
docker_logs: ## 📜 VIEW DOCKER LOGS
246182
@echo -e "$(YELLOW)📜 Viewing Docker logs...$(NC)"
247183
@sudo docker-compose logs -f
248184

249-
# ───────────────────────────────────────────────────────────
250-
# ✅ CLEAN DOCKER IMAGES & CONTAINERS
251-
# ───────────────────────────────────────────────────────────
252-
docker_clean: docker_down
185+
docker_clean: docker_down ## 🗑️ CLEAN DOCKER IMAGES & CONTAINERS
253186
@echo -e "$(RED)🗑️ Cleaning up Docker images and containers...$(NC)"
254187
@sudo docker system prune -af
255188
@echo -e "$(GREEN)✅ Docker cleanup complete!$(NC)"
256189

257-
# ───────────────────────────────────────────────────────────
258-
# 🚀 CI/CD PRE-CHECK (Runs everything before deployment)
259-
# ───────────────────────────────────────────────────────────
260-
ci_check: env format vet lint staticcheck security_scan test
190+
ci_check: env format vet lint staticcheck security_scan test ## 🚀 CI/CD PRE-CHECK
261191
@echo -e "$(GREEN)✅ CI/CD pre-check passed successfully!$(NC)"
262192

263193
# Mark these targets as non-file targets

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,13 @@ golang-microservice-template/
6868
- Docker and Docker Compose
6969
- Make
7070

71+
### All Make Commands
72+
To Check All Commands:
73+
```bash
74+
make help
75+
```
76+
![Make Help Commands](make_help.png)
77+
7178
### Running the Application
7279
1. Clone the repository
7380
```bash

help.mk

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
.PHONY: help
2+
help: ## Shows this generated help info for Makefile targets
3+
@grep -E '^[a-zA-Z0-9_-]+:' $(MAKEFILE_LIST) | \
4+
awk -F: ' \
5+
{ \
6+
target=$$2; \
7+
if ( !(target in targets) ) { \
8+
if ( /:.*##/ ) { \
9+
if ( ! /no-help/ ) { \
10+
sub(/^.*## ?/,"",$$0); \
11+
targets[target] = $$0; \
12+
} \
13+
} else { \
14+
targets[target] = "" \
15+
} \
16+
} \
17+
} \
18+
END { \
19+
for (target in targets) { \
20+
printf "\033[36m%-30s\033[0m %s\n", target, targets[target] \
21+
} \
22+
}' | sort
23+
24+
.targets:
25+
@grep -E '^[a-zA-Z0-9_-]+:' $(MAKEFILE_LIST) | \
26+
awk -F: ' \
27+
{ \
28+
target=$$2; \
29+
if ( !(target in targets) ) { \
30+
if ( /:.*##/ ) { \
31+
if ( ! /no-help/ ) { \
32+
targets[target] = ""; \
33+
} \
34+
} else { \
35+
targets[target] = "" \
36+
} \
37+
} \
38+
} \
39+
END { \
40+
for (target in targets) { \
41+
printf "%s ", target, targets[target] \
42+
} \
43+
}'

make_help.png

143 KB
Loading

0 commit comments

Comments
 (0)