-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
138 lines (112 loc) · 4.48 KB
/
Makefile
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
# Define paths (note that the paths are relative to the Makefile location)
SERVER_DIR=./server
FRONTEND_DIR=./frontend
# Detect operating system and shell
ifeq ($(OS),Windows_NT)
# Detect if using PowerShell
ifneq ($(findstring pwsh,$(SHELL)),)
VENV_ACTIVATE=.\.venv\Scripts\Activate.ps1
else ifneq ($(findstring powershell,$(SHELL)),)
VENV_ACTIVATE=.\.venv\Scripts\Activate.ps1
else
# Default to CMD
VENV_ACTIVATE=.venv\Scripts\activate
endif
COLOR_RESET=
COLOR_BLUE_BG=
else
VENV_ACTIVATE=. .venv/bin/activate
COLOR_RESET=\033[0m
COLOR_BLUE_BG=\033[44m
endif
# Backend tools
RUFF=ruff
MYPY=mypy
PYTEST=pytest chatgptserver
PYCOVERAGE=coverage run -m pytest chatgptserver && coverage report --fail-under=95 && coverage html
DJANGO_RUNSERVER=chatgptserver/manage.py runserver
OPENAPI_SCHEMA=chatgptserver/manage.py spectacular --color --validate --file schema.yml
# Frontend tools
ESLINT=npm run lint:fix
PRETTIER=npm run format
TSC=npm run check-types
BUILD=npm run build
JEST=npm run test
NEXT_START=npm run start
PLAYWRIGHT=npm run test:e2e
# Targets
.PHONY: all lint format type-check backend-lint backend-format \
backend-type-check frontend-lint frontend-format backend-validate-api-schema \
frontend-type-check test backend-test frontend-test e2e-test qa \
run-backend run-frontend run
# Run linters for both backend and frontend
lint: backend-lint frontend-lint
# Run formatters for both backend and frontend
format: backend-format frontend-format
# Run type checkers for both backend and frontend
type-check: backend-type-check frontend-type-check
# Run tests for both backend and frontend
test: backend-test frontend-test
# Linting, formatting, type-checking, and unit testing for backend
backend-lint:
@echo "$(COLOR_BLUE_BG)Running backend linting with ruff...$(COLOR_RESET)"
cd $(SERVER_DIR) && $(VENV_ACTIVATE) && $(RUFF) check --fix .
backend-format:
@echo "$(COLOR_BLUE_BG)Running backend formatting with ruff...$(COLOR_RESET)"
cd $(SERVER_DIR) && $(VENV_ACTIVATE) && $(RUFF) format .
backend-type-check:
@echo "$(COLOR_BLUE_BG)Running backend static type checking with mypy...$(COLOR_RESET)"
cd $(SERVER_DIR) && $(VENV_ACTIVATE) && $(MYPY) .
backend-validate-api-schema:
@echo "$(COLOR_BLUE_BG)Validating API schema...$(COLOR_RESET)"
cd $(SERVER_DIR) && $(VENV_ACTIVATE) && $(OPENAPI_SCHEMA)
backend-test:
@echo "$(COLOR_BLUE_BG)Running backend unit tests...$(COLOR_RESET)"
cd $(SERVER_DIR) && $(VENV_ACTIVATE) && $(PYTEST) && $(PYCOVERAGE)
# Linting, formatting, type-checking, and unit testing for frontend
frontend-lint:
@echo "$(COLOR_BLUE_BG)Running frontend linting...$(COLOR_RESET)"
cd $(FRONTEND_DIR) && $(ESLINT) .
frontend-format:
@echo "$(COLOR_BLUE_BG)Running frontend formatting...$(COLOR_RESET)"
cd $(FRONTEND_DIR) && $(PRETTIER) .
frontend-type-check:
@echo "$(COLOR_BLUE_BG)Running frontend static type checking with TypeScript...$(COLOR_RESET)"
cd $(FRONTEND_DIR) && $(TSC)
frontend-test:
@echo "$(COLOR_BLUE_BG)Running frontend unit tests...$(COLOR_RESET)"
cd $(FRONTEND_DIR) && $(JEST)
frontend-build:
@echo "$(COLOR_BLUE_BG)Building frontend...$(COLOR_RESET)"
cd $(FRONTEND_DIR) && $(BUILD)
lint-markdown:
@echo "$(COLOR_BLUE_BG)Linting markdown files...$(COLOR_RESET)"
markdownlint README.md
# Run backend server
run-backend:
@echo "$(COLOR_BLUE_BG)Running backend server...$(COLOR_RESET)"
cd $(SERVER_DIR) && $(VENV_ACTIVATE) && $(DJANGO_RUNSERVER) & echo $$! > backend.pid
# Run frontend server
run-frontend:
@echo "$(COLOR_BLUE_BG)Running frontend server...$(COLOR_RESET)"
cd $(FRONTEND_DIR) && $(NEXT_START) & echo $$! > frontend.pid
# Run QA checks
qa-frontend: frontend-lint frontend-format frontend-type-check frontend-test frontend-build
qa-backend: backend-lint backend-format backend-type-check backend-test
qa: format lint type-check backend-validate-api-schema test
# End-to-end testing with backend and frontend running
e2e-test:
@echo "$(COLOR_BLUE_BG)Starting backend and frontend services...$(COLOR_RESET)"
@$(MAKE) run-backend
@$(MAKE) run-frontend
@sleep 10 # Wait for services to start (adjust this as necessary)
@echo "$(COLOR_BLUE_BG)Running end-to-end tests...$(COLOR_RESET)"
cd $(FRONTEND_DIR) && $(PLAYWRIGHT)
# Run all services
docker-up:
@echo "$(COLOR_BLUE_BG)Running containerized services...$(COLOR_RESET)"
docker-compose up --build --force-recreate
# Stop all services
docker-down:
@echo "$(COLOR_BLUE_BG)Stopping containerized services...$(COLOR_RESET)"
docker-compose down