Ctrl K
ComunidadGuías…

Makefile

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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