-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
165 lines (130 loc) · 8.21 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
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
# Makefile for Jira Analyzer project
.PHONY: help install dev test lint format clean build docker-build docker-dev setup-pre-commit
# Show help message for all make commands
help:
@echo "Available commands:"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
install: ## Install all dependencies for both frontend and backend
cd frontend && pnpm install
cd backend && pip install -r requirements.txt
pip install pre-commit
setup-pre-commit: ## Install pre-commit hooks
pre-commit install
dev: ## Start development servers for both frontend and backend
docker-compose -f docker-compose.dev.yml up --build
test: frontend-test backend-test ## Run all tests (frontend and backend)
lint: frontend-lint backend-lint ## Run linting for both frontend and backend
format: frontend-format backend-format ## Format code in both frontend and backend
clean: ## Clean up build artifacts and cache
cd frontend && rm -rf dist node_modules
cd backend && find . -type d -name "__pycache__" -exec rm -rf {} +
cd backend && find . -type f -name "*.pyc" -delete
build: ## Build the production version of the application
docker build -t jira-analyzer-frontend -f frontend/Dockerfile frontend
docker build -t jira-analyzer-backend -f backend/Dockerfile backend
docker-build: ## Build production Docker images
docker-compose build
docker-dev: ## Start development environment using Docker
docker-compose -f docker-compose.dev.yml up --build
frontend-test: ## Run frontend tests only (run once and exit)
docker build -t frontend-dev \
--build-arg USER_ID=$(shell id -u) \
--build-arg GROUP_ID=$(shell id -g) \
-f frontend/Dockerfile.dev frontend
docker run --rm -ti \
-v $(PWD)/frontend/src:/app/src \
-v $(PWD)/frontend/public:/app/public \
-v $(PWD)/frontend/index.html:/app/index.html \
-v $(PWD)/frontend/package.json:/app/package.json \
-v $(PWD)/frontend/pnpm-lock.yaml:/app/pnpm-lock.yaml \
-v $(PWD)/frontend/tsconfig.json:/app/tsconfig.json \
-v $(PWD)/frontend/tsconfig.node.json:/app/tsconfig.node.json \
-v $(PWD)/frontend/vite.config.ts:/app/vite.config.ts \
-v $(PWD)/frontend/vitest.config.ts:/app/vitest.config.ts \
frontend-dev pnpm test
frontend-test-ci: ## Run frontend tests in CI mode (non-interactive)
docker build -t frontend-ci -f frontend/Dockerfile.ci frontend
docker run --rm \
-v $(PWD)/frontend/src:/app/src \
-v $(PWD)/frontend/public:/app/public \
-v $(PWD)/frontend/index.html:/app/index.html \
-v $(PWD)/frontend/package.json:/app/package.json \
-v $(PWD)/frontend/pnpm-lock.yaml:/app/pnpm-lock.yaml \
-v $(PWD)/frontend/tsconfig.json:/app/tsconfig.json \
-v $(PWD)/frontend/tsconfig.node.json:/app/tsconfig.node.json \
-v $(PWD)/frontend/vite.config.ts:/app/vite.config.ts \
-v $(PWD)/frontend/vitest.config.ts:/app/vitest.config.ts \
frontend-ci pnpm test
frontend-test-watch: ## Run frontend tests in watch mode
docker build -t frontend-dev \
--build-arg USER_ID=$(shell id -u) \
--build-arg GROUP_ID=$(shell id -g) \
-f frontend/Dockerfile.dev frontend
docker run --rm -ti \
-v $(PWD)/frontend/src:/app/src \
-v $(PWD)/frontend/public:/app/public \
-v $(PWD)/frontend/index.html:/app/index.html \
-v $(PWD)/frontend/package.json:/app/package.json \
-v $(PWD)/frontend/pnpm-lock.yaml:/app/pnpm-lock.yaml \
-v $(PWD)/frontend/tsconfig.json:/app/tsconfig.json \
-v $(PWD)/frontend/tsconfig.node.json:/app/tsconfig.node.json \
-v $(PWD)/frontend/vite.config.ts:/app/vite.config.ts \
-v $(PWD)/frontend/vitest.config.ts:/app/vitest.config.ts \
frontend-dev pnpm test:watch
backend-test: ## Run backend tests only
docker build -t backend-dev -f backend/Dockerfile.dev backend
docker run --rm -ti -v $(PWD)/backend:/app backend-dev pytest
backend-unit-test: ## Run backend unit tests only
docker build -t backend-dev -f backend/Dockerfile.dev backend
docker run --rm -ti -v $(PWD)/backend:/app backend-dev pytest tests/unit
backend-unit-test-ci: ## Run backend unit tests in CI mode (non-interactive)
docker build -t backend-dev -f backend/Dockerfile.dev backend
docker run --rm -v $(PWD)/backend:/app backend-dev pytest tests/unit
backend-integration-test: ## Run backend integration tests only
docker build -t backend-dev -f backend/Dockerfile.dev backend
docker run --rm -ti -v $(PWD)/backend:/app backend-dev pytest tests/test_config.py tests/test_input_validation.py tests/test_metric_calculations.py tests/test_api_metrics.py
backend-fast-test: ## Run backend tests with optimizations
docker build -t backend-dev -f backend/Dockerfile.dev backend
docker run --rm -ti -v $(PWD)/backend:/app backend-dev pytest -xvs --no-header
frontend-lint: ## Run frontend linting only
docker build -t frontend-dev -f frontend/Dockerfile.dev frontend
docker run --rm -ti -v $(PWD)/frontend:/app frontend-dev pnpm run lint
frontend-lint-ci: ## Run frontend linting in CI mode (non-interactive)
docker build -t frontend-ci -f frontend/Dockerfile.ci frontend
docker run --rm -v $(PWD)/frontend:/app frontend-ci pnpm run lint
backend-lint: ## Run backend linting only
docker build -t backend-dev -f backend/Dockerfile.dev backend
docker run --rm -ti -v $(PWD)/backend:/app backend-dev sh -c "ruff check app tests && mypy --explicit-package-bases --namespace-packages --ignore-missing-imports --exclude 'app/migrations/|tests/unit/conftest\.py' app tests && bandit -c pyproject.toml -r app tests"
backend-lint-ci: ## Run backend linting in CI mode (non-interactive)
docker build -t backend-dev -f backend/Dockerfile.dev backend
docker run --rm -v $(PWD)/backend:/app backend-dev sh -c "ruff check app tests && mypy --explicit-package-bases --namespace-packages --ignore-missing-imports --exclude 'app/migrations/|tests/unit/conftest\.py' app tests && bandit -c pyproject.toml -r app tests"
frontend-format: ## Format frontend code only
docker build -t frontend-dev -f frontend/Dockerfile.dev frontend
docker run --rm -ti -v $(PWD)/frontend:/app frontend-dev pnpm run format
frontend-format-ci: ## Format frontend code in CI mode (non-interactive)
docker build -t frontend-ci -f frontend/Dockerfile.ci frontend
docker run --rm -v $(PWD)/frontend:/app frontend-ci pnpm run format
frontend-lint-fix: ## Auto-fix frontend linting issues
docker build -t frontend-dev -f frontend/Dockerfile.dev frontend
docker run --rm -ti -v $(PWD)/frontend:/app frontend-dev pnpm run lint:fix
frontend-lint-fix-ci: ## Auto-fix frontend linting issues in CI mode (non-interactive)
docker build -t frontend-ci -f frontend/Dockerfile.ci frontend
docker run --rm -v $(PWD)/frontend:/app frontend-ci pnpm run lint:fix
frontend-type-check-ci: ## Run TypeScript type checking in CI mode (non-interactive)
docker build -t frontend-ci -f frontend/Dockerfile.ci frontend
docker run --rm -v $(PWD)/frontend:/app frontend-ci pnpm run type-check
backend-format: ## Format backend code only
docker build -t backend-dev -f backend/Dockerfile.dev backend
docker run --rm -ti -v $(PWD)/backend:/app backend-dev ruff format app tests
backend-format-ci: ## Format backend code in CI mode (non-interactive)
docker build -t backend-dev -f backend/Dockerfile.dev backend
docker run --rm -v $(PWD)/backend:/app backend-dev ruff format app tests
backend-lint-fix: ## Auto-fix backend linting issues
docker build -t backend-dev -f backend/Dockerfile.dev backend
docker run --rm -ti -v $(PWD)/backend:/app backend-dev sh -c "ruff check --fix --unsafe-fixes app tests && ruff format app tests && mypy --explicit-package-bases --namespace-packages --ignore-missing-imports --exclude 'app/migrations/|tests/unit/conftest\.py' app tests && bandit -c pyproject.toml -r app tests"
backend-lint-fix-ci: ## Auto-fix backend linting issues in CI mode (non-interactive)
docker build -t backend-dev -f backend/Dockerfile.dev backend
docker run --rm -v $(PWD)/backend:/app backend-dev sh -c "ruff check --fix --unsafe-fixes app tests && ruff format app tests && mypy --explicit-package-bases --namespace-packages --ignore-missing-imports --exclude 'app/migrations/|tests/unit/conftest\.py' app tests && bandit -c pyproject.toml -r app tests"
lint-fix: frontend-lint-fix backend-lint-fix ## Auto-fix linting issues in both frontend and backend
pre-commit-run: ## Run pre-commit hooks on all files
pre-commit run --all-files