zrb 0.0.86__py3-none-any.whl → 0.0.88__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 (121) hide show
  1. zrb/__init__.py +3 -1
  2. zrb/action/runner.py +7 -3
  3. zrb/builtin/__init__.py +1 -1
  4. zrb/builtin/base64.py +1 -1
  5. zrb/builtin/devtool/devtool_install.py +13 -4
  6. zrb/builtin/devtool/helix/install-language-server.sh +33 -0
  7. zrb/builtin/env.py +6 -3
  8. zrb/builtin/explain.py +3 -1
  9. zrb/builtin/generator/__init__.py +4 -8
  10. zrb/builtin/generator/app_generator/add.py +15 -6
  11. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/add.py +62 -52
  12. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/cmd/app-start.sh +1 -6
  13. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/container.py +1 -1
  14. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/deployment.py +2 -2
  15. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/image.py +1 -1
  16. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/_automate/snake_zrb_app_name/local.py +4 -2
  17. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/.gitignore +2 -0
  18. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/Dockerfile +10 -5
  19. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/go.work +1 -0
  20. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/main.go +28 -0
  21. zrb/builtin/generator/cmd_task/add.py +6 -6
  22. zrb/builtin/generator/cmd_task/template/_automate/snake_zrb_task_name.py +1 -1
  23. zrb/builtin/generator/{_common → common}/helper.py +6 -0
  24. zrb/builtin/generator/{_common → common}/task_factory.py +9 -5
  25. zrb/builtin/generator/docker_compose_task/add.py +8 -8
  26. zrb/builtin/generator/docker_compose_task/template/_automate/snake_zrb_task_name.py +1 -1
  27. zrb/builtin/generator/fastapp/add.py +24 -24
  28. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/_common.py +2 -1
  29. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/container.py +1 -1
  30. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/deployment.py +1 -1
  31. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/frontend.py +1 -1
  32. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/image.py +1 -1
  33. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/load_test.py +3 -2
  34. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/local.py +1 -1
  35. zrb/builtin/generator/fastapp/template/_automate/snake_zrb_app_name/test.py +2 -4
  36. zrb/builtin/generator/fastapp_crud/add.py +8 -121
  37. zrb/builtin/generator/fastapp_crud/helper.py +115 -0
  38. zrb/builtin/generator/fastapp_crud/{add_navigation.py → task_factory.py} +5 -3
  39. zrb/builtin/generator/fastapp_field/add.py +8 -280
  40. zrb/builtin/generator/fastapp_field/helper.py +283 -0
  41. zrb/builtin/generator/fastapp_module/add.py +19 -328
  42. zrb/builtin/generator/fastapp_module/helper.py +326 -0
  43. zrb/builtin/generator/pip_package/add.py +8 -8
  44. zrb/builtin/generator/pip_package/template/_automate/snake_zrb_package_name/local.py +1 -1
  45. zrb/builtin/generator/project/create.py +10 -3
  46. zrb/builtin/generator/project/template/template.env +1 -1
  47. zrb/builtin/generator/project_task/task_factory.py +33 -21
  48. zrb/builtin/generator/project_task/template/_automate/_project/build_project_images.py +1 -1
  49. zrb/builtin/generator/project_task/template/_automate/_project/deploy_project.py +1 -1
  50. zrb/builtin/generator/project_task/template/_automate/_project/destroy_project.py +1 -1
  51. zrb/builtin/generator/project_task/template/_automate/_project/push_project_images.py +1 -1
  52. zrb/builtin/generator/project_task/template/_automate/_project/remove_project_containers.py +1 -1
  53. zrb/builtin/generator/project_task/template/_automate/_project/start_project.py +1 -1
  54. zrb/builtin/generator/project_task/template/_automate/_project/start_project_containers.py +1 -1
  55. zrb/builtin/generator/project_task/template/_automate/_project/stop_project_containers.py +1 -1
  56. zrb/builtin/generator/python_task/add.py +6 -6
  57. zrb/builtin/generator/python_task/template/_automate/snake_zrb_task_name.py +1 -1
  58. zrb/builtin/generator/simple_python_app/add.py +28 -30
  59. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/container.py +1 -1
  60. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/deployment.py +1 -1
  61. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/image.py +1 -1
  62. zrb/builtin/generator/simple_python_app/template/_automate/snake_zrb_app_name/local.py +1 -1
  63. zrb/builtin/git.py +1 -1
  64. zrb/builtin/md5.py +1 -1
  65. zrb/builtin/project.py +1 -1
  66. zrb/builtin/ubuntu.py +3 -3
  67. zrb/config/config.py +8 -6
  68. zrb/helper/accessories/color.py +5 -1
  69. zrb/helper/accessories/icon.py +2 -0
  70. zrb/helper/accessories/name.py +2 -0
  71. zrb/helper/advertisement.py +1 -0
  72. zrb/helper/cli.py +5 -1
  73. zrb/helper/codemod/add_argument_to_function.py +3 -0
  74. zrb/helper/codemod/add_argument_to_function_call.py +3 -0
  75. zrb/helper/codemod/add_assert_resource.py +2 -0
  76. zrb/helper/codemod/add_function_call.py +2 -0
  77. zrb/helper/codemod/add_import_module.py +3 -0
  78. zrb/helper/codemod/add_key_value_to_dict.py +2 -0
  79. zrb/helper/codemod/add_property_to_class.py +3 -0
  80. zrb/helper/codemod/add_upstream_to_task.py +3 -0
  81. zrb/helper/codemod/append_code_to_function.py +3 -0
  82. zrb/helper/codemod/format_code.py +2 -0
  83. zrb/helper/default_env.py +2 -0
  84. zrb/helper/docker_compose/fetch_external_env.py +3 -0
  85. zrb/helper/docker_compose/file.py +4 -0
  86. zrb/helper/env_map/fetch.py +7 -0
  87. zrb/helper/file/text.py +4 -0
  88. zrb/helper/git/detect_changes.py +4 -0
  89. zrb/helper/loader/load_module.py +2 -0
  90. zrb/helper/map/conversion.py +2 -0
  91. zrb/helper/string/conversion.py +5 -0
  92. zrb/helper/string/double_quote.py +6 -2
  93. zrb/helper/string/jinja.py +2 -0
  94. zrb/helper/string/parse_replacement.py +2 -0
  95. zrb/helper/util.py +13 -0
  96. zrb/task/any_task.py +2 -2
  97. zrb/task/base_task.py +15 -15
  98. zrb/task/base_task_composite.py +3 -3
  99. zrb/task/cmd_task.py +2 -2
  100. zrb/task/decorator.py +2 -2
  101. zrb/task/docker_compose_task.py +2 -2
  102. zrb/task/flow_task.py +5 -5
  103. zrb/task/http_checker.py +2 -2
  104. zrb/task/path_checker.py +2 -2
  105. zrb/task/port_checker.py +2 -2
  106. zrb/task/resource_maker.py +3 -5
  107. zrb/task_input/any_input.py +23 -0
  108. zrb/task_input/base_input.py +46 -43
  109. zrb/task_input/float_input.py +0 -1
  110. {zrb-0.0.86.dist-info → zrb-0.0.88.dist-info}/METADATA +1 -1
  111. {zrb-0.0.86.dist-info → zrb-0.0.88.dist-info}/RECORD +118 -114
  112. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/main.py +0 -20
  113. zrb/builtin/generator/app_generator/template/_automate/snake_zrb_meta_template_name/template/src/kebab-zrb-app-name/src/requirements.txt +0 -1
  114. zrb/config.toml +0 -0
  115. /zrb/builtin/generator/{_common → common}/__init__.py +0 -0
  116. /zrb/builtin/generator/{_common → common}/task_input.py +0 -0
  117. /zrb/builtin/{_group.py → group.py} +0 -0
  118. /zrb/task_input/{_constant.py → constant.py} +0 -0
  119. {zrb-0.0.86.dist-info → zrb-0.0.88.dist-info}/LICENSE +0 -0
  120. {zrb-0.0.86.dist-info → zrb-0.0.88.dist-info}/WHEEL +0 -0
  121. {zrb-0.0.86.dist-info → zrb-0.0.88.dist-info}/entry_points.txt +0 -0
zrb/__init__.py CHANGED
@@ -9,6 +9,7 @@ from .task.port_checker import PortChecker
9
9
  from .task.path_checker import PathChecker
10
10
  from .task.resource_maker import ResourceMaker, Replacement, ReplacementMutator
11
11
  from .task.flow_task import FlowTask, FlowNode
12
+ from .task_input.any_input import AnyInput
12
13
  from .task_input.task_input import Input
13
14
  from .task_input.bool_input import BoolInput
14
15
  from .task_input.choice_input import ChoiceInput
@@ -19,7 +20,7 @@ from .task_input.str_input import StrInput
19
20
  from .task_env.env import Env
20
21
  from .task_env.env_file import EnvFile
21
22
  from .task_group.group import Group
22
- from .builtin import _group as builtin_group
23
+ from .builtin import group as builtin_group
23
24
  from .helper.default_env import inject_default_env
24
25
 
25
26
 
@@ -38,6 +39,7 @@ assert FlowTask
38
39
  assert FlowNode
39
40
  assert Replacement
40
41
  assert ReplacementMutator
42
+ assert AnyInput
41
43
  assert Input
42
44
  assert BoolInput
43
45
  assert ChoiceInput
zrb/action/runner.py CHANGED
@@ -1,4 +1,5 @@
1
1
  from typing import Any, Callable, Iterable, List, Mapping, Union
2
+ from typeguard import typechecked
2
3
  from ..task_group.group import Group as TaskGroup
3
4
  from ..task.any_task import AnyTask
4
5
  import click
@@ -7,6 +8,7 @@ import sys
7
8
  CliSubcommand = Union[click.Group, click.Command]
8
9
 
9
10
 
11
+ @typechecked
10
12
  class Runner():
11
13
  '''
12
14
  Runner class.
@@ -32,7 +34,9 @@ class Runner():
32
34
  cli.add_command(subcommand)
33
35
  return cli
34
36
 
35
- def _create_cli_subcommand(self, task: AnyTask) -> click.Group:
37
+ def _create_cli_subcommand(
38
+ self, task: AnyTask
39
+ ) -> Union[click.Group, click.Command]:
36
40
  subcommand: CliSubcommand = self._create_cli_command(task)
37
41
  task_group = task._group
38
42
  while task_group is not None:
@@ -82,9 +86,9 @@ class Runner():
82
86
  # if there are inputs with the same name, choose the first.
83
87
  registered_input: Mapping[str, bool] = {}
84
88
  for task_input in task_inputs:
85
- if task_input.name in registered_input:
89
+ if task_input.get_name() in registered_input:
86
90
  continue
87
- registered_input[task_input.name] = True
91
+ registered_input[task_input.get_name()] = True
88
92
  param_decl = task_input.get_param_decl()
89
93
  options = task_input.get_options()
90
94
  command.params.append(click.Option(param_decl, **options))
zrb/builtin/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- from . import _group as group
1
+ from . import group
2
2
  from . import base64
3
3
  from . import env
4
4
  from . import eval
zrb/builtin/base64.py CHANGED
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from ._group import base64_group
2
+ from .group import base64_group
3
3
  from ..task.decorator import python_task
4
4
  from ..task_input.str_input import StrInput
5
5
  from ..runner import runner
@@ -1,12 +1,13 @@
1
1
  from typing import Any, Callable
2
+ from typeguard import typechecked
2
3
  from ...config.config import get_current_shell
3
- from .._group import dev_tool_install_group
4
4
  from ...task.task import Task
5
5
  from ...task.flow_task import FlowTask, FlowNode
6
6
  from ...task_input.str_input import StrInput
7
7
  from ...task_input.bool_input import BoolInput
8
8
  from ...runner import runner
9
9
  from ...helper.file.text import read_text_file_async, write_text_file_async
10
+ from ..group import dev_tool_install_group
10
11
  import os
11
12
 
12
13
  dir_path = os.path.dirname(__file__)
@@ -28,6 +29,7 @@ terminal_config_file_input = StrInput(
28
29
  ###############################################################################
29
30
 
30
31
 
32
+ @typechecked
31
33
  def write_config(
32
34
  template_file: str, config_file: str, remove_old_config: bool = False
33
35
  ) -> Callable[..., Any]:
@@ -66,7 +68,7 @@ install_gvm = FlowTask(
66
68
  StrInput(
67
69
  name='go-default-version',
68
70
  description='Go default version',
69
- default='go1.14'
71
+ default='go1.21'
70
72
  ),
71
73
  terminal_config_file_input,
72
74
  ],
@@ -427,9 +429,9 @@ install_helix = FlowTask(
427
429
  name='create-helix-theme',
428
430
  run=write_config(
429
431
  template_file=os.path.join(
430
- dir_path, 'helix', 'resource', 'themes', 'gruvbox_transparent.toml' # noqa
432
+ dir_path, 'helix', 'resource', 'themes', 'gruvbox_transparent.toml' # noqa
431
433
  ),
432
- config_file='~/.config/helix/themes/gruvbox_transparent.toml', # noqa
434
+ config_file='~/.config/helix/themes/gruvbox_transparent.toml', # noqa
433
435
  remove_old_config=True
434
436
  ),
435
437
  preexec_fn=None
@@ -445,6 +447,13 @@ install_helix = FlowTask(
445
447
  ),
446
448
  preexec_fn=None
447
449
  ),
450
+ FlowNode(
451
+ name='install-language-server',
452
+ cmd_path=os.path.join(
453
+ dir_path, 'helix', 'install-language-server.sh'
454
+ ),
455
+ preexec_fn=None
456
+ ),
448
457
  ],
449
458
  ],
450
459
  retry=0
@@ -0,0 +1,33 @@
1
+ set +e
2
+
3
+ pip --version
4
+ if [ "$?" = 0 ]
5
+ then
6
+ echo "Install python language server"
7
+ pip install -U 'python-lsp-server[all]'
8
+ else
9
+ echo "Cannot install python language server, is pip installed?"
10
+ fi
11
+
12
+ npm --version
13
+ if [ "$?" = 0 ]
14
+ then
15
+ echo "Install docker language server"
16
+ npm install -g dockerfile-language-server-nodejs
17
+ else
18
+ echo "Cannot install docker language server, is npm installed?"
19
+ fi
20
+
21
+ go version
22
+ if [ "$?" = 0 ]
23
+ then
24
+ echo "Install go language server"
25
+ go install golang.org/x/tools/gopls@latest # LSP
26
+ go install github.com/go-delve/delve/cmd/dlv@latest # Debugger
27
+ go install golang.org/x/tools/cmd/goimports@latest # Formatter
28
+ else
29
+ echo "Cannot install go language server, is go installed?"
30
+ fi
31
+
32
+ set -e
33
+ echo "Visit https://github.com/helix-editor/helix/wiki/How-to-install-the-default-language-servers for more information."
zrb/builtin/env.py CHANGED
@@ -1,5 +1,5 @@
1
- from typing import Any, Mapping
2
- from ._group import env_group
1
+ from typing import Any, List
2
+ from .group import env_group
3
3
  from ..helper.accessories.color import colored
4
4
  from ..task.decorator import python_task
5
5
  from ..task.task import Task
@@ -22,9 +22,12 @@ async def get(*args: Any, **kwargs: Any):
22
22
  names = list(env_map.keys())
23
23
  names.sort()
24
24
  colored_equal = colored('=', color='grey', attrs=['dark'])
25
+ env_lines: List[str] = []
25
26
  for name in names:
26
27
  value = env_map[name]
27
28
  colored_name = colored(name, color='green', attrs=['bold'])
28
29
  colored_value = colored(value, attrs=['bold'])
29
- task.print_out(f'{colored_name}{colored_equal}{colored_value}')
30
+ env_lines.append(f'{colored_name}{colored_equal}{colored_value}')
31
+ line_separator = '\n '
32
+ task.print_out(line_separator + line_separator.join(env_lines))
30
33
  return env_map
zrb/builtin/explain.py CHANGED
@@ -1,10 +1,12 @@
1
1
  from typing import Any
2
- from ._group import explain_group
2
+ from typeguard import typechecked
3
+ from .group import explain_group
3
4
  from ..task.decorator import python_task
4
5
  from ..task.task import Task
5
6
  from ..runner import runner
6
7
 
7
8
 
9
+ @typechecked
8
10
  def show_lines(task: Task, *lines: str):
9
11
  separator = '\n '
10
12
  task.print_out(
@@ -1,7 +1,5 @@
1
- from ._common import helper
2
- from ._common import task_input
3
- from ._common import task_factory
4
- from .project_task import task_factory as project_task_factory
1
+ from . import common
2
+ from . import project_task
5
3
  from .project.create import create_project
6
4
  from .cmd_task.add import add_cmd_task
7
5
  from .docker_compose_task.add import add_docker_compose_task
@@ -14,10 +12,8 @@ from .fastapp_field import add as add_fastapp_field
14
12
  from .pip_package import add as add_pip_package
15
13
  from .app_generator import add as add_app_generator
16
14
 
17
- assert helper
18
- assert task_input
19
- assert task_factory
20
- assert project_task_factory
15
+ assert common
16
+ assert project_task
21
17
  assert create_project
22
18
  assert add_cmd_task
23
19
  assert add_docker_compose_task
@@ -1,16 +1,16 @@
1
1
  from typing import Any
2
- from ..._group import project_add_group
2
+ from ..common.task_input import project_dir_input
3
+ from ..common.helper import (
4
+ validate_existing_project_dir, validate_inexisting_automation
5
+ )
6
+ from ..common.task_factory import create_register_module
7
+ from ...group import project_add_group
3
8
  from ....task.decorator import python_task
4
9
  from ....task.task import Task
5
10
  from ....task.resource_maker import ResourceMaker
6
11
  from ....task_input.str_input import StrInput
7
12
  from ....helper.accessories.name import get_random_name
8
13
  from ....runner import runner
9
- from .._common.task_input import project_dir_input
10
- from .._common.helper import (
11
- validate_existing_project_dir, validate_inexisting_automation
12
- )
13
- from .._common.task_factory import create_register_module
14
14
 
15
15
  import os
16
16
 
@@ -25,6 +25,13 @@ template_name_input = StrInput(
25
25
  default=get_random_name()
26
26
  )
27
27
 
28
+ template_base_image_input = StrInput(
29
+ name='template-base-image',
30
+ shortcut='i',
31
+ prompt='Base image',
32
+ default='python:3.10-slim'
33
+ )
34
+
28
35
 
29
36
  ###############################################################################
30
37
  # Task Definitions
@@ -50,10 +57,12 @@ copy_resource = ResourceMaker(
50
57
  inputs=[
51
58
  project_dir_input,
52
59
  template_name_input,
60
+ template_base_image_input,
53
61
  ],
54
62
  upstreams=[validate],
55
63
  replacements={
56
64
  'zrbMetaTemplateName': '{{input.template_name}}',
65
+ 'zrbMetaTemplateBaseImage': '{{input.template_base_image}}',
57
66
  },
58
67
  template_path=os.path.join(CURRENT_DIR, 'template'),
59
68
  destination_path='{{ input.project_dir }}',
@@ -1,15 +1,27 @@
1
1
  from typing import Any
2
- from zrb.builtin import group
2
+ from zrb.builtin.group import project_add_group
3
3
  from zrb import Task, python_task, ResourceMaker, runner
4
- from zrb.helper import util
5
- from zrb.builtin.generator import (
6
- task_input, task_factory, helper, project_task_factory as ptask_factory
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
7
18
  )
8
19
 
9
20
  import os
10
21
 
11
22
  CURRENT_DIR = os.path.dirname(__file__)
12
23
  SNAKE_APP_NAME_TPL = '{{util.to_snake_case(input.app_name)}}'
24
+ KEBAB_APP_NAME_TPL = '{{util.to_kebab_case(app_name)}}'
13
25
 
14
26
  ###############################################################################
15
27
  # Task Definitions
@@ -19,18 +31,16 @@ SNAKE_APP_NAME_TPL = '{{util.to_snake_case(input.app_name)}}'
19
31
  @python_task(
20
32
  name='validate',
21
33
  inputs=[
22
- task_input.project_dir_input,
23
- task_input.app_name_input
34
+ project_dir_input,
35
+ app_name_input
24
36
  ],
25
37
  )
26
38
  async def validate(*args: Any, **kwargs: Any):
27
39
  project_dir = kwargs.get('project_dir')
28
- helper.validate_existing_project_dir(project_dir)
40
+ validate_existing_project_dir(project_dir)
29
41
  app_name = kwargs.get('app_name')
30
- helper.validate_inexisting_automation(project_dir, app_name)
31
- source_dir = os.path.join(
32
- project_dir, 'src', f'{util.to_kebab_case(app_name)}'
33
- )
42
+ validate_inexisting_automation(project_dir, app_name)
43
+ source_dir = os.path.join(project_dir, 'src', f'{KEBAB_APP_NAME_TPL}')
34
44
  if os.path.exists(source_dir):
35
45
  raise Exception(f'Source already exists: {source_dir}')
36
46
 
@@ -38,11 +48,11 @@ async def validate(*args: Any, **kwargs: Any):
38
48
  copy_resource = ResourceMaker(
39
49
  name='copy-resource',
40
50
  inputs=[
41
- task_input.project_dir_input,
42
- task_input.app_name_input,
43
- task_input.app_image_name_input,
44
- task_input.http_port_input,
45
- task_input.env_prefix_input,
51
+ project_dir_input,
52
+ app_name_input,
53
+ app_image_name_input,
54
+ http_port_input,
55
+ env_prefix_input,
46
56
  ],
47
57
  upstreams=[validate],
48
58
  replacements={
@@ -59,114 +69,114 @@ copy_resource = ResourceMaker(
59
69
  ]
60
70
  )
61
71
 
62
- register_local_module = task_factory.create_register_module(
72
+ register_local_module = create_register_module(
63
73
  module_path=f'_automate.{SNAKE_APP_NAME_TPL}.local',
64
74
  alias=f'{SNAKE_APP_NAME_TPL}_local',
65
- inputs=[task_input.app_name_input],
75
+ inputs=[app_name_input],
66
76
  upstreams=[copy_resource]
67
77
  )
68
78
 
69
- register_container_module = task_factory.create_register_module(
79
+ register_container_module = create_register_module(
70
80
  module_path=f'_automate.{SNAKE_APP_NAME_TPL}.container',
71
81
  alias=f'{SNAKE_APP_NAME_TPL}_container',
72
- inputs=[task_input.app_name_input],
82
+ inputs=[app_name_input],
73
83
  upstreams=[register_local_module]
74
84
  )
75
85
 
76
- register_image_module = task_factory.create_register_module(
86
+ register_image_module = create_register_module(
77
87
  module_path=f'_automate.{SNAKE_APP_NAME_TPL}.image',
78
88
  alias=f'{SNAKE_APP_NAME_TPL}_image',
79
- inputs=[task_input.app_name_input],
89
+ inputs=[app_name_input],
80
90
  upstreams=[register_container_module]
81
91
  )
82
92
 
83
- register_deployment_module = task_factory.create_register_module(
93
+ register_deployment_module = create_register_module(
84
94
  module_path=f'_automate.{SNAKE_APP_NAME_TPL}.deployment',
85
95
  alias=f'{SNAKE_APP_NAME_TPL}_deployment',
86
- inputs=[task_input.app_name_input],
96
+ inputs=[app_name_input],
87
97
  upstreams=[register_image_module]
88
98
  )
89
99
 
90
- ensure_project_tasks = ptask_factory.create_ensure_project_tasks(
100
+ ensure_project_tasks = create_ensure_project_tasks(
91
101
  upstreams=[copy_resource]
92
102
  )
93
103
 
94
- add_start = ptask_factory.create_add_start_upstream(
104
+ add_start_upstream = create_add_start_upstream(
95
105
  upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.local',
96
106
  upstream_task_var=f'start_{SNAKE_APP_NAME_TPL}',
97
107
  upstreams=[ensure_project_tasks],
98
- inputs=[task_input.app_name_input]
108
+ inputs=[app_name_input]
99
109
  )
100
110
 
101
- add_start_container = ptask_factory.create_add_start_containers_upstream(
111
+ add_start_container_upstream = create_add_start_containers_upstream(
102
112
  upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.container',
103
113
  upstream_task_var=f'start_{SNAKE_APP_NAME_TPL}_container',
104
114
  upstreams=[ensure_project_tasks],
105
- inputs=[task_input.app_name_input]
115
+ inputs=[app_name_input]
106
116
  )
107
117
 
108
- add_stop_container = ptask_factory.create_add_stop_containers_upstream(
118
+ add_stop_container_upstream = create_add_stop_containers_upstream(
109
119
  upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.container',
110
120
  upstream_task_var=f'stop_{SNAKE_APP_NAME_TPL}_container',
111
121
  upstreams=[ensure_project_tasks],
112
- inputs=[task_input.app_name_input]
122
+ inputs=[app_name_input]
113
123
  )
114
124
 
115
- add_remove_container = ptask_factory.create_add_remove_containers_upstream(
125
+ add_remove_container_upstream = create_add_remove_containers_upstream(
116
126
  upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.container',
117
127
  upstream_task_var=f'remove_{SNAKE_APP_NAME_TPL}_container',
118
128
  upstreams=[ensure_project_tasks],
119
- inputs=[task_input.app_name_input]
129
+ inputs=[app_name_input]
120
130
  )
121
131
 
122
- add_build_image = ptask_factory.create_add_build_images_upstream(
132
+ add_build_image_upstream = create_add_build_images_upstream(
123
133
  upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.image',
124
134
  upstream_task_var=f'build_{SNAKE_APP_NAME_TPL}_image',
125
135
  upstreams=[ensure_project_tasks],
126
- inputs=[task_input.app_name_input]
136
+ inputs=[app_name_input]
127
137
  )
128
138
 
129
- add_push_image = ptask_factory.create_add_push_images_upstream(
139
+ add_push_image_upstream = create_add_push_images_upstream(
130
140
  upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.image',
131
141
  upstream_task_var=f'push_{SNAKE_APP_NAME_TPL}_image',
132
142
  upstreams=[ensure_project_tasks],
133
- inputs=[task_input.app_name_input]
143
+ inputs=[app_name_input]
134
144
  )
135
145
 
136
- add_deploy = ptask_factory.create_add_deploy_upstream(
146
+ add_deploy_upstream = create_add_deploy_upstream(
137
147
  upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.deployment',
138
148
  upstream_task_var=f'deploy_{SNAKE_APP_NAME_TPL}',
139
149
  upstreams=[ensure_project_tasks],
140
- inputs=[task_input.app_name_input]
150
+ inputs=[app_name_input]
141
151
  )
142
152
 
143
- add_destroy = ptask_factory.create_add_destroy_upstream(
153
+ add_destroy_upstream = create_add_destroy_upstream(
144
154
  upstream_module=f'_automate.{SNAKE_APP_NAME_TPL}.deployment',
145
155
  upstream_task_var=f'destroy_{SNAKE_APP_NAME_TPL}',
146
156
  upstreams=[ensure_project_tasks],
147
- inputs=[task_input.app_name_input]
157
+ inputs=[app_name_input]
148
158
  )
149
159
 
150
160
 
151
161
  @python_task(
152
- name='simple-python-app',
153
- group=group.project_add_group,
162
+ name='kebab-zrb-meta-template-name',
163
+ group=project_add_group,
154
164
  upstreams=[
155
165
  register_local_module,
156
166
  register_container_module,
157
167
  register_image_module,
158
168
  register_deployment_module,
159
- add_start,
160
- add_start_container,
161
- add_stop_container,
162
- add_remove_container,
163
- add_build_image,
164
- add_push_image,
165
- add_deploy,
166
- add_destroy
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
167
177
  ],
168
178
  runner=runner
169
179
  )
170
- async def add_simple_python_app(*args: Any, **kwargs: Any):
180
+ async def snake_zrb_meta_template_name(*args: Any, **kwargs: Any):
171
181
  task: Task = kwargs.get('_task')
172
182
  task.print_out('Success')
@@ -1,6 +1 @@
1
- PYTHONUNBUFFERED=1
2
- echo "Install packages"
3
- pip install -r requirements.txt
4
-
5
- echo "Start app"
6
- uvicorn main:app --host {{env.get("APP_HOST", "0.0.0.0")}} --port {{env.get("APP_PORT", "8080")}}
1
+ go run main.go
@@ -1,7 +1,7 @@
1
1
  from zrb import (
2
2
  DockerComposeTask, Env, EnvFile, HTTPChecker, ServiceConfig, runner
3
3
  )
4
- from zrb.builtin._group import project_group
4
+ from zrb.builtin.group import project_group
5
5
  from ._common import (
6
6
  RESOURCE_DIR, APP_DIR, local_input, host_input, https_input
7
7
  )
@@ -1,5 +1,5 @@
1
- from zrb import CmdTask, Env, EnvFile, IntInput, StrInput, ChoiceInput, runner
2
- from zrb.builtin._group import project_group
1
+ from zrb import CmdTask, Env, EnvFile, IntInput, StrInput, runner
2
+ from zrb.builtin.group import project_group
3
3
  from .image import push_snake_zrb_app_name_image, image_input, image_env
4
4
  from ._common import (
5
5
  CURRENT_DIR, DEPLOYMENT_DIR, TEMPLATE_ENV_FILE_NAME
@@ -1,5 +1,5 @@
1
1
  from zrb import DockerComposeTask, Env, StrInput, runner
2
- from zrb.builtin._group import project_group
2
+ from zrb.builtin.group import project_group
3
3
  from ._common import (
4
4
  RESOURCE_DIR, local_input
5
5
  )
@@ -1,5 +1,5 @@
1
1
  from zrb import CmdTask, Env, EnvFile, HTTPChecker, runner
2
- from zrb.builtin._group import project_group
2
+ from zrb.builtin.group import project_group
3
3
  from ._common import (
4
4
  CURRENT_DIR, APP_DIR, TEMPLATE_ENV_FILE_NAME,
5
5
  local_input, host_input, https_input
@@ -10,7 +10,9 @@ import os
10
10
  # Env File Definitions
11
11
  ###############################################################################
12
12
 
13
- app_env_file = EnvFile(env_file=TEMPLATE_ENV_FILE_NAME, prefix='ZRB_ENV_PREFIX')
13
+ app_env_file = EnvFile(
14
+ env_file=TEMPLATE_ENV_FILE_NAME, prefix='ZRB_ENV_PREFIX'
15
+ )
14
16
 
15
17
  ###############################################################################
16
18
  # Task Definitions
@@ -1,7 +1,12 @@
1
- FROM python:3.10-slim
1
+ FROM golang:1.21 as build
2
+ WORKDIR /app
3
+ COPY . .
4
+ RUN go build -o web-server main.go
5
+
6
+
7
+ FROM zrbMetaTemplateBaseImage
2
8
  ENV APP_MESSAGE "Hello, world!"
3
9
  ENV APP_PORT 8080
4
- WORKDIR /home
5
- COPY . .
6
- RUN pip install -r requirements.txt
7
- CMD uvicorn main:app --host "0.0.0.0" --port "$APP_PORT"
10
+ WORKDIR /app
11
+ COPY --from=build /app /app
12
+ CMD ./web-server
@@ -0,0 +1,28 @@
1
+ package main
2
+
3
+ import (
4
+ "fmt"
5
+ "log"
6
+ "net/http"
7
+ "os"
8
+ )
9
+
10
+ func main() {
11
+ // Get configurations
12
+ appPort := os.Getenv("APP_PORT")
13
+ if appPort == "" {
14
+ appPort = "8080"
15
+ }
16
+ appMessage := os.Getenv("APP_MESSAGE")
17
+ if appMessage == "" {
18
+ appMessage = "Hello world"
19
+ }
20
+
21
+ // Define handler
22
+ http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
23
+ fmt.Fprint(w, appMessage)
24
+ })
25
+ // Listen and serve
26
+ fmt.Printf("Listening on port %s\n", appPort)
27
+ log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", appPort), nil))
28
+ }
@@ -1,14 +1,14 @@
1
1
  from typing import Any
2
- from ..._group import project_add_group
2
+ from ..common.task_input import project_dir_input, task_name_input
3
+ from ..common.helper import (
4
+ validate_existing_project_dir, validate_inexisting_automation
5
+ )
6
+ from ..common.task_factory import create_register_module
7
+ from ...group import project_add_group
3
8
  from ....task.task import Task
4
9
  from ....task.decorator import python_task
5
10
  from ....task.resource_maker import ResourceMaker
6
11
  from ....runner import runner
7
- from .._common.task_input import project_dir_input, task_name_input
8
- from .._common.helper import (
9
- validate_existing_project_dir, validate_inexisting_automation
10
- )
11
- from .._common.task_factory import create_register_module
12
12
 
13
13
  import os
14
14
 
@@ -1,5 +1,5 @@
1
1
  from zrb import CmdTask, runner
2
- from zrb.builtin._group import project_group
2
+ from zrb.builtin.group import project_group
3
3
 
4
4
  ###############################################################################
5
5
  # Task Definitions