-
Notifications
You must be signed in to change notification settings - Fork 165
Expand file tree
/
Copy pathMakefile
More file actions
199 lines (157 loc) · 7.13 KB
/
Copy pathMakefile
File metadata and controls
199 lines (157 loc) · 7.13 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
199
SHELL := /bin/bash
tag := latest
workerTag := latest
workerPlatform := linux/$(shell uname -m | sed 's/x86_64/amd64/' | sed 's/aarch64/arm64/')
runnerTag := latest
runnerPlatform := linux/$(shell uname -m | sed 's/x86_64/amd64/' | sed 's/aarch64/arm64/')
runnerVersions ?= 3.12 3.11 3.10 3.9 3.8
BENCH_SDK_PYTHON ?= uv run --project ./sdk --no-sync python
CACHE_BENCHMARK_FILE_PLAN ?=
CACHE_BENCH_PROFILE ?=
CACHE_BENCH_CONFIG ?=
TOKEN ?=
.PHONY: start stop start-stage stop-stage startup-benchmark startup-benchmark-build sandbox-parallel-benchmark sandbox-stage-cold-benchmark sandbox-stage-warm-benchmark cache-benchmark bench-cache-smoke worker-e2e-tag worker-e2e-check worker-e2e-push
setup:
bash bin/setup.sh
make k3d-up runner worker gateway
# helm install beta9 deploy/charts/beta9 --create-namespace --values deploy/charts/beta9/values.local.yaml
kustomize build --enable-helm manifests/kustomize/overlays/cluster-dev | kubectl apply -f-
startup-benchmark:
PYTHONPATH="$(CURDIR)/sdk/src:$(PYTHONPATH)" \
BENCH_SDK_PYTHON="$(BENCH_SDK_PYTHON)" \
"$(CURDIR)/bin/bench" startup $(ARGS)
startup-benchmark-build:
docker build . --target build -f ./docker/Dockerfile.gateway -t localhost:5001/beta9-gateway:$(tag)
docker push localhost:5001/beta9-gateway:$(tag)
docker build . --target final --platform=$(workerPlatform) --build-arg BASE_STAGE=dev -f ./docker/Dockerfile.worker -t localhost:5001/beta9-worker:$(workerTag)
docker push localhost:5001/beta9-worker:$(workerTag)
$(MAKE) startup-benchmark BENCH_INSTALL=1
sandbox-parallel-benchmark:
PYTHONPATH="$(CURDIR)/sdk/src:$(PYTHONPATH)" \
BENCH_SDK_PYTHON="$(BENCH_SDK_PYTHON)" \
"$(CURDIR)/bin/bench" sandbox $(ARGS)
sandbox-stage-cold-benchmark:
$(MAKE) sandbox-parallel-benchmark ARGS="--profile staging --suite sandbox-stage-cold $(ARGS)"
sandbox-stage-warm-benchmark:
$(MAKE) sandbox-parallel-benchmark ARGS="--profile staging --suite sandbox-stage-warm $(ARGS)"
cache-benchmark:
PYTHONPATH="$(CURDIR)/sdk/src:$(PYTHONPATH)" \
BENCH_SDK_PYTHON="$(BENCH_SDK_PYTHON)" \
CACHE_BENCHMARK_FILE_PLAN="$(CACHE_BENCHMARK_FILE_PLAN)" \
CACHE_BENCH_PROFILE="$(CACHE_BENCH_PROFILE)" \
CACHE_BENCH_CONFIG="$(CACHE_BENCH_CONFIG)" \
TOKEN="$(TOKEN)" \
"$(CURDIR)/bin/bench" cache $(ARGS)
bench-cache-smoke:
PYTHONPATH="$(CURDIR)/sdk/src:$(PYTHONPATH)" \
BENCH_SDK_PYTHON="$(BENCH_SDK_PYTHON)" \
"$(CURDIR)/bin/bench" cache --suite cache-smoke $(ARGS)
setup-sdk:
@if ! command -v uv &> /dev/null; then \
echo "uv is not installed, installing..."; \
pip install uv; \
fi
@uv sync --directory ./sdk
@exec $${SHELL} -c "source ./sdk/.venv/bin/activate && exec $${SHELL}"
k3d-up:
bash bin/k3d.sh up
k3d-down:
bash bin/k3d.sh down
k3d-rebuild:
make k3d-down
make k3d-up
kustomize build --enable-helm manifests/kustomize/overlays/cluster-dev | kubectl apply -f-
gateway:
docker build . --target build -f ./docker/Dockerfile.gateway -t localhost:5001/beta9-gateway:$(tag)
docker push localhost:5001/beta9-gateway:$(tag)
worker:
docker build . --target final --platform=$(workerPlatform) --build-arg BASE_STAGE=dev -f ./docker/Dockerfile.worker -t localhost:5001/beta9-worker:$(workerTag)
docker push localhost:5001/beta9-worker:$(workerTag)
BENCH_NAMESPACE="$(BENCH_NAMESPACE)" bin/delete_workers.sh
worker-e2e-tag:
@./hack/worker-e2e-image.sh tag
worker-e2e-check:
@./hack/worker-e2e-image.sh check
worker-e2e-push:
@./hack/worker-e2e-image.sh push
runner: runner-python runner-micromamba
# Build just one native runner with: make runner-python runnerVersions=3.12
.PHONY: runner runner-python runner-micromamba
define build-runner
set -e; for version in $(runnerVersions); do \
target=$(1); \
docker build . --target $(2) --platform=$(runnerPlatform) -f ./docker/Dockerfile.runner $(3) -t localhost:5001/beta9-runner:$$target-$(runnerTag) --progress=plain; \
docker push localhost:5001/beta9-runner:$$target-$(runnerTag); \
done
endef
runner-python:
$(call build-runner,py$${version//./},$$target)
runner-micromamba:
$(call build-runner,micromamba$$version,micromamba,--build-arg PYTHON_VERSION=$$version)
# Local (k3d) and staging (EKS) okteto sessions can run side by side. Okteto
# stores session state under $OKTETO_FOLDER/<namespace>/<dev>, keyed by name
# rather than cluster, so both sessions (beta9/beta9-gateway) would otherwise
# share one okteto.pid and take turns killing each other. Staging gets its own
# folder, and both pass --context/--namespace explicitly so neither depends on
# (or clobbers) the global current context.
LOCAL_OKTETO_CONTEXT ?= k3d-beta9
LOCAL_OKTETO_NAMESPACE ?= beta9
STAGE_OKTETO_CONTEXT ?= arn:aws:eks:us-east-1:683656326989:cluster/eks-stage-01
STAGE_OKTETO_NAMESPACE ?= beta9
STAGE_OKTETO_FOLDER ?= $(HOME)/.okteto-stage
OKTETO_LOCAL_FLAGS := --context $(LOCAL_OKTETO_CONTEXT) --namespace $(LOCAL_OKTETO_NAMESPACE)
OKTETO_STAGE_FLAGS := --context $(STAGE_OKTETO_CONTEXT) --namespace $(STAGE_OKTETO_NAMESPACE)
OKTETO_STAGE := mkdir -p $(STAGE_OKTETO_FOLDER) && OKTETO_FOLDER=$(STAGE_OKTETO_FOLDER) okteto
start:
@if [ -f config.yaml ]; then \
cd hack && okteto up $(OKTETO_LOCAL_FLAGS) --file okteto.yaml --env CONFIG_PATH=/workspace/config.yaml; \
else \
cd hack && okteto up $(OKTETO_LOCAL_FLAGS) --file okteto.yaml; \
fi
clear-ports:
@echo "Killing processes on ports 1993, 1994, and 8008..."
@lsof -t -i :1993,1994,8008 | xargs -r sudo kill -9 2>/dev/null || true
stop:
cd hack && okteto down $(OKTETO_LOCAL_FLAGS) --file okteto.yaml
# Staging gateway on eks-stage-01 (see hack/okteto.stage.yaml). Forwards to
# localhost:11993/11994 so it never collides with the local session.
start-stage:
@test -n "$(GATEWAY_TAG)" || { echo "GATEWAY_TAG is required, e.g. GATEWAY_TAG=perf-startup-9b71dbb7 make start-stage"; exit 1; }
cd hack && GATEWAY_TAG=$(GATEWAY_TAG) $(OKTETO_STAGE) up $(OKTETO_STAGE_FLAGS) --file okteto.stage.yaml
stop-stage:
cd hack && $(OKTETO_STAGE) down $(OKTETO_STAGE_FLAGS) --file okteto.stage.yaml
protocol:
./bin/gen_proto.sh
openapi:
@echo "Generating OpenAPI schemas..."
@mkdir -p docs/openapi
protoc -I ./googleapis -I ./pkg/types -I ./pkg/abstractions/pod/ --openapiv2_out=./docs/openapi --openapiv2_opt logtostderr=true ./pkg/abstractions/pod/pod.proto
protoc -I ./googleapis -I ./pkg/abstractions/image/ --openapiv2_out=./docs/openapi --openapiv2_opt logtostderr=true ./pkg/abstractions/image/image.proto
protoc -I ./googleapis -I ./pkg/types -I ./pkg/gateway/ --openapiv2_out=./docs/openapi --openapiv2_opt logtostderr=true ./pkg/gateway/gateway.proto
@echo "OpenAPI schemas generated in docs/openapi/"
verify-protocol:
./bin/verify_proto.sh
test-pkg:
go test -v ./pkg/...
bench-pkg:
go test -run '^$$' -bench=. ./pkg/...
# build-test runs CPU-only image build e2e checks. Set MODE=functions or
# MODE=pods to run a subset; MODE=local is kept as an alias for all.
build-test:
PYTHONPATH=$(CURDIR)/sdk/src uv run --project sdk python e2e/build_tests/app.py $(MODE)
load-test:
cd e2e/load_tests && k6 run --env URL=$(URL) --env TOKEN=$(TOKEN) throughput.js
sdk-init:
make -C sdk init
sdk-docs:
make -C sdk docs
sdk-tests:
make -C sdk tests
sdk-format:
make -C sdk format
sdk-build:
make -C sdk build
sdk-clean:
make -C sdk clean
sdk-publish:
make -C sdk publish