fadenstack 0.7.0rc1__tar.gz → 0.7.0rc2__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.
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/PKG-INFO +1 -1
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/pyproject.toml +1 -1
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/__init__.py +1 -1
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/deploy.py +3 -2
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/up.py +50 -4
- fadenstack-0.7.0rc2/src/faden_cli/core/release_feed.py +755 -0
- fadenstack-0.7.0rc2/tests/test_app_catalogue.py +308 -0
- fadenstack-0.7.0rc2/tests/test_image_labels.py +121 -0
- fadenstack-0.7.0rc2/tests/test_up_waits.py +76 -0
- fadenstack-0.7.0rc2/tests/test_update_feed.py +193 -0
- fadenstack-0.7.0rc1/src/faden_cli/core/release_feed.py +0 -348
- fadenstack-0.7.0rc1/tests/test_update_feed.py +0 -86
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/.gitignore +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/LICENSE +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/NOTICE +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/README.md +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/hatch_build.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/__main__.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/pii-catalog.json +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/.gitignore +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/LICENSE +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/NOTICE +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/README.md +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/agent-binaries/.gitignore +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/alloy/config.alloy +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/clickhouse/config.d/system-logs.xml +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/docker-compose.gpu.yaml +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/docker-compose.pii-gpu.yaml +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/docker-compose.yaml +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/grafana/dashboards/templates/vllm-runtime.json +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/grafana/provisioning/dashboards/dashboard.yml +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/grafana/provisioning/dashboards/json/faden-overview.json +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/grafana/provisioning/datasources/ds.yaml +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/grafana/provisioning/datasources/prometheus.yaml +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/initdb/01-init.sql +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/loki/local-config.yaml +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/nginx/locations.conf +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/nginx/maintenance.html +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/nginx/nginx-tls.conf +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/nginx/nginx.conf +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/nginx/rate-limits.conf +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/nginx/security-headers.conf +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/nginx/select-config.sh +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/prometheus/prometheus.yml +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/rabbitmq/definitions.json.example +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/tls/README.md +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/cli.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/__init__.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/admin.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/audit.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/backup.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/chats.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/config.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/__init__.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/dev_doctor.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/dev_down.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/dev_group.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/dev_init.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/dev_pull.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/dev_status.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/dev_up.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/doctor.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/down.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/logs_cmd.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/maintenance.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/module.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/observe.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/ports.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/rebuild.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/restore.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/runtime_images.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/secrets.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/status.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/tls.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/tune.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/upgrade.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/version.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/__init__.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/api_client.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/backend_tool.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/backup.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/backup_crypto.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/backup_key.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/bootstrap.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/bundle.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/chat_retention.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/clickhouse.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/compose.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/console.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/detect.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/dev_modules.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/docker_env.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/edge.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/env_gen.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/git.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/install.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/installation.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/local_node.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/maintenance.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/pii_artifacts.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/pii_catalog.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/pii_hardware.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/pii_runtime.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/private_files.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/provenance_keys.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/registry.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/release_notice.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/restore_swap.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/rmq.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/runtime_images.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/schedule.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/sealing.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/secret_files.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/secret_rotation.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/settings.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/sysinfo.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/tls.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/tune.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/update_check.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/workspace.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/templates/env.j2 +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/tui/__init__.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/tui/widgets/__init__.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/tui/wizard/__init__.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/conftest.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_backup_encryption.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_backup_migration_heads.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_backup_release.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_backup_retention.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_backup_schedule.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_backup_tls.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_backup_volumes.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_binary_notices.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_bootstrap_token.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_chat_retention.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_cli_output_encoding.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_data_dir_move.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_data_volumes_logs.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_deploy_summary.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_dev_env_loopback.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_dev_modules.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_dev_up_port_holders.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_dev_up_reclaim.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_dev_up_service_hosts.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_dev_up_terminal.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_docker_env.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_doctor_ports.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_edge.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_gateway_dns_cache.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_generated_env_reaches_compose.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_inactive_modules.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_install_extensions.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_installation.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_internal_token_env.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_local_node.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_main.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_maintenance.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_module_env.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_module_secrets.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_pii_artifacts.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_pii_catalog.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_pii_hardware.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_pii_runtime.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_pii_upgrade.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_postgres_logins.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_private_files.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_provenance_keys.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_provenance_module.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_provenance_on_by_default.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_rebuild.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_redis_limits.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_registry_gateway_env.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_release_bundle.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_release_feed.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_release_notice.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_release_versions.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_required_env.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_restore_beside.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_restore_maintenance.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_restore_rabbitmq.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_runtime_images.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_secret_files.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_secret_rotation.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_service_logins.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_shared_compose_ports.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_tls.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_tls_renew.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_trusted_keys.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_tune.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_tune_memory.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_update_check.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_upgrade_housekeeping.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_upgrade_rabbitmq.py +0 -0
- {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_workspace_detection.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: fadenstack
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.0rc2
|
|
4
4
|
Summary: CLI installer and management tool for the Fadenstack platform
|
|
5
5
|
Project-URL: Homepage, https://fadenstack.com
|
|
6
6
|
Project-URL: Repository, https://github.com/fadenstack/fadenstack
|
|
@@ -174,8 +174,9 @@ def update_check_step(env_path: Path, cfg: FadenConfig, *, choice: bool | None,
|
|
|
174
174
|
console.print("\n[bold cyan]Step 3e: New releases…[/bold cyan]")
|
|
175
175
|
console.print(
|
|
176
176
|
f" Once a day the server and this CLI read {FEED_URL},\n"
|
|
177
|
-
" the public list of releases
|
|
178
|
-
"
|
|
177
|
+
" the public list of releases, and the server reads the public list of Fadenstack apps\n"
|
|
178
|
+
" too. They send nothing about this server: the lists are compared here, and\n"
|
|
179
|
+
" administrators see in the console when an update is out."
|
|
179
180
|
)
|
|
180
181
|
choice = click.confirm(" Check for new releases?", default=True)
|
|
181
182
|
if env_vars.get("FADEN_UPDATE_CHECK") != ("true" if choice else "false"):
|
|
@@ -6,17 +6,50 @@ import sys
|
|
|
6
6
|
|
|
7
7
|
import click
|
|
8
8
|
|
|
9
|
-
from faden_cli.core.compose import
|
|
9
|
+
from faden_cli.core.compose import (
|
|
10
|
+
ComposeContext,
|
|
11
|
+
build_context_from_config,
|
|
12
|
+
ps as compose_ps,
|
|
13
|
+
report_inactive_modules,
|
|
14
|
+
up as compose_up,
|
|
15
|
+
)
|
|
10
16
|
from faden_cli.core.console import console, success, error
|
|
11
17
|
from faden_cli.core.env_gen import write_env_file, default_env_vars
|
|
12
18
|
from faden_cli.core.settings import load_config
|
|
13
19
|
|
|
20
|
+
#: How long `faden up` waits for the services to be healthy: as `faden upgrade` waits after starting them.
|
|
21
|
+
WAIT_SECONDS = 180
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _not_healthy(ctx: ComposeContext) -> list[str]:
|
|
25
|
+
"""The services not running and healthy (one-off migrators that ended with 0 aside), as `faden restore` reads them."""
|
|
26
|
+
found: list[str] = []
|
|
27
|
+
for row in compose_ps(ctx):
|
|
28
|
+
state, health = (row.state or row.status or "").lower(), (row.health or "").lower()
|
|
29
|
+
if state == "exited" and row.exit_code == 0:
|
|
30
|
+
continue
|
|
31
|
+
if state != "running" or health in ("unhealthy", "starting"):
|
|
32
|
+
found.append(f"{row.service or row.name} ({health or state})")
|
|
33
|
+
return found
|
|
34
|
+
|
|
14
35
|
|
|
15
36
|
@click.command("up")
|
|
16
37
|
@click.option("-d", "--detach/--no-detach", default=True, help="Run in detached mode (default).")
|
|
17
38
|
@click.option("--build", "do_build", is_flag=True, help="Build images before starting.")
|
|
18
39
|
@click.option("--pull/--no-pull", default=False, help="Pull images before starting.")
|
|
19
40
|
@click.option("--env-gen/--no-env-gen", "gen_env", default=False, help="Regenerate .env file before starting.")
|
|
41
|
+
@click.option(
|
|
42
|
+
"--wait/--no-wait",
|
|
43
|
+
default=True,
|
|
44
|
+
help="Return once the services are running and healthy (default), as `faden upgrade` and `faden restore` do.",
|
|
45
|
+
)
|
|
46
|
+
@click.option(
|
|
47
|
+
"--wait-timeout",
|
|
48
|
+
type=click.IntRange(min=10),
|
|
49
|
+
default=WAIT_SECONDS,
|
|
50
|
+
show_default=True,
|
|
51
|
+
help="Seconds to wait for the services to be healthy.",
|
|
52
|
+
)
|
|
20
53
|
@click.argument("services", nargs=-1)
|
|
21
54
|
def up_cmd(
|
|
22
55
|
*,
|
|
@@ -24,11 +57,16 @@ def up_cmd(
|
|
|
24
57
|
do_build: bool,
|
|
25
58
|
pull: bool,
|
|
26
59
|
gen_env: bool,
|
|
60
|
+
wait: bool,
|
|
61
|
+
wait_timeout: int,
|
|
27
62
|
services: tuple[str, ...],
|
|
28
63
|
) -> None:
|
|
29
|
-
"""Start Fadenstack infrastructure and services.
|
|
64
|
+
"""Start Fadenstack infrastructure and services, and wait until they are healthy.
|
|
30
65
|
|
|
31
66
|
Optionally pass SERVICE names to start only specific containers.
|
|
67
|
+
|
|
68
|
+
It waits because a service that has just started may not answer yet: a module just switched on
|
|
69
|
+
(`faden module enable pii`) loads its model first, and a chat sent in that time was refused.
|
|
32
70
|
"""
|
|
33
71
|
cfg = load_config()
|
|
34
72
|
|
|
@@ -61,19 +99,27 @@ def up_cmd(
|
|
|
61
99
|
|
|
62
100
|
keep_company_files(ctx.env_file, ctx)
|
|
63
101
|
|
|
102
|
+
waiting = wait and detach # compose waits for detached services only
|
|
64
103
|
returncode = compose_up(
|
|
65
104
|
ctx,
|
|
66
105
|
detach=detach,
|
|
67
106
|
build=do_build,
|
|
68
|
-
pull=pull,
|
|
107
|
+
pull="always" if pull else "",
|
|
69
108
|
services=list(services) if services else None,
|
|
109
|
+
wait=waiting,
|
|
110
|
+
timeout=wait_timeout if waiting else 0,
|
|
70
111
|
)
|
|
71
112
|
|
|
72
113
|
if returncode == 0:
|
|
73
|
-
success("Services started successfully.")
|
|
114
|
+
success("Services started and healthy." if waiting else "Services started successfully.")
|
|
74
115
|
# Only when everything was started: naming services is a partial start.
|
|
75
116
|
if not services:
|
|
76
117
|
report_inactive_modules(ctx)
|
|
77
118
|
else:
|
|
119
|
+
if waiting and (sick := _not_healthy(ctx)):
|
|
120
|
+
error(
|
|
121
|
+
f"Not running and healthy within {wait_timeout} s: {', '.join(sick)}. `faden status` shows the "
|
|
122
|
+
"services, `faden logs <service>` why."
|
|
123
|
+
)
|
|
78
124
|
error(f"docker compose up exited with code {returncode}.")
|
|
79
125
|
sys.exit(returncode)
|