terradev-cli 5.1.7__tar.gz → 5.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- terradev_cli-5.2.0/.github/workflows/ci.yml +395 -0
- terradev_cli-5.2.0/Deployment Package/LIFECYCLES.md +1620 -0
- terradev_cli-5.2.0/Deployment Package/architecture.md +373 -0
- terradev_cli-5.2.0/Deployment Package/overview.md +162 -0
- terradev_cli-5.2.0/Deployment Package/security.md +278 -0
- terradev_cli-5.2.0/Deployment Package/troubleshooting.md +599 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/Dockerfile +1 -5
- terradev_cli-5.2.0/Dockerfile.test +45 -0
- {terradev_cli-5.1.7/terradev_cli.egg-info → terradev_cli-5.2.0}/PKG-INFO +6 -4
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/README.md +5 -3
- terradev_cli-5.2.0/docs/overview.md +161 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/pyproject.toml +6 -1
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/requirements.txt +3 -3
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/README.md +7 -5
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/__init__.py +1 -3
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/__main__.py +4 -1
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/cli.py +6501 -4161
- terradev_cli-5.2.0/terradev_cli/cli_hf_spaces.py +201 -0
- terradev_cli-5.2.0/terradev_cli/cli_karpenter.py +270 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/__init__.py +6 -6
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/async_config.py +69 -64
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/auth.py +1 -3
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/auto_lineage.py +189 -125
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/cache_manager.py +10 -8
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/checkpoint_manager.py +148 -65
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/command_executor.py +8 -6
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/config_validator.py +12 -7
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/cost_scaler.py +227 -171
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/cost_tracker.py +57 -14
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/credential_vault.py +7 -6
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/cuda_graph_integrator.py +141 -97
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/dag_executor.py +28 -19
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/data_governance.py +44 -19
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/dataset_stager.py +86 -25
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/deployment_router.py +202 -155
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/distributed_lock.py +19 -8
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/drift_detector.py +109 -80
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/egress_cost_monitor.py +209 -101
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/egress_optimizer.py +156 -56
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/evaluation_orchestrator.py +114 -83
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/event_system.py +153 -101
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/gitops_manager.py +273 -301
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/gpu_discovery.py +4 -3
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/gpu_topology.py +137 -80
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/helm_generator.py +444 -238
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/hf_cli_integration.py +219 -150
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/hf_smart_templates.py +162 -130
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/hf_spaces.py +74 -66
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/inference_router.py +270 -182
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/inference_spot_manager.py +58 -18
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/job_state_manager.py +106 -48
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/kv_cache_checkpoint_manager.py +231 -173
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/kv_cache_checkpoint_tests.py +319 -254
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/manifest_cache.py +34 -27
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/mig_manager.py +137 -77
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/migration_orchestrator.py +129 -79
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/mla_vram_estimator.py +157 -107
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/mla_vram_tests.py +267 -211
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/model_orchestrator.py +251 -207
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/oidc_provider.py +173 -145
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/optimization_config.py +41 -33
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/parallel_provisioner.py +50 -24
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/pipeline_schema.py +117 -86
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/preflight_validator.py +758 -308
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/price_discovery.py +247 -160
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/price_intelligence.py +174 -65
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/public_ip_billing_tracker.py +190 -127
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/quick_start.py +106 -109
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/quota_manager.py +11 -8
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/rate_limiter.py +11 -7
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/rust_telemetry.py +4 -3
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_router.py +146 -122
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/__init__.py +11 -11
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/base_signal.py +5 -3
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/complexity_signal.py +26 -18
- terradev_cli-5.2.0/terradev_cli/core/semantic_signals/domain_signal.py +277 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/keyword_signal.py +119 -28
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/language_signal.py +173 -31
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/modality_signal.py +37 -17
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/orchestrator.py +14 -7
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/safety_signal.py +43 -24
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/session_manager.py +32 -29
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/ssh_key_manager.py +11 -4
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/telemetry.py +13 -9
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/terradev_engine.py +13 -11
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/trace_viewer.py +8 -4
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/training_monitor.py +156 -73
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/training_orchestrator.py +201 -82
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/user_manager.py +192 -163
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/warm_pool_manager.py +273 -220
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/weight_streaming_benchmarks.py +249 -194
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/weight_streaming_manager.py +159 -125
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/cost_optimizer.py +306 -210
- terradev_cli-5.2.0/terradev_cli/credential_prompt.py +172 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/demo.py +8 -10
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/entry_point.py +4 -1
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/integrations/databricks_integration.py +178 -81
- terradev_cli-5.2.0/terradev_cli/integrations/datadog_integration.py +1148 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/integrations/helicone_integration.py +85 -34
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/integrations/prometheus_integration.py +83 -39
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/integrations/wandb_integration.py +27 -5
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/k8s/terraform_wrapper.py +147 -112
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/kubernetes/inferx_setup.py +215 -180
- terradev_cli-5.2.0/terradev_cli/mcp/server.py +13068 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/__init__.py +20 -20
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/agentic_serving.py +68 -34
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/drift_retrain_service.py +103 -55
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/dvc_service.py +142 -104
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/guardrails_service.py +96 -63
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/huggingface_service.py +135 -106
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/kserve_service.py +177 -113
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/kubernetes_enhanced.py +384 -279
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/kubernetes_service.py +150 -122
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/langchain_service.py +162 -146
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/langfuse_service.py +106 -45
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/langgraph_service.py +163 -140
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/lmcache_service.py +177 -190
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/mlflow_service.py +192 -103
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/model_router.py +136 -59
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/ollama_service.py +159 -137
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/phoenix_service.py +100 -53
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/qdrant_service.py +132 -44
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/ray_enhanced.py +214 -118
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/ray_service.py +125 -152
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/sglang_service.py +382 -234
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/vllm_service.py +470 -318
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/ml_services/wandb_enhanced.py +169 -167
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/optimization/__init__.py +16 -5
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/optimization/auto_optimizer.py +315 -224
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/optimization/cuco_optimizer.py +212 -145
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/alibaba_provider.py +224 -102
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/aws_provider.py +100 -57
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/azure_provider.py +81 -48
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/base_provider.py +2 -3
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/baseten_provider.py +63 -40
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/coreweave_provider.py +80 -42
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/crusoe_provider.py +0 -2
- terradev_cli-5.2.0/terradev_cli/providers/demo_mode.py +207 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/digitalocean_provider.py +114 -51
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/fluidstack_provider.py +31 -16
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/gcp_provider.py +234 -103
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/hetzner_provider.py +115 -65
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/huggingface_provider.py +60 -29
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/hyperstack_provider.py +106 -45
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/inferx_provider.py +76 -81
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/lambda_labs_provider.py +180 -99
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/latitude_provider.py +300 -208
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/oracle_provider.py +60 -35
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/ovhcloud_provider.py +84 -29
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/provider_factory.py +23 -21
- terradev_cli-5.2.0/terradev_cli/providers/real_pricing.py +330 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/runpod_provider.py +149 -94
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/siliconflow_provider.py +14 -7
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/tensordock_provider.py +97 -51
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/vastai_provider.py +69 -30
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/__init__.py +6 -6
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/price-optimizer/optimal-allocation.py +83 -51
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/test_summary.py +71 -61
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/utils/formatters.py +1 -1
- {terradev_cli-5.1.7 → terradev_cli-5.2.0/terradev_cli.egg-info}/PKG-INFO +6 -4
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli.egg-info/SOURCES.txt +9 -1
- terradev_cli-5.2.0/tests/CREDENTIAL_STRATEGY.md +261 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/Makefile +1 -1
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/ci_pipeline.py +265 -194
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/conftest.py +2 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_cli_ux_battle.py +341 -184
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_cli_ux_battle_fixed.py +445 -221
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_cli_ux_final.py +256 -156
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_final_integration.py +107 -100
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_integrated_optimization.py +206 -140
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_p10_production_failover.py +313 -235
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_sso_phase1.py +97 -75
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/root_tests/test_vllm_optimization.py +123 -63
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/simple_test.py +56 -54
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_ai_integrations.py +74 -74
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_checkpoint_manager.py +0 -2
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_cli_smoke.py +9 -2
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_dag_executor.py +9 -5
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_flashoptim.py +98 -106
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_integration.py +177 -167
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_job_state_manager.py +27 -10
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_k8s_regression.py +44 -36
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_latitude_provider.py +63 -64
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_major_providers.py +109 -66
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_mcp_handlers.py +63 -71
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_new_providers.py +66 -47
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_provider_conformance.py +51 -33
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_providers.py +79 -47
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_semantic_router.py +464 -162
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_sglang_optimization.py +187 -196
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_ssh_key_manager.py +4 -2
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_training_monitor.py +11 -6
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_training_orchestrator.py +24 -25
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/test_vllm_features.py +112 -114
- terradev_cli-5.1.7/.github/workflows/ci.yml +0 -191
- terradev_cli-5.1.7/terradev_cli/cli_hf_spaces.py +0 -145
- terradev_cli-5.1.7/terradev_cli/cli_karpenter.py +0 -133
- terradev_cli-5.1.7/terradev_cli/core/semantic_signals/domain_signal.py +0 -144
- terradev_cli-5.1.7/terradev_cli/credential_prompt.py +0 -164
- terradev_cli-5.1.7/terradev_cli/integrations/datadog_integration.py +0 -688
- terradev_cli-5.1.7/terradev_cli/mcp/server.py +0 -8953
- terradev_cli-5.1.7/terradev_cli/providers/demo_mode.py +0 -123
- terradev_cli-5.1.7/terradev_cli/providers/real_pricing.py +0 -293
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/.ebextensions/python.config +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/.env.example +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/.github/workflows/action.yml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/.github/workflows/release.yml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/.github/workflows/static.yml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0/Deployment Package}/BNF_GRAMMAR.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/LICENSE +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/MANIFEST.in +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/activations/973dfe463ec85785f5f95af5ba3906eedb2d931c24e69824a89ea65dba4e813b.json +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/analysis/api-differences-comparison.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/analysis/cost-structure-differences.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/analysis/inference-arbitrage-pivot.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/README.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/helm/values-glm5.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/k8s/hpa.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/k8s/model-cache-pvc.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/k8s/namespace.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/k8s/pdb.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/k8s/service.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/k8s/sglang-deployment.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/k8s/vllm-deployment.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/task.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/terraform/main.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/terraform/outputs.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/glm-5/terraform/variables.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/llmd-template/README.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/llmd-template/helm/values-llmd.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/llmd-template/k8s/gateway.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/llmd-template/k8s/leaderworkerset.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/llmd-template/k8s/llminferenceservice.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/llmd-template/task.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/README.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/helm/values-moe.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/k8s/deployment.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/k8s/hpa.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/k8s/model-cache-pvc.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/k8s/namespace.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/k8s/pdb.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/k8s/service.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/task.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/terraform/main.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/terraform/outputs.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/moe-template/terraform/variables.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/rag-template/README.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/rag-template/helm/values-rag.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/rag-template/k8s/deployment.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/clusters/rag-template/terraform/main.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/demo/RECORDING_GUIDE.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/demo/generate_gif.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/demo/terradev-demo.gif +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/ADVANCED_FINANCIAL_INNOVATIONS.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/API_DOCUMENTATION.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/BingSiteAuth.xml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/FINOPS_ATTRIBUTION_SYSTEM.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/USER_GUIDE.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/VLLM_AUTO_OPTIMIZATION_GUIDE.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/VLLM_OPTIMIZATION_GUIDE.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/architecture.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/index.html +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/robots.txt +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/sitemap.xml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/docs/test_spot_provision.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/aws_ssm_starter.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/config.example.json +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/demo_k8s_config.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/direct_aws_starter.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/ec2_user_data_starter.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/example-pipeline.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/kubernetes_training_deployment.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/simple_ssm_starter.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/ssh_server_starter.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/examples/start_aws_servers.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/helm/terradev/Chart.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/helm/terradev/templates/_helpers.tpl +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/helm/terradev/templates/deployment.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/helm/terradev/values.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/infrastructure/bucket-policy.json +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/infrastructure/grafana_training_dashboard.json +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/infrastructure/kubernetes/microservices.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/infrastructure/terraform/main.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/infrastructure/terraform/parallelism.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/cli-tool.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/cloud-management-widgets.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/cloud-provider-apis.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/critical-widgets.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/devops-cicd-widgets.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/devops-essential-tools.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/docker-integration.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/kubernetes-operator.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/integrations/mlflow-integration.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/datadog/README.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/datadog/dashboard.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/datadog/monitors.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/datadog/outputs.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/datadog/provider.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/datadog/variables.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/datadog/versions.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/modules/prometheus_training_config.yml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/INTEGRATION_GUIDE.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/PERFORMANCE_OPTIMIZATIONS.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/README.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-artifact-verification/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-artifact-verification/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-artifact-verification/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-artifact-verification/src/verifier.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-authentication/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-authentication/src/encoding.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-authentication/src/hmac.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-authentication/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-authentication/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cache-eviction/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cache-eviction/src/cache.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cache-eviction/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cache-eviction/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-command-executor/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-command-executor/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-config-validator/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-config-validator/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-config-validator/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-config-validator/src/validator.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-connection-pool/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-connection-pool/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-connection-pool/src/pool.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-connection-pool/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cost-calculator/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cost-calculator/src/calculator.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cost-calculator/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cost-calculator/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cost-scaler/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-cost-scaler/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-credential-vault/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-credential-vault/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-credential-vault/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-credential-vault/src/vault.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-dag-executor/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-dag-executor/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-distributed-lock/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-distributed-lock/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-distributed-lock/src/lock.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-distributed-lock/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-egress-optimizer/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-egress-optimizer/src/graph.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-egress-optimizer/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-egress-optimizer/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-event-bus/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-event-bus/src/bus.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-event-bus/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-event-bus/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-governance/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-governance/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-gpu-discovery/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-gpu-discovery/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-gpu-topology/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-gpu-topology/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-gpu-topology/src/topology.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-gpu-topology/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-helm-generator/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-helm-generator/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-mcp-codec/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-mcp-codec/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-mcp-optimizer/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-mcp-optimizer/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-price-intelligence/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-price-intelligence/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-quota-manager/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-quota-manager/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-quota-manager/src/manager.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-quota-manager/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-resource-pool/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-resource-pool/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-resource-pool/src/pool.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-resource-pool/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-result-compressor/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-result-compressor/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-semantic-router/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-semantic-router/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-snapshot-manager/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-snapshot-manager/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-snapshot-manager/src/snapshot.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-snapshot-manager/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-state-machine/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-state-machine/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-state-machine/src/state.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-state-machine/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-telemetry/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-telemetry/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-telemetry/src/pipeline.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-telemetry/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-tool-registry/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-tool-registry/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-vram-estimator/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-vram-estimator/src/estimator.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-vram-estimator/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-vram-estimator/src/types.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-warm-pool/Cargo.toml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/rust/terradev-warm-pool/src/lib.rs +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/action.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/check_logs_fix.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/debug_comparison.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/debug_mla.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/debug_streaming.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/deployment/deploy_correct_pricing.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/deployment/deploy_enhanced_server.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/deployment/deploy_exact_servers.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/deployment/deploy_simple_enhanced.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/deployment/deploy_telemetry_aws.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/deployment/deploy_to_aws.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/figure_calculation_breakdown.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/fix_server_ports.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/gpu-check.sh +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/scripts/server_manager.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/setup/Lambda Cloud API spec 1.8.3.json +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/setup/account-setup-guide.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/setup/docker-compose.yml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/setup/nginx.conf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/setup/render.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/setup/setup.sh +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/setup.cfg +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/CHANGELOG.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/COMPLETE_COMMAND_REFERENCE.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/COMPLETE_INTEGRATION_GUIDE.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/IMPLEMENTATION_SUMMARY.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/MAKING_SPOT_WORK_FOR_STATEFUL_WORKLOADS.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/SGLANG_COMMAND_GUIDE.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/TERRADEV_STACK_CHART.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/config.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/manifest_example.json +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/core/semantic_signals/routing_policy.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/integrations/Terradev LOGO BLACK.png +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/integrations/Terradev LOGO WHITEW.png +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/integrations/__init__.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/kubernetes/inferx-cost-optimized.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/kubernetes/inferx-infrastructure.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/kubernetes/inferx-models.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/kubernetes/inferx-platform.yaml +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/mcp/__init__.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/LATITUDE_PROVIDER.md +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/providers/__init__.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/requirements.txt +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/requirements_minimal.txt +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/main.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-aws/bootstrap.sh +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-aws/main.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-aws/outputs.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-aws/variables.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-aws/versions.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-hyperstack/bootstrap.sh +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-hyperstack/main.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-hyperstack/outputs.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-hyperstack/variables.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-hyperstack/versions.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-lambda/bootstrap.sh +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-lambda/main.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-lambda/outputs.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-lambda/variables.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-lambda/versions.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-vastai/bootstrap.sh +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-vastai/main.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-vastai/outputs.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-vastai/variables.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/gpu-node-vastai/versions.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/k8s-control-plane/join-script.tpl +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/k8s-control-plane/kubeconfig.tpl +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/k8s-control-plane/main.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/k8s-control-plane/outputs.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/k8s-control-plane/variables.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/k8s-control-plane/versions.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/networking/main.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/networking/outputs.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/networking/variables.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/modules/networking/versions.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/outputs.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/providers.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/terraform/variables.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli/utils/__init__.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli.egg-info/dependency_links.txt +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli.egg-info/entry_points.txt +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli.egg-info/requires.txt +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terradev_cli.egg-info/top_level.txt +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform.tfvars.example +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_optimization/backend.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_optimization/error_handling.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_optimization/parallel_provisioning.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_optimization/storage_choice_matrix.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_optimization/test_error_handler.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_optimization/versions.tf +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/audit_demo/trail_3caed73ad5bf.json +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/audit_trail.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/audit_trails.json +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/decision_engine.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/decision_logs.json +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/operations.json +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/terraform_manager.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/terraform_plans.json +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/transparency_demo.py +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/terraform_transparency/transparency_report.json +0 -0
- {terradev_cli-5.1.7 → terradev_cli-5.2.0}/tests/INTEGRATION_STRATEGY.md +0 -0
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
name: Terradev CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main, develop ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main, develop ]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
# === Rust Testing ===
|
|
12
|
+
rust-test:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
strategy:
|
|
15
|
+
matrix:
|
|
16
|
+
rust: [stable, beta]
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
|
|
20
|
+
- name: Set up Rust ${{ matrix.rust }}
|
|
21
|
+
uses: dtolnay/rust-toolchain@stable
|
|
22
|
+
with:
|
|
23
|
+
toolchain: ${{ matrix.rust }}
|
|
24
|
+
components: rustfmt, clippy
|
|
25
|
+
|
|
26
|
+
- name: Cache cargo registry
|
|
27
|
+
uses: actions/cache@v4
|
|
28
|
+
with:
|
|
29
|
+
path: ~/.cargo/registry
|
|
30
|
+
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
|
|
31
|
+
|
|
32
|
+
- name: Cache cargo index
|
|
33
|
+
uses: actions/cache@v4
|
|
34
|
+
with:
|
|
35
|
+
path: ~/.cargo/git
|
|
36
|
+
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
|
|
37
|
+
|
|
38
|
+
- name: Cache cargo build
|
|
39
|
+
uses: actions/cache@v4
|
|
40
|
+
with:
|
|
41
|
+
path: target
|
|
42
|
+
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
|
|
43
|
+
|
|
44
|
+
- name: Run cargo test
|
|
45
|
+
run: |
|
|
46
|
+
if [ -f "rust/Cargo.toml" ]; then
|
|
47
|
+
cd rust
|
|
48
|
+
cargo test --workspace --verbose
|
|
49
|
+
else
|
|
50
|
+
echo "No rust/ workspace found, skipping Rust tests"
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
- name: Run cargo clippy
|
|
54
|
+
run: |
|
|
55
|
+
if [ -f "rust/Cargo.toml" ]; then
|
|
56
|
+
cd rust
|
|
57
|
+
cargo clippy --workspace -- -D warnings
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
- name: Run cargo fmt
|
|
61
|
+
run: |
|
|
62
|
+
if [ -f "rust/Cargo.toml" ]; then
|
|
63
|
+
cd rust
|
|
64
|
+
cargo fmt --all -- --check
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
# === Code Quality (Linting) ===
|
|
68
|
+
lint:
|
|
69
|
+
runs-on: ubuntu-latest
|
|
70
|
+
steps:
|
|
71
|
+
- uses: actions/checkout@v4
|
|
72
|
+
|
|
73
|
+
- uses: actions/setup-python@v5
|
|
74
|
+
with:
|
|
75
|
+
python-version: '3.11'
|
|
76
|
+
|
|
77
|
+
- name: Install linting tools
|
|
78
|
+
run: |
|
|
79
|
+
pip install mypy ruff
|
|
80
|
+
|
|
81
|
+
# Flake8 disabled - 1000+ errors need cleanup
|
|
82
|
+
# - name: Flake8 check
|
|
83
|
+
# run: flake8 terradev_cli/ tests/ --max-line-length=120 --ignore=E203,W503
|
|
84
|
+
|
|
85
|
+
- name: MyPy check
|
|
86
|
+
run: mypy terradev_cli/ --ignore-missing-imports --no-strict-optional || true
|
|
87
|
+
|
|
88
|
+
- name: Ruff check
|
|
89
|
+
run: ruff check terradev_cli/ tests/ --ignore F401,F821,F841,E402,E501,F541,E712
|
|
90
|
+
|
|
91
|
+
# === Unit Tests (Linux) ===
|
|
92
|
+
test-linux:
|
|
93
|
+
runs-on: ubuntu-latest
|
|
94
|
+
strategy:
|
|
95
|
+
matrix:
|
|
96
|
+
python-version: ['3.9', '3.10', '3.11', '3.12']
|
|
97
|
+
env:
|
|
98
|
+
TERRADEV_SKIP_ONBOARDING: "1"
|
|
99
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
100
|
+
TERRADEV_GITHUB_TOKEN: ${{ secrets.TERRADEV_GITHUB_TOKEN }}
|
|
101
|
+
|
|
102
|
+
steps:
|
|
103
|
+
- uses: actions/checkout@v4
|
|
104
|
+
|
|
105
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
106
|
+
uses: actions/setup-python@v5
|
|
107
|
+
with:
|
|
108
|
+
python-version: ${{ matrix.python-version }}
|
|
109
|
+
|
|
110
|
+
- name: Clear pip cache
|
|
111
|
+
run: pip cache purge
|
|
112
|
+
|
|
113
|
+
- name: Install package + test deps
|
|
114
|
+
run: |
|
|
115
|
+
pip install -e ".[dev]" 2>/dev/null || pip install -e .
|
|
116
|
+
pip install pytest pytest-asyncio pytest-cov pytest-xdist
|
|
117
|
+
|
|
118
|
+
- name: CLI smoke test
|
|
119
|
+
run: |
|
|
120
|
+
terradev --version
|
|
121
|
+
terradev --help
|
|
122
|
+
|
|
123
|
+
- name: Check for legacy duplicate files
|
|
124
|
+
run: |
|
|
125
|
+
if find terradev_cli -type f \( -name "*_old.py" -o -name "*_backup.py" -o -name "*_fixed.py" -o -name "*_simple.py" -o -name "*_final.py" -o -name "*_clean.py" -o -name "*_tiered.py" \) | grep -q .; then
|
|
126
|
+
echo "ERROR: Legacy duplicate files found. These should be deleted and not committed."
|
|
127
|
+
find terradev_cli -type f \( -name "*_old.py" -o -name "*_backup.py" -o -name "*_fixed.py" -o -name "*_simple.py" -o -name "*_final.py" -o -name "*_clean.py" -o -name "*_tiered.py" \)
|
|
128
|
+
exit 1
|
|
129
|
+
fi
|
|
130
|
+
|
|
131
|
+
- name: Run unit tests with coverage
|
|
132
|
+
run: |
|
|
133
|
+
pytest tests/ -v --tb=short --cov=terradev_cli --cov-report=xml --cov-report=html --cov-fail-under=19 --ignore=tests/test_mcp_handlers.py -n auto
|
|
134
|
+
|
|
135
|
+
- name: Upload coverage to Codecov
|
|
136
|
+
uses: codecov/codecov-action@v4
|
|
137
|
+
with:
|
|
138
|
+
file: ./coverage.xml
|
|
139
|
+
flags: unittests-linux-${{ matrix.python-version }}
|
|
140
|
+
name: codecov-linux-${{ matrix.python-version }}
|
|
141
|
+
|
|
142
|
+
# === Unit Tests (Windows) ===
|
|
143
|
+
test-windows:
|
|
144
|
+
runs-on: windows-latest
|
|
145
|
+
strategy:
|
|
146
|
+
matrix:
|
|
147
|
+
python-version: ['3.10', '3.11', '3.12']
|
|
148
|
+
env:
|
|
149
|
+
TERRADEV_SKIP_ONBOARDING: "1"
|
|
150
|
+
|
|
151
|
+
steps:
|
|
152
|
+
- uses: actions/checkout@v4
|
|
153
|
+
|
|
154
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
155
|
+
uses: actions/setup-python@v5
|
|
156
|
+
with:
|
|
157
|
+
python-version: ${{ matrix.python-version }}
|
|
158
|
+
|
|
159
|
+
- name: Install package + test deps
|
|
160
|
+
shell: pwsh
|
|
161
|
+
run: |
|
|
162
|
+
pip install -e ".[dev]" 2>$null; if ($LASTEXITCODE -ne 0) { pip install -e . }
|
|
163
|
+
pip install pytest pytest-asyncio pytest-cov
|
|
164
|
+
|
|
165
|
+
- name: CLI smoke test
|
|
166
|
+
shell: pwsh
|
|
167
|
+
run: |
|
|
168
|
+
terradev --version
|
|
169
|
+
terradev --help
|
|
170
|
+
|
|
171
|
+
- name: Run unit tests (Windows)
|
|
172
|
+
shell: pwsh
|
|
173
|
+
run: pytest tests/ -v --tb=short --ignore=tests/test_mcp_handlers.py --ignore=tests/test_integration.py
|
|
174
|
+
|
|
175
|
+
# === Unit Tests (macOS) ===
|
|
176
|
+
test-macos:
|
|
177
|
+
runs-on: macos-latest
|
|
178
|
+
strategy:
|
|
179
|
+
matrix:
|
|
180
|
+
python-version: ['3.10', '3.11', '3.12']
|
|
181
|
+
env:
|
|
182
|
+
TERRADEV_SKIP_ONBOARDING: "1"
|
|
183
|
+
|
|
184
|
+
steps:
|
|
185
|
+
- uses: actions/checkout@v4
|
|
186
|
+
|
|
187
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
188
|
+
uses: actions/setup-python@v5
|
|
189
|
+
with:
|
|
190
|
+
python-version: ${{ matrix.python-version }}
|
|
191
|
+
|
|
192
|
+
- name: Install package + test deps
|
|
193
|
+
run: |
|
|
194
|
+
pip install -e ".[dev]" 2>/dev/null || pip install -e .
|
|
195
|
+
pip install pytest pytest-asyncio pytest-cov
|
|
196
|
+
|
|
197
|
+
- name: CLI smoke test
|
|
198
|
+
run: |
|
|
199
|
+
terradev --version
|
|
200
|
+
terradev --help
|
|
201
|
+
|
|
202
|
+
- name: Run unit tests (macOS)
|
|
203
|
+
run: pytest tests/ -v --tb=short --ignore=tests/test_mcp_handlers.py --ignore=tests/test_integration.py
|
|
204
|
+
|
|
205
|
+
# === Integration Tests (Mock) ===
|
|
206
|
+
integration-mock:
|
|
207
|
+
runs-on: ubuntu-latest
|
|
208
|
+
needs: [lint]
|
|
209
|
+
env:
|
|
210
|
+
MOCK: "true"
|
|
211
|
+
TERRADEV_SKIP_ONBOARDING: "1"
|
|
212
|
+
|
|
213
|
+
steps:
|
|
214
|
+
- uses: actions/checkout@v4
|
|
215
|
+
|
|
216
|
+
- uses: actions/setup-python@v5
|
|
217
|
+
with:
|
|
218
|
+
python-version: '3.11'
|
|
219
|
+
|
|
220
|
+
- name: Install package + test deps
|
|
221
|
+
run: |
|
|
222
|
+
pip install -e ".[dev]" 2>/dev/null || pip install -e .
|
|
223
|
+
pip install pytest pytest-asyncio
|
|
224
|
+
|
|
225
|
+
- name: Run integration tests (mock)
|
|
226
|
+
run: python tests/test_integration.py --mock --suite providers
|
|
227
|
+
|
|
228
|
+
# === Integration Tests (Real Credentials - Optional) ===
|
|
229
|
+
integration-live:
|
|
230
|
+
runs-on: ubuntu-latest
|
|
231
|
+
needs: [lint]
|
|
232
|
+
if: github.event_name == 'workflow_dispatch'
|
|
233
|
+
env:
|
|
234
|
+
TERRADEV_SKIP_ONBOARDING: "1"
|
|
235
|
+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_TEST_KEY }}
|
|
236
|
+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_TEST_SECRET }}
|
|
237
|
+
RUNPOD_API_KEY: ${{ secrets.RUNPOD_TEST_KEY }}
|
|
238
|
+
VAST_API_KEY: ${{ secrets.VAST_TEST_KEY }}
|
|
239
|
+
|
|
240
|
+
steps:
|
|
241
|
+
- uses: actions/checkout@v4
|
|
242
|
+
|
|
243
|
+
- uses: actions/setup-python@v5
|
|
244
|
+
with:
|
|
245
|
+
python-version: '3.11'
|
|
246
|
+
|
|
247
|
+
- name: Install package + test deps
|
|
248
|
+
run: |
|
|
249
|
+
pip install -e ".[dev]" 2>/dev/null || pip install -e .
|
|
250
|
+
pip install pytest pytest-asyncio
|
|
251
|
+
|
|
252
|
+
- name: Run integration tests (live)
|
|
253
|
+
run: python tests/test_integration.py --suite providers
|
|
254
|
+
continue-on-error: true
|
|
255
|
+
|
|
256
|
+
# === Build Package ===
|
|
257
|
+
build:
|
|
258
|
+
runs-on: ubuntu-latest
|
|
259
|
+
needs: [rust-test, test-linux, lint]
|
|
260
|
+
steps:
|
|
261
|
+
- uses: actions/checkout@v4
|
|
262
|
+
|
|
263
|
+
- uses: actions/setup-python@v5
|
|
264
|
+
with:
|
|
265
|
+
python-version: '3.11'
|
|
266
|
+
|
|
267
|
+
- name: Build wheel + sdist
|
|
268
|
+
run: |
|
|
269
|
+
pip install build
|
|
270
|
+
python -m build
|
|
271
|
+
|
|
272
|
+
- name: Verify built package installs
|
|
273
|
+
run: |
|
|
274
|
+
pip install dist/*.whl
|
|
275
|
+
terradev --version
|
|
276
|
+
|
|
277
|
+
- name: Upload artifacts
|
|
278
|
+
uses: actions/upload-artifact@v4
|
|
279
|
+
with:
|
|
280
|
+
name: dist
|
|
281
|
+
path: dist/
|
|
282
|
+
|
|
283
|
+
# === Security Scanning ===
|
|
284
|
+
security:
|
|
285
|
+
runs-on: ubuntu-latest
|
|
286
|
+
steps:
|
|
287
|
+
- uses: actions/checkout@v4
|
|
288
|
+
|
|
289
|
+
- uses: actions/setup-python@v5
|
|
290
|
+
with:
|
|
291
|
+
python-version: '3.11'
|
|
292
|
+
|
|
293
|
+
- name: Install package for scan
|
|
294
|
+
run: pip install -e ".[dev]" 2>/dev/null || pip install -e .
|
|
295
|
+
|
|
296
|
+
- name: Install + scan
|
|
297
|
+
run: |
|
|
298
|
+
pip install bandit safety
|
|
299
|
+
bandit -r terradev_cli/ -f json -o bandit-report.json -lll || true
|
|
300
|
+
bandit -r terradev_cli/ -lll --exit-zero
|
|
301
|
+
safety check --json --output safety-report.json || true
|
|
302
|
+
|
|
303
|
+
- uses: actions/upload-artifact@v4
|
|
304
|
+
with:
|
|
305
|
+
name: security-reports
|
|
306
|
+
path: |
|
|
307
|
+
bandit-report.json
|
|
308
|
+
safety-report.json
|
|
309
|
+
|
|
310
|
+
# === Docker Build Test ===
|
|
311
|
+
docker-build:
|
|
312
|
+
runs-on: ubuntu-latest
|
|
313
|
+
needs: [build]
|
|
314
|
+
steps:
|
|
315
|
+
- uses: actions/checkout@v4
|
|
316
|
+
|
|
317
|
+
- name: Set up Docker Buildx
|
|
318
|
+
uses: docker/setup-buildx-action@v3
|
|
319
|
+
|
|
320
|
+
- name: Build Docker image
|
|
321
|
+
run: |
|
|
322
|
+
if [ -f "Dockerfile" ]; then
|
|
323
|
+
docker build -t terradev-test .
|
|
324
|
+
elif [ -f "Dockerfile.test" ]; then
|
|
325
|
+
docker build -f Dockerfile.test -t terradev-test .
|
|
326
|
+
else
|
|
327
|
+
echo "No Dockerfile found, skipping Docker build"
|
|
328
|
+
fi
|
|
329
|
+
|
|
330
|
+
# === Documentation Build ===
|
|
331
|
+
docs-build:
|
|
332
|
+
runs-on: ubuntu-latest
|
|
333
|
+
steps:
|
|
334
|
+
- uses: actions/checkout@v4
|
|
335
|
+
|
|
336
|
+
- uses: actions/setup-python@v5
|
|
337
|
+
with:
|
|
338
|
+
python-version: '3.11'
|
|
339
|
+
|
|
340
|
+
- name: Install documentation tools
|
|
341
|
+
run: |
|
|
342
|
+
pip install mkdocs mkdocs-material pymdown-extensions
|
|
343
|
+
|
|
344
|
+
- name: Build documentation
|
|
345
|
+
run: |
|
|
346
|
+
if [ -f "mkdocs.yml" ]; then
|
|
347
|
+
mkdocs build
|
|
348
|
+
else
|
|
349
|
+
echo "No mkdocs.yml found, skipping docs build"
|
|
350
|
+
fi
|
|
351
|
+
|
|
352
|
+
# === Performance Benchmarking ===
|
|
353
|
+
benchmark:
|
|
354
|
+
runs-on: ubuntu-latest
|
|
355
|
+
needs: [test-linux]
|
|
356
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
357
|
+
steps:
|
|
358
|
+
- uses: actions/checkout@v4
|
|
359
|
+
|
|
360
|
+
- uses: actions/setup-python@v5
|
|
361
|
+
with:
|
|
362
|
+
python-version: '3.11'
|
|
363
|
+
|
|
364
|
+
- name: Install package + test deps
|
|
365
|
+
run: |
|
|
366
|
+
pip install -e ".[dev]" 2>/dev/null || pip install -e .
|
|
367
|
+
pip install pytest pytest-asyncio
|
|
368
|
+
|
|
369
|
+
- name: Run performance benchmarks
|
|
370
|
+
run: python tests/test_integration.py --performance --suite performance
|
|
371
|
+
continue-on-error: true
|
|
372
|
+
|
|
373
|
+
# === Publish to PyPI ===
|
|
374
|
+
publish:
|
|
375
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
376
|
+
needs: [test-linux, test-windows, test-macos, build, security]
|
|
377
|
+
runs-on: ubuntu-latest
|
|
378
|
+
permissions:
|
|
379
|
+
id-token: write
|
|
380
|
+
steps:
|
|
381
|
+
- uses: actions/checkout@v4
|
|
382
|
+
|
|
383
|
+
- uses: actions/setup-python@v5
|
|
384
|
+
with:
|
|
385
|
+
python-version: '3.11'
|
|
386
|
+
|
|
387
|
+
- name: Build
|
|
388
|
+
run: |
|
|
389
|
+
pip install build
|
|
390
|
+
python -m build
|
|
391
|
+
|
|
392
|
+
- name: Publish to PyPI
|
|
393
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
394
|
+
with:
|
|
395
|
+
password: ${{ secrets.PYPI_API_TOKEN }}
|