Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
160 lines (122 loc) · 4.22 KB
/
Copy pathMakefile
File metadata and controls
160 lines (122 loc) · 4.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
-include .env
export
.PHONY: all help setup \
build build-api build-worker build-migrate \
run worker dev test fmt lint vulncheck \
sqlc migrate-status migrate-up migrate-down \
docker-build docker-up docker-down docker-down-v docker-logs docker-restart docker-migrate \
dev-up dev-down dev-logs dev-restart \
clean
all: build
help:
@echo "Cookoff 11.0 Backend -- available targets:"
@echo ""
@echo " setup Configure git hooks and install dev tools"
@echo " build Build all binaries (api, worker, migrate) into bin/"
@echo " run Run the API server locally (no hot reload)"
@echo " worker Run the worker locally (no hot reload)"
@echo " dev Run the API with hot reload via air"
@echo " test Run go test ./..."
@echo " fmt Run go fmt ./..."
@echo " lint Run golangci-lint"
@echo " vulncheck Run govulncheck"
@echo " sqlc Regenerate sqlc code"
@echo " migrate-up Apply pending goose migrations"
@echo " migrate-down Roll back the last goose migration"
@echo " migrate-status Show goose migration status"
@echo " docker-up Build and start the full prod-mode stack"
@echo " docker-down Stop the prod-mode stack"
@echo " docker-down-v Stop the prod-mode stack and remove volumes"
@echo " docker-logs Tail logs for the prod-mode stack"
@echo " docker-migrate Run the migrate service once against the stack"
@echo " dev-up Build and start the hot-reload dev stack"
@echo " dev-down Stop the hot-reload dev stack"
@echo " dev-logs Tail logs for the hot-reload dev stack"
@echo " clean Remove build artifacts (bin/, tmp/)"
setup:
@echo "Configuring git hooks..."
@git config core.hooksPath .githooks
@echo "Installing development tools..."
@go install github.com/air-verse/air@v1.63.0
@go install github.com/pressly/goose/v3/cmd/goose@latest
@go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
@go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
@go install golang.org/x/vuln/cmd/govulncheck@latest
@echo "Done. Setup completed successfully."
# --- Build ---
build: build-api build-worker build-migrate
build-api:
@echo "Building api binary..."
@go build -o bin/api ./cmd/api
build-worker:
@echo "Building worker binary..."
@go build -o bin/worker ./cmd/worker
build-migrate:
@echo "Building migrate binary..."
@go build -o bin/migrate ./cmd/migrate
# --- Run locally (no containers) ---
run:
@echo "Running local API server..."
@go run ./cmd/api
worker:
@echo "Running local worker..."
@go run ./cmd/worker
dev:
@echo "Running hot-reload dev server with air..."
@air -c .air.toml
# --- Quality ---
test:
@echo "Running tests..."
@go test -v ./...
fmt:
@echo "Formatting code..."
@go fmt ./...
lint:
@echo "Running golangci-lint..."
@golangci-lint run --config=.golangci.yml
vulncheck:
@echo "Running govulncheck..."
@govulncheck ./...
# --- Database ---
sqlc:
@echo "Generating sqlc code..."
@sqlc generate
migrate-status:
@go run ./cmd/migrate status
migrate-up:
@go run ./cmd/migrate up
migrate-down:
@go run ./cmd/migrate down
# --- Docker: production-mode stack (postgres, redis, migrate, api, worker) ---
docker-build:
@echo "Building docker images..."
@docker compose build
docker-up:
@echo "Starting docker services..."
@docker compose up --build -d
docker-down:
@echo "Stopping docker services..."
@docker compose down
docker-down-v:
@echo "Stopping docker services and removing volumes..."
@docker compose down -v
docker-logs:
@docker compose logs -f
docker-restart: docker-down docker-up
docker-migrate:
@echo "Running migrations against the docker stack..."
@docker compose run --rm migrate up
# --- Docker: hot-reload dev stack ---
dev-up:
@echo "Starting hot-reload dev stack..."
@docker compose -f docker-compose.yml -f docker-compose.dev.yml up --build -d
dev-down:
@echo "Stopping hot-reload dev stack..."
@docker compose -f docker-compose.yml -f docker-compose.dev.yml down
dev-logs:
@docker compose -f docker-compose.yml -f docker-compose.dev.yml logs -f
dev-restart: dev-down dev-up
# --- Cleanup ---
clean:
@echo "Removing build artifacts..."
@rm -rf bin/ tmp/