-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
290 lines (245 loc) · 9.22 KB
/
Copy pathMakefile
File metadata and controls
290 lines (245 loc) · 9.22 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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
# =============================================================================
# Nivo - Makefile
# =============================================================================
#
# Development and deployment commands for Nivo banking platform.
#
# Usage:
# make help - Show all available commands
# make dev - Start development environment
# make deploy - Deploy to production
#
# =============================================================================
.PHONY: help dev build down logs deploy obs-up obs-down secrets-edit secrets-view \
db-shell db-backup db-restore seed test clean clean-all ssl-init ssl-renew \
run-all run-identity run-ledger fmt vet lint install-lint
# Default target
help:
@echo "Nivo - Development & Deployment Commands"
@echo ""
@echo "Development:"
@echo " make dev Start development stack (Docker + exposed ports)"
@echo " make build Build all Docker images"
@echo " make down Stop all containers"
@echo " make logs Tail all container logs"
@echo " make logs-SERVICE Tail specific service logs (e.g., make logs-gateway)"
@echo ""
@echo "Local Services (without Docker):"
@echo " make run-all Run all services locally (requires docker-up first)"
@echo " make run-identity Run Identity service locally"
@echo " make run-ledger Run Ledger service locally"
@echo ""
@echo "Database:"
@echo " make db-shell Open PostgreSQL shell"
@echo " make db-backup Create database backup"
@echo " make db-restore Restore from backup (BACKUP_FILE=path)"
@echo " make seed Run database seed"
@echo " make seed-clean Run clean seed (reset data)"
@echo ""
@echo "Observability:"
@echo " make obs-up Start with Prometheus + Grafana"
@echo " make obs-down Stop observability stack"
@echo ""
@echo "Secrets (SOPS + age):"
@echo " make secrets-edit Edit encrypted secrets"
@echo " make secrets-view View decrypted secrets"
@echo " make secrets-encrypt Encrypt a file (SRC=path)"
@echo ""
@echo "SSL Certificates:"
@echo " make ssl-init Initial SSL certificate setup"
@echo " make ssl-renew Renew SSL certificates"
@echo ""
@echo "Deployment:"
@echo " make deploy Deploy to production (1GB VPS optimized)"
@echo " make setup-server Run server setup script (requires sudo)"
@echo ""
@echo "Code Quality:"
@echo " make test Run all tests"
@echo " make test-SERVICE Run tests for specific service"
@echo " make lint Run linters (requires golangci-lint)"
@echo " make fmt Format code with gofmt"
@echo " make vet Run go vet"
@echo ""
@echo "Cleanup:"
@echo " make clean Remove build artifacts"
@echo " make clean-all Remove all generated files"
# =============================================================================
# Development
# =============================================================================
dev:
@echo "Starting development environment..."
@docker compose up -d
@echo ""
@echo "Services running:"
@echo " Gateway: http://localhost:8000"
@echo " Postgres: localhost:5432"
@echo " Redis: localhost:6379"
@echo ""
@echo "Frontend apps (run separately):"
@echo " cd frontend/user-app && npm run dev"
@echo " cd frontend/admin-app && npm run dev"
@echo ""
@docker compose ps
build:
@echo "Building all Docker images..."
@docker compose build
down:
@docker compose down
logs:
@docker compose logs -f
logs-%:
@docker compose logs -f $*
# =============================================================================
# Local Service Development (without Docker for services)
# =============================================================================
run-all:
@echo "Run services with: make run-identity, make run-ledger, etc."
@echo "Requires: make dev (for postgres/redis)"
run-identity:
@echo "Running Identity Service..."
@go run ./services/identity/cmd/server/main.go
run-ledger:
@echo "Running Ledger Service..."
@go run ./services/ledger/cmd/server/main.go
# =============================================================================
# Database
# =============================================================================
db-shell:
@docker compose exec postgres psql -U nivo nivo
db-backup:
@mkdir -p backups
@BACKUP_FILE="backups/nivo_$$(date +%Y%m%d_%H%M%S).sql"; \
docker compose exec -T postgres pg_dump -U nivo nivo > "$$BACKUP_FILE"; \
echo "Backup created: $$BACKUP_FILE"
db-restore:
@if [ -z "$(BACKUP_FILE)" ]; then \
echo "Usage: make db-restore BACKUP_FILE=path/to/backup.sql"; \
exit 1; \
fi
@echo "Restoring from $(BACKUP_FILE)..."
@docker compose exec -T postgres psql -U nivo nivo < $(BACKUP_FILE)
@echo "Restore complete"
seed:
@echo "Running database seed..."
@go run services/seed/cmd/server/main.go
seed-clean:
@echo "Running clean seed (reset data)..."
@go run services/seed/cmd/server/main.go --clean
# =============================================================================
# Observability (included in base docker-compose.yml)
# =============================================================================
obs-up: dev
@echo ""
@echo "Monitoring available at:"
@echo " Grafana: http://localhost:3000"
@echo " Prometheus: http://localhost:9090"
obs-down: down
# =============================================================================
# Secrets Management (SOPS + age)
# =============================================================================
secrets-edit:
@echo "Editing encrypted secrets..."
@sops .env.enc
secrets-view:
@sops --decrypt --input-type dotenv --output-type dotenv .env.enc
secrets-encrypt:
@if [ -z "$(SRC)" ]; then \
echo "Usage: make secrets-encrypt SRC=path/to/.env.prod"; \
exit 1; \
fi
@sops --encrypt --input-type dotenv --output-type dotenv --output .env.enc $(SRC)
@echo "Encrypted to .env.enc"
# =============================================================================
# SSL Certificates
# =============================================================================
ssl-init:
@echo "Initializing SSL certificates..."
@mkdir -p certbot/conf certbot/www
@docker compose run --rm certbot certonly --webroot \
--webroot-path=/var/www/certbot \
-d nivomoney.com \
-d www.nivomoney.com \
-d admin.nivomoney.com \
-d api.nivomoney.com \
-d grafana.nivomoney.com \
--email admin@nivomoney.com \
--agree-tos \
--no-eff-email
@echo "SSL certificates obtained. Restart nginx: docker compose restart frontend"
ssl-renew:
@docker compose run --rm certbot renew
@docker compose restart frontend
# =============================================================================
# Deployment
# =============================================================================
deploy:
@./scripts/deploy.sh
setup-server:
@echo "Running server setup script..."
@sudo ./scripts/setup-server.sh
# =============================================================================
# Code Quality
# =============================================================================
test:
@echo "Running all tests..."
@go test -v -race ./...
test-%:
@echo "Running tests for $*..."
@go test -v -race ./services/$*/...
test-coverage:
@echo "Running tests with coverage..."
@go test -v -race -coverprofile=coverage.out -covermode=atomic ./...
@go tool cover -html=coverage.out -o coverage.html
@echo "Coverage report: coverage.html"
lint:
@echo "Running linters..."
@if command -v golangci-lint > /dev/null; then \
golangci-lint run ./...; \
else \
echo "golangci-lint not installed. Run: make install-lint"; \
exit 1; \
fi
fmt:
@echo "Formatting code..."
@gofmt -s -w .
@echo "Code formatted"
vet:
@echo "Running go vet..."
@go vet ./...
install-lint:
@echo "Installing golangci-lint..."
@go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
# =============================================================================
# Build (Go binaries)
# =============================================================================
build-go:
@echo "Building Go binaries..."
@mkdir -p bin
@go build -o bin/identity-service ./services/identity/cmd/server
@go build -o bin/ledger-service ./services/ledger/cmd/server
@go build -o bin/rbac-service ./services/rbac/cmd/server
@go build -o bin/wallet-service ./services/wallet/cmd/server
@go build -o bin/transaction-service ./services/transaction/cmd/server
@go build -o bin/risk-service ./services/risk/cmd/server
@go build -o bin/notification-service ./services/notification/cmd/server
@go build -o bin/simulation-service ./services/simulation/cmd/server
@go build -o bin/gateway ./gateway/cmd/server
@echo "Build complete: ./bin/"
# =============================================================================
# Cleanup
# =============================================================================
clean:
@echo "Cleaning build artifacts..."
@rm -rf bin/
@rm -f coverage.out coverage.html
@echo "Clean complete"
clean-all: clean
@echo "Removing all generated files..."
@rm -rf vendor/
@go clean -cache -testcache
@echo "Deep clean complete"
clean-docker:
@echo "Removing Docker resources..."
@docker compose down -v
@docker system prune -f
@echo "Docker cleanup complete"