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.
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/.gitignore +1 -0
- octopize_deploy_tool-2.2.0/PKG-INFO +404 -0
- octopize_deploy_tool-2.2.0/README.md +373 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/pyproject.toml +9 -4
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/__init__.py +3 -2
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/authentik_migration.py +387 -0
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/cli.py +422 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/cli_test_harness.py +15 -11
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/configure.py +22 -333
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/defaults.yaml +17 -17
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/download_templates.py +169 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/generate_env.py +1 -6
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/generate_env_paths.py +13 -3
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/input_gatherer.py +232 -50
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/__init__.py +2 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/authentik_blueprint.py +0 -3
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/base.py +31 -11
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/steps/email.py +103 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/required.py +38 -24
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/steps/service_urls.py +55 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/target_environment.py +14 -13
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/template_provisioning.py +8 -34
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/.env.template +2 -0
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/.template-version +1 -0
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/_env_fragment_api.template +63 -0
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/_env_fragment_infra.template +37 -0
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/_env_fragment_web.template +10 -0
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/api.env.template +55 -0
- {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
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/compose.override.yaml.template +49 -0
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/docker-compose.yml.template +616 -0
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/nginx.conf.template +118 -0
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/python_client.env.template +2 -0
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/templates/web.env.template +1 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/topology_urls.py +2 -2
- octopize_deploy_tool-2.2.0/src/octopize_avatar_deploy/url_contract.py +155 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/version_compat.py +1 -1
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/TESTING.md +45 -43
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/conftest.py +32 -50
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/__init__.py +7 -4
- octopize_deploy_tool-2.2.0/tests/fixtures/authentik_migration/licenses.csv +4 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/authentik_migration/organizations.csv +4 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/authentik_migration/users.csv +6 -0
- {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
- octopize_deploy_tool-2.2.0/tests/fixtures/basic_deployment/expected/.env +92 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/basic_deployment/expected/authentik/octopize-avatar-blueprint.yaml +602 -629
- {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
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/basic_deployment/input.yaml +1 -0
- {octopize_deploy_tool-1.6.2/tests/fixtures/cloud_storage → octopize_deploy_tool-2.2.0/tests/fixtures/basic_deployment}/output.txt +2 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/cloud_storage/expected/.deployment-state.yaml +26 -16
- octopize_deploy_tool-2.2.0/tests/fixtures/cloud_storage/expected/.env +92 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/cloud_storage/expected/authentik/octopize-avatar-blueprint.yaml +602 -629
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/cloud_storage/expected/docker-compose.yml +10 -3
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/cloud_storage/input.yaml +1 -0
- {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
- {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
- octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_first/expected/.env +92 -0
- {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
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/config_round_trip_first/expected/deployment-config.yaml +16 -7
- {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
- {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
- octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_second/expected/.env +92 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/config_round_trip_second/expected/authentik/octopize-avatar-blueprint.yaml +1738 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/config_round_trip_second/expected/docker-compose.yml +10 -3
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/deploy_help/output.txt +1 -5
- octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment/expected/.deployment-state.yaml +75 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment/expected/.env +93 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment/expected/authentik/octopize-avatar-blueprint.yaml +1738 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment/expected/docker-compose.yml +610 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/dev_mode_deployment/expected/test-.npmrc +1 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/dev_mode_deployment/input.yaml +1 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/dev_mode_deployment/output.txt +2 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/generate_env_help/output.txt +3 -6
- octopize_deploy_tool-2.2.0/tests/fixtures/generate_env_output_dir_error/output.txt +2 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/help/output.txt +3 -2
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/invalid_port_config/output.txt +2 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/missing_subcommand/output.txt +2 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/no_telemetry/expected/.deployment-state.yaml +26 -16
- octopize_deploy_tool-2.2.0/tests/fixtures/no_telemetry/expected/.env +93 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/no_telemetry/expected/authentik/octopize-avatar-blueprint.yaml +1738 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/no_telemetry/expected/docker-compose.yml +610 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/no_telemetry/input.yaml +1 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/no_telemetry/output.txt +2 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_complete/expected/.deployment-state.yaml +25 -16
- octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/.env +92 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/branding/favicon.ico +0 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/branding/logo.png +0 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/custom-templates/email_account_confirmation.html +93 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/custom-templates/email_account_exists.html +126 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/custom-templates/email_account_invitation.html +159 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/custom-templates/email_forgotten_password.html +124 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/custom-templates/email_password_changed.html +111 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/custom-templates/email_password_reset.html +109 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/octopize-avatar-blueprint.yaml +1738 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/authentik/translations.json +24 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/non_interactive_complete/expected/docker-compose.yml +610 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_complete/output.txt +2 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_incomplete_config/output.txt +2 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_partial_config/output.txt +2 -0
- {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
- octopize_deploy_tool-2.2.0/tests/fixtures/output_dir_permission_denied/output.txt +1 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/prompt_help/input.yaml +25 -0
- octopize_deploy_tool-2.2.0/tests/fixtures/prompt_help/output.txt +82 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/resume_interrupted/first_run/output.txt +2 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/resume_interrupted/input_first_run.yaml +1 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/resume_interrupted/resume/output.txt +15 -12
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/save_config_interactive/output.txt +2 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/save_config_with_existing/input.yaml +1 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/save_config_with_existing/output.txt +2 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/template_from_local_verbose/output.txt +2 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/type_mismatch_config/output.txt +2 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/integration/test_cli_integration.py +126 -181
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/integration/test_generate_env.py +27 -72
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_authentik_blueprint.py +0 -1
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_email.py +49 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_local_source.py +1 -1
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_required.py +0 -5
- octopize_deploy_tool-2.2.0/tests/steps/test_service_urls.py +70 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_user.py +0 -2
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_user_validation.py +2 -8
- octopize_deploy_tool-2.2.0/tests/unit/test_authentik_client.py +398 -0
- octopize_deploy_tool-2.2.0/tests/unit/test_authentik_migration.py +216 -0
- octopize_deploy_tool-2.2.0/tests/unit/test_compare_helpers.py +28 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_deployment_configurator.py +57 -0
- octopize_deploy_tool-2.2.0/tests/unit/test_deployment_runner.py +195 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_generate_env_cli.py +15 -13
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_input_gatherer.py +124 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_rich_implementations.py +77 -15
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_topology_urls.py +2 -2
- octopize_deploy_tool-1.6.2/PKG-INFO +0 -256
- octopize_deploy_tool-1.6.2/README.md +0 -227
- octopize_deploy_tool-1.6.2/src/octopize_avatar_deploy/download_templates.py +0 -411
- octopize_deploy_tool-1.6.2/src/octopize_avatar_deploy/steps/email.py +0 -63
- octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment/expected/.deployment-state.yaml +0 -65
- octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment/expected/authentik/octopize-avatar-blueprint.yaml +0 -1765
- octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment/expected/docker-compose.yml +0 -603
- octopize_deploy_tool-1.6.2/tests/fixtures/dev_mode_deployment/expected/test-.npmrc +0 -1
- octopize_deploy_tool-1.6.2/tests/fixtures/generate_env_output_dir_error/output.txt +0 -2
- octopize_deploy_tool-1.6.2/tests/fixtures/missing_subcommand/output.txt +0 -2
- octopize_deploy_tool-1.6.2/tests/fixtures/missing_templates/output.txt +0 -1
- octopize_deploy_tool-1.6.2/tests/fixtures/no_telemetry/expected/authentik/octopize-avatar-blueprint.yaml +0 -1765
- octopize_deploy_tool-1.6.2/tests/fixtures/no_telemetry/expected/docker-compose.yml +0 -603
- octopize_deploy_tool-1.6.2/tests/fixtures/non_interactive_complete/expected/authentik/octopize-avatar-blueprint.yaml +0 -1765
- octopize_deploy_tool-1.6.2/tests/fixtures/non_interactive_complete/expected/docker-compose.yml +0 -603
- octopize_deploy_tool-1.6.2/tests/fixtures/output_dir_permission_denied/output.txt +0 -1
- octopize_deploy_tool-1.6.2/tests/fixtures/template_source_empty/output.txt +0 -1
- octopize_deploy_tool-1.6.2/tests/fixtures/template_source_not_found/output.txt +0 -1
- octopize_deploy_tool-1.6.2/tests/fixtures/template_source_partial/output.txt +0 -1
- octopize_deploy_tool-1.6.2/tests/unit/test_deployment_runner.py +0 -290
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/components.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/deployment_mode.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/output_spec.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/printer.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/public_url.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/state_manager.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/api_local_source.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/authentik.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/component_selection.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/database.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/local_source.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/logging.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/nginx.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/storage.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/telemetry.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/src/octopize_avatar_deploy/steps/user.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/basic_deployment/expected/nginx/nginx.conf +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/cloud_storage/expected/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/config_not_found/output.txt +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/config_round_trip_first/expected/nginx/nginx.conf +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/config_round_trip_second/expected/nginx/nginx.conf +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/dev_mode_deployment/expected/compose.override.yaml +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/dev_mode_deployment/expected/nginx/nginx.conf +0 -0
- {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
- {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
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/invalid_port_config/config.yaml +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/invalid_url_config/config.yaml +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/invalid_url_config/output.txt +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/malformed_yaml/config.yaml +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/malformed_yaml/output.txt +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/no_telemetry/expected/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_complete/config.yaml +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_complete/expected/nginx/nginx.conf +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_incomplete_config/config.yaml +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_no_config/output.txt +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/non_interactive_partial_config/config.yaml +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/resume_interrupted/input_resume.yaml +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/save_config_with_existing/config.yaml +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/fixtures/type_mismatch_config/config.yaml +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/integration/__init__.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_api_local_source.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_authentik.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_base.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_component_selection.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_database.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_logging.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_nginx.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_state_manager.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_storage.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_target_environment.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/steps/test_telemetry.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/test_cli_harness.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_components.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_generic_prompt.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_output_spec.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_printer.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_public_url.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_step_filtering.py +0 -0
- {octopize_deploy_tool-1.6.2 → octopize_deploy_tool-2.2.0}/tests/unit/test_version_validation.py +0 -0
|
@@ -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)
|