ellf-cli 21.0.0__tar.gz → 21.0.1__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.
- {ellf_cli-21.0.0/ellf_cli.egg-info → ellf_cli-21.0.1}/PKG-INFO +1 -1
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/infra/_helpers.py +36 -14
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/infra/deploy.py +70 -3
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf.json +1 -1
- ellf_cli-21.0.1/ellf_cli/version/21.0.0_2026-10-16-10-44-29_patch_1058e453-613f-492b-a3c7-f3ca2abe8c2d +3 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1/ellf_cli.egg-info}/PKG-INFO +1 -1
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli.egg-info/SOURCES.txt +2 -0
- ellf_cli-21.0.1/tests/test_infra_deploy_preflight.py +75 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/LICENSE +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/MANIFEST.in +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/README.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/__init__.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/__main__.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/about.json +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/about.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/agents.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/appdirs.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/auth.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/cli.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/cloud/__init__.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/cloud/gcp.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/cluster_config.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/__init__.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/_cluster_select.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/_org_select.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/_project_scope.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/_recipe_file.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/_recipe_subcommand.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/_state.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/_usage.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/actions.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/agents.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/assets.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/auth.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/clusters.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/config.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/datasets.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/files/__init__.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/files/cp.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/files/ls.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/files/rm.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/files/rsync.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/files/stats.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/general.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/import_export.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/infra/__init__.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/infra/_config_io.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/infra/configure.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/infra/hibernate.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/infra/init.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/infra/init_values.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/infra/pause.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/infra/provision.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/infra/register.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/infra/setup.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/infra/start.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/infra/terraform.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/infra/tls.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/jobs.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/mcp.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/packages.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/paths.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/plans.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/projects.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/publish_code.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/publish_data.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/recipes.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/secrets.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/services.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/sessions.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/support.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/tasks.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/todos.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/commands/users.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/config.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/.gitignore +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/render.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-annotate/SKILL.assistant.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-annotate/SKILL.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-annotate/references/annotation_audit.assistant.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-annotate/references/annotation_audit.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-annotate/references/builtin_ellf_annotation_recipes.assistant.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-annotate/references/builtin_ellf_annotation_recipes.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-annotate/references/builtin_prodigy_recipes.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-annotate/references/label_schemes.assistant.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-annotate/references/label_schemes.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-ask/SKILL.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-handoff/SKILL.assistant.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-monitor/SKILL.assistant.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-monitor/SKILL.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-monitor/references/annotation_metrics.assistant.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-monitor/references/annotation_metrics.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-monitor/references/training_monitoring.assistant.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-monitor/references/training_monitoring.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-monitor/scripts.coding/check_training.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-ops/SKILL.assistant.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-ops/SKILL.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-ops/references.coding/data_infra_cli.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-ops/scripts.coding/run_job.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-patterns/references/pattern_strategies.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/SKILL.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_action_recipe.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_agent_recipe.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_blocks_ui.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_correct.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_custom_ui.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_manual.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_pages_ui.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_routing.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_service_recipe.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_task_recipe.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_teach.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/builtin_recipes.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/ellf_recipe_sdk.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/lint_recipe.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/prodigy_recipe_api.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/template_index.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-project/SKILL.assistant.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-project/SKILL.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-project/references/annotation_agents.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-project/references/consulting_patterns.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-project/references/explosion_strategy.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-project/references/label_schemes.assistant.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-project/references/label_schemes.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-support/SKILL.assistant.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-support/SKILL.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-todo/SKILL.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-train/SKILL.assistant.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-train/SKILL.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-train/references/config_advanced.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-train/references/config_architectures.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-train/references/config_training.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-train/references/diagnostics.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-train/references/evaluation_guide.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-train/references/experiment_patterns.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-train/references/model_selection.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-train/references/training_paradigms.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-train/references/training_troubleshooting.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-train/references/workflow.assistant.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-train/references/workflow.coding.md +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-train/scripts.coding/ellf_logger.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/errors.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/helm.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/interactivity.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/key_pair.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/main.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/mcp_proxy.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/messages.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/pypi_auth.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/query.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/recipes_cookiecutter/cookiecutter.json +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/.gitignore +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/README.md.tmpl +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements-dev.in +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements.in +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/setup.py.tmpl +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/__init__.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/about.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/__init__.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/example_task.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/testing/__init__.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ty.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ui.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/url.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/util.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.114_2026-08-19-08-36-57__1a4e37c1-471e-4a81-b4d5-1ffe7dec3a61 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.114_2026-08-19-09-25-21_patch_33ff1e26-0e5e-46d8-8052-ab1d032e8b6c +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.115_2026-08-19-09-27-13_patch_4ac728c3-0342-4a36-adbc-e28d2d99b1ba +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.116_2026-08-19-09-30-47_patch_c706fef6-6813-4183-b268-12e7b00d7d0b +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.117_2026-08-19-09-39-14_patch_c6b0495f-2f88-4aa8-9ebf-0a235b4c407e +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.118_2026-08-19-09-52-00_patch_b395655a-8d78-4344-9266-6901c20f6517 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.119_2026-08-19-10-22-38_patch_8f95c49d-aedc-41b8-816d-ccb95f048831 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.120_2026-08-19-10-26-58_patch_7fbf35e6-cc01-4b75-8c9a-f5d054bcaf93 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.121_2026-08-19-10-42-02_patch_31a81b02-a886-4dea-84e0-67cc6ca412d5 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.122_2026-08-19-11-16-49_patch_1c4d7307-48d4-493e-936d-80af799d644b +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.123_2026-08-19-11-47-32_patch_d3d78d04-9989-45b1-91b1-93b571d8814a +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.124_2026-08-20-08-03-17_patch_57f4c389-2d19-41ce-aca4-13b61c62f387 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.125_2026-08-20-08-25-05_patch_7f368148-0d1c-4525-bbdf-c6d257ad861a +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.126_2026-08-20-14-51-36_patch_a99abcc8-3371-4c63-a759-bb7ea5b32432 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.127_2026-08-21-05-48-58_patch_34b4ccee-7596-4f57-93e9-774973cca58e +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.128_2026-08-21-10-47-20_patch_693112b9-927c-4a8f-8553-b06eef86079d +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.129_2026-08-21-11-16-54_patch_7a981666-01d9-4d1b-9ba3-2129744e3bd5 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.130_2026-08-21-13-09-36_patch_b7ad1a76-ce70-4d70-9d1a-7c414eba5bb4 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.131_2026-08-21-14-31-10_patch_9128ef66-193e-4caf-8710-afd86128e638 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.132_2026-08-24-08-59-34_patch_c600fc14-86a5-460f-9c4e-f0177056f756 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.133_2026-08-24-10-28-29_patch_b6ce3e32-9d7b-48ac-981a-270c22c180dd +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.134_2026-08-24-11-00-51_patch_a4fc0484-4a64-46a2-94f8-aa805254c7b0 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.135_2026-08-24-12-12-41_patch_a870a56f-9a65-49eb-92da-f572b26667d8 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.136_2026-08-24-12-42-46_patch_9b399356-6482-4291-8da7-e748a99c4b53 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.137_2026-08-24-12-53-57_patch_f7979348-1910-40cd-a535-90299eca84ee +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.138_2026-08-24-14-36-30_patch_ed0f8750-f663-498b-85e7-0d3f2213fcfe +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.139_2026-08-25-08-37-26_patch_3ba87e19-902b-4f76-b64c-90e5c0ca1fc6 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.140_2026-08-25-09-52-45_patch_abc830f2-df15-4385-b797-cdaf72c10752 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.141_2026-08-25-11-37-20_patch_1d9ec01e-06f6-4c8e-b095-af17d5b62b00 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.142_2026-08-26-07-38-49_patch_3dd23e36-e7df-494c-986f-a412861a8d40 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.143_2026-08-26-09-32-32_patch_7b7ebd34-de27-4b73-98a7-3e1501e16cd5 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.144_2026-08-26-10-56-43_patch_166064f2-2208-4c9b-9e25-25dc4cd32084 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.145_2026-08-26-11-37-29_patch_b997f3ee-d7d3-4408-9f2f-c8b6d08bdb3b +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.146_2026-08-26-12-15-20_patch_afbbb893-25db-468c-81db-2663ca373068 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.147_2026-08-26-14-10-50_patch_fd753b1f-2fa1-4ddb-a9e7-de690da85254 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.148_2026-08-27-09-08-35_patch_23814c0b-7f77-489c-b4a8-ceadd18146e3 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.149_2026-08-27-09-40-17_patch_8879d72e-a3d8-4abc-a16a-d9dcf75f0fa1 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.150_2026-08-27-10-57-25_patch_afbe60ed-3e23-4d88-be3c-f800d7002a7d +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.151_2026-08-28-09-02-46_patch_1d4ca23b-aeae-4ea8-96b1-8cf57371f29d +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.152_2026-08-28-15-37-24_patch_c9d0bdc1-a7e1-432b-92b9-92dc76fe0c78 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.153_2026-08-29-09-03-27_patch_7531573a-1b33-4092-aa9c-0e65f47b201f +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.154_2026-08-29-11-56-35_patch_919f5787-39c8-4dc1-ae6a-f27c28380f21 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.155_2026-08-29-15-15-59_patch_822f9ed8-c366-4e5f-9791-dee8467cf3ce +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.156_2026-08-29-16-19-01_patch_3ac2bf36-20f7-4c9f-9fdb-295d4466d59e +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.157_2026-08-30-17-32-17_patch_4302354c-c9c5-4be7-acd3-542872a748d8 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.158_2026-08-31-09-28-33_patch_3523774f-c25d-4102-8c1a-92fff046a48d +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.159_2026-08-31-10-31-01_patch_fe3e6290-2553-4154-a0a0-8b8a418280ed +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.160_2026-08-31-11-23-39_patch_e701a085-3d23-4212-b0af-73b1d419a4c1 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.161_2026-08-31-12-41-01_patch_074d7bde-c493-44db-bc15-e81fd91e2921 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.162_2026-08-31-13-58-06_patch_84db1d60-4280-433b-bd3a-22e5611cd315 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.163_2026-08-31-15-25-54_patch_1931c5ba-73df-48cb-8dcb-555ace0af267 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.163_2026-08-31-15-44-37_patch_3962e805-2a92-494a-a87b-b6e6d66c40a0 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.165_2026-08-31-19-48-59_patch_86e5b923-2b99-4b86-b542-469b197614be +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.166_2026-09-01-07-39-57_patch_c344892f-d542-4e7b-8f27-02365a411e15 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.167_2026-09-01-08-21-53_patch_e199d419-282a-4dbb-8756-cf98b7037e2b +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.168_2026-09-01-09-12-31_patch_235c9fe0-da15-431d-bb56-01e2b9b15f4b +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.169_2026-09-01-11-54-19_patch_98b617ab-d130-42b5-93f2-19cae56d4c4c +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.170_2026-09-02-09-27-28_patch_e448d2e6-b7ec-4235-96bf-0173b3623c87 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.171_2026-09-02-12-52-44_patch_e6a241c2-1d62-482c-a9eb-9e3373395c50 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.172_2026-09-04-08-47-04_patch_daae079f-c104-4fcd-bb57-7bff68e80ad9 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.173_2026-09-04-12-34-42_patch_399c4cbd-0c28-4dfd-a4ec-e569420a36e4 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.174_2026-09-04-13-08-48_patch_f5cfe3d5-808e-45e4-bafc-00d0554838ee +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.175_2026-09-04-17-20-46_patch_1ef542fa-5d8e-4d90-aa15-9fc4cea3dfec +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.176_2026-09-05-08-25-05_patch_ced5521f-f9da-4640-a921-95fcb5cd2e6d +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.177_2026-09-05-09-00-16_patch_803c1ad4-a9af-4953-92c5-d882dec03ea2 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.178_2026-09-05-09-30-34_patch_012f6259-2e3f-4591-9806-1920fd06cb1f +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.179_2026-09-05-09-33-43_patch_f4bdf28c-d584-47a5-b699-8c883330162c +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.180_2026-09-05-12-02-21_patch_34a14b01-d22d-44a8-ac63-be0370a61422 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.181_2026-09-05-12-47-46_patch_56b18867-99f6-4d5c-8215-7b9d60d34010 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.182_2026-09-05-13-35-18_patch_61b7d4d1-73c8-4603-9b0c-593e7405587f +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.183_2026-09-06-07-27-09_patch_d76331b2-e3a3-4c0b-8412-ecd131b6ac02 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.184_2026-09-06-10-21-47_patch_7680b7a1-49f0-4eef-b12e-4c854407448c +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.185_2026-09-06-10-30-40_patch_e56c2183-77f8-44ef-a92e-7377ea6ce8c1 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.186_2026-09-07-10-00-51_patch_67de5683-d208-4bc0-8fb6-7677377908e7 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.187_2026-09-07-10-18-13_patch_2086cee2-276b-48f7-80ce-6a17397b9541 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.188_2026-09-07-12-51-28_patch_d6590822-068f-4a19-814d-34bbf204ba6e +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.189_2026-09-07-12-55-23_patch_7e0fb04b-4d40-4490-974f-c74ba2ae55a1 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.190_2026-09-08-08-58-03_patch_15e3ac1e-4475-4272-bdd8-d00bb0db8f17 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.191_2026-09-08-09-55-58_patch_3d350e50-ee53-4282-bc75-d2251142c46e +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.192_2026-09-08-11-12-21_patch_0733223b-1ae2-4b5b-897f-dfc57574ff83 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.193_2026-09-08-21-48-17_patch_8d07d4e6-3555-4720-85c9-9452570fae2d +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.194_2026-09-09-07-53-43_patch_69559429-aa42-4b62-9bd7-cdfded1c00d0 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.195_2026-09-09-09-55-40_patch_bbf67f1d-3b9a-43a2-b1bc-22df3fed8a34 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.196_2026-09-09-09-59-47_patch_70d76812-7b3c-4192-ad49-fcaccc29b0da +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.197_2026-09-09-13-06-06_patch_d455be0b-5421-492a-b952-fab0fd8110f8 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.198_2026-09-09-13-14-34_patch_267f54e5-311e-435e-882f-8e19191325ea +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.199_2026-09-09-22-24-18_patch_81e3e453-ca0e-42fa-9c21-8f94d43c05f2 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.200_2026-09-10-07-19-50_patch_911714fa-1fa3-4165-bfe6-d10c650bf5bf +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.201_2026-09-10-10-14-19_patch_864015f2-b0b0-4563-a1c8-155629cb9126 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.202_2026-09-10-11-00-05_patch_18270ecf-e770-4e69-8bcf-e5143c39929b +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.203_2026-09-10-11-10-41_patch_ff273ab1-44f3-4bc0-b184-3396e943df04 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.204_2026-09-10-13-02-02_patch_d4ee41e2-d13c-4941-8605-3f1a42b56b22 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.205_2026-09-10-13-57-50_patch_284df67e-5957-4b0c-bc64-5581db6ddecc +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.206_2026-09-11-10-18-50_patch_1ac7e410-0e62-4eef-bbe4-ebf93c9d0869 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/17.0.207_2026-09-11-15-26-02_major_3f1b3ed7-eaac-41f5-b740-0af3331595d9 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.0_2026-09-12-10-01-10_patch_8995783a-a9fa-4c4e-90b3-6386a4c481eb +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.10_2026-09-14-16-09-38_patch_9403d562-eed0-4125-a8b3-09cd92a13298 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.11_2026-09-15-09-05-57_patch_8b22dba2-d931-4c4d-ae60-db3238d5e73d +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.12_2026-09-15-11-18-52_patch_81314afa-e70d-4ad8-b45b-3f8d62b983e7 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.13_2026-09-16-08-00-55_patch_bfa30fc0-3281-4de6-bb56-d7290c98d1c3 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.14_2026-09-16-14-38-26_patch_aae6e9b0-88f4-4bcf-b611-3308c7fcd6eb +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.15_2026-09-17-07-58-54_patch_43d40582-effd-4925-a8bd-e70fecf1faab +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.16_2026-09-17-08-12-37_patch_b4db2d23-88f1-45c1-82d9-78d38014fcb6 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.17_2026-09-18-09-38-19_patch_25697fc3-e9a8-4980-962b-e6cb0a4760c5 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.18_2026-09-18-09-54-33_patch_d37d9c71-c469-4d94-90d7-4898915ee991 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.19_2026-09-18-10-47-33_patch_47607b3c-d1b6-4864-b9b0-00a2a8d2ac32 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.1_2026-09-12-17-33-30_patch_f6ea2c99-a715-4c4d-876a-23ed8c62a83d +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.20_2026-09-18-11-07-21_patch_5a336f91-63a6-4877-97ed-da89395cc8f5 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.21_2026-09-18-13-34-52_patch_c56462e1-63d9-498f-a912-c80c5f0171d1 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.22_2026-09-20-08-10-45_patch_6afa2c20-bcef-4b7d-8685-2c9815d8683f +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.23_2026-09-20-08-38-35_patch_a7f169e5-37ab-4ec0-bf89-d14770181303 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.24_2026-09-20-15-49-27_patch_c1222081-ff44-4f20-aea2-5840b6d76efd +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.25_2026-09-21-06-11-40_patch_6df46dd9-e7d3-4e71-bec4-e5c93b4ac863 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.26_2026-09-21-07-54-11_patch_cc52dd36-5eba-4094-a1b0-d6f79f103441 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.27_2026-09-21-08-36-49_patch_a25fa125-9bcd-4317-8da5-851c1c329631 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.28_2026-09-21-09-44-01_patch_4430a721-0b3c-4f6a-b9bc-a53e667161bb +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.29_2026-09-21-10-58-07_patch_83b2b942-60a4-4bef-afd1-99690ba52b69 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.2_2026-09-13-06-36-33_patch_176bb944-1c49-4dd3-a001-8fce908825a0 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.30_2026-09-21-12-51-16_patch_519b9a65-d400-4234-b113-36b46e315507 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.31_2026-09-22-06-53-35_patch_5c45a235-81b6-4d05-801a-07dc7db61400 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.32_2026-09-22-07-42-04_patch_f12c6415-8166-4063-9e5d-26601b929d63 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.33_2026-09-22-08-12-32_patch_cec31bb0-a6cb-43e6-8407-25aba322b54c +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.34_2026-09-23-07-09-16_patch_659fccbb-c0a0-4f6f-bc87-e6abaa8815a7 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.35_2026-09-23-09-38-52_patch_023f904d-807a-4833-8a40-570365e8ec06 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.36_2026-09-23-10-05-33_patch_846fb491-2b1b-47ed-ac1f-ba40e744e199 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.37_2026-09-23-13-08-30_patch_8e4b1d24-156e-4ffe-8e4a-b8740ec18588 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.38_2026-09-24-06-41-37_patch_67adb1d6-3f49-4357-a67f-b1d48f23a972 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.39_2026-09-24-15-24-32_patch_e5dd375d-5643-4514-9b65-8d877c4a2bb2 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.3_2026-09-13-12-32-46_patch_58e5ce3a-f2a7-4789-b2cd-5cc75c72b6ec +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.40_2026-09-24-19-58-14_patch_ff18824b-be51-4a3d-a621-e96279e53c3e +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.41_2026-09-26-09-24-52_patch_b9979267-30f9-440a-a4ce-c611991d4886 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.42_2026-09-28-12-39-34_patch_dda535d9-8922-4eb9-ab51-6ecff0650c10 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.43_2026-09-28-13-35-27_minor_aca1168a-1286-4326-9d0c-2f2587c9fe92 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.4_2026-09-13-12-45-14_patch_b6c79d55-8f85-4f47-a304-df52b122c38c +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.5_2026-09-13-14-11-18_patch_9b111116-5e62-472a-b72c-d1bbafa22c97 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.5_2026-09-13-17-01-11_patch_d4bf61c0-83ac-4dd3-b512-a65805d298c8 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.6_2026-09-14-11-31-04_patch_fd2ebda6-22cb-4e7d-9452-2f6f2640e828 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.7_2026-09-13-17-06-08_patch_428af161-0b27-43c2-8751-e5f7874df120 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.0.9_2026-09-14-12-37-42_patch_b2ca0529-4b67-4fa4-8fdc-5f5e9f5d5166 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.1.0_2026-09-28-14-27-54_patch_324444f7-d24e-4189-b21f-1188894a3109 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/18.1.1_2026-09-28-21-03-07_major_e266a14a-7d96-4ece-92a3-8f34e64438a5 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.0_2026-09-29-11-05-31_patch_77d6f9f8-ead3-4d79-a4b2-b084b2dffc98 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.10_2026-10-02-12-56-52_patch_14e97576-73ca-44b8-82c9-7dad6f1789ab +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.11_2026-10-04-10-31-19_patch_088eb371-1799-4949-a119-286cf1cd55d1 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.12_2026-10-06-18-00-25_patch_36554bed-49c5-41cb-9fd4-48cc6af74c09 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.13_2026-10-07-12-24-08_patch_a540a364-3a0d-4960-b278-06ba2c7cc258 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.14_2026-10-07-12-52-39_patch_e3a6fc5c-2ee4-414c-a2dd-4910a655a7dd +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.15_2026-10-09-04-15-56_patch_bd7a9b06-867b-4fea-9678-973a05e3022d +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.16_2026-10-09-16-11-56_patch_a1135435-7dea-4f00-8c98-203ba3974382 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.17_2026-10-09-17-44-55_patch_faeacad8-541a-40f2-ab9c-abcd66fcd00e +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.18_2026-10-10-07-29-38_major_02601a1e-9bdb-45bf-ad67-a07b7dcd0002 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.1_2026-09-29-11-59-38_patch_bbf4753c-d641-4c2f-ac7c-02be6bd8e7c2 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.2_2026-09-29-12-44-07_patch_19fdaa94-60dc-464b-93b8-c17607ebc7b6 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.3_2026-09-29-14-16-00_patch_3cb60272-95cf-4311-8897-721e1b5c2c88 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.4_2026-09-29-16-24-53_patch_9fe8ad2b-e3ec-4558-a5fc-9c44c5c266dc +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.5_2026-09-29-17-13-16_patch_e48d2dd2-f41a-402e-a441-756b23c01dcb +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.6_2026-09-29-17-22-11_patch_3b1c79e9-9002-4e96-ba78-10668c33be6a +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.7_2026-09-30-07-50-58_patch_e8b1f046-d819-499c-9cd5-3e1a20fc9acf +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.8_2026-10-01-13-41-44_patch_7d63af18-e0af-4127-ab58-aede2407490f +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/19.0.9_2026-10-01-15-57-35_patch_143863cb-8f63-4ef7-bd78-c1114fc93a2d +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/20.0.0_2026-10-10-09-36-17_patch_d2618f39-cdc9-4d3a-ba40-1a0ad6265f3b +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/20.0.1_2026-10-11-10-24-33_patch_e29a8713-eecb-4eb1-9641-789d3cfab21a +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/20.0.2_2026-10-12-07-22-24_patch_f4053ad1-8fcd-4591-a68d-bf1e23485ba7 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/20.0.3_2026-10-14-14-29-16_patch_070af1c4-f9d9-4f97-8112-058de90d3ea8 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/20.0.4_2026-10-14-16-20-24_patch_c6672844-8227-4e0a-9fb5-36af7e7141dc +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/20.0.5_2026-10-15-08-53-28_patch_10154146-8afd-4632-b250-9b4b9f5bf67c +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/20.0.6_2026-10-15-14-17-40_patch_df3a5d3c-f0e0-46cb-aeaf-15b51c8a0f13 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/20.0.7_2026-10-16-07-09-40_major_3e5dfba3-2810-47b4-85a9-938bfff72a04 +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/__init__.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/version/read_version.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli.egg-info/dependency_links.txt +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli.egg-info/entry_points.txt +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli.egg-info/not-zip-safe +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli.egg-info/requires.txt +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli.egg-info/top_level.txt +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/pyproject.toml +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/setup.cfg +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/setup.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_agents.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_agents_info_stats.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_appdirs.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_auth.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_clusters_info_stats.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_config.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_datasets_export.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_errors.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_files_cp.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_files_cp_helpers.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_helm.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_import_export.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_info.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_infra_config_io.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_infra_configure.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_infra_deploy_node_labels.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_infra_destroy.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_infra_get_terraform.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_infra_hibernate.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_infra_init.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_infra_pause.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_infra_provision.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_infra_start_fixes.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_infra_start_validation.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_infra_state_bucket.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_infra_terraform_init.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_invalid_secrets.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_job_list_project_filter.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_jobs_info_hides_creator.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_jobs_list_unmatched.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_key_pair.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_login.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_logout.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_main.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_mcp_proxy.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_org_select.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_plans.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_projects.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_projects_delete_confirm.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_publish_build_poll.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_publish_data.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_publish_import_root.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_publish_requirements.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_publish_versions.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_pypi_auth.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_query.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_recipe_file.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_recipe_required_args.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_recipes.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_sessions.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_state.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_support.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_todos.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_ty.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_ui.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_ui_extras.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_usage_counts.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_users_assign.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_users_info_stats.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_users_list.py +0 -0
- {ellf_cli-21.0.0 → ellf_cli-21.0.1}/tests/test_util.py +0 -0
|
@@ -214,7 +214,41 @@ def k3s_traefik_exists() -> bool:
|
|
|
214
214
|
return result.returncode == 0
|
|
215
215
|
|
|
216
216
|
|
|
217
|
-
def
|
|
217
|
+
def traefik_values(
|
|
218
|
+
public_ip: str = "", port: int | None = None, tls: bool = False
|
|
219
|
+
) -> dict:
|
|
220
|
+
"""Helm values for the Traefik install. *port* adds an entrypoint for a
|
|
221
|
+
cluster reached on a port other than 80/443 (e.g. localhost:8443 on
|
|
222
|
+
Colima, which forwards each port the VM listens on to the same port on
|
|
223
|
+
the Mac)."""
|
|
224
|
+
ports: dict = {"web": {"port": 80}, "websecure": {"port": 443}}
|
|
225
|
+
if port is not None and port not in (80, 443):
|
|
226
|
+
ports["ellf"] = {
|
|
227
|
+
"port": port,
|
|
228
|
+
"exposedPort": port,
|
|
229
|
+
"expose": {"default": True},
|
|
230
|
+
"protocol": "TCP",
|
|
231
|
+
"tls": {"enabled": tls},
|
|
232
|
+
}
|
|
233
|
+
values: dict = {
|
|
234
|
+
"providers": {
|
|
235
|
+
"kubernetesIngress": {"enabled": True},
|
|
236
|
+
},
|
|
237
|
+
"ingressRoute": {"dashboard": {"enabled": False}},
|
|
238
|
+
"ports": ports,
|
|
239
|
+
"securityContext": {
|
|
240
|
+
"capabilities": {"drop": [], "add": ["NET_BIND_SERVICE"]},
|
|
241
|
+
},
|
|
242
|
+
"tolerations": SYSTEM_NODE_TOLERATIONS,
|
|
243
|
+
}
|
|
244
|
+
if public_ip:
|
|
245
|
+
values["service"] = {"spec": {"loadBalancerIP": public_ip}}
|
|
246
|
+
return values
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
def ensure_traefik(
|
|
250
|
+
public_ip: str = "", port: int | None = None, tls: bool = False
|
|
251
|
+
) -> None:
|
|
218
252
|
"""Install or upgrade Traefik via Helm."""
|
|
219
253
|
if k3s_traefik_exists():
|
|
220
254
|
msg.info(
|
|
@@ -233,19 +267,7 @@ def ensure_traefik(public_ip: str = "") -> None:
|
|
|
233
267
|
capture_output=True,
|
|
234
268
|
text=True,
|
|
235
269
|
)
|
|
236
|
-
values
|
|
237
|
-
"providers": {
|
|
238
|
-
"kubernetesIngress": {"enabled": True},
|
|
239
|
-
},
|
|
240
|
-
"ingressRoute": {"dashboard": {"enabled": False}},
|
|
241
|
-
"ports": {"web": {"port": 80}, "websecure": {"port": 443}},
|
|
242
|
-
"securityContext": {
|
|
243
|
-
"capabilities": {"drop": [], "add": ["NET_BIND_SERVICE"]},
|
|
244
|
-
},
|
|
245
|
-
"tolerations": SYSTEM_NODE_TOLERATIONS,
|
|
246
|
-
}
|
|
247
|
-
if public_ip:
|
|
248
|
-
values["service"] = {"spec": {"loadBalancerIP": public_ip}}
|
|
270
|
+
values = traefik_values(public_ip, port, tls)
|
|
249
271
|
with tempfile.NamedTemporaryFile(mode="w", suffix=".json", delete=False) as tmp:
|
|
250
272
|
tmp.write(json.dumps(values))
|
|
251
273
|
tmp_path = tmp.name
|
|
@@ -24,11 +24,14 @@ from ...helm import (
|
|
|
24
24
|
user_registry_of,
|
|
25
25
|
)
|
|
26
26
|
from ...key_pair import generate_key_pair
|
|
27
|
+
from ...url import URL
|
|
27
28
|
from .._state import get_auth_state
|
|
28
|
-
from .
|
|
29
|
+
from ._config_io import FILL_IN
|
|
30
|
+
from ._helpers import create_image_pull_secret, ensure_traefik, helm_registry_login
|
|
29
31
|
|
|
30
32
|
DEFAULT_NAMESPACE = "ellf"
|
|
31
33
|
DEFAULT_RELEASE = "ellf"
|
|
34
|
+
DEFAULT_INGRESS_CLASS = "traefik"
|
|
32
35
|
|
|
33
36
|
|
|
34
37
|
@cli.subcommand(
|
|
@@ -62,6 +65,18 @@ def deploy(
|
|
|
62
65
|
# key, wrong type, missing required field) fails right here, before any of
|
|
63
66
|
# the side effects below touch the cluster or PAM.
|
|
64
67
|
overrides = HelmChartOverrides(**values_dict)
|
|
68
|
+
placeholders = _placeholder_keys(values_dict)
|
|
69
|
+
if placeholders:
|
|
70
|
+
msg.fail(
|
|
71
|
+
f"{values_file} still has FILL-IN placeholders: {', '.join(placeholders)}"
|
|
72
|
+
)
|
|
73
|
+
if "registries.user" in placeholders:
|
|
74
|
+
msg.text(
|
|
75
|
+
"registries.user is a registry this cluster can push custom "
|
|
76
|
+
"recipe images to. On a single-node cluster, delete it and set "
|
|
77
|
+
"localRegistry.enabled: true to use the chart's own registry."
|
|
78
|
+
)
|
|
79
|
+
raise SystemExit(1)
|
|
65
80
|
# Image versions are dynamic state owned by PAM's cluster settings.
|
|
66
81
|
# They are injected into the helm invocation here and deliberately
|
|
67
82
|
# never written back to values.yaml.
|
|
@@ -166,7 +181,10 @@ def deploy(
|
|
|
166
181
|
)
|
|
167
182
|
)
|
|
168
183
|
msg.good("Registered cluster public key with PAM")
|
|
169
|
-
# 5.
|
|
184
|
+
# 5. Without an ingress controller nothing serves the cluster's domain.
|
|
185
|
+
# k3s bundles Traefik, but Colima (and k3s --disable traefik) turn it off.
|
|
186
|
+
_ensure_ingress_controller(overrides)
|
|
187
|
+
# 6. Helm upgrade --install
|
|
170
188
|
if chart is None:
|
|
171
189
|
# Use OCI chart from the registry
|
|
172
190
|
if not registry:
|
|
@@ -182,7 +200,7 @@ def deploy(
|
|
|
182
200
|
else:
|
|
183
201
|
msg.info(f"Installing from local chart {chart}...")
|
|
184
202
|
upgrade(chart, overrides, namespace=namespace, wait=wait)
|
|
185
|
-
#
|
|
203
|
+
# 7. Every worker type pins jobs to nodes labeled ellf/node-class=<node_class>.
|
|
186
204
|
# Cloud node pools get that label from terraform; a hand-built cluster (k3s
|
|
187
205
|
# on a workstation) doesn't, and every job then sits Pending with "didn't
|
|
188
206
|
# match Pod's node affinity/selector". Read the types the chart actually
|
|
@@ -195,6 +213,55 @@ def deploy(
|
|
|
195
213
|
preflight_test(release=DEFAULT_RELEASE, namespace=namespace)
|
|
196
214
|
|
|
197
215
|
|
|
216
|
+
def _placeholder_keys(values: object, prefix: str = "") -> list[str]:
|
|
217
|
+
"""Dotted paths of the values ``infra init-values`` left as FILL-IN."""
|
|
218
|
+
if isinstance(values, dict):
|
|
219
|
+
return [
|
|
220
|
+
key
|
|
221
|
+
for name, value in values.items()
|
|
222
|
+
for key in _placeholder_keys(value, f"{prefix}{name}.")
|
|
223
|
+
]
|
|
224
|
+
if isinstance(values, list):
|
|
225
|
+
return [
|
|
226
|
+
key
|
|
227
|
+
for i, value in enumerate(values)
|
|
228
|
+
for key in _placeholder_keys(value, f"{prefix}{i}.")
|
|
229
|
+
]
|
|
230
|
+
if isinstance(values, str) and FILL_IN in values:
|
|
231
|
+
return [prefix.rstrip(".")]
|
|
232
|
+
return []
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def _ensure_ingress_controller(overrides: HelmChartOverrides) -> None:
|
|
236
|
+
"""Install Traefik when the chart's IngressClass doesn't exist yet,
|
|
237
|
+
listening on the cluster domain's port as well as 80/443."""
|
|
238
|
+
class_name = (
|
|
239
|
+
overrides.ingress.class_name if overrides.ingress else None
|
|
240
|
+
) or DEFAULT_INGRESS_CLASS
|
|
241
|
+
found = subprocess.run(
|
|
242
|
+
["kubectl", "get", "ingressclass", class_name, "-o", "name"],
|
|
243
|
+
capture_output=True,
|
|
244
|
+
text=True,
|
|
245
|
+
)
|
|
246
|
+
if found.returncode == 0 and found.stdout.strip():
|
|
247
|
+
return
|
|
248
|
+
if class_name != DEFAULT_INGRESS_CLASS:
|
|
249
|
+
msg.warn(
|
|
250
|
+
f"IngressClass '{class_name}' doesn't exist. Install its ingress "
|
|
251
|
+
"controller, or nothing will serve the cluster's domain."
|
|
252
|
+
)
|
|
253
|
+
return
|
|
254
|
+
cluster = overrides.cluster
|
|
255
|
+
port = None
|
|
256
|
+
tls = False
|
|
257
|
+
if cluster and cluster.fqdn:
|
|
258
|
+
domain = URL.parse(f"{cluster.scheme or 'https'}://{cluster.fqdn}")
|
|
259
|
+
port = domain.port
|
|
260
|
+
tls = domain.scheme == "https"
|
|
261
|
+
msg.info("No Traefik IngressClass found; installing Traefik")
|
|
262
|
+
ensure_traefik(port=port, tls=tls)
|
|
263
|
+
|
|
264
|
+
|
|
198
265
|
def _ensure_cluster_keypair_standalone(
|
|
199
266
|
secret_name: str, namespace: str, database_password: str = ""
|
|
200
267
|
) -> str:
|
|
@@ -337,6 +337,7 @@ ellf_cli/version/20.0.4_2026-10-14-16-20-24_patch_c6672844-8227-4e0a-9fb5-36af7e
|
|
|
337
337
|
ellf_cli/version/20.0.5_2026-10-15-08-53-28_patch_10154146-8afd-4632-b250-9b4b9f5bf67c
|
|
338
338
|
ellf_cli/version/20.0.6_2026-10-15-14-17-40_patch_df3a5d3c-f0e0-46cb-aeaf-15b51c8a0f13
|
|
339
339
|
ellf_cli/version/20.0.7_2026-10-16-07-09-40_major_3e5dfba3-2810-47b4-85a9-938bfff72a04
|
|
340
|
+
ellf_cli/version/21.0.0_2026-10-16-10-44-29_patch_1058e453-613f-492b-a3c7-f3ca2abe8c2d
|
|
340
341
|
ellf_cli/version/__init__.py
|
|
341
342
|
ellf_cli/version/read_version.py
|
|
342
343
|
tests/test_agents.py
|
|
@@ -355,6 +356,7 @@ tests/test_info.py
|
|
|
355
356
|
tests/test_infra_config_io.py
|
|
356
357
|
tests/test_infra_configure.py
|
|
357
358
|
tests/test_infra_deploy_node_labels.py
|
|
359
|
+
tests/test_infra_deploy_preflight.py
|
|
358
360
|
tests/test_infra_destroy.py
|
|
359
361
|
tests/test_infra_get_terraform.py
|
|
360
362
|
tests/test_infra_hibernate.py
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"""What `ellf infra deploy` checks and installs before the chart: no FILL-IN
|
|
2
|
+
placeholders left in values.yaml, and an ingress controller serving the
|
|
3
|
+
cluster's domain (Colima's k3s ships without Traefik)."""
|
|
4
|
+
|
|
5
|
+
from subprocess import CompletedProcess
|
|
6
|
+
from unittest.mock import patch
|
|
7
|
+
|
|
8
|
+
from ellf_cli.commands.infra._helpers import traefik_values
|
|
9
|
+
from ellf_cli.commands.infra.deploy import (
|
|
10
|
+
_ensure_ingress_controller,
|
|
11
|
+
_placeholder_keys,
|
|
12
|
+
)
|
|
13
|
+
from ellf_cli.helm import HelmChartOverrides
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def test_placeholder_keys_are_found_at_any_depth():
|
|
17
|
+
values = {
|
|
18
|
+
"registries": {"upstream": "r", "user": "FILL-IN-from-terraform-output"},
|
|
19
|
+
"database": {"ip": "FILL-IN", "user": "cluster_user"},
|
|
20
|
+
"imagePullSecrets": [{"name": "FILL-IN"}],
|
|
21
|
+
"networkPolicy": True,
|
|
22
|
+
"storage": {"hostPath": ""},
|
|
23
|
+
}
|
|
24
|
+
assert _placeholder_keys(values) == [
|
|
25
|
+
"registries.user",
|
|
26
|
+
"database.ip",
|
|
27
|
+
"imagePullSecrets.0.name",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def test_no_extra_entrypoint_on_standard_ports():
|
|
32
|
+
for port in (None, 80, 443):
|
|
33
|
+
assert set(traefik_values(port=port)["ports"]) == {"web", "websecure"}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_entrypoint_on_the_domain_port():
|
|
37
|
+
ellf = traefik_values(port=8443)["ports"]["ellf"]
|
|
38
|
+
assert ellf["port"] == ellf["exposedPort"] == 8443
|
|
39
|
+
assert ellf["tls"] == {"enabled": False}
|
|
40
|
+
assert traefik_values(port=8443, tls=True)["ports"]["ellf"]["tls"] == {
|
|
41
|
+
"enabled": True
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _overrides(fqdn: str, scheme: str) -> HelmChartOverrides:
|
|
46
|
+
return HelmChartOverrides.model_validate(
|
|
47
|
+
{"cluster": {"fqdn": fqdn, "scheme": scheme}}
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _kubectl(stdout: str):
|
|
52
|
+
def run(cmd, **kwargs):
|
|
53
|
+
assert cmd[:3] == ["kubectl", "get", "ingressclass"]
|
|
54
|
+
return CompletedProcess(cmd, 0 if stdout else 1, stdout=stdout, stderr="")
|
|
55
|
+
|
|
56
|
+
return run
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def test_traefik_is_installed_when_the_cluster_has_none():
|
|
60
|
+
with (
|
|
61
|
+
patch("ellf_cli.commands.infra.deploy.subprocess.run", _kubectl("")),
|
|
62
|
+
patch("ellf_cli.commands.infra.deploy.ensure_traefik") as ensure,
|
|
63
|
+
):
|
|
64
|
+
_ensure_ingress_controller(_overrides("localhost:8443", "http"))
|
|
65
|
+
ensure.assert_called_once_with(port=8443, tls=False)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def test_an_existing_ingress_class_is_left_alone():
|
|
69
|
+
found = _kubectl("ingressclass.networking.k8s.io/traefik")
|
|
70
|
+
with (
|
|
71
|
+
patch("ellf_cli.commands.infra.deploy.subprocess.run", found),
|
|
72
|
+
patch("ellf_cli.commands.infra.deploy.ensure_traefik") as ensure,
|
|
73
|
+
):
|
|
74
|
+
_ensure_ingress_controller(_overrides("localhost:8443", "http"))
|
|
75
|
+
ensure.assert_not_called()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-annotate/SKILL.assistant.md
RENAMED
|
File without changes
|
{ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-annotate/SKILL.coding.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-handoff/SKILL.assistant.md
RENAMED
|
File without changes
|
{ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-monitor/SKILL.assistant.md
RENAMED
|
File without changes
|
{ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-monitor/SKILL.coding.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-ops/scripts.coding/run_job.py
RENAMED
|
File without changes
|
{ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.coding.md
RENAMED
|
File without changes
|
|
File without changes
|
{ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-prodigy/SKILL.coding.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-project/SKILL.assistant.md
RENAMED
|
File without changes
|
{ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-project/SKILL.coding.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-support/SKILL.assistant.md
RENAMED
|
File without changes
|
{ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-support/SKILL.coding.md
RENAMED
|
File without changes
|
|
File without changes
|
{ellf_cli-21.0.0 → ellf_cli-21.0.1}/ellf_cli/ellf_skills/skills/ellf-train/SKILL.assistant.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|