Deploy Code to Production¶
For Executor Code (Python)¶
Agent execution code lives in ge_agent/, ge_engine/, ge_common/, ge_comm/, ge_orchestrator/. Deploying changes requires rebuilding the executor container image.
NEVER use kubectl cp — changes are lost on pod restart and Python caches modules at startup.
# 1. Rebuild container image
bash ge-ops/infrastructure/local/k3s/executor/build-executor.sh
# 2. Restart pods to pick up new image
kubectl rollout restart deployment/ge-executor -n ge-agents
# 3. Wait for rollout
kubectl rollout status deployment/ge-executor -n ge-agents --timeout=120s
# 4. Verify
kubectl get pods -n ge-agents -l app=ge-executor
See Rebuild Executor for detailed steps.
For Admin UI Code (TypeScript/Next.js)¶
Admin UI at admin-ui/. Deployed as a k8s deployment in ge-system namespace.
# Admin UI reads from host filesystem via hostPath mount
# For most changes, restart the pod:
kubectl rollout restart deployment/admin-ui -n ge-system
For Dolly (Orchestrator)¶
Dolly reads from host filesystem via hostPath mount. Restart picks up changes:
For Config Files¶
Config files at config/ are mounted read-only into executor and Dolly pods. Changes take effect on next pod restart or next session (depending on whether the code caches the config).
Git Workflow¶
All changes go through feature branches. Never commit to main directly.
git checkout -b feat/description
# ... make changes ...
git add <specific files>
git commit -m "type(scope): description"
git push -u origin feat/description
CronJob: executor-refresh¶
The executor-refresh CronJob (twice daily at 03:00, 15:00) does a rolling restart of executor pods — NOT an image rebuild. It ensures pods pick up any hostPath changes.