-
Notifications
You must be signed in to change notification settings - Fork 34
Expand file tree
/
Copy pathMakefile
More file actions
198 lines (186 loc) · 9.48 KB
/
Makefile
File metadata and controls
198 lines (186 loc) · 9.48 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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
.PHONY: local dev test clean deploy undeploy
# OpenShift namespace (can be overridden: make deploy openshift NAMESPACE=my-project)
NAMESPACE ?= $(shell oc project -q 2>/dev/null)
# Dependency checks
deps:
@which uv > /dev/null && echo "uv: $(shell uv --version)" || (echo "Error: uv not found. Please install uv." && exit 1)
@which podman > /dev/null && echo "podman: $(shell podman --version)" || (echo "Error: podman not found. Please install podman." && exit 1)
@which podman-compose > /dev/null && echo "podman-compose: $(shell podman-compose --version)" || (echo "Error: podman-compose not found. Please install podman-compose." && exit 1)
@which oc > /dev/null && echo "oc: $(shell oc version --client)" || (echo "Error: oc not found. Please install oc." && exit 1)
# Install Python dependencies
install:
@echo "Creating virtual environment..."
@test -d .venv || uv venv
@echo "Installing package with dev dependencies..."
@. .venv/bin/activate && uv pip install -e ".[dev]"
@echo "Installing pre-commit hooks..."
@. .venv/bin/activate && pre-commit install
@echo "Python dependencies installed successfully!"
@echo "Activating virtual environment..."
@echo '#!/bin/bash' > /tmp/activate_and_shell.sh
@echo 'source .venv/bin/activate' >> /tmp/activate_and_shell.sh
@echo 'echo "Virtual environment activated! Type exit to return to your original shell."' >> /tmp/activate_and_shell.sh
@echo 'exec "$$SHELL"' >> /tmp/activate_and_shell.sh
@chmod +x /tmp/activate_and_shell.sh
@exec /tmp/activate_and_shell.sh
clean:
@echo "Cleaning up non-code artifacts..."
@rm -rf .venv
@rm -rf __pycache__
@rm -rf .pytest_cache
@rm -rf .coverage
@rm -rf htmlcov
@rm -rf .mypy_cache
@rm -rf .ruff_cache
@rm -rf build
@rm -rf dist
@rm -rf *.egg-info
@rm -f Current-IT-Root-CAs.pem
@find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
@find . -type f -name "*.pyc" -delete 2>/dev/null || true
@find . -type f -name "*.pyo" -delete 2>/dev/null || true
@find . -type f -name ".DS_Store" -delete 2>/dev/null || true
@echo "Cleanup complete"
test:
@if [ ! -d ".venv" ]; then \
echo "Error: Virtual environment not found. Run 'make install' first to set up the environment."; \
exit 1; \
fi
.venv/bin/python -m pytest
local:
@echo "Setting up local environment..."
@test -f .env || (echo "Creating .env from .env.example..." && cp .env.example .env)
@echo "Starting MCP server locally on port 5002..."
@echo "Health check available at: http://localhost:5002/health"
@echo "Press Ctrl+C to stop the server"
@. .venv/bin/activate && USE_INMEMORY_SAVER=true python -m template_agent.src.main
container:
export PODMAN_COMPOSE_SILENT=true
podman-compose --no-ansi up --build --force-recreate --remove-orphans --timeout=60
# Deployment targets
deploy:
@if [ "$(filter openshift,$(MAKECMDGOALS))" != "openshift" ] && [ "$(filter mpp,$(MAKECMDGOALS))" != "mpp" ]; then \
echo "Usage: make deploy [openshift|mpp]"; \
echo "Available deployment targets: openshift, mpp"; \
exit 1; \
fi
openshift:
@echo "Checking for oc CLI..."
@which oc > /dev/null || (echo "Error: oc CLI not found. Please install OpenShift CLI." && exit 1)
@echo "Validating namespace..."
@if [ -z "$(NAMESPACE)" ]; then \
echo "Error: NAMESPACE not set. Usage: make deploy openshift NAMESPACE=your-project"; \
exit 1; \
fi; \
echo "Using namespace: $(NAMESPACE)"; \
echo "Switching to namespace..."; \
oc project $(NAMESPACE) || (echo "Error: Cannot switch to namespace '$(NAMESPACE)'. Check permissions." && exit 1); \
echo "Updating namespace references..."; \
sed -i.bak "s|NAMESPACE_PLACEHOLDER|$(NAMESPACE)|g" deployment/openshift/deployment.yaml; \
sed -i.bak "s|namespace: template-agent|namespace: $(NAMESPACE)|g" deployment/openshift/kustomization.yaml; \
echo "Creating BuildConfig and ImageStream..."; \
oc apply -f deployment/openshift/buildconfig.yaml; \
oc apply -f deployment/openshift/imagestream.yaml; \
echo "Building container image from source..."; \
oc start-build template-agent --from-dir=. \
--exclude='(^|/)\.venv(/|$$)' \
--exclude='(^|/)__pycache__(/|$$)' \
--exclude='(^|/)\.pytest_cache(/|$$)' \
--exclude='(^|/)tests(/|$$)' \
--exclude='(^|/)examples(/|$$)' \
--exclude='(^|/)\.mypy_cache(/|$$)' \
--exclude='(^|/)\.ruff_cache(/|$$)' \
--exclude='.*\.log$$' \
--follow || (mv deployment/openshift/deployment.yaml.bak deployment/openshift/deployment.yaml 2>/dev/null; mv deployment/openshift/kustomization.yaml.bak deployment/openshift/kustomization.yaml 2>/dev/null; exit 1); \
echo "Deploying resources to OpenShift..."; \
oc apply -k deployment/openshift/ || (mv deployment/openshift/deployment.yaml.bak deployment/openshift/deployment.yaml 2>/dev/null; mv deployment/openshift/kustomization.yaml.bak deployment/openshift/kustomization.yaml 2>/dev/null; exit 1); \
rm -f deployment/openshift/deployment.yaml.bak deployment/openshift/kustomization.yaml.bak; \
echo "Deployment complete!"; \
echo "Checking deployment status..."; \
oc get pods -l app=template-agent; \
echo ""; \
echo "Useful commands:"; \
echo " View logs: oc logs -l app=template-agent --tail=100"; \
echo " Get route: oc get route template-agent"; \
echo " Check status: oc get pods,svc,route -l app=template-agent"
mpp:
@echo "Checking for oc CLI..."
@which oc > /dev/null || (echo "Error: oc CLI not found. Please install OpenShift CLI." && exit 1)
@echo "Validating TENANT parameter..."
@if [ -z "$(TENANT)" ]; then \
echo "Error: TENANT not set. Usage: make deploy mpp TENANT=your-tenant"; \
exit 1; \
fi; \
CONFIG_NAMESPACE="$(TENANT)--config"; \
RUNTIME_NAMESPACE="$(TENANT)--template"; \
echo "Config namespace: $$CONFIG_NAMESPACE"; \
echo "Runtime namespace: $$RUNTIME_NAMESPACE"; \
echo "Updating tenant.yaml with config namespace..."; \
sed -i.bak "s|TENANT_PLACEHOLDER|$$CONFIG_NAMESPACE|g" deployment/mpp/tenant.yaml; \
echo "Creating/switching to config namespace..."; \
oc project $$CONFIG_NAMESPACE 2>/dev/null || oc new-project $$CONFIG_NAMESPACE || (echo "Error: Cannot create/switch to namespace '$$CONFIG_NAMESPACE'." && mv deployment/mpp/tenant.yaml.bak deployment/mpp/tenant.yaml 2>/dev/null && exit 1); \
echo "Applying TenantNamespace CR to create runtime namespace..."; \
oc apply -f deployment/mpp/tenant.yaml || (mv deployment/mpp/tenant.yaml.bak deployment/mpp/tenant.yaml 2>/dev/null && exit 1); \
echo "Waiting for runtime namespace '$$RUNTIME_NAMESPACE' to be created..."; \
COUNTER=1; \
until oc get project $$RUNTIME_NAMESPACE 2>/dev/null || [ $$COUNTER -gt 30 ]; do \
echo "Waiting for namespace... ($$COUNTER/30)"; \
sleep 2; \
COUNTER=$$((COUNTER + 1)); \
done; \
if [ $$COUNTER -le 30 ]; then \
echo "Runtime namespace '$$RUNTIME_NAMESPACE' is ready"; \
fi; \
oc project "$(TENANT)--$(RUNTIME_NAMESPACE)" > /dev/null 2>&1 || (echo "Error: Runtime namespace '$$RUNTIME_NAMESPACE' was not created" && mv deployment/mpp/tenant.yaml.bak deployment/mpp/tenant.yaml 2>/dev/null && exit 1); \
echo "Switching to runtime namespace..."; \
oc project $$RUNTIME_NAMESPACE || (echo "Error: Cannot switch to runtime namespace '$$RUNTIME_NAMESPACE'" && mv deployment/mpp/tenant.yaml.bak deployment/mpp/tenant.yaml 2>/dev/null && exit 1); \
echo "Creating BuildConfig and ImageStream..."; \
oc apply -f deployment/mpp/buildconfig.yaml; \
oc apply -f deployment/mpp/imagestream.yaml; \
echo "Building container image from source..."; \
oc start-build template-agent --from-dir=. \
--exclude='(^|/)\.venv(/|$$)' \
--exclude='(^|/)__pycache__(/|$$)' \
--exclude='(^|/)\.pytest_cache(/|$$)' \
--exclude='(^|/)tests(/|$$)' \
--exclude='(^|/)examples(/|$$)' \
--exclude='(^|/)\.mypy_cache(/|$$)' \
--exclude='(^|/)\.ruff_cache(/|$$)' \
--exclude='.*\.log$$' \
--follow || (mv deployment/mpp/tenant.yaml.bak deployment/mpp/tenant.yaml 2>/dev/null; exit 1); \
echo "Deploying resources to MPP..."; \
oc apply -k deployment/mpp/ || (mv deployment/mpp/tenant.yaml.bak deployment/mpp/tenant.yaml 2>/dev/null; exit 1); \
rm -f deployment/mpp/tenant.yaml.bak; \
echo "Deployment complete!"; \
echo "Checking deployment status..."; \
oc get pods -l app=template-agent; \
echo ""; \
echo "Useful commands:"; \
echo " View logs: oc logs -l app=template-agent --tail=100"; \
echo " Get route: oc get route template-agent"; \
echo " Check status: oc get pods,svc,route -l app=template-agent"
undeploy:
@if [ "$(filter openshift,$(MAKECMDGOALS))" = "openshift" ]; then \
echo "Checking for oc CLI..."; \
which oc > /dev/null || (echo "Error: oc CLI not found. Please install OpenShift CLI." && exit 1); \
oc project $(NAMESPACE) || (echo "Error: Cannot switch to namespace '$(NAMESPACE)'" && exit 1); \
echo "Removing OpenShift deployment..."; \
oc delete deployment,service,route,configmap,secret,pvc,buildconfig,imagestream -l app=template-agent 2>/dev/null || true; \
echo "Undeployment complete!"; \
exit 1; \
elif [ "$(filter mpp,$(MAKECMDGOALS))" = "mpp" ]; then \
echo "Checking for oc CLI..."; \
RUNTIME_NAMESPACE="$(TENANT)--template"; \
which oc > /dev/null || (echo "Error: oc CLI not found. Please install OpenShift CLI." && exit 1); \
oc project $$RUNTIME_NAMESPACE || (echo "Error: Cannot switch to runtime namespace '$$RUNTIME_NAMESPACE'" && exit 1); \
echo "Removing MPP deployment..."; \
oc delete deployment,service,route,configmap,secret,pvc,buildconfig,imagestream -l app=template-agent 2>/dev/null || true; \
echo "Undeployment complete!"; \
exit 1; \
else \
echo "Usage: make undeploy [openshift|mpp]"; \
echo "Available undeployment targets: openshift, mpp"; \
exit 1; \
fi
%:
@: