octopize.deploy_tool 1.6.2__tar.gz → 2.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/.gitignore +1 -0
  2. octopize_deploy_tool-2.2.0/PKG-INFO +404 -0
  3. octopize_deploy_tool-2.2.0/README.md +373 -0
  4. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/pyproject.toml +9 -4
  5. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/__init__.py +3 -2
  6. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/authentik_migration.py +387 -0
  7. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/cli.py +422 -0
  8. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/cli_test_harness.py +15 -11
  9. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/configure.py +22 -333
  10. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/defaults.yaml +17 -17
  11. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/download_templates.py +169 -0
  12. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/generate_env.py +1 -6
  13. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/generate_env_paths.py +13 -3
  14. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/input_gatherer.py +232 -50
  15. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/__init__.py +2 -0
  16. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/authentik_blueprint.py +0 -3
  17. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/base.py +31 -11
  18. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/steps/email.py +103 -0
  19. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/required.py +38 -24
  20. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/steps/service_urls.py +55 -0
  21. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/target_environment.py +14 -13
  22. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/template_provisioning.py +8 -34
  23. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/.env.template +2 -0
  24. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/.template-version +1 -0
  25. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/_env_fragment_api.template +63 -0
  26. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/_env_fragment_infra.template +37 -0
  27. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/_env_fragment_web.template +10 -0
  28. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/api.env.template +55 -0
  29. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_second/expected → octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates}/authentik/octopize-avatar-blueprint.yaml +602 -629
  30. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/compose.override.yaml.template +49 -0
  31. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/docker-compose.yml.template +616 -0
  32. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/nginx.conf.template +118 -0
  33. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/python_client.env.template +2 -0
  34. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/web.env.template +1 -0
  35. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/topology_urls.py +2 -2
  36. octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/url_contract.py +155 -0
  37. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/version_compat.py +1 -1
  38. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/TESTING.md +45 -43
  39. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/conftest.py +32 -50
  40. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/__init__.py +7 -4
  41. octopize_deploy_tool-2.2.0/tests/fixtures/authentik_migration/licenses.csv +4 -0
  42. octopize_deploy_tool-2.2.0/tests/fixtures/authentik_migration/organizations.csv +4 -0
  43. octopize_deploy_tool-2.2.0/tests/fixtures/authentik_migration/users.csv +6 -0
  44. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_second → octopize_deploy_tool-2.2.0/tests/fixtures/basic_deployment}/expected/.deployment-state.yaml +26 -16
  45. octopize_deploy_tool-2.2.0/tests/fixtures/basic_deployment/expected/.env +92 -0
  46. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/basic_deployment/expected/authentik/octopize-avatar-blueprint.yaml +602 -629
  47. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_first → octopize_deploy_tool-2.2.0/tests/fixtures/basic_deployment}/expected/docker-compose.yml +10 -3
  48. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/basic_deployment/input.yaml +1 -0
  49. {octopize_deploy_tool-1.6.2/tests/fixtures/cloud_storage → octopize_deploy_tool-2.2.0/tests/fixtures/basic_deployment}/output.txt +2 -0
  50. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/cloud_storage/expected/.deployment-state.yaml +26 -16
  51. octopize_deploy_tool-2.2.0/tests/fixtures/cloud_storage/expected/.env +92 -0
  52. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/cloud_storage/expected/authentik/octopize-avatar-blueprint.yaml +602 -629
  53. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/cloud_storage/expected/docker-compose.yml +10 -3
  54. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/cloud_storage/input.yaml +1 -0
  55. {octopize_deploy_tool-1.6.2/tests/fixtures/output_dir_nested → octopize_deploy_tool-2.2.0/tests/fixtures/cloud_storage}/output.txt +2 -0
  56. {octopize_deploy_tool-1.6.2/tests/fixtures/basic_deployment → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_first}/expected/.deployment-state.yaml +26 -16
  57. octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_first/expected/.env +92 -0
  58. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/config_round_trip_first/expected/authentik/octopize-avatar-blueprint.yaml +602 -629
  59. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/config_round_trip_first/expected/deployment-config.yaml +16 -7
  60. {octopize_deploy_tool-1.6.2/tests/fixtures/basic_deployment → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_first}/expected/docker-compose.yml +10 -3
  61. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_first → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_second}/expected/.deployment-state.yaml +26 -16
  62. octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_second/expected/.env +92 -0
  63. octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_second/expected/authentik/octopize-avatar-blueprint.yaml +1738 -0
  64. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/config_round_trip_second/expected/docker-compose.yml +10 -3
  65. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/deploy_help/output.txt +1 -5
  66. octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment/expected/.deployment-state.yaml +75 -0
  67. octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment/expected/.env +93 -0
  68. octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment/expected/authentik/octopize-avatar-blueprint.yaml +1738 -0
  69. octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment/expected/docker-compose.yml +610 -0
  70. octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment/expected/test-.npmrc +1 -0
  71. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/dev_mode_deployment/input.yaml +1 -0
  72. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/dev_mode_deployment/output.txt +2 -0
  73. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/generate_env_help/output.txt +3 -6
  74. octopize_deploy_tool-2.2.0/tests/fixtures/generate_env_output_dir_error/output.txt +2 -0
  75. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/help/output.txt +3 -2
  76. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/invalid_port_config/output.txt +2 -0
  77. octopize_deploy_tool-2.2.0/tests/fixtures/missing_subcommand/output.txt +2 -0
  78. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/no_telemetry/expected/.deployment-state.yaml +26 -16
  79. octopize_deploy_tool-2.2.0/tests/fixtures/no_telemetry/expected/.env +93 -0
  80. octopize_deploy_tool-2.2.0/tests/fixtures/no_telemetry/expected/authentik/octopize-avatar-blueprint.yaml +1738 -0
  81. octopize_deploy_tool-2.2.0/tests/fixtures/no_telemetry/expected/docker-compose.yml +610 -0
  82. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/no_telemetry/input.yaml +1 -0
  83. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/no_telemetry/output.txt +2 -0
  84. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_complete/expected/.deployment-state.yaml +25 -16
  85. octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/.env +92 -0
  86. octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/branding/favicon.ico +0 -0
  87. octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/branding/logo.png +0 -0
  88. octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/custom-templates/email_account_confirmation.html +93 -0
  89. octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/custom-templates/email_account_exists.html +126 -0
  90. octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/custom-templates/email_account_invitation.html +159 -0
  91. octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/custom-templates/email_forgotten_password.html +124 -0
  92. octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/custom-templates/email_password_changed.html +111 -0
  93. octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/custom-templates/email_password_reset.html +109 -0
  94. octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/octopize-avatar-blueprint.yaml +1738 -0
  95. octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/translations.json +24 -0
  96. octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/docker-compose.yml +610 -0
  97. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_complete/output.txt +2 -0
  98. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_incomplete_config/output.txt +2 -0
  99. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_partial_config/output.txt +2 -0
  100. {octopize_deploy_tool-1.6.2/tests/fixtures/basic_deployment → octopize_deploy_tool-2.2.0/tests/fixtures/output_dir_nested}/output.txt +2 -0
  101. octopize_deploy_tool-2.2.0/tests/fixtures/output_dir_permission_denied/output.txt +1 -0
  102. octopize_deploy_tool-2.2.0/tests/fixtures/prompt_help/input.yaml +25 -0
  103. octopize_deploy_tool-2.2.0/tests/fixtures/prompt_help/output.txt +82 -0
  104. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/resume_interrupted/first_run/output.txt +2 -0
  105. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/resume_interrupted/input_first_run.yaml +1 -0
  106. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/resume_interrupted/resume/output.txt +15 -12
  107. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/save_config_interactive/output.txt +2 -0
  108. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/save_config_with_existing/input.yaml +1 -0
  109. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/save_config_with_existing/output.txt +2 -0
  110. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/template_from_local_verbose/output.txt +2 -0
  111. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/type_mismatch_config/output.txt +2 -0
  112. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/integration/test_cli_integration.py +126 -181
  113. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/integration/test_generate_env.py +27 -72
  114. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_authentik_blueprint.py +0 -1
  115. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_email.py +49 -0
  116. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_local_source.py +1 -1
  117. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_required.py +0 -5
  118. octopize_deploy_tool-2.2.0/tests/steps/test_service_urls.py +70 -0
  119. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_user.py +0 -2
  120. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_user_validation.py +2 -8
  121. octopize_deploy_tool-2.2.0/tests/unit/test_authentik_client.py +398 -0
  122. octopize_deploy_tool-2.2.0/tests/unit/test_authentik_migration.py +216 -0
  123. octopize_deploy_tool-2.2.0/tests/unit/test_compare_helpers.py +28 -0
  124. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_deployment_configurator.py +57 -0
  125. octopize_deploy_tool-2.2.0/tests/unit/test_deployment_runner.py +195 -0
  126. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_generate_env_cli.py +15 -13
  127. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_input_gatherer.py +124 -0
  128. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_rich_implementations.py +77 -15
  129. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_topology_urls.py +2 -2
  130. octopize_deploy_tool-1.6.2/PKG-INFO +0 -256
  131. octopize_deploy_tool-1.6.2/README.md +0 -227
  132. octopize_deploy_tool-1.6.2/src/octopize_avatar_deploy/download_templates.py +0 -411
  133. octopize_deploy_tool-1.6.2/src/octopize_avatar_deploy/steps/email.py +0 -63
  134. octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment/expected/.deployment-state.yaml +0 -65
  135. octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment/expected/authentik/octopize-avatar-blueprint.yaml +0 -1765
  136. octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment/expected/docker-compose.yml +0 -603
  137. octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment/expected/test-.npmrc +0 -1
  138. octopize_deploy_tool-1.6.2/tests/fixtures/generate_env_output_dir_error/output.txt +0 -2
  139. octopize_deploy_tool-1.6.2/tests/fixtures/missing_subcommand/output.txt +0 -2
  140. octopize_deploy_tool-1.6.2/tests/fixtures/missing_templates/output.txt +0 -1
  141. octopize_deploy_tool-1.6.2/tests/fixtures/no_telemetry/expected/authentik/octopize-avatar-blueprint.yaml +0 -1765
  142. octopize_deploy_tool-1.6.2/tests/fixtures/no_telemetry/expected/docker-compose.yml +0 -603
  143. octopize_deploy_tool-1.6.2/tests/fixtures/non_interactive_complete/expected/authentik/octopize-avatar-blueprint.yaml +0 -1765
  144. octopize_deploy_tool-1.6.2/tests/fixtures/non_interactive_complete/expected/docker-compose.yml +0 -603
  145. octopize_deploy_tool-1.6.2/tests/fixtures/output_dir_permission_denied/output.txt +0 -1
  146. octopize_deploy_tool-1.6.2/tests/fixtures/template_source_empty/output.txt +0 -1
  147. octopize_deploy_tool-1.6.2/tests/fixtures/template_source_not_found/output.txt +0 -1
  148. octopize_deploy_tool-1.6.2/tests/fixtures/template_source_partial/output.txt +0 -1
  149. octopize_deploy_tool-1.6.2/tests/unit/test_deployment_runner.py +0 -290
  150. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/components.py +0 -0
  151. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/deployment_mode.py +0 -0
  152. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/output_spec.py +0 -0
  153. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/printer.py +0 -0
  154. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/public_url.py +0 -0
  155. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/state_manager.py +0 -0
  156. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/api_local_source.py +0 -0
  157. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/authentik.py +0 -0
  158. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/component_selection.py +0 -0
  159. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/database.py +0 -0
  160. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/local_source.py +0 -0
  161. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/logging.py +0 -0
  162. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/nginx.py +0 -0
  163. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/storage.py +0 -0
  164. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/telemetry.py +0 -0
  165. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/user.py +0 -0
  166. {octopize_deploy_tool-1.6.2/tests/fixtures/basic_deployment/expected → octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates}/authentik/branding/favicon.ico +0 -0
  167. {octopize_deploy_tool-1.6.2/tests/fixtures/basic_deployment/expected → octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates}/authentik/branding/logo.png +0 -0
  168. {octopize_deploy_tool-1.6.2/tests/fixtures/basic_deployment/expected → octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates}/authentik/custom-templates/email_account_confirmation.html +0 -0
  169. {octopize_deploy_tool-1.6.2/tests/fixtures/basic_deployment/expected → octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates}/authentik/custom-templates/email_account_exists.html +0 -0
  170. {octopize_deploy_tool-1.6.2/tests/fixtures/basic_deployment/expected → octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates}/authentik/custom-templates/email_account_invitation.html +0 -0
  171. {octopize_deploy_tool-1.6.2/tests/fixtures/basic_deployment/expected → octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates}/authentik/custom-templates/email_forgotten_password.html +0 -0
  172. {octopize_deploy_tool-1.6.2/tests/fixtures/basic_deployment/expected → octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates}/authentik/custom-templates/email_password_changed.html +0 -0
  173. {octopize_deploy_tool-1.6.2/tests/fixtures/basic_deployment/expected → octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates}/authentik/custom-templates/email_password_reset.html +0 -0
  174. {octopize_deploy_tool-1.6.2/tests/fixtures/basic_deployment/expected → octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates}/authentik/translations.json +0 -0
  175. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/__init__.py +0 -0
  176. {octopize_deploy_tool-1.6.2/tests/fixtures/cloud_storage → octopize_deploy_tool-2.2.0/tests/fixtures/basic_deployment}/expected/authentik/branding/favicon.ico +0 -0
  177. {octopize_deploy_tool-1.6.2/tests/fixtures/cloud_storage → octopize_deploy_tool-2.2.0/tests/fixtures/basic_deployment}/expected/authentik/branding/logo.png +0 -0
  178. {octopize_deploy_tool-1.6.2/tests/fixtures/cloud_storage → octopize_deploy_tool-2.2.0/tests/fixtures/basic_deployment}/expected/authentik/custom-templates/email_account_confirmation.html +0 -0
  179. {octopize_deploy_tool-1.6.2/tests/fixtures/cloud_storage → octopize_deploy_tool-2.2.0/tests/fixtures/basic_deployment}/expected/authentik/custom-templates/email_account_exists.html +0 -0
  180. {octopize_deploy_tool-1.6.2/tests/fixtures/cloud_storage → octopize_deploy_tool-2.2.0/tests/fixtures/basic_deployment}/expected/authentik/custom-templates/email_account_invitation.html +0 -0
  181. {octopize_deploy_tool-1.6.2/tests/fixtures/cloud_storage → octopize_deploy_tool-2.2.0/tests/fixtures/basic_deployment}/expected/authentik/custom-templates/email_forgotten_password.html +0 -0
  182. {octopize_deploy_tool-1.6.2/tests/fixtures/cloud_storage → octopize_deploy_tool-2.2.0/tests/fixtures/basic_deployment}/expected/authentik/custom-templates/email_password_changed.html +0 -0
  183. {octopize_deploy_tool-1.6.2/tests/fixtures/cloud_storage → octopize_deploy_tool-2.2.0/tests/fixtures/basic_deployment}/expected/authentik/custom-templates/email_password_reset.html +0 -0
  184. {octopize_deploy_tool-1.6.2/tests/fixtures/cloud_storage → octopize_deploy_tool-2.2.0/tests/fixtures/basic_deployment}/expected/authentik/translations.json +0 -0
  185. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/basic_deployment/expected/nginx/nginx.conf +0 -0
  186. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_first → octopize_deploy_tool-2.2.0/tests/fixtures/cloud_storage}/expected/authentik/branding/favicon.ico +0 -0
  187. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_first → octopize_deploy_tool-2.2.0/tests/fixtures/cloud_storage}/expected/authentik/branding/logo.png +0 -0
  188. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_first → octopize_deploy_tool-2.2.0/tests/fixtures/cloud_storage}/expected/authentik/custom-templates/email_account_confirmation.html +0 -0
  189. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_first → octopize_deploy_tool-2.2.0/tests/fixtures/cloud_storage}/expected/authentik/custom-templates/email_account_exists.html +0 -0
  190. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_first → octopize_deploy_tool-2.2.0/tests/fixtures/cloud_storage}/expected/authentik/custom-templates/email_account_invitation.html +0 -0
  191. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_first → octopize_deploy_tool-2.2.0/tests/fixtures/cloud_storage}/expected/authentik/custom-templates/email_forgotten_password.html +0 -0
  192. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_first → octopize_deploy_tool-2.2.0/tests/fixtures/cloud_storage}/expected/authentik/custom-templates/email_password_changed.html +0 -0
  193. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_first → octopize_deploy_tool-2.2.0/tests/fixtures/cloud_storage}/expected/authentik/custom-templates/email_password_reset.html +0 -0
  194. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_first → octopize_deploy_tool-2.2.0/tests/fixtures/cloud_storage}/expected/authentik/translations.json +0 -0
  195. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/cloud_storage/expected/nginx/nginx.conf +0 -0
  196. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/config_not_found/output.txt +0 -0
  197. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_second → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_first}/expected/authentik/branding/favicon.ico +0 -0
  198. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_second → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_first}/expected/authentik/branding/logo.png +0 -0
  199. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_second → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_first}/expected/authentik/custom-templates/email_account_confirmation.html +0 -0
  200. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_second → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_first}/expected/authentik/custom-templates/email_account_exists.html +0 -0
  201. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_second → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_first}/expected/authentik/custom-templates/email_account_invitation.html +0 -0
  202. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_second → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_first}/expected/authentik/custom-templates/email_forgotten_password.html +0 -0
  203. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_second → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_first}/expected/authentik/custom-templates/email_password_changed.html +0 -0
  204. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_second → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_first}/expected/authentik/custom-templates/email_password_reset.html +0 -0
  205. {octopize_deploy_tool-1.6.2/tests/fixtures/config_round_trip_second → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_first}/expected/authentik/translations.json +0 -0
  206. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/config_round_trip_first/expected/nginx/nginx.conf +0 -0
  207. {octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_second}/expected/authentik/branding/favicon.ico +0 -0
  208. {octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_second}/expected/authentik/branding/logo.png +0 -0
  209. {octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_second}/expected/authentik/custom-templates/email_account_confirmation.html +0 -0
  210. {octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_second}/expected/authentik/custom-templates/email_account_exists.html +0 -0
  211. {octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_second}/expected/authentik/custom-templates/email_account_invitation.html +0 -0
  212. {octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_second}/expected/authentik/custom-templates/email_forgotten_password.html +0 -0
  213. {octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_second}/expected/authentik/custom-templates/email_password_changed.html +0 -0
  214. {octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_second}/expected/authentik/custom-templates/email_password_reset.html +0 -0
  215. {octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment → octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_second}/expected/authentik/translations.json +0 -0
  216. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/config_round_trip_second/expected/nginx/nginx.conf +0 -0
  217. {octopize_deploy_tool-1.6.2/tests/fixtures/no_telemetry → octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment}/expected/authentik/branding/favicon.ico +0 -0
  218. {octopize_deploy_tool-1.6.2/tests/fixtures/no_telemetry → octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment}/expected/authentik/branding/logo.png +0 -0
  219. {octopize_deploy_tool-1.6.2/tests/fixtures/no_telemetry → octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment}/expected/authentik/custom-templates/email_account_confirmation.html +0 -0
  220. {octopize_deploy_tool-1.6.2/tests/fixtures/no_telemetry → octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment}/expected/authentik/custom-templates/email_account_exists.html +0 -0
  221. {octopize_deploy_tool-1.6.2/tests/fixtures/no_telemetry → octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment}/expected/authentik/custom-templates/email_account_invitation.html +0 -0
  222. {octopize_deploy_tool-1.6.2/tests/fixtures/no_telemetry → octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment}/expected/authentik/custom-templates/email_forgotten_password.html +0 -0
  223. {octopize_deploy_tool-1.6.2/tests/fixtures/no_telemetry → octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment}/expected/authentik/custom-templates/email_password_changed.html +0 -0
  224. {octopize_deploy_tool-1.6.2/tests/fixtures/no_telemetry → octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment}/expected/authentik/custom-templates/email_password_reset.html +0 -0
  225. {octopize_deploy_tool-1.6.2/tests/fixtures/no_telemetry → octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment}/expected/authentik/translations.json +0 -0
  226. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/dev_mode_deployment/expected/compose.override.yaml +0 -0
  227. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/dev_mode_deployment/expected/nginx/nginx.conf +0 -0
  228. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/dev_mode_deployment/expected/test-avatar-repo/services/api/main.py +0 -0
  229. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/dev_mode_deployment/expected/test-avatar-website/package.json +0 -0
  230. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/invalid_port_config/config.yaml +0 -0
  231. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/invalid_url_config/config.yaml +0 -0
  232. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/invalid_url_config/output.txt +0 -0
  233. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/malformed_yaml/config.yaml +0 -0
  234. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/malformed_yaml/output.txt +0 -0
  235. {octopize_deploy_tool-1.6.2/tests/fixtures/non_interactive_complete → octopize_deploy_tool-2.2.0/tests/fixtures/no_telemetry}/expected/authentik/branding/favicon.ico +0 -0
  236. {octopize_deploy_tool-1.6.2/tests/fixtures/non_interactive_complete → octopize_deploy_tool-2.2.0/tests/fixtures/no_telemetry}/expected/authentik/branding/logo.png +0 -0
  237. {octopize_deploy_tool-1.6.2/tests/fixtures/non_interactive_complete → octopize_deploy_tool-2.2.0/tests/fixtures/no_telemetry}/expected/authentik/custom-templates/email_account_confirmation.html +0 -0
  238. {octopize_deploy_tool-1.6.2/tests/fixtures/non_interactive_complete → octopize_deploy_tool-2.2.0/tests/fixtures/no_telemetry}/expected/authentik/custom-templates/email_account_exists.html +0 -0
  239. {octopize_deploy_tool-1.6.2/tests/fixtures/non_interactive_complete → octopize_deploy_tool-2.2.0/tests/fixtures/no_telemetry}/expected/authentik/custom-templates/email_account_invitation.html +0 -0
  240. {octopize_deploy_tool-1.6.2/tests/fixtures/non_interactive_complete → octopize_deploy_tool-2.2.0/tests/fixtures/no_telemetry}/expected/authentik/custom-templates/email_forgotten_password.html +0 -0
  241. {octopize_deploy_tool-1.6.2/tests/fixtures/non_interactive_complete → octopize_deploy_tool-2.2.0/tests/fixtures/no_telemetry}/expected/authentik/custom-templates/email_password_changed.html +0 -0
  242. {octopize_deploy_tool-1.6.2/tests/fixtures/non_interactive_complete → octopize_deploy_tool-2.2.0/tests/fixtures/no_telemetry}/expected/authentik/custom-templates/email_password_reset.html +0 -0
  243. {octopize_deploy_tool-1.6.2/tests/fixtures/non_interactive_complete → octopize_deploy_tool-2.2.0/tests/fixtures/no_telemetry}/expected/authentik/translations.json +0 -0
  244. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/no_telemetry/expected/nginx/nginx.conf +0 -0
  245. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_complete/config.yaml +0 -0
  246. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_complete/expected/nginx/nginx.conf +0 -0
  247. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_incomplete_config/config.yaml +0 -0
  248. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_no_config/output.txt +0 -0
  249. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_partial_config/config.yaml +0 -0
  250. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/resume_interrupted/input_resume.yaml +0 -0
  251. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/save_config_with_existing/config.yaml +0 -0
  252. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/type_mismatch_config/config.yaml +0 -0
  253. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/integration/__init__.py +0 -0
  254. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_api_local_source.py +0 -0
  255. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_authentik.py +0 -0
  256. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_base.py +0 -0
  257. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_component_selection.py +0 -0
  258. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_database.py +0 -0
  259. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_logging.py +0 -0
  260. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_nginx.py +0 -0
  261. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_state_manager.py +0 -0
  262. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_storage.py +0 -0
  263. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_target_environment.py +0 -0
  264. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_telemetry.py +0 -0
  265. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/test_cli_harness.py +0 -0
  266. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_components.py +0 -0
  267. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_generic_prompt.py +0 -0
  268. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_output_spec.py +0 -0
  269. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_printer.py +0 -0
  270. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_public_url.py +0 -0
  271. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_step_filtering.py +0 -0
  272. {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_version_validation.py +0 -0
@@ -67,5 +67,6 @@ Thumbs.db
67
67
  .avatar-templates
68
68
  .deployment_state.yaml
69
69
  .env
70
+ !tests/fixtures/**/expected/.env
70
71
  config.*.yaml
71
72
  !config.example.yaml
@@ -0,0 +1,404 @@
1
+ Metadata-Version: 2.4
2
+ Name: octopize.deploy_tool
3
+ Version: 2.2.0
4
+ Summary: Deployment configuration tool for Octopize Avatar platform
5
+ Project-URL: Homepage, https://octopize.io
6
+ Project-URL: Documentation, https://docs.octopize.io/docs/deploying/self-hosted
7
+ Project-URL: Repository, https://github.com/octopize/avatar
8
+ Project-URL: Issues, https://github.com/octopize/avatar/issues
9
+ Author-email: Octopize <contact@octopize.io>
10
+ License: MIT
11
+ Keywords: avatar,configuration,deployment,octopize
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: System Administrators
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: System :: Installation/Setup
19
+ Classifier: Topic :: System :: Systems Administration
20
+ Requires-Python: >=3.13
21
+ Requires-Dist: httpx>=0.28.0
22
+ Requires-Dist: jinja2>=3.1.0
23
+ Requires-Dist: pandas>=3.0.0
24
+ Requires-Dist: pyyaml>=6.0
25
+ Requires-Dist: rich>=13.0.0
26
+ Provides-Extra: dev
27
+ Requires-Dist: pyright>=1.1.402; extra == 'dev'
28
+ Requires-Dist: pytest>=7.0; extra == 'dev'
29
+ Requires-Dist: ruff>=0.1.0; extra == 'dev'
30
+ Description-Content-Type: text/markdown
31
+
32
+ # Octopize Avatar Deployment Tool
33
+
34
+ This package provides the `octopize-deploy-tool` CLI for operating a self-hosted Octopize Avatar
35
+ deployment. It bundles deployment templates for each release so it works without fetching files
36
+ from GitHub.
37
+
38
+ Available subcommands:
39
+
40
+ - **`deploy`** — generates the Docker Compose configuration files needed to run the platform.
41
+ - **`generate-env`** — generates per-component `.env` files for local development.
42
+ - **`authentik-migrate`** — migrates existing user data from CSV exports into
43
+ [authentik](https://goauthentik.io/), the identity provider bundled with Avatar.
44
+
45
+ ## Installation
46
+
47
+ ### Option 1 — uvx (no install required, recommended for one-shot use)
48
+
49
+ [uv](https://docs.astral.sh/uv/) can run the tool directly from PyPI without a permanent install.
50
+ If you don't have `uv` yet:
51
+
52
+ ```bash
53
+ curl -LsSf https://astral.sh/uv/install.sh | sh
54
+ ```
55
+
56
+ Then run any command directly:
57
+
58
+ ```bash
59
+ uvx octopize-deploy-tool deploy --output-dir /app/avatar
60
+ ```
61
+
62
+ ### Option 2 — virtual environment
63
+
64
+ Modern Linux distributions and macOS prevent installing packages into the system Python
65
+ (PEP 668 — "externally managed environment"). A virtual environment avoids that:
66
+
67
+ ```bash
68
+ python -m venv .venv
69
+ source .venv/bin/activate # Windows: .venv\Scripts\activate
70
+ pip install octopize-deploy-tool
71
+ octopize-deploy-tool deploy --output-dir /app/avatar
72
+ ```
73
+
74
+ ### Option 3 — global pip
75
+
76
+ If your system Python allows global installs:
77
+
78
+ ```bash
79
+ pip install octopize-deploy-tool
80
+ ```
81
+
82
+ Verify the CLI is available:
83
+
84
+ ```bash
85
+ octopize-deploy-tool deploy --help
86
+ ```
87
+
88
+ ## Docker
89
+
90
+ If you don't have Python installed, you can use the published Docker image instead.
91
+
92
+ ### Interactive mode
93
+
94
+ Mount a local directory to receive the generated files and pass `-it` for the interactive prompts:
95
+
96
+ ```bash
97
+ docker run -it --rm \
98
+ --user "$(id -u):$(id -g)" \
99
+ -v "$(pwd)/avatar:/output" \
100
+ quay.io/octopize/deploy-tool:latest deploy --output-dir /output
101
+ ```
102
+
103
+ ### Non-interactive mode
104
+
105
+ Provide a config file via the mounted volume:
106
+
107
+ ```bash
108
+ docker run --rm \
109
+ --user "$(id -u):$(id -g)" \
110
+ -v "$(pwd)/avatar:/output" \
111
+ quay.io/octopize/deploy-tool:latest deploy \
112
+ --output-dir /output/config \
113
+ --config /output/config.yaml \
114
+ --non-interactive
115
+ ```
116
+
117
+ > **Note:** For bind-mounted output directories, run the container with `--user "$(id -u):$(id -g)"` so generated files are owned by your host user.
118
+
119
+ ## Quick Start
120
+
121
+ Generate a Docker deployment configuration interactively:
122
+
123
+ ```bash
124
+ octopize-deploy-tool deploy --output-dir /app/avatar
125
+ ```
126
+
127
+ Then start the deployment:
128
+
129
+ ```bash
130
+ cd /app/avatar
131
+ docker compose down --volumes --remove-orphans
132
+ docker compose up -d
133
+ ```
134
+
135
+ ## Commands
136
+
137
+ ```text
138
+ octopize-deploy-tool deploy [options]
139
+ octopize-deploy-tool generate-env [options]
140
+ octopize-deploy-tool authentik-migrate [options]
141
+ ```
142
+
143
+ Running the CLI without a subcommand is not supported — use `--help` on a subcommand:
144
+
145
+ ```bash
146
+ octopize-deploy-tool deploy --help
147
+ octopize-deploy-tool generate-env --help
148
+ octopize-deploy-tool authentik-migrate --help
149
+ ```
150
+
151
+ ### `deploy`
152
+
153
+ Use `deploy` to generate a full Docker Compose deployment.
154
+
155
+ Example:
156
+
157
+ ```bash
158
+ octopize-deploy-tool deploy --output-dir /app/avatar
159
+ ```
160
+
161
+ Common `deploy` options:
162
+
163
+ ```text
164
+ --output-dir DIR Output directory for generated files
165
+ --config FILE YAML configuration file to load
166
+ --non-interactive Run without prompts, using config/defaults
167
+ --save-config Save the resolved configuration to deployment-config.yaml
168
+ --verbose Show detailed progress output
169
+ --mode {production,dev} Generate production or dev deployment assets
170
+ ```
171
+
172
+ ### `generate-env`
173
+
174
+ Use `generate-env` to create per-component `.env` files for local development without generating
175
+ the full deployment bundle.
176
+
177
+ Example:
178
+
179
+ ```bash
180
+ octopize-deploy-tool generate-env \
181
+ --component api \
182
+ --api-output-path ./avatar-local/api/.env \
183
+ --component web \
184
+ --web-output-path ./avatar-local/web/.env
185
+ ```
186
+
187
+ Common `generate-env` options:
188
+
189
+ ```text
190
+ --config FILE YAML configuration file to load
191
+ --non-interactive Run without prompts, using config/defaults
192
+ --verbose Show detailed progress output
193
+ --component NAME Generate only the selected component (repeatable; defaults to all)
194
+ --api-output-path PATH Override the API env output path for this run
195
+ --web-output-path PATH Override the web env output path for this run
196
+ --python-client-output-path PATH
197
+ Override the python_client env output path for this run
198
+ --output-path COMPONENT=PATH
199
+ Repeatable generic output-path override
200
+ --target NAME Load named URLs from the environments config section
201
+ --api-url URL Override the API URL
202
+ --storage-url URL Override the storage public URL
203
+ --sso-url URL Override the SSO provider URL
204
+ ```
205
+
206
+ ## Non-Interactive Usage
207
+
208
+ You can provide configuration through a YAML file:
209
+
210
+ ```yaml
211
+ PUBLIC_URL: avatar.example.com
212
+ ENV_NAME: prod
213
+ ORGANIZATION_NAME: MyCompany
214
+ ```
215
+
216
+ Then run:
217
+
218
+ ```bash
219
+ octopize-deploy-tool deploy \
220
+ --output-dir /app/avatar \
221
+ --config config.yaml \
222
+ --non-interactive
223
+ ```
224
+
225
+ ## Generated Files
226
+
227
+ The `deploy` command typically writes:
228
+
229
+ ```text
230
+ /app/avatar/
231
+ ├── .env
232
+ ├── docker-compose.yml
233
+ ├── nginx/nginx.conf
234
+ ├── authentik/
235
+ │ ├── octopize-avatar-blueprint.yaml
236
+ │ ├── custom-templates/
237
+ │ └── branding/
238
+ └── .secrets/
239
+ ```
240
+
241
+ The `generate-env` command writes component env files directly to their resolved destinations,
242
+ for example:
243
+
244
+ ```text
245
+ ./avatar-local/
246
+ ├── api/.env
247
+ └── web/.env
248
+ ```
249
+
250
+ ## Typical Deployment Workflow
251
+
252
+ 1. Generate configuration:
253
+
254
+ ```bash
255
+ octopize-deploy-tool deploy --output-dir /app/avatar
256
+ ```
257
+
258
+ 2. Review the generated files:
259
+
260
+ ```bash
261
+ cd /app/avatar
262
+ cat .env
263
+ ls -la .secrets/
264
+ ```
265
+
266
+ 3. Add any required TLS certificates for production.
267
+
268
+ 4. Start the services:
269
+
270
+ ```bash
271
+ docker compose up -d
272
+ ```
273
+
274
+ 5. Verify the deployment:
275
+
276
+ ```bash
277
+ docker compose ps
278
+ docker compose logs -f
279
+ ```
280
+
281
+ ## Troubleshooting
282
+
283
+ ### Bundled templates fail to provision or validate
284
+
285
+ Retry with verbose output:
286
+
287
+ ```bash
288
+ octopize-deploy-tool deploy --output-dir /app/avatar --verbose
289
+ ```
290
+
291
+ ### Existing containers cause bind-mount or startup issues
292
+
293
+ Clean up old containers and volumes before retrying:
294
+
295
+ ```bash
296
+ docker compose down --volumes --remove-orphans
297
+ docker compose up -d
298
+ ```
299
+
300
+ ## Migrating Users to authentik
301
+
302
+ When upgrading from an older Avatar deployment that managed users directly in the Avatar API
303
+ database, use `octopize-deploy-tool authentik-migrate` to import those users into authentik.
304
+
305
+ ### Overview
306
+
307
+ The tool reads three CSV exports from the Avatar database and creates the equivalent users, groups,
308
+ and group assignments in authentik via its REST API:
309
+
310
+ | Source CSV | authentik entity |
311
+ | ------------------- | ---------------------------- |
312
+ | `organizations.csv` | Groups (one per org) |
313
+ | `licenses.csv` | Group `attributes.license` |
314
+ | `users.csv` | Users with `attributes.role` |
315
+
316
+ Users that already have an `authentik_id` value in the CSV are automatically skipped, making the
317
+ tool safe to run incrementally.
318
+
319
+ ### Extracting CSV Data
320
+
321
+ Exec into the API container and export the required tables:
322
+
323
+ ```bash
324
+ docker compose exec -it api bash
325
+ cd /app/avatar
326
+ python bin/dbtool.py shell
327
+ ```
328
+
329
+ Then in the pgcli shell:
330
+
331
+ ```sql
332
+ \copy (SELECT * FROM licenses) TO '/tmp/licenses.csv' WITH CSV HEADER
333
+ \copy (SELECT * FROM users) TO '/tmp/users.csv' WITH CSV HEADER
334
+ \copy (SELECT * FROM organizations) TO '/tmp/organizations.csv' WITH CSV HEADER
335
+ ```
336
+
337
+ ### Usage
338
+
339
+ **Dry run** — preview all operations without making any changes:
340
+
341
+ ```bash
342
+ octopize-deploy-tool authentik-migrate \
343
+ --users /tmp/users.csv \
344
+ --orgs /tmp/organizations.csv \
345
+ --licenses /tmp/licenses.csv \
346
+ --dry-run
347
+ ```
348
+
349
+ **Full migration** — execute against a live authentik instance:
350
+
351
+ ```bash
352
+ octopize-deploy-tool authentik-migrate \
353
+ --users /tmp/users.csv \
354
+ --orgs /tmp/organizations.csv \
355
+ --licenses /tmp/licenses.csv \
356
+ --authentik-url https://avatar.example.com/sso \
357
+ --authentik-token YOUR_API_TOKEN
358
+ ```
359
+
360
+ The authentik URL is the `/sso` path of your Avatar instance. The API token is generated
361
+ automatically by the deploy tool and stored in the `.env` file.
362
+
363
+ Every run writes a JSONL log (`migration_log.jsonl` by default). If some operations fail, retry
364
+ just the failed ones:
365
+
366
+ ```bash
367
+ octopize-deploy-tool authentik-migrate \
368
+ --from-log migration_log.jsonl \
369
+ --failed-only \
370
+ --authentik-url https://avatar.example.com/sso \
371
+ --authentik-token YOUR_API_TOKEN
372
+ ```
373
+
374
+ ### Getting an authentik API Token
375
+
376
+ 1. Log in to your authentik instance
377
+ 2. Navigate to **Admin** → **Tokens & App passwords**
378
+ 3. Create a token with the following permissions:
379
+ - `core:groups:create`
380
+ - `core:users:create`
381
+ - `core:groups:update` (for user assignments)
382
+
383
+ ### Migration CLI Reference
384
+
385
+ ```text
386
+ octopize-deploy-tool authentik-migrate [options]
387
+
388
+ --users PATH Path to users CSV file
389
+ --orgs PATH Path to organizations CSV file
390
+ --licenses PATH Path to licenses CSV file
391
+ --authentik-url URL Base URL of the authentik instance
392
+ (e.g. https://avatar.example.com/sso)
393
+ --authentik-token TOK API token for authentik
394
+ --dry-run Preview operations without executing
395
+ --log PATH JSONL log output path (default: migration_log.jsonl)
396
+ --from-log PATH Replay operations from a previous log instead of CSV
397
+ --failed-only With --from-log, only replay previously-failed ops
398
+ ```
399
+
400
+ ## Further Information
401
+
402
+ - Source repository: <https://github.com/octopize/avatar>
403
+ - Deployment documentation: <https://docs.octopize.io/docs/deploying/self-hosted>
404
+ - Network topology reference: [docs/network-topology.md](docs/network-topology.md)