-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
82 lines (71 loc) · 2.44 KB
/
Copy pathMakefile
File metadata and controls
82 lines (71 loc) · 2.44 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
DB_CONTAINER=numex_db
ifeq ($(OS),Windows_NT)
WAIT_CMD = @powershell -Command "Start-Sleep 2; while (!(docker exec $(DB_CONTAINER) pg_isready -U numex 2>$$null)) { Start-Sleep 1 }"
else
WAIT_CMD = @sleep 2 && until docker exec $(DB_CONTAINER) pg_isready -U numex; do sleep 1; done
endif
ifeq ($(OS),Windows_NT)
BINARY = numex-api.exe
else
BINARY = numex-api
endif
init:
@echo Starting containers...
docker compose up -d
@echo Giving time for PostgreSQL to start...
$(WAIT_CMD)
@echo Injecting schema...
docker exec -i $(DB_CONTAINER) psql -U numex -d numex < internal/db/schema.sql
@echo Seeding data...
docker exec -i $(DB_CONTAINER) psql -U numex -d numex < internal/db/data.sql
@echo The database was initialized successfully.
down:
docker compose down -v
@echo Containers and data have been deleted.
run:
go run ./cmd/api
build:
go build -ldflags="-s -w" -trimpath -o $(BINARY) ./cmd/api
bootstrap-db:
ifndef DATABASE_URL
$(error Usage: make bootstrap-db DATABASE_URL=postgres://user:pass@host:5432/db?sslmode=require)
endif
psql "$(DATABASE_URL)" < internal/db/schema.sql
psql "$(DATABASE_URL)" < internal/db/data.sql
tools:
@echo "Installing lint tools..."
go install golang.org/x/tools/cmd/goimports@latest
go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest
go install github.com/securego/gosec/v2/cmd/gosec@latest
go install golang.org/x/vuln/cmd/govulncheck@latest
@echo "Tools installed."
lint:
@echo "→ goimports"
goimports -w .
@echo "→ go vet"
go vet ./...
@echo "→ golangci-lint"
golangci-lint run ./...
@echo "→ gosec"
gosec -exclude-dir=internal/db/queries ./...
@echo "→ govulncheck"
govulncheck ./...
@echo "→ build"
go build ./cmd/api
@echo "→ test"
go test ./...
@echo "All checks passed."
admin-passwd:
ifndef PASSWORD
$(error Usage: make admin-passwd PASSWORD=yourpassword)
endif
@HASH=$$(go run ./cmd/adminpasswd "$(PASSWORD)") && \
if [ -n "$(DATABASE_URL)" ]; then \
{ printf "\\set h %s\n" "$$HASH"; printf "UPDATE app_config SET value = :'h', updated_at = CURRENT_TIMESTAMP WHERE key = 'admin_password_hash';\n"; } | \
psql "$(DATABASE_URL)" -q; \
else \
{ printf '\\set h %s\n' "$$HASH"; printf "UPDATE app_config SET value = to_json(:'h'::text) WHERE key = 'admin_password_hash';\n"; } | \
docker exec -i $(DB_CONTAINER) psql -U numex -d numex -q; \
fi && \
echo "Admin password updated successfully."
.PHONY: init down run build tools lint psql bootstrap-db admin-passwd