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.
Files changed (194) hide show
  1. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/PKG-INFO +1 -1
  2. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/pyproject.toml +1 -1
  3. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/__init__.py +1 -1
  4. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/deploy.py +3 -2
  5. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/up.py +50 -4
  6. fadenstack-0.7.0rc2/src/faden_cli/core/release_feed.py +755 -0
  7. fadenstack-0.7.0rc2/tests/test_app_catalogue.py +308 -0
  8. fadenstack-0.7.0rc2/tests/test_image_labels.py +121 -0
  9. fadenstack-0.7.0rc2/tests/test_up_waits.py +76 -0
  10. fadenstack-0.7.0rc2/tests/test_update_feed.py +193 -0
  11. fadenstack-0.7.0rc1/src/faden_cli/core/release_feed.py +0 -348
  12. fadenstack-0.7.0rc1/tests/test_update_feed.py +0 -86
  13. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/.gitignore +0 -0
  14. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/LICENSE +0 -0
  15. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/NOTICE +0 -0
  16. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/README.md +0 -0
  17. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/hatch_build.py +0 -0
  18. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/__main__.py +0 -0
  19. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/pii-catalog.json +0 -0
  20. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/.gitignore +0 -0
  21. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/LICENSE +0 -0
  22. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/NOTICE +0 -0
  23. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/README.md +0 -0
  24. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/agent-binaries/.gitignore +0 -0
  25. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/alloy/config.alloy +0 -0
  26. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/clickhouse/config.d/system-logs.xml +0 -0
  27. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/docker-compose.gpu.yaml +0 -0
  28. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/docker-compose.pii-gpu.yaml +0 -0
  29. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/docker-compose.yaml +0 -0
  30. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/grafana/dashboards/templates/vllm-runtime.json +0 -0
  31. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/grafana/provisioning/dashboards/dashboard.yml +0 -0
  32. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/grafana/provisioning/dashboards/json/faden-overview.json +0 -0
  33. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/grafana/provisioning/datasources/ds.yaml +0 -0
  34. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/grafana/provisioning/datasources/prometheus.yaml +0 -0
  35. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/initdb/01-init.sql +0 -0
  36. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/loki/local-config.yaml +0 -0
  37. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/nginx/locations.conf +0 -0
  38. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/nginx/maintenance.html +0 -0
  39. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/nginx/nginx-tls.conf +0 -0
  40. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/nginx/nginx.conf +0 -0
  41. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/nginx/rate-limits.conf +0 -0
  42. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/nginx/security-headers.conf +0 -0
  43. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/nginx/select-config.sh +0 -0
  44. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/prometheus/prometheus.yml +0 -0
  45. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/rabbitmq/definitions.json.example +0 -0
  46. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/bundle/shared/tls/README.md +0 -0
  47. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/cli.py +0 -0
  48. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/__init__.py +0 -0
  49. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/admin.py +0 -0
  50. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/audit.py +0 -0
  51. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/backup.py +0 -0
  52. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/chats.py +0 -0
  53. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/config.py +0 -0
  54. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/__init__.py +0 -0
  55. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/dev_doctor.py +0 -0
  56. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/dev_down.py +0 -0
  57. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/dev_group.py +0 -0
  58. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/dev_init.py +0 -0
  59. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/dev_pull.py +0 -0
  60. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/dev_status.py +0 -0
  61. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/dev/dev_up.py +0 -0
  62. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/doctor.py +0 -0
  63. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/down.py +0 -0
  64. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/logs_cmd.py +0 -0
  65. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/maintenance.py +0 -0
  66. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/module.py +0 -0
  67. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/observe.py +0 -0
  68. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/ports.py +0 -0
  69. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/rebuild.py +0 -0
  70. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/restore.py +0 -0
  71. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/runtime_images.py +0 -0
  72. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/secrets.py +0 -0
  73. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/status.py +0 -0
  74. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/tls.py +0 -0
  75. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/tune.py +0 -0
  76. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/upgrade.py +0 -0
  77. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/commands/version.py +0 -0
  78. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/__init__.py +0 -0
  79. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/api_client.py +0 -0
  80. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/backend_tool.py +0 -0
  81. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/backup.py +0 -0
  82. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/backup_crypto.py +0 -0
  83. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/backup_key.py +0 -0
  84. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/bootstrap.py +0 -0
  85. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/bundle.py +0 -0
  86. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/chat_retention.py +0 -0
  87. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/clickhouse.py +0 -0
  88. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/compose.py +0 -0
  89. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/console.py +0 -0
  90. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/detect.py +0 -0
  91. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/dev_modules.py +0 -0
  92. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/docker_env.py +0 -0
  93. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/edge.py +0 -0
  94. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/env_gen.py +0 -0
  95. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/git.py +0 -0
  96. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/install.py +0 -0
  97. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/installation.py +0 -0
  98. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/local_node.py +0 -0
  99. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/maintenance.py +0 -0
  100. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/pii_artifacts.py +0 -0
  101. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/pii_catalog.py +0 -0
  102. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/pii_hardware.py +0 -0
  103. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/pii_runtime.py +0 -0
  104. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/private_files.py +0 -0
  105. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/provenance_keys.py +0 -0
  106. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/registry.py +0 -0
  107. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/release_notice.py +0 -0
  108. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/restore_swap.py +0 -0
  109. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/rmq.py +0 -0
  110. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/runtime_images.py +0 -0
  111. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/schedule.py +0 -0
  112. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/sealing.py +0 -0
  113. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/secret_files.py +0 -0
  114. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/secret_rotation.py +0 -0
  115. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/settings.py +0 -0
  116. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/sysinfo.py +0 -0
  117. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/tls.py +0 -0
  118. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/tune.py +0 -0
  119. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/update_check.py +0 -0
  120. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/core/workspace.py +0 -0
  121. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/templates/env.j2 +0 -0
  122. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/tui/__init__.py +0 -0
  123. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/tui/widgets/__init__.py +0 -0
  124. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/src/faden_cli/tui/wizard/__init__.py +0 -0
  125. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/conftest.py +0 -0
  126. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_backup_encryption.py +0 -0
  127. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_backup_migration_heads.py +0 -0
  128. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_backup_release.py +0 -0
  129. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_backup_retention.py +0 -0
  130. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_backup_schedule.py +0 -0
  131. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_backup_tls.py +0 -0
  132. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_backup_volumes.py +0 -0
  133. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_binary_notices.py +0 -0
  134. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_bootstrap_token.py +0 -0
  135. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_chat_retention.py +0 -0
  136. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_cli_output_encoding.py +0 -0
  137. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_data_dir_move.py +0 -0
  138. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_data_volumes_logs.py +0 -0
  139. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_deploy_summary.py +0 -0
  140. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_dev_env_loopback.py +0 -0
  141. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_dev_modules.py +0 -0
  142. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_dev_up_port_holders.py +0 -0
  143. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_dev_up_reclaim.py +0 -0
  144. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_dev_up_service_hosts.py +0 -0
  145. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_dev_up_terminal.py +0 -0
  146. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_docker_env.py +0 -0
  147. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_doctor_ports.py +0 -0
  148. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_edge.py +0 -0
  149. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_gateway_dns_cache.py +0 -0
  150. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_generated_env_reaches_compose.py +0 -0
  151. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_inactive_modules.py +0 -0
  152. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_install_extensions.py +0 -0
  153. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_installation.py +0 -0
  154. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_internal_token_env.py +0 -0
  155. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_local_node.py +0 -0
  156. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_main.py +0 -0
  157. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_maintenance.py +0 -0
  158. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_module_env.py +0 -0
  159. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_module_secrets.py +0 -0
  160. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_pii_artifacts.py +0 -0
  161. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_pii_catalog.py +0 -0
  162. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_pii_hardware.py +0 -0
  163. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_pii_runtime.py +0 -0
  164. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_pii_upgrade.py +0 -0
  165. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_postgres_logins.py +0 -0
  166. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_private_files.py +0 -0
  167. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_provenance_keys.py +0 -0
  168. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_provenance_module.py +0 -0
  169. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_provenance_on_by_default.py +0 -0
  170. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_rebuild.py +0 -0
  171. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_redis_limits.py +0 -0
  172. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_registry_gateway_env.py +0 -0
  173. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_release_bundle.py +0 -0
  174. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_release_feed.py +0 -0
  175. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_release_notice.py +0 -0
  176. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_release_versions.py +0 -0
  177. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_required_env.py +0 -0
  178. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_restore_beside.py +0 -0
  179. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_restore_maintenance.py +0 -0
  180. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_restore_rabbitmq.py +0 -0
  181. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_runtime_images.py +0 -0
  182. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_secret_files.py +0 -0
  183. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_secret_rotation.py +0 -0
  184. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_service_logins.py +0 -0
  185. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_shared_compose_ports.py +0 -0
  186. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_tls.py +0 -0
  187. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_tls_renew.py +0 -0
  188. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_trusted_keys.py +0 -0
  189. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_tune.py +0 -0
  190. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_tune_memory.py +0 -0
  191. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_update_check.py +0 -0
  192. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_upgrade_housekeeping.py +0 -0
  193. {fadenstack-0.7.0rc1 → fadenstack-0.7.0rc2}/tests/test_upgrade_rabbitmq.py +0 -0
  194. {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.0rc1
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
@@ -10,7 +10,7 @@ packages = ["src/faden_cli"]
10
10
 
11
11
  [project]
12
12
  name = "fadenstack"
13
- version = "0.7.0rc1"
13
+ version = "0.7.0rc2"
14
14
  requires-python = ">=3.12,<4.0"
15
15
  description = "CLI installer and management tool for the Fadenstack platform"
16
16
  authors = [
@@ -13,4 +13,4 @@ Module activation via Docker Compose profiles.
13
13
  All secrets generated securely during init phase.
14
14
  """
15
15
 
16
- __version__ = "0.7.0rc1"
16
+ __version__ = "0.7.0rc2"
@@ -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. They send nothing about this server: the list is\n"
178
- " compared here, and administrators see in the console when an update is out."
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 build_context_from_config, report_inactive_modules, up as compose_up
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)