Makefile
Rama main · réplica de lectura del repositorio original.
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
STAGE_CONFIG_PATH ?= /etc/beta9/config.yaml
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:
@umask 077; if [ -d hack/stage/gomodcache/cache/download/github.com/beam-cloud ]; then \
tar -cf hack/stage/gomodcache.tar -C hack/stage/gomodcache cache/download/github.com/beam-cloud; \
else \
tar -cf hack/stage/gomodcache.tar -T /dev/null; \
fi
cd hack && export STAGE_GATEWAY_IMAGE="$${STAGE_GATEWAY_IMAGE:-$$(kubectl --context '$(STAGE_OKTETO_CONTEXT)' -n '$(STAGE_OKTETO_NAMESPACE)' get deploy beta9-gateway -o jsonpath='{.spec.template.spec.containers[0].image}')}" && $(OKTETO_STAGE) up $(OKTETO_STAGE_FLAGS) --file okteto.stage.yaml --env CONFIG_PATH='$(STAGE_CONFIG_PATH)'
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/...
go test github.com/beam-cloud/clip/pkg/clip -run '^TestBatchedCodecGolden$$'
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