-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
171 lines (142 loc) · 4.31 KB
/
Makefile
File metadata and controls
171 lines (142 loc) · 4.31 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
.PHONY: help init build test test-coverage test-short generate lint fmt vet run run-dev clean clean-docker deps deps-update tidy validate ci docker-build docker-run openspec-validate openspec-list shell logs
# Set help as default target
.DEFAULT_GOAL := help
# Container runtime configuration (can be overridden)
DOCKER_RUN ?= docker run --rm -v "$(CURDIR):/app" -w /app
GO_IMAGE ?= golang:1.22-alpine
LINT_IMAGE ?= golangci/golangci-lint:v1.55-alpine
# Detect if running in container (for hybrid execution)
IN_CONTAINER ?= $(shell test -f /.dockerenv && echo 1 || echo 0)
# Command prefix - use Docker if not in container, direct if in container
ifeq ($(IN_CONTAINER),1)
CMD_PREFIX =
else
CMD_PREFIX = $(DOCKER_RUN) $(GO_IMAGE)
endif
# Help target
help:
@echo "3 Musketeers Build System - BIAN Go"
@echo ""
@echo "Available targets:"
@echo " Development:"
@echo " init - Initialize project (download dependencies)"
@echo " build - Build the project"
@echo " generate - Run go generate (GraphQL code generation)"
@echo " test - Run tests"
@echo " test-coverage - Run tests with coverage"
@echo " test-short - Run short tests only"
@echo " run - Run example server (production mode)"
@echo " run-dev - Run example server (development mode with hot reload)"
@echo ""
@echo " Validation:"
@echo " fmt - Format code"
@echo " vet - Vet code"
@echo " lint - Run linter"
@echo " validate - Run all validation checks (fmt, vet, lint, test)"
@echo ""
@echo " CI/CD:"
@echo " ci - Run complete CI pipeline (init + validate + build)"
@echo ""
@echo " Docker:"
@echo " docker-build - Build Docker image"
@echo " docker-run - Run Docker container"
@echo ""
@echo " Utilities:"
@echo " clean - Clean build artifacts"
@echo " clean-docker - Clean Docker artifacts"
@echo " deps - Download dependencies"
@echo " deps-update - Update dependencies"
@echo " tidy - Tidy go.mod"
@echo " shell - Open interactive shell in container"
@echo " logs - Show application logs"
@echo ""
@echo " OpenSpec:"
@echo " openspec-validate - Validate OpenSpec changes"
@echo " openspec-list - List OpenSpec changes"
@echo ""
@echo "Environment:"
@echo " DOCKER_RUN=$(DOCKER_RUN)"
@echo " GO_IMAGE=$(GO_IMAGE)"
@echo " IN_CONTAINER=$(IN_CONTAINER)"
# Initialize project
init:
$(CMD_PREFIX) go mod download
$(CMD_PREFIX) go mod verify
# Build the project
build:
$(CMD_PREFIX) go build -o bin/bian-go ./cmd/server 2>/dev/null || $(CMD_PREFIX) go build ./...
# Run tests
test:
$(CMD_PREFIX) go test ./...
# Run tests with coverage
test-coverage:
$(CMD_PREFIX) go test -cover ./...
# Run short tests only
test-short:
$(CMD_PREFIX) go test -short ./...
# Generate GraphQL code
generate:
$(CMD_PREFIX) go generate ./...
# Run linter
lint:
ifeq ($(IN_CONTAINER),1)
golangci-lint run
else
$(DOCKER_RUN) $(LINT_IMAGE) golangci-lint run
endif
# Run example server (production mode)
run:
docker compose up app
# Run example server (development mode with hot reload)
run-dev:
docker compose up dev
# Clean build artifacts
clean:
$(CMD_PREFIX) go clean ./...
rm -rf bin/
rm -f examples/basic/basic
rm -f examples/basic/basic.exe
rm -f tmp/
rm -f build-errors.log
# Clean Docker artifacts
clean-docker:
docker system prune -f
docker volume prune -f
# Install dependencies
deps:
$(CMD_PREFIX) go mod download
# Update dependencies
deps-update:
$(CMD_PREFIX) go get -u ./...
$(CMD_PREFIX) go mod tidy
# Tidy go.mod
tidy:
$(CMD_PREFIX) go mod tidy
# Format code
fmt:
$(CMD_PREFIX) go fmt ./...
# Vet code
vet:
$(CMD_PREFIX) go vet ./...
# Run all validation checks
validate: fmt vet lint test
# Complete CI pipeline
ci: init validate build
# Build Docker image
docker-build:
docker build -t bian-go .
# Run Docker container
docker-run:
docker run -p 8080:8080 bian-go
# OpenSpec validation
openspec-validate:
@echo "OpenSpec validation - implement when openspec CLI is available"
# OpenSpec list
openspec-list:
@echo "OpenSpec list - implement when openspec CLI is available"
# Interactive shell in container
shell:
$(DOCKER_RUN) -it $(GO_IMAGE) sh
# Show application logs (when running via compose)
logs:
docker compose logs -f