zrb 0.0.85__py3-none-any.whl → 0.0.87__py3-none-any.whl

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 (178) hide show
  1. zrb/__init__.py +4 -2
  2. zrb/action/runner.py +7 -3
  3. zrb/builtin/__init__.py +8 -22
  4. zrb/builtin/base64.py +1 -1
  5. zrb/builtin/devtool/__init__.py +20 -0
  6. zrb/builtin/devtool/devtool_install.py +45 -2
  7. zrb/builtin/devtool/docker/install.sh +8 -0
  8. zrb/builtin/devtool/gcloud/install.sh +8 -0
  9. zrb/builtin/devtool/helix/install.sh +20 -0
  10. zrb/builtin/devtool/helix/resource/config.toml +10 -0
  11. zrb/builtin/devtool/helix/resource/themes/gruvbox_transparent.toml +2 -0
  12. zrb/builtin/devtool/tmux/install.sh +8 -0
  13. zrb/builtin/devtool/zsh/install.sh +9 -0
  14. zrb/builtin/devtool/zsh/resource/config.sh +2 -0
  15. zrb/builtin/env.py +6 -3
  16. zrb/builtin/explain.py +129 -0
  17. zrb/builtin/generator/__init__.py +27 -0
  18. zrb/builtin/generator/app_generator/add.py +81 -0
  19. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/add.py +182 -0
  20. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/_common.py +38 -0
  21. zrb/builtin/generator/{fastapp/template/_automate/snake_zrb_app_name/cmd/prepare-load-test.sh → app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/cmd/app-activate-venv.sh} +0 -6
  22. zrb/builtin/generator/{simple_python_app/template/_automate/snake_zrb_app_name/cmd/start.sh → app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/cmd/app-start.sh} +0 -9
  23. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/cmd/pulumi-destroy.sh +1 -0
  24. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/cmd/pulumi-init-stack.sh +1 -0
  25. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/cmd/pulumi-up.sh +1 -0
  26. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/container.py +148 -0
  27. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/deployment.py +108 -0
  28. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/image.py +68 -0
  29. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/local.py +54 -0
  30. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/.gitignore +1 -0
  31. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/.gitignore +2 -0
  32. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/Pulumi.yaml +6 -0
  33. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/__main__.py +79 -0
  34. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/requirements.txt +3 -0
  35. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/deployment/state/.gitkeep +0 -0
  36. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/docker-compose.env +3 -0
  37. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/docker-compose.yml +20 -0
  38. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/.dockerignore +3 -0
  39. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/.gitignore +3 -0
  40. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/Dockerfile +7 -0
  41. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/main.py +20 -0
  42. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/requirements.txt +1 -0
  43. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/template.env +4 -0
  44. zrb/builtin/generator/cmd_task/add.py +14 -14
  45. zrb/builtin/generator/cmd_task/template/_automate/snake_zrb_task_name.py +1 -1
  46. zrb/builtin/generator/common/__init__.py +0 -0
  47. zrb/builtin/generator/common/helper.py +57 -0
  48. zrb/builtin/generator/common/task_factory.py +82 -0
  49. zrb/builtin/generator/{_common/input.py → common/task_input.py} +46 -1
  50. zrb/builtin/generator/docker_compose_task/add.py +16 -15
  51. zrb/builtin/generator/docker_compose_task/template/_automate/snake_zrb_task_name.py +1 -1
  52. zrb/builtin/generator/fastapp/add.py +105 -101
  53. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_common.py +2 -1
  54. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/activate-venv.sh +7 -0
  55. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/{load-test.sh → app-load-test.sh} +0 -3
  56. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/app-prepare-backend.sh +2 -0
  57. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/app-prepare-load-test.sh +3 -0
  58. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/app-start.sh +3 -0
  59. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/pulumi-destroy.sh +0 -1
  60. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/pulumi-init-stack.sh +1 -0
  61. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/pulumi-up.sh +0 -1
  62. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/container.py +1 -1
  63. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/deployment.py +9 -3
  64. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/frontend.py +3 -3
  65. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/image.py +1 -1
  66. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/load_test.py +11 -4
  67. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/local.py +13 -4
  68. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/local_microservices.py +4 -1
  69. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/test.py +3 -5
  70. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/deployment/requirements.txt +2 -2
  71. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/loadtest/requirements.txt +1 -1
  72. zrb/builtin/generator/fastapp/template/src/kebab-zrb-app-name/src/requirements.txt +3 -3
  73. zrb/builtin/generator/fastapp_crud/add.py +13 -126
  74. zrb/builtin/generator/fastapp_crud/helper.py +115 -0
  75. zrb/builtin/generator/fastapp_crud/task_factory.py +34 -0
  76. zrb/builtin/generator/fastapp_field/add.py +10 -282
  77. zrb/builtin/generator/fastapp_field/helper.py +283 -0
  78. zrb/builtin/generator/fastapp_module/add.py +22 -331
  79. zrb/builtin/generator/fastapp_module/helper.py +326 -0
  80. zrb/builtin/generator/pip_package/__init__.py +0 -0
  81. zrb/builtin/generator/pip_package/add.py +84 -0
  82. zrb/builtin/generator/pip_package/template/_automate/snake_zrb_package_name/cmd/build.sh +12 -0
  83. zrb/builtin/generator/{fastapp/template/_automate/snake_zrb_app_name/cmd/start.sh → pip_package/template/_automate/snake_zrb_package_name/cmd/install-symlink.sh} +2 -2
  84. zrb/builtin/generator/pip_package/template/_automate/snake_zrb_package_name/cmd/publish.sh +6 -0
  85. zrb/builtin/generator/pip_package/template/_automate/snake_zrb_package_name/local.py +60 -0
  86. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/.gitignore +1 -0
  87. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/README.md +79 -0
  88. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/pyproject.toml +36 -0
  89. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/requirements.txt +4 -0
  90. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/__init__.py +2 -0
  91. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/__main__.py +2 -0
  92. zrb/builtin/generator/pip_package/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/util.py +2 -0
  93. zrb/builtin/generator/project/create.py +12 -8
  94. zrb/builtin/generator/project_task/task_factory.py +167 -83
  95. zrb/builtin/generator/project_task/template/_automate/_project/build_project_images.py +1 -1
  96. zrb/builtin/generator/project_task/template/_automate/_project/deploy_project.py +1 -1
  97. zrb/builtin/generator/project_task/template/_automate/_project/destroy_project.py +1 -1
  98. zrb/builtin/generator/project_task/template/_automate/_project/push_project_images.py +1 -1
  99. zrb/builtin/generator/project_task/template/_automate/_project/remove_project_containers.py +1 -1
  100. zrb/builtin/generator/project_task/template/_automate/_project/start_project.py +1 -1
  101. zrb/builtin/generator/project_task/template/_automate/_project/start_project_containers.py +1 -1
  102. zrb/builtin/generator/project_task/template/_automate/_project/stop_project_containers.py +1 -1
  103. zrb/builtin/generator/python_task/add.py +14 -16
  104. zrb/builtin/generator/python_task/template/_automate/snake_zrb_task_name.py +1 -1
  105. zrb/builtin/generator/simple_python_app/add.py +95 -99
  106. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/cmd/app-activate-venv.sh +7 -0
  107. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/cmd/app-start.sh +6 -0
  108. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/cmd/pulumi-destroy.sh +0 -1
  109. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/cmd/pulumi-init-stack.sh +1 -0
  110. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/cmd/pulumi-up.sh +0 -1
  111. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/container.py +1 -1
  112. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/deployment.py +9 -3
  113. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/image.py +1 -1
  114. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/local.py +5 -2
  115. zrb/builtin/generator/simple_python_app/template/src/kebab-zrb-app-name/deployment/requirements.txt +2 -2
  116. zrb/builtin/git.py +1 -1
  117. zrb/builtin/{_group.py → group.py} +2 -5
  118. zrb/builtin/md5.py +1 -1
  119. zrb/builtin/project.py +1 -1
  120. zrb/builtin/ubuntu.py +1 -1
  121. zrb/config/config.py +8 -6
  122. zrb/helper/accessories/color.py +5 -1
  123. zrb/helper/accessories/icon.py +2 -0
  124. zrb/helper/accessories/name.py +2 -0
  125. zrb/helper/advertisement.py +1 -0
  126. zrb/helper/cli.py +5 -1
  127. zrb/helper/codemod/add_argument_to_function.py +3 -0
  128. zrb/helper/codemod/add_argument_to_function_call.py +3 -0
  129. zrb/helper/codemod/add_assert_resource.py +2 -0
  130. zrb/helper/codemod/add_function_call.py +2 -0
  131. zrb/helper/codemod/add_import_module.py +3 -0
  132. zrb/helper/codemod/add_key_value_to_dict.py +2 -0
  133. zrb/helper/codemod/add_property_to_class.py +3 -0
  134. zrb/helper/codemod/add_upstream_to_task.py +3 -0
  135. zrb/helper/codemod/append_code_to_function.py +3 -0
  136. zrb/helper/codemod/format_code.py +2 -0
  137. zrb/helper/default_env.py +2 -0
  138. zrb/helper/docker_compose/fetch_external_env.py +3 -0
  139. zrb/helper/docker_compose/file.py +4 -0
  140. zrb/helper/env_map/fetch.py +7 -0
  141. zrb/helper/file/text.py +6 -0
  142. zrb/helper/git/detect_changes.py +4 -0
  143. zrb/helper/loader/load_module.py +2 -0
  144. zrb/helper/map/conversion.py +2 -0
  145. zrb/helper/string/conversion.py +5 -0
  146. zrb/helper/string/double_quote.py +6 -2
  147. zrb/helper/string/jinja.py +2 -0
  148. zrb/helper/string/parse_replacement.py +2 -0
  149. zrb/helper/util.py +13 -0
  150. zrb/task/any_task.py +2 -2
  151. zrb/task/base_task.py +16 -16
  152. zrb/task/base_task_composite.py +12 -9
  153. zrb/task/cmd_task.py +23 -12
  154. zrb/task/decorator.py +2 -2
  155. zrb/task/docker_compose_task.py +5 -5
  156. zrb/task/flow_task.py +5 -5
  157. zrb/task/http_checker.py +2 -2
  158. zrb/task/path_checker.py +2 -2
  159. zrb/task/port_checker.py +2 -2
  160. zrb/task/resource_maker.py +3 -5
  161. zrb/task_input/any_input.py +23 -0
  162. zrb/task_input/base_input.py +46 -43
  163. zrb/task_input/float_input.py +0 -1
  164. {zrb-0.0.85.dist-info → zrb-0.0.87.dist-info}/METADATA +16 -17
  165. {zrb-0.0.85.dist-info → zrb-0.0.87.dist-info}/RECORD +175 -122
  166. zrb/builtin/generator/_common/helper.py +0 -79
  167. zrb/builtin/generator/fastapp_crud/add_navigation.py +0 -32
  168. zrb/builtin/principle.py +0 -66
  169. /zrb/builtin/generator/{_common → app_generator}/__init__.py +0 -0
  170. /zrb/{config.toml → builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/__init__.py} +0 -0
  171. /zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/{build-frontend.sh → app-build-frontend.sh} +0 -0
  172. /zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/cmd/{test.sh → app-test.sh} +0 -0
  173. /zrb/builtin/generator/{fastapp/template/_automate/snake_zrb_app_name/cmd/prepare-backend.sh → pip_package/template/_automate/snake_zrb_package_name/cmd/prepare-venv.sh} +0 -0
  174. /zrb/task_input/{_constant.py → constant.py} +0 -0
  175. /zrb/task_input/{input.py → task_input.py} +0 -0
  176. {zrb-0.0.85.dist-info → zrb-0.0.87.dist-info}/LICENSE +0 -0
  177. {zrb-0.0.85.dist-info → zrb-0.0.87.dist-info}/WHEEL +0 -0
  178. {zrb-0.0.85.dist-info → zrb-0.0.87.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,182 @@
1
+ from typing import Any
2
+ from zrb.builtin.group import project_add_group
3
+ from zrb import Task, python_task, ResourceMaker, runner
4
+ from zrb.builtin.generator.common.task_input import (
5
+ project_dir_input, app_name_input, app_image_name_input, env_prefix_input,
6
+ http_port_input
7
+ )
8
+ from zrb.builtin.generator.common.helper import (
9
+ validate_existing_project_dir, validate_inexisting_automation
10
+ )
11
+ from zrb.builtin.generator.common.task_factory import create_register_module
12
+ from zrb.builtin.generator.project_task.task_factory import (
13
+ create_ensure_project_tasks, create_add_build_images_upstream,
14
+ create_add_deploy_upstream, create_add_destroy_upstream,
15
+ create_add_push_images_upstream, create_add_remove_containers_upstream,
16
+ create_add_start_containers_upstream, create_add_start_upstream,
17
+ create_add_stop_containers_upstream
18
+ )
19
+
20
+ import os
21
+
22
+ CURRENT_DIR = os.path.dirname(__file__)
23
+ SNAKE_APP_NAME_TPL = '{{util.to_snake_case(input.app_name)}}'
24
+ KEBAB_APP_NAME_TPL = '{{util.to_kebab_case(app_name)}}'
25
+
26
+ ###############################################################################
27
+ # Task Definitions
28
+ ###############################################################################
29
+
30
+
31
+ @python_task(
32
+ name='validate',
33
+ inputs=[
34
+ project_dir_input,
35
+ app_name_input
36
+ ],
37
+ )
38
+ async def validate(*args: Any, **kwargs: Any):
39
+ project_dir = kwargs.get('project_dir')
40
+ validate_existing_project_dir(project_dir)
41
+ app_name = kwargs.get('app_name')
42
+ validate_inexisting_automation(project_dir, app_name)
43
+ source_dir = os.path.join(project_dir, 'src', f'{KEBAB_APP_NAME_TPL}')
44
+ if os.path.exists(source_dir):
45
+ raise Exception(f'Source already exists: {source_dir}')
46
+
47
+
48
+ copy_resource = ResourceMaker(
49
+ name='copy-resource',
50
+ inputs=[
51
+ project_dir_input,
52
+ app_name_input,
53
+ app_image_name_input,
54
+ http_port_input,
55
+ env_prefix_input,
56
+ ],
57
+ upstreams=[validate],
58
+ replacements={
59
+ 'zrbAppName': '{{input.app_name}}',
60
+ 'zrbAppHttpPort': '{{util.coalesce(input.http_port, "3000")}}',
61
+ 'ZRB_ENV_PREFIX': '{{util.coalesce(input.env_prefix, "MY").upper()}}',
62
+ 'zrb-app-image-name': '{{input.app_image_name}}'
63
+ },
64
+ template_path=os.path.join(CURRENT_DIR, 'template'),
65
+ destination_path='{{ input.project_dir }}',
66
+ excludes=[
67
+ '*/deployment/venv',
68
+ '*/__pycache__',
69
+ ]
70
+ )
71
+
72
+ register_local_module = create_register_module(
73
+ module_path=f'_automate.{SNAKE_APP_NAME_TPL}.local',
74
+ alias=f'{SNAKE_APP_NAME_TPL}_local',
75
+ inputs=[app_name_input],
76
+ upstreams=[copy_resource]
77
+ )
78
+
79
+ register_container_module = create_register_module(
80
+ module_path=f'_automate.{SNAKE_APP_NAME_TPL}.container',
81
+ alias=f'{SNAKE_APP_NAME_TPL}_container',
82
+ inputs=[app_name_input],
83
+ upstreams=[register_local_module]
84
+ )
85
+
86
+ register_image_module = create_register_module(
87
+ module_path=f'_automate.{SNAKE_APP_NAME_TPL}.image',
88
+ alias=f'{SNAKE_APP_NAME_TPL}_image',
89
+ inputs=[app_name_input],
90
+ upstreams=[register_container_module]
91
+ )
92
+
93
+ register_deployment_module = create_register_module(
94
+ module_path=f'_automate.{SNAKE_APP_NAME_TPL}.deployment',
95
+ alias=f'{SNAKE_APP_NAME_TPL}_deployment',
96
+ inputs=[app_name_input],
97
+ upstreams=[register_image_module]
98
+ )
99
+
100
+ ensure_project_tasks = create_ensure_project_tasks(
101
+ upstreams=[copy_resource]
102
+ )
103
+
104
+ add_start_upstream = create_add_start_upstream(
105
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.local',
106
+ upstream_task_var=f'start_{SNAKE_APP_NAME_TPL}',
107
+ upstreams=[ensure_project_tasks],
108
+ inputs=[app_name_input]
109
+ )
110
+
111
+ add_start_container_upstream = create_add_start_containers_upstream(
112
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.container',
113
+ upstream_task_var=f'start_{SNAKE_APP_NAME_TPL}_container',
114
+ upstreams=[ensure_project_tasks],
115
+ inputs=[app_name_input]
116
+ )
117
+
118
+ add_stop_container_upstream = create_add_stop_containers_upstream(
119
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.container',
120
+ upstream_task_var=f'stop_{SNAKE_APP_NAME_TPL}_container',
121
+ upstreams=[ensure_project_tasks],
122
+ inputs=[app_name_input]
123
+ )
124
+
125
+ add_remove_container_upstream = create_add_remove_containers_upstream(
126
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.container',
127
+ upstream_task_var=f'remove_{SNAKE_APP_NAME_TPL}_container',
128
+ upstreams=[ensure_project_tasks],
129
+ inputs=[app_name_input]
130
+ )
131
+
132
+ add_build_image_upstream = create_add_build_images_upstream(
133
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.image',
134
+ upstream_task_var=f'build_{SNAKE_APP_NAME_TPL}_image',
135
+ upstreams=[ensure_project_tasks],
136
+ inputs=[app_name_input]
137
+ )
138
+
139
+ add_push_image_upstream = create_add_push_images_upstream(
140
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.image',
141
+ upstream_task_var=f'push_{SNAKE_APP_NAME_TPL}_image',
142
+ upstreams=[ensure_project_tasks],
143
+ inputs=[app_name_input]
144
+ )
145
+
146
+ add_deploy_upstream = create_add_deploy_upstream(
147
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.deployment',
148
+ upstream_task_var=f'deploy_{SNAKE_APP_NAME_TPL}',
149
+ upstreams=[ensure_project_tasks],
150
+ inputs=[app_name_input]
151
+ )
152
+
153
+ add_destroy_upstream = create_add_destroy_upstream(
154
+ upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.deployment',
155
+ upstream_task_var=f'destroy_{SNAKE_APP_NAME_TPL}',
156
+ upstreams=[ensure_project_tasks],
157
+ inputs=[app_name_input]
158
+ )
159
+
160
+
161
+ @python_task(
162
+ name='simple-python-app',
163
+ group=project_add_group,
164
+ upstreams=[
165
+ register_local_module,
166
+ register_container_module,
167
+ register_image_module,
168
+ register_deployment_module,
169
+ add_start_upstream,
170
+ add_start_container_upstream,
171
+ add_stop_container_upstream,
172
+ add_remove_container_upstream,
173
+ add_build_image_upstream,
174
+ add_push_image_upstream,
175
+ add_deploy_upstream,
176
+ add_destroy_upstream
177
+ ],
178
+ runner=runner
179
+ )
180
+ async def add_simple_python_app(*args: Any, **kwargs: Any):
181
+ task: Task = kwargs.get('_task')
182
+ task.print_out('Success')
@@ -0,0 +1,38 @@
1
+ from zrb import BoolInput, StrInput
2
+ import os
3
+
4
+ ###############################################################################
5
+ # Constants
6
+ ###############################################################################
7
+
8
+ CURRENT_DIR = os.path.dirname(__file__)
9
+ PROJECT_DIR = os.path.abspath(os.path.join(CURRENT_DIR, '..', '..'))
10
+ RESOURCE_DIR = os.path.join(PROJECT_DIR, 'src', 'kebab-zrb-app-name')
11
+ DEPLOYMENT_DIR = os.path.join(RESOURCE_DIR, 'deployment')
12
+ APP_DIR = os.path.join(RESOURCE_DIR, 'src')
13
+ TEMPLATE_ENV_FILE_NAME = os.path.join(APP_DIR, 'template.env')
14
+
15
+ ###############################################################################
16
+ # Input Definitions
17
+ ###############################################################################
18
+
19
+ local_input = BoolInput(
20
+ name='local-kebab-zrb-app-name',
21
+ description='Use "kebab-zrb-app-name" on local machine',
22
+ prompt='Use "kebab-zrb-app-name" on local machine?',
23
+ default=True
24
+ )
25
+
26
+ https_input = BoolInput(
27
+ name='kebab-zrb-app-name-https',
28
+ description='Whether "kebab-zrb-app-name" run on HTTPS',
29
+ prompt='Is "kebab-zrb-app-name" run on HTTPS?',
30
+ default=False
31
+ )
32
+
33
+ host_input = StrInput(
34
+ name='kebab-zrb-app-name-host',
35
+ description='Hostname of "kebab-zrb-app-name"',
36
+ prompt='Hostname of "kebab-zrb-app-name"',
37
+ default='localhost'
38
+ )
@@ -1,5 +1,3 @@
1
- PYTHONUNBUFFERED=1
2
-
3
1
  if [ ! -d .venv ]
4
2
  then
5
3
  echo "Init virtual environment"
@@ -7,7 +5,3 @@ then
7
5
  fi
8
6
  echo "Activate virtual environment"
9
7
  source .venv/bin/activate
10
-
11
- echo "Install packages"
12
- pip install -r requirements.txt
13
-
@@ -1,13 +1,4 @@
1
1
  PYTHONUNBUFFERED=1
2
-
3
- if [ ! -d .venv ]
4
- then
5
- echo "Init virtual environment"
6
- python -m venv .venv
7
- fi
8
- echo "Activate virtual environment"
9
- source .venv/bin/activate
10
-
11
2
  echo "Install packages"
12
3
  pip install -r requirements.txt
13
4
 
@@ -0,0 +1 @@
1
+ (pulumi stack select {{input.snake_zrb_app_name_pulumi_stack}} || pulumi stack init {{input.snake_zrb_app_name_pulumi_stack}})
@@ -0,0 +1,148 @@
1
+ from zrb import (
2
+ DockerComposeTask, Env, EnvFile, HTTPChecker, ServiceConfig, runner
3
+ )
4
+ from zrb.builtin.group import project_group
5
+ from ._common import (
6
+ RESOURCE_DIR, APP_DIR, local_input, host_input, https_input
7
+ )
8
+ from .image import (
9
+ image_input, image_env, build_snake_zrb_app_name_image
10
+ )
11
+ import os
12
+
13
+ ###############################################################################
14
+ # Env File Definitions
15
+ ###############################################################################
16
+
17
+ compose_env_file = EnvFile(
18
+ env_file=os.path.join(RESOURCE_DIR, 'docker-compose.env'),
19
+ prefix='CONTAINER_ZRB_ENV_PREFIX'
20
+ )
21
+
22
+ ###############################################################################
23
+ # Env Definitions
24
+ ###############################################################################
25
+
26
+ host_port_env = Env(
27
+ name='HOST_PORT',
28
+ os_name='CONTAINER_ZRB_ENV_PREFIX_HOST_PORT',
29
+ default='zrbAppHttpPort'
30
+ )
31
+
32
+ ###############################################################################
33
+ # Service Config Definitions
34
+ ###############################################################################
35
+
36
+ snake_zrb_app_name_service_config = ServiceConfig(
37
+ env_files=[
38
+ EnvFile(
39
+ env_file=os.path.join(APP_DIR, 'template.env'),
40
+ prefix='CONTAINER_ZRB_ENV_PREFIX'
41
+ )
42
+ ]
43
+ )
44
+
45
+ ###############################################################################
46
+ # Task Definitions
47
+ ###############################################################################
48
+
49
+ remove_snake_zrb_app_name_container = DockerComposeTask(
50
+ icon='💨',
51
+ name='remove-kebab-zrb-app-name-container',
52
+ description='Remove human readable zrb app name container',
53
+ group=project_group,
54
+ cwd=RESOURCE_DIR,
55
+ compose_cmd='down',
56
+ compose_env_prefix='CONTAINER_ZRB_ENV_PREFIX',
57
+ compose_service_configs={
58
+ 'snake_zrb_app_name': snake_zrb_app_name_service_config
59
+ },
60
+ env_files=[compose_env_file],
61
+ envs=[
62
+ image_env,
63
+ host_port_env,
64
+ ],
65
+ )
66
+ runner.register(remove_snake_zrb_app_name_container)
67
+
68
+ stop_snake_zrb_app_name_container = DockerComposeTask(
69
+ icon='⛔',
70
+ name='stop-kebab-zrb-app-name-container',
71
+ description='Stop human readable zrb app name container',
72
+ group=project_group,
73
+ cwd=RESOURCE_DIR,
74
+ compose_cmd='stop',
75
+ compose_env_prefix='CONTAINER_ZRB_ENV_PREFIX',
76
+ compose_service_configs={
77
+ 'snake_zrb_app_name': snake_zrb_app_name_service_config
78
+ },
79
+ env_files=[compose_env_file],
80
+ envs=[
81
+ image_env,
82
+ host_port_env,
83
+ ],
84
+ )
85
+ runner.register(stop_snake_zrb_app_name_container)
86
+
87
+ init_snake_zrb_app_name_container = DockerComposeTask(
88
+ icon='🔥',
89
+ name='init-kebab-zrb-app-name-container',
90
+ inputs=[
91
+ local_input,
92
+ host_input,
93
+ image_input,
94
+ ],
95
+ skip_execution='{{not input.local_snake_zrb_app_name}}',
96
+ upstreams=[
97
+ build_snake_zrb_app_name_image,
98
+ remove_snake_zrb_app_name_container
99
+ ],
100
+ cwd=RESOURCE_DIR,
101
+ compose_cmd='up',
102
+ compose_flags=['-d'],
103
+ compose_env_prefix='CONTAINER_ZRB_ENV_PREFIX',
104
+ compose_service_configs={
105
+ 'snake_zrb_app_name': snake_zrb_app_name_service_config
106
+ },
107
+ env_files=[compose_env_file],
108
+ envs=[
109
+ image_env,
110
+ host_port_env,
111
+ ],
112
+ )
113
+
114
+ start_snake_zrb_app_name_container = DockerComposeTask(
115
+ icon='🐳',
116
+ name='start-kebab-zrb-app-name-container',
117
+ description='Start human readable zrb app name container',
118
+ group=project_group,
119
+ inputs=[
120
+ local_input,
121
+ host_input,
122
+ https_input,
123
+ image_input,
124
+ ],
125
+ skip_execution='{{not input.local_snake_zrb_app_name}}',
126
+ upstreams=[init_snake_zrb_app_name_container],
127
+ cwd=RESOURCE_DIR,
128
+ compose_cmd='logs',
129
+ compose_flags=['-f'],
130
+ compose_env_prefix='CONTAINER_ZRB_ENV_PREFIX',
131
+ compose_service_configs={
132
+ 'snake_zrb_app_name': snake_zrb_app_name_service_config
133
+ },
134
+ env_files=[compose_env_file],
135
+ envs=[
136
+ image_env,
137
+ host_port_env,
138
+ ],
139
+ checkers=[
140
+ HTTPChecker(
141
+ name='check-kebab-zrb-app-name',
142
+ host='{{input.snake_zrb_app_name_host}}',
143
+ port='{{env.HOST_PORT}}',
144
+ is_https='{{input.snake_zrb_app_name_https}}'
145
+ )
146
+ ]
147
+ )
148
+ runner.register(start_snake_zrb_app_name_container)
@@ -0,0 +1,108 @@
1
+ from zrb import CmdTask, Env, EnvFile, IntInput, StrInput, runner
2
+ from zrb.builtin.group import project_group
3
+ from .image import push_snake_zrb_app_name_image, image_input, image_env
4
+ from ._common import (
5
+ CURRENT_DIR, DEPLOYMENT_DIR, TEMPLATE_ENV_FILE_NAME
6
+ )
7
+ import os
8
+
9
+ ###############################################################################
10
+ # Input Definitions
11
+ ###############################################################################
12
+
13
+ replica_input = IntInput(
14
+ name='kebab-zrb-app-name-replica',
15
+ description='Replica of "kebab-zrb-app-name"',
16
+ prompt='Replica of "kebab-zrb-app-name"',
17
+ default=1,
18
+ )
19
+
20
+ pulumi_stack_input = StrInput(
21
+ name='kebab-zrb-app-name-pulumi-stack',
22
+ description='Pulumi stack name for "kebab-zrb-app-name"',
23
+ prompt='Pulumi stack name for "kebab-zrb-app-name"',
24
+ default=os.getenv('ZRB_ENV', 'dev')
25
+ )
26
+
27
+ ###############################################################################
28
+ # Env File Definitions
29
+ ###############################################################################
30
+
31
+ deployment_app_env_file = EnvFile(
32
+ env_file=TEMPLATE_ENV_FILE_NAME, prefix='DEPLOYMENT_APP_ZRB_ENV_PREFIX'
33
+ )
34
+
35
+ ###############################################################################
36
+ # Env Definitions
37
+ ###############################################################################
38
+
39
+ pulumi_backend_url_env = Env(
40
+ name='PULUMI_BACKEND_URL',
41
+ os_name='PULUMI_ZRB_ENV_PREFIX_BACKEND_URL',
42
+ default=f'file://{DEPLOYMENT_DIR}/state'
43
+ )
44
+
45
+ pulumi_config_passphrase_env = Env(
46
+ name='PULUMI_CONFIG_PASSPHRASE',
47
+ os_name='PULUMI_ZRB_ENV_PREFIX_CONFIG_PASSPHRASE',
48
+ default='secret'
49
+ )
50
+
51
+ deployment_replica_env = Env(
52
+ name='REPLICA',
53
+ os_name='DEPLOYMENT_ZRB_ENV_PREFIX',
54
+ default='{{input.snake_zrb_app_name_replica}}'
55
+ )
56
+
57
+ ###############################################################################
58
+ # Task Definitions
59
+ ###############################################################################
60
+
61
+ deploy_snake_zrb_app_name = CmdTask(
62
+ icon='🚧',
63
+ name='deploy-kebab-zrb-app-name',
64
+ description='Deploy human readable zrb app name',
65
+ group=project_group,
66
+ inputs=[
67
+ image_input,
68
+ replica_input,
69
+ pulumi_stack_input,
70
+ ],
71
+ upstreams=[push_snake_zrb_app_name_image],
72
+ cwd=DEPLOYMENT_DIR,
73
+ env_files=[deployment_app_env_file],
74
+ envs=[
75
+ pulumi_backend_url_env,
76
+ pulumi_config_passphrase_env,
77
+ image_env,
78
+ deployment_replica_env,
79
+ ],
80
+ cmd_path=[
81
+ os.path.join(CURRENT_DIR, 'cmd', 'pulumi-init-stack.sh'),
82
+ os.path.join(CURRENT_DIR, 'cmd', 'pulumi-up.sh'),
83
+ ]
84
+ )
85
+ runner.register(deploy_snake_zrb_app_name)
86
+
87
+ destroy_snake_zrb_app_name = CmdTask(
88
+ icon='💨',
89
+ name='destroy-kebab-zrb-app-name',
90
+ description='Remove human readable zrb app name deployment',
91
+ group=project_group,
92
+ inputs=[
93
+ pulumi_stack_input,
94
+ ],
95
+ cwd=DEPLOYMENT_DIR,
96
+ env_files=[deployment_app_env_file],
97
+ envs=[
98
+ pulumi_backend_url_env,
99
+ pulumi_config_passphrase_env,
100
+ image_env,
101
+ deployment_replica_env,
102
+ ],
103
+ cmd_path=[
104
+ os.path.join(CURRENT_DIR, 'cmd', 'pulumi-init-stack.sh'),
105
+ os.path.join(CURRENT_DIR, 'cmd', 'pulumi-destroy.sh'),
106
+ ]
107
+ )
108
+ runner.register(destroy_snake_zrb_app_name)
@@ -0,0 +1,68 @@
1
+ from zrb import DockerComposeTask, Env, StrInput, runner
2
+ from zrb.builtin.group import project_group
3
+ from ._common import (
4
+ RESOURCE_DIR, local_input
5
+ )
6
+
7
+ ###############################################################################
8
+ # Input Definitions
9
+ ###############################################################################
10
+
11
+ image_input = StrInput(
12
+ name='kebab-zrb-app-name-image',
13
+ description='Image name of "kebab-zrb-app-name"',
14
+ prompt='Image name of "kebab-zrb-app-name"',
15
+ default='zrb-app-image-name:latest'
16
+ )
17
+
18
+
19
+ ###############################################################################
20
+ # Env Definitions
21
+ ###############################################################################
22
+
23
+ image_env = Env(
24
+ name='IMAGE',
25
+ os_name='CONTAINER_ZRB_ENV_PREFIX_IMAGE',
26
+ default='{{input.snake_zrb_app_name_image}}'
27
+ )
28
+
29
+ ###############################################################################
30
+ # Task Definitions
31
+ ###############################################################################
32
+
33
+ build_snake_zrb_app_name_image = DockerComposeTask(
34
+ icon='🏭',
35
+ name='build-kebab-zrb-app-name-image',
36
+ description='Build human readable zrb app name image',
37
+ group=project_group,
38
+ inputs=[
39
+ local_input,
40
+ image_input,
41
+ ],
42
+ envs=[image_env],
43
+ skip_execution='{{not input.local_snake_zrb_app_name}}',
44
+ cwd=RESOURCE_DIR,
45
+ compose_cmd='build',
46
+ compose_flags=[
47
+ '--no-cache'
48
+ ],
49
+ compose_env_prefix='CONTAINER_ZRB_ENV_PREFIX',
50
+ )
51
+ runner.register(build_snake_zrb_app_name_image)
52
+
53
+ push_snake_zrb_app_name_image = DockerComposeTask(
54
+ icon='📰',
55
+ name='push-kebab-zrb-app-name-image',
56
+ description='Push human readable zrb app name image',
57
+ group=project_group,
58
+ inputs=[
59
+ local_input,
60
+ image_input,
61
+ ],
62
+ envs=[image_env],
63
+ upstreams=[build_snake_zrb_app_name_image],
64
+ cwd=RESOURCE_DIR,
65
+ compose_cmd='push',
66
+ compose_env_prefix='CONTAINER_ZRB_ENV_PREFIX',
67
+ )
68
+ runner.register(push_snake_zrb_app_name_image)
@@ -0,0 +1,54 @@
1
+ from zrb import CmdTask, Env, EnvFile, HTTPChecker, runner
2
+ from zrb.builtin.group import project_group
3
+ from ._common import (
4
+ CURRENT_DIR, APP_DIR, TEMPLATE_ENV_FILE_NAME,
5
+ local_input, host_input, https_input
6
+ )
7
+ import os
8
+
9
+ ###############################################################################
10
+ # Env File Definitions
11
+ ###############################################################################
12
+
13
+ app_env_file = EnvFile(
14
+ env_file=TEMPLATE_ENV_FILE_NAME, prefix='ZRB_ENV_PREFIX'
15
+ )
16
+
17
+ ###############################################################################
18
+ # Task Definitions
19
+ ###############################################################################
20
+
21
+ start_snake_zrb_app_name = CmdTask(
22
+ icon='🚤',
23
+ name='start-kebab-zrb-app-name',
24
+ description='Start human readable zrb app name',
25
+ group=project_group,
26
+ inputs=[
27
+ local_input,
28
+ host_input,
29
+ https_input
30
+ ],
31
+ skip_execution='{{not input.local_snake_zrb_app_name}}',
32
+ cwd=APP_DIR,
33
+ env_files=[app_env_file],
34
+ envs=[
35
+ Env(
36
+ name='APP_PORT',
37
+ os_name='ZRB_ENV_PREFIX_APP_PORT',
38
+ default='zrbAppHttpPort'
39
+ )
40
+ ],
41
+ cmd_path=[
42
+ os.path.join(CURRENT_DIR, 'cmd', 'app-activate-venv.sh'),
43
+ os.path.join(CURRENT_DIR, 'cmd', 'app-start.sh'),
44
+ ],
45
+ checkers=[
46
+ HTTPChecker(
47
+ name='check-kebab-zrb-app-name',
48
+ host='{{input.snake_zrb_app_name_host}}',
49
+ port='{{env.APP_PORT}}',
50
+ is_https='{{input.snake_zrb_app_name_https}}'
51
+ )
52
+ ]
53
+ )
54
+ runner.register(start_snake_zrb_app_name)
@@ -0,0 +1,6 @@
1
+ name: kebab-zrb-app-name
2
+ runtime:
3
+ name: python
4
+ options:
5
+ virtualenv: venv
6
+ description: A minimal Kubernetes Python Pulumi program