zrb 0.25.1__py3-none-any.whl → 0.26.1__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.
zrb/action/runner.py CHANGED
@@ -5,6 +5,7 @@ from typing import Any, Union
5
5
  import click
6
6
 
7
7
  from zrb.helper.accessories.color import colored
8
+ from zrb.helper.asyncio_task import stop_asyncio_sync
8
9
  from zrb.helper.log import logger
9
10
  from zrb.helper.typecheck import typechecked
10
11
  from zrb.task.any_task import AnyTask
@@ -120,6 +121,7 @@ class Runner:
120
121
  try:
121
122
  function(*args, **kwargs)
122
123
  except Exception:
124
+ stop_asyncio_sync()
123
125
  sys.exit(1)
124
126
  finally:
125
127
  task.clear_xcom()
zrb/builtin/__init__.py CHANGED
@@ -24,6 +24,7 @@ from zrb.builtin.eval import evaluate
24
24
  from zrb.builtin.explain import explain_group, explain_tasks
25
25
  from zrb.builtin.git import clear_git_branch, get_git_file_changes, git_group
26
26
  from zrb.builtin.md5 import hash_text_md5, md5_group, sum_file_md5
27
+ from zrb.builtin.monorepo import add_to_monorepo, pull_from_monorepo, push_to_monorepo
27
28
  from zrb.builtin.process import (
28
29
  get_process_pid_by_name,
29
30
  get_process_pid_by_port,
@@ -113,6 +114,9 @@ assert add_project_tasks
113
114
  assert add_cmd_task
114
115
  assert add_docker_compose_task
115
116
  assert add_python_task
117
+ assert add_to_monorepo
118
+ assert pull_from_monorepo
119
+ assert push_to_monorepo
116
120
  assert ubuntu_group
117
121
  assert ubuntu_install_group
118
122
  assert update_ubuntu
@@ -1,15 +1,23 @@
1
1
  from zrb.builtin.docker._group import docker_group
2
2
  from zrb.runner import runner
3
3
  from zrb.task.cmd_task import CmdTask
4
+ from zrb.task_input.bool_input import BoolInput
4
5
 
5
6
  prune_docker = CmdTask(
6
7
  name="prune",
7
8
  group=docker_group,
8
9
  description="Prune unused images and volumes",
10
+ inputs=[
11
+ BoolInput(
12
+ name="all", shortcut="a", prompt="Remove all unused images", default=False
13
+ ),
14
+ BoolInput(
15
+ name="volume", shortcut="v", prompt="Prune anonymous volume", default=False
16
+ ),
17
+ ],
9
18
  cmd=[
10
- "docker system prune -af",
11
- "docker image prune -af",
12
- "docker system prune -af --volumes",
19
+ "docker system prune -f {% if input.all %}-a{% endif %} {% if input.volume %}--volumes{% endif %}", # noqa
20
+ "docker image prune -f {% if input.all %}-a{% endif %}",
13
21
  "docker system df",
14
22
  ],
15
23
  )
@@ -0,0 +1,7 @@
1
+ from zrb.builtin.monorepo.add import add_to_monorepo
2
+ from zrb.builtin.monorepo.pull import pull_from_monorepo
3
+ from zrb.builtin.monorepo.push import push_to_monorepo
4
+
5
+ assert add_to_monorepo
6
+ assert pull_from_monorepo
7
+ assert push_to_monorepo
@@ -0,0 +1,11 @@
1
+ import json
2
+ import os
3
+ from collections.abc import Mapping
4
+
5
+ PROJECT_DIR = os.getenv("ZRB_PROJECT_DIR", ".")
6
+ MONOREPO_CONFIG_FILE = os.path.join(PROJECT_DIR, "monorepo.zrb.json")
7
+ MONOREPO_CONFIG: Mapping[str, Mapping[str, str]] = {}
8
+
9
+ if os.path.isfile(MONOREPO_CONFIG_FILE):
10
+ with open(MONOREPO_CONFIG_FILE, "r") as file:
11
+ MONOREPO_CONFIG = json.load(file)
@@ -0,0 +1,3 @@
1
+ from zrb.task_group.group import Group
2
+
3
+ monorepo_group = Group(name="monorepo", description="Monorepo management")
@@ -0,0 +1,99 @@
1
+ import os
2
+ from datetime import datetime
3
+
4
+ from zrb.builtin.monorepo._config import MONOREPO_CONFIG, PROJECT_DIR
5
+ from zrb.builtin.monorepo._group import monorepo_group
6
+ from zrb.helper.util import to_kebab_case
7
+ from zrb.runner import runner
8
+ from zrb.task.cmd_task import CmdTask
9
+ from zrb.task_group.group import Group
10
+ from zrb.task_input.str_input import StrInput
11
+
12
+ _pull_monorepo = CmdTask(
13
+ name="pull-monorepo",
14
+ inputs=[StrInput(name="message")],
15
+ cmd=[
16
+ "git add . -A",
17
+ 'git commit -m "{{input.message}}"',
18
+ 'git pull origin "$(git branch --show-current)"',
19
+ ],
20
+ cwd=PROJECT_DIR,
21
+ retry=0,
22
+ )
23
+
24
+ PULL_SUBREPO_UPSTREAM = _pull_monorepo
25
+ PUSH_SUBREPO_UPSTREAM = _pull_monorepo
26
+ for name, config in MONOREPO_CONFIG.items():
27
+ kebab_name = to_kebab_case(name)
28
+ group = Group(
29
+ name=kebab_name, parent=monorepo_group, description=f"Subrepo {name} management"
30
+ )
31
+ subrepo_origin = config.get("origin", "")
32
+ subrepo_folder = config.get("folder", "")
33
+ subrepo_branch = config.get("branch", "main")
34
+
35
+ # define pull subrepo
36
+ pull_subrepo = CmdTask(
37
+ name="pull",
38
+ group=group,
39
+ inputs=[
40
+ StrInput(
41
+ name="message",
42
+ shortcut="m",
43
+ prompt="Commit Messsage",
44
+ default=lambda m: f"Pulling from subrepo at {datetime.now().strftime('%Y-%m-%d %I:%M:%p')}", # noqa
45
+ )
46
+ ],
47
+ cmd=[
48
+ f'if [ ! -d "{subrepo_folder}" ]',
49
+ "then",
50
+ " echo Run subtree add",
51
+ f' git subtree add --prefix "{subrepo_folder}" "{subrepo_origin}" "{subrepo_branch}"', # noqa
52
+ "fi",
53
+ "echo Run subtree pull",
54
+ "set -e",
55
+ f'git subtree pull --prefix "{subrepo_folder}" "{subrepo_origin}" "{subrepo_branch}"', # noqa
56
+ ],
57
+ cwd=PROJECT_DIR,
58
+ retry=0,
59
+ )
60
+ _pull_monorepo >> pull_subrepo
61
+ linked_pull_subrepo = pull_subrepo.copy()
62
+ PULL_SUBREPO_UPSTREAM >> linked_pull_subrepo
63
+ PULL_SUBREPO_UPSTREAM = linked_pull_subrepo
64
+ runner.register(pull_subrepo)
65
+
66
+ # define push subrepo
67
+ push_subrepo = CmdTask(
68
+ name="push",
69
+ group=group,
70
+ inputs=[
71
+ StrInput(
72
+ name="message",
73
+ shortcut="m",
74
+ prompt="Commit Messsage",
75
+ default=lambda m: f"Pushing to subrepo at {datetime.now().strftime('%Y-%m-%d %I:%M:%p')}", # noqa
76
+ )
77
+ ],
78
+ cmd=[
79
+ f'if [ ! -d "{subrepo_folder}" ]',
80
+ "then",
81
+ " echo Run subtree add",
82
+ f' git subtree add --prefix "{subrepo_folder}" "{subrepo_origin}" "{subrepo_branch}"', # noqa
83
+ "fi",
84
+ "echo Run subtree pull",
85
+ "set -e",
86
+ f'git subtree pull --prefix "{subrepo_folder}" "{subrepo_origin}" "{subrepo_branch}"', # noqa
87
+ "set +e",
88
+ "git add . -A",
89
+ 'git commit -m "{{input.message}}"',
90
+ f'git subtree push --prefix "{subrepo_folder}" "{subrepo_origin}" "{subrepo_branch}"', # noqa
91
+ ],
92
+ cwd=PROJECT_DIR,
93
+ retry=0,
94
+ )
95
+ _pull_monorepo >> push_subrepo
96
+ linked_push_subrepo = push_subrepo.copy()
97
+ PUSH_SUBREPO_UPSTREAM >> linked_push_subrepo
98
+ PUSH_SUBREPO_UPSTREAM = linked_push_subrepo
99
+ runner.register(push_subrepo)
@@ -0,0 +1,48 @@
1
+ import json
2
+ import os
3
+ from collections.abc import Mapping
4
+
5
+ from zrb.builtin.monorepo._config import (
6
+ MONOREPO_CONFIG,
7
+ MONOREPO_CONFIG_FILE,
8
+ PROJECT_DIR,
9
+ )
10
+ from zrb.builtin.monorepo._group import monorepo_group
11
+ from zrb.runner import runner
12
+ from zrb.task.any_task import AnyTask
13
+ from zrb.task.decorator import python_task
14
+ from zrb.task_input.str_input import StrInput
15
+
16
+
17
+ @python_task(
18
+ name="add",
19
+ group=monorepo_group,
20
+ inputs=[
21
+ StrInput(name="alias", shortcut="a", prompt="Repo Alias", prompt_required=True),
22
+ StrInput(name="folder", shortcut="d", prompt="Directory", prompt_required=True),
23
+ StrInput(name="origin", shortcut="o", prompt="Repo URL", prompt_required=True),
24
+ StrInput(
25
+ name="branch",
26
+ shortcut="b",
27
+ prompt="Repo Branch",
28
+ prompt_required=True,
29
+ default="main",
30
+ ),
31
+ ],
32
+ description="Add repo to monorepo",
33
+ runner=runner,
34
+ )
35
+ def add_to_monorepo(*args, **kwargs):
36
+ task: AnyTask = kwargs.get("_task")
37
+ input_map: Mapping[str, str] = task.get_input_map()
38
+ abs_folder = os.path.join(PROJECT_DIR, input_map.get("folder", ""))
39
+ if os.path.isdir(abs_folder):
40
+ raise ValueError(f"Directory exists: {abs_folder}")
41
+ config = dict(MONOREPO_CONFIG)
42
+ config[input_map.get("alias", "")] = {
43
+ "folder": input_map.get("folder", ""),
44
+ "branch": input_map.get("branch", ""),
45
+ "origin": input_map.get("origin", ""),
46
+ }
47
+ with open(MONOREPO_CONFIG_FILE, "w") as file:
48
+ json.dump(config, file, indent=2)
@@ -0,0 +1,23 @@
1
+ from datetime import datetime
2
+
3
+ from zrb.builtin.monorepo._group import monorepo_group
4
+ from zrb.builtin.monorepo._task import PULL_SUBREPO_UPSTREAM
5
+ from zrb.runner import runner
6
+ from zrb.task.task import Task
7
+ from zrb.task_input.str_input import StrInput
8
+
9
+ pull_from_monorepo = Task(
10
+ name="pull",
11
+ group=monorepo_group,
12
+ description="Pulling from subrepos",
13
+ inputs=[
14
+ StrInput(
15
+ name="message",
16
+ shortcut="m",
17
+ prompt="Commit Messsage",
18
+ default=lambda m: f"Pulling from subrepos at {datetime.now().strftime('%Y-%m-%d %I:%M:%p')}", # noqa
19
+ )
20
+ ],
21
+ )
22
+ PULL_SUBREPO_UPSTREAM >> pull_from_monorepo
23
+ runner.register(pull_from_monorepo)
@@ -0,0 +1,38 @@
1
+ import os
2
+ from datetime import datetime
3
+
4
+ from zrb.builtin.monorepo._config import PROJECT_DIR
5
+ from zrb.builtin.monorepo._group import monorepo_group
6
+ from zrb.builtin.monorepo._task import PUSH_SUBREPO_UPSTREAM
7
+ from zrb.runner import runner
8
+ from zrb.task.cmd_task import CmdTask
9
+ from zrb.task.task import Task
10
+ from zrb.task_input.str_input import StrInput
11
+
12
+ _push_monorepo = CmdTask(
13
+ name="push-monorepo",
14
+ inputs=[StrInput(name="message")],
15
+ cmd=[
16
+ "git add . -A",
17
+ 'git commit -m "{{input.message}}"',
18
+ 'git push origin "$(git branch --show-current)"',
19
+ ],
20
+ cwd=PROJECT_DIR,
21
+ retry=0,
22
+ )
23
+
24
+ push_to_monorepo = Task(
25
+ name="push",
26
+ group=monorepo_group,
27
+ description="Pushing to subrepos",
28
+ inputs=[
29
+ StrInput(
30
+ name="message",
31
+ shortcut="m",
32
+ prompt="Commit Messsage",
33
+ default=lambda m: f"Pushing to subrepos at {datetime.now().strftime('%Y-%m-%d %I:%M:%p')}", # noqa
34
+ )
35
+ ],
36
+ )
37
+ PUSH_SUBREPO_UPSTREAM >> _push_monorepo >> push_to_monorepo
38
+ runner.register(push_to_monorepo)
@@ -2,12 +2,12 @@ import os
2
2
 
3
3
  from zrb.task_input.str_input import StrInput
4
4
 
5
- SYSTEM_USER = os.getenv("USER", "incognito")
5
+ _PROJECT_DIR = os.getenv("ZRB_PROJECT_DIR", ".")
6
6
 
7
7
  project_dir_input = StrInput(
8
8
  name="project-dir",
9
9
  shortcut="d",
10
10
  description="Project directory",
11
11
  prompt="Project directory",
12
- default=".",
12
+ default=_PROJECT_DIR,
13
13
  )