zrb 0.24.0__py3-none-any.whl → 0.26.2__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 +8 -5
- zrb/advertisement.py +1 -2
- zrb/builtin/__init__.py +4 -0
- zrb/builtin/base64/decode.py +1 -1
- zrb/builtin/base64/encode.py +1 -1
- zrb/builtin/devtool/install/_helper.py +2 -1
- zrb/builtin/docker/prune.py +11 -3
- zrb/builtin/env/get.py +3 -2
- zrb/builtin/eval.py +2 -1
- zrb/builtin/git/get_file_changes.py +2 -1
- zrb/builtin/md5/hash.py +1 -1
- zrb/builtin/md5/sum.py +1 -1
- zrb/builtin/monorepo/__init__.py +7 -0
- zrb/builtin/monorepo/_common.sh +15 -0
- zrb/builtin/monorepo/_config.py +11 -0
- zrb/builtin/monorepo/_group.py +3 -0
- zrb/builtin/monorepo/_helper.py +140 -0
- zrb/builtin/monorepo/_task.py +126 -0
- zrb/builtin/monorepo/add-subrepo.sh +22 -0
- zrb/builtin/monorepo/add.py +48 -0
- zrb/builtin/monorepo/pull-monorepo.sh +18 -0
- zrb/builtin/monorepo/pull-subrepo.sh +18 -0
- zrb/builtin/monorepo/pull.py +24 -0
- zrb/builtin/monorepo/push-monorepo.sh +18 -0
- zrb/builtin/monorepo/push-subrepo.sh +18 -0
- zrb/builtin/monorepo/push.py +24 -0
- zrb/builtin/project/_helper.py +3 -3
- zrb/builtin/project/_input.py +2 -2
- zrb/builtin/project/add/app/generator/generator.py +1 -1
- zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/snake_zrb_generator_name.py +1 -1
- zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/_automate/snake_zrb_app_name/container/remove.py +1 -1
- zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/_automate/snake_zrb_app_name/container/start.py +1 -1
- zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/_automate/snake_zrb_app_name/container/stop.py +1 -1
- zrb/builtin/project/add/app/generator/template/src/kebab-zrb-package-name/src/snake_zrb_package_name/snake_zrb_generator_name/template/src/kebab-zrb-app-name/docker-compose.yml +0 -2
- zrb/builtin/project/add/app/python/python.py +1 -1
- zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/remove.py +1 -1
- zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/start.py +1 -1
- zrb/builtin/project/add/app/python/template/_automate/snake_zrb_app_name/container/stop.py +1 -1
- zrb/builtin/project/add/app/python/template/src/kebab-zrb-app-name/docker-compose.yml +0 -2
- zrb/builtin/project/add/fastapp/app/app.py +3 -1
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/_helper.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/_service_config.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/microservices/_helper.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/monolith/_helper.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/stop.py +2 -0
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/container/support/_helper.py +5 -3
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/frontend/build-once.sh +1 -1
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/frontend/build.sh +1 -1
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/_helper.py +3 -5
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/start.py +3 -3
- zrb/builtin/project/add/fastapp/app/template/_automate/snake_zrb_app_name/microservices/{start_microservices.py → start_services.py} +2 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/.generator-version +1 -0
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/deployment/_common.py +5 -5
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/deployment/app_helper.py +5 -5
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/docker-compose.yml +2 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/error.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/kafka/admin.py +4 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/kafka/consumer.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/messagebus.py +4 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/mock.py +4 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/rabbitmq/admin.py +4 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/messagebus/rabbitmq/consumer.py +3 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/model/repo_model.py +3 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/db_repo.py +7 -6
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/repo.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/repo/search_filter.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/messagebus/caller.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/messagebus/server.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/rpc/rpc.py +3 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/component/serializer/serializer.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/config.py +3 -4
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/frontend/package-lock.json +4443 -0
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/helper/async_task.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/component/access_token/scheme.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/component/access_token/util.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/group/repo.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/group/rpc.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/permission/rpc.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/api.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/model.py +3 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/repo.py +3 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/entity/user/rpc.py +3 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/register_permission.py +2 -2
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/group.py +3 -5
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/permission.py +1 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/request.py +1 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/auth/schema/user.py +5 -7
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/entity/activity/event.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/entity/activity/rpc.py +2 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/src/module/log/schema/activity.py +1 -3
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_group_crud.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_permission_crud.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_crud.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/auth/test_user_login.py +1 -1
- zrb/builtin/project/add/fastapp/app/template/src/kebab-zrb-app-name/test/test_liveness_and_readiness.py +1 -1
- zrb/builtin/project/add/fastapp/crud/_task_factory.py +1 -2
- zrb/builtin/project/add/fastapp/crud/crud.py +1 -1
- zrb/builtin/project/add/fastapp/crud/nodejs/codemod/package-lock.json +3 -3
- zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/entity/snake_zrb_entity_name/rpc.py +2 -1
- zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/src/module/snake_zrb_module_name/schema/snake_zrb_entity_name.py +2 -2
- zrb/builtin/project/add/fastapp/crud/template/src/kebab-zrb-app-name/test/snake_zrb_module_name/test_snake_zrb_entity_name.py +1 -1
- zrb/builtin/project/add/fastapp/field/field.py +1 -1
- zrb/builtin/project/add/fastapp/module/_helper/create_microservice_config.py +7 -8
- zrb/builtin/project/add/fastapp/module/module.py +1 -1
- zrb/builtin/project/add/plugin/plugin.py +1 -1
- zrb/builtin/project/add/project_task/add.py +1 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/build.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/container/remove.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/container/start.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/container/stop.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/deploy.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/destroy.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/get_env.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/image/build.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/image/push.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/publish.py +2 -1
- zrb/builtin/project/add/project_task/template/_automate/_project/start.py +2 -1
- zrb/builtin/project/add/task/cmd/add.py +1 -1
- zrb/builtin/project/add/task/docker_compose/add.py +1 -1
- zrb/builtin/project/add/task/docker_compose/template/src/kebab-zrb-task-name/docker-compose.yml +0 -2
- zrb/builtin/project/add/task/python/add.py +1 -1
- zrb/builtin/project/add/task/python/template/_automate/snake_zrb_task_name.py +1 -1
- zrb/builtin/project/create/_helper.py +1 -1
- zrb/builtin/project/create/create.py +1 -1
- zrb/builtin/say.py +3 -3
- zrb/builtin/version.py +2 -1
- zrb/config/config.py +12 -2
- zrb/helper/accessories/color.py +2 -1
- zrb/helper/advertisement.py +2 -1
- zrb/helper/asyncio_task.py +26 -0
- zrb/helper/callable.py +2 -1
- zrb/helper/cli.py +16 -3
- zrb/helper/codemod/add_import_module.py +3 -2
- zrb/helper/codemod/add_property_to_class.py +2 -1
- zrb/helper/default_env.py +2 -1
- zrb/helper/docker_compose/fetch_external_env.py +4 -2
- zrb/helper/docker_compose/file.py +3 -1
- zrb/helper/env_map/fetch.py +3 -2
- zrb/helper/file/copy_tree.py +2 -1
- zrb/helper/file/match.py +2 -2
- zrb/helper/git/detect_changes.py +1 -1
- zrb/helper/loader/load_module.py +7 -46
- zrb/helper/loader/load_script.py +57 -0
- zrb/helper/map/conversion.py +3 -1
- zrb/helper/string/jinja.py +2 -1
- zrb/helper/string/parse_replacement.py +1 -1
- zrb/helper/typing.py +5 -27
- zrb/helper/util.py +1 -1
- zrb/task/any_task.py +9 -17
- zrb/task/any_task_event_handler.py +3 -1
- zrb/task/base_remote_cmd_task.py +3 -10
- zrb/task/base_task/base_task.py +12 -8
- zrb/task/base_task/component/base_task_model.py +6 -13
- zrb/task/base_task/component/common_task_model.py +15 -22
- zrb/task/base_task/component/renderer.py +3 -1
- zrb/task/base_task/component/trackers.py +1 -1
- zrb/task/checker.py +2 -1
- zrb/task/cmd_task.py +6 -18
- zrb/task/decorator.py +3 -1
- zrb/task/docker_compose_start_task.py +27 -32
- zrb/task/docker_compose_task.py +27 -35
- zrb/task/flow_task.py +19 -18
- zrb/task/http_checker.py +3 -9
- zrb/task/looper.py +4 -2
- zrb/task/notifier.py +3 -1
- zrb/task/parallel.py +4 -4
- zrb/task/path_checker.py +6 -12
- zrb/task/path_watcher.py +5 -13
- zrb/task/port_checker.py +3 -9
- zrb/task/recurring_task.py +5 -4
- zrb/task/remote_cmd_task.py +2 -1
- zrb/task/resource_maker.py +6 -13
- zrb/task/rsync_task.py +3 -1
- zrb/task/server.py +13 -12
- zrb/task/time_watcher.py +3 -10
- zrb/task/watcher.py +2 -1
- zrb/task/wiki_task.py +4 -3
- zrb/task_env/env.py +2 -1
- zrb/task_env/env_file.py +7 -6
- zrb/task_group/group.py +8 -7
- zrb/task_input/any_input.py +4 -3
- zrb/task_input/base_input.py +5 -3
- zrb/task_input/bool_input.py +2 -1
- zrb/task_input/choice_input.py +3 -1
- zrb/task_input/float_input.py +2 -1
- zrb/task_input/int_input.py +2 -1
- zrb/task_input/multiline_input.py +3 -1
- zrb/task_input/password_input.py +2 -1
- zrb/task_input/str_input.py +2 -1
- {zrb-0.24.0.dist-info → zrb-0.26.2.dist-info}/METADATA +1 -1
- {zrb-0.24.0.dist-info → zrb-0.26.2.dist-info}/RECORD +194 -176
- {zrb-0.24.0.dist-info → zrb-0.26.2.dist-info}/LICENSE +0 -0
- {zrb-0.24.0.dist-info → zrb-0.26.2.dist-info}/WHEEL +0 -0
- {zrb-0.24.0.dist-info → zrb-0.26.2.dist-info}/entry_points.txt +0 -0
zrb/action/runner.py
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
import sys
|
2
|
+
from collections.abc import Callable, Mapping
|
3
|
+
from typing import Any, Union
|
2
4
|
|
3
5
|
import click
|
4
6
|
|
5
7
|
from zrb.helper.accessories.color import colored
|
8
|
+
from zrb.helper.asyncio_task import stop_asyncio_sync
|
6
9
|
from zrb.helper.log import logger
|
7
10
|
from zrb.helper.typecheck import typechecked
|
8
|
-
from zrb.helper.typing import Any, Callable, List, Mapping, Union
|
9
11
|
from zrb.task.any_task import AnyTask
|
10
12
|
from zrb.task_group.group import Group as TaskGroup
|
11
13
|
|
@@ -24,11 +26,11 @@ class Runner:
|
|
24
26
|
def __init__(self, env_prefix: str = ""):
|
25
27
|
logger.info(colored("Create runner", attrs=["dark"]))
|
26
28
|
self.__env_prefix = env_prefix
|
27
|
-
self.__tasks:
|
29
|
+
self.__tasks: list[AnyTask] = []
|
28
30
|
self.__registered_groups: Mapping[str, click.Group] = {}
|
29
|
-
self.__top_levels:
|
30
|
-
self.__subcommands: Mapping[str,
|
31
|
-
self.__registered_task_cli_name:
|
31
|
+
self.__top_levels: list[CliSubcommand] = []
|
32
|
+
self.__subcommands: Mapping[str, list[click.Group]] = {}
|
33
|
+
self.__registered_task_cli_name: list[str] = []
|
32
34
|
logger.info(colored("Runner created", attrs=["dark"]))
|
33
35
|
|
34
36
|
def register(self, *tasks: AnyTask):
|
@@ -119,6 +121,7 @@ class Runner:
|
|
119
121
|
try:
|
120
122
|
function(*args, **kwargs)
|
121
123
|
except Exception:
|
124
|
+
stop_asyncio_sync()
|
122
125
|
sys.exit(1)
|
123
126
|
finally:
|
124
127
|
task.clear_xcom()
|
zrb/advertisement.py
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
from zrb.helper.accessories.color import colored
|
2
2
|
from zrb.helper.advertisement import Advertisement
|
3
3
|
from zrb.helper.log import logger
|
4
|
-
from zrb.helper.typing import List
|
5
4
|
|
6
5
|
logger.debug(colored("Loading zrb.advertisement", attrs=["dark"]))
|
7
6
|
|
8
7
|
# flake8: noqa E501
|
9
8
|
|
10
|
-
advertisements:
|
9
|
+
advertisements: list[Advertisement] = [
|
11
10
|
Advertisement(
|
12
11
|
content="\n".join(
|
13
12
|
[
|
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
|
zrb/builtin/base64/decode.py
CHANGED
zrb/builtin/base64/encode.py
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
import os
|
2
|
+
from collections.abc import Callable
|
3
|
+
from typing import Any
|
2
4
|
|
3
5
|
from zrb.helper.file.text import read_text_file_async, write_text_file_async
|
4
6
|
from zrb.helper.typecheck import typechecked
|
5
|
-
from zrb.helper.typing import Any, Callable
|
6
7
|
from zrb.task.task import Task
|
7
8
|
|
8
9
|
|
zrb/builtin/docker/prune.py
CHANGED
@@ -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 -
|
11
|
-
"docker image prune -
|
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
|
)
|
zrb/builtin/env/get.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
+
from typing import Any
|
2
|
+
|
1
3
|
from zrb.builtin.env._group import env_group
|
2
4
|
from zrb.helper.accessories.color import colored
|
3
|
-
from zrb.helper.typing import Any, List
|
4
5
|
from zrb.runner import runner
|
5
6
|
from zrb.task.decorator import python_task
|
6
7
|
from zrb.task.task import Task
|
@@ -15,7 +16,7 @@ async def get_env(*args: Any, **kwargs: Any):
|
|
15
16
|
names = list(env_map.keys())
|
16
17
|
names.sort()
|
17
18
|
colored_equal = colored("=", color="grey", attrs=["dark"])
|
18
|
-
env_lines:
|
19
|
+
env_lines: list[str] = []
|
19
20
|
for name in names:
|
20
21
|
value = env_map[name]
|
21
22
|
colored_name = colored(name, color="green", attrs=["bold"])
|
zrb/builtin/eval.py
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
+
from typing import Any
|
2
|
+
|
1
3
|
from zrb.builtin.git._group import git_group
|
2
4
|
from zrb.helper.accessories.color import colored
|
3
5
|
from zrb.helper.git.detect_changes import get_modified_file_states
|
4
6
|
from zrb.helper.task import show_lines
|
5
|
-
from zrb.helper.typing import Any
|
6
7
|
from zrb.runner import runner
|
7
8
|
from zrb.task.decorator import python_task
|
8
9
|
from zrb.task_input.bool_input import BoolInput
|
zrb/builtin/md5/hash.py
CHANGED
zrb/builtin/md5/sum.py
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
import hashlib
|
2
|
+
from typing import Any
|
2
3
|
|
3
4
|
import aiofiles
|
4
5
|
|
5
6
|
from zrb.builtin.md5._group import md5_group
|
6
|
-
from zrb.helper.typing import Any
|
7
7
|
from zrb.runner import runner
|
8
8
|
from zrb.task.decorator import python_task
|
9
9
|
from zrb.task_input.str_input import StrInput
|
@@ -0,0 +1,15 @@
|
|
1
|
+
log_info() {
|
2
|
+
echo -e "🤖 \e[0;33m${1}\e[0;0m"
|
3
|
+
}
|
4
|
+
|
5
|
+
log_error() {
|
6
|
+
echo -e "\e[1;31m${1}\e[0;0m" >&2
|
7
|
+
}
|
8
|
+
|
9
|
+
log_conflict_error() {
|
10
|
+
log_error "Action blocked by unresolved conflicts."
|
11
|
+
log_error "You need to resolve the conflict(s) and commit the changes."
|
12
|
+
log_error "Unresolved conflict(s) detected:"
|
13
|
+
log_error "$1"
|
14
|
+
}
|
15
|
+
|
@@ -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,140 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.builtin.monorepo._config import PROJECT_DIR
|
4
|
+
from zrb.task.cmd_task import CmdTask
|
5
|
+
from zrb.task_env.env import Env
|
6
|
+
from zrb.task_input.any_input import AnyInput
|
7
|
+
from zrb.task_input.str_input import StrInput
|
8
|
+
|
9
|
+
_CURRENT_DIR = os.path.dirname(__file__)
|
10
|
+
|
11
|
+
|
12
|
+
def create_pull_monorepo_task(
|
13
|
+
task_name: str = "pull-monorepo",
|
14
|
+
) -> CmdTask:
|
15
|
+
return CmdTask(
|
16
|
+
name=task_name,
|
17
|
+
envs=[
|
18
|
+
Env("TIME", os_name="", default="{{datetime.datetime.now()}}"),
|
19
|
+
],
|
20
|
+
cmd_path=[
|
21
|
+
os.path.join(_CURRENT_DIR, "_common.sh"),
|
22
|
+
os.path.join(_CURRENT_DIR, "pull-monorepo.sh"),
|
23
|
+
],
|
24
|
+
cwd=PROJECT_DIR,
|
25
|
+
should_show_cmd=False,
|
26
|
+
should_show_working_directory=False,
|
27
|
+
should_print_cmd_result=False,
|
28
|
+
retry=0,
|
29
|
+
)
|
30
|
+
|
31
|
+
|
32
|
+
def create_push_monorepo_task(
|
33
|
+
task_name: str = "push-monorepo", default_commit_message: str = "Save changes"
|
34
|
+
) -> CmdTask:
|
35
|
+
return CmdTask(
|
36
|
+
name=task_name,
|
37
|
+
inputs=[_create_commit_message_input(default_commit_message)],
|
38
|
+
envs=[
|
39
|
+
Env("MESSAGE", os_name="", default="{{input.message}}"),
|
40
|
+
],
|
41
|
+
cmd_path=[
|
42
|
+
os.path.join(_CURRENT_DIR, "_common.sh"),
|
43
|
+
os.path.join(_CURRENT_DIR, "push-monorepo.sh"),
|
44
|
+
],
|
45
|
+
cwd=PROJECT_DIR,
|
46
|
+
should_show_cmd=False,
|
47
|
+
should_show_working_directory=False,
|
48
|
+
should_print_cmd_result=False,
|
49
|
+
retry=0,
|
50
|
+
)
|
51
|
+
|
52
|
+
|
53
|
+
def create_add_subrepo_task(
|
54
|
+
origin: str,
|
55
|
+
folder: str,
|
56
|
+
branch: str,
|
57
|
+
task_name: str = "add",
|
58
|
+
) -> CmdTask:
|
59
|
+
return CmdTask(
|
60
|
+
name=task_name,
|
61
|
+
envs=[
|
62
|
+
Env("ORIGIN", os_name="", default=origin),
|
63
|
+
Env("FOLDER", os_name="", default=folder),
|
64
|
+
Env("BRANCH", os_name="", default=branch),
|
65
|
+
Env("TIME", os_name="", default="{{datetime.datetime.now()}}"),
|
66
|
+
],
|
67
|
+
cmd_path=[
|
68
|
+
os.path.join(_CURRENT_DIR, "_common.sh"),
|
69
|
+
os.path.join(_CURRENT_DIR, "add-subrepo.sh"),
|
70
|
+
],
|
71
|
+
cwd=PROJECT_DIR,
|
72
|
+
should_show_cmd=False,
|
73
|
+
should_show_working_directory=False,
|
74
|
+
should_print_cmd_result=False,
|
75
|
+
retry=0,
|
76
|
+
)
|
77
|
+
|
78
|
+
|
79
|
+
def create_pull_subrepo_task(
|
80
|
+
origin: str,
|
81
|
+
folder: str,
|
82
|
+
branch: str,
|
83
|
+
task_name: str = "pull",
|
84
|
+
) -> CmdTask:
|
85
|
+
return CmdTask(
|
86
|
+
name=task_name,
|
87
|
+
envs=[
|
88
|
+
Env("ORIGIN", os_name="", default=origin),
|
89
|
+
Env("FOLDER", os_name="", default=folder),
|
90
|
+
Env("BRANCH", os_name="", default=branch),
|
91
|
+
Env("TIME", os_name="", default="{{datetime.datetime.now()}}"),
|
92
|
+
],
|
93
|
+
cmd_path=[
|
94
|
+
os.path.join(_CURRENT_DIR, "_common.sh"),
|
95
|
+
os.path.join(_CURRENT_DIR, "pull-subrepo.sh"),
|
96
|
+
],
|
97
|
+
cwd=PROJECT_DIR,
|
98
|
+
should_show_cmd=False,
|
99
|
+
should_show_working_directory=False,
|
100
|
+
should_print_cmd_result=False,
|
101
|
+
retry=0,
|
102
|
+
)
|
103
|
+
|
104
|
+
|
105
|
+
def create_push_subrepo_task(
|
106
|
+
origin: str,
|
107
|
+
folder: str,
|
108
|
+
branch: str,
|
109
|
+
task_name: str = "push",
|
110
|
+
default_commit_message: str = "Commit",
|
111
|
+
) -> CmdTask:
|
112
|
+
return CmdTask(
|
113
|
+
name=task_name,
|
114
|
+
inputs=[_create_commit_message_input(default_commit_message)],
|
115
|
+
envs=[
|
116
|
+
Env("ORIGIN", os_name="", default=origin),
|
117
|
+
Env("FOLDER", os_name="", default=folder),
|
118
|
+
Env("BRANCH", os_name="", default=branch),
|
119
|
+
Env("TIME", os_name="", default="{{datetime.datetime.now()}}"),
|
120
|
+
Env("MESSAGE", os_name="", default="{{input.message}}"),
|
121
|
+
],
|
122
|
+
cmd_path=[
|
123
|
+
os.path.join(_CURRENT_DIR, "_common.sh"),
|
124
|
+
os.path.join(_CURRENT_DIR, "push-subrepo.sh"),
|
125
|
+
],
|
126
|
+
cwd=PROJECT_DIR,
|
127
|
+
should_show_cmd=False,
|
128
|
+
should_show_working_directory=False,
|
129
|
+
should_print_cmd_result=False,
|
130
|
+
retry=0,
|
131
|
+
)
|
132
|
+
|
133
|
+
|
134
|
+
def _create_commit_message_input(default: str) -> AnyInput:
|
135
|
+
return StrInput(
|
136
|
+
name="message",
|
137
|
+
shortcut="m",
|
138
|
+
prompt="Commit Message",
|
139
|
+
default=default,
|
140
|
+
)
|
@@ -0,0 +1,126 @@
|
|
1
|
+
from zrb.builtin.monorepo._config import MONOREPO_CONFIG
|
2
|
+
from zrb.builtin.monorepo._group import monorepo_group
|
3
|
+
from zrb.builtin.monorepo._helper import (
|
4
|
+
create_add_subrepo_task,
|
5
|
+
create_pull_monorepo_task,
|
6
|
+
create_pull_subrepo_task,
|
7
|
+
create_push_monorepo_task,
|
8
|
+
create_push_subrepo_task,
|
9
|
+
)
|
10
|
+
from zrb.helper.util import to_kebab_case
|
11
|
+
from zrb.runner import runner
|
12
|
+
from zrb.task.flow_task import FlowTask
|
13
|
+
from zrb.task_group.group import Group
|
14
|
+
|
15
|
+
_pull_monorepo = create_pull_monorepo_task()
|
16
|
+
|
17
|
+
PULL_SUBREPO_UPSTREAM = _pull_monorepo
|
18
|
+
PUSH_SUBREPO_UPSTREAM = _pull_monorepo
|
19
|
+
for name, config in MONOREPO_CONFIG.items():
|
20
|
+
kebab_name = to_kebab_case(name)
|
21
|
+
group = Group(
|
22
|
+
name=kebab_name, parent=monorepo_group, description=f"Subrepo {name} management"
|
23
|
+
)
|
24
|
+
origin = config.get("origin", "")
|
25
|
+
folder = config.get("folder", "")
|
26
|
+
branch = config.get("branch", "main")
|
27
|
+
|
28
|
+
pull_subrepo = FlowTask(
|
29
|
+
name="pull",
|
30
|
+
group=group,
|
31
|
+
upstreams=[_pull_monorepo],
|
32
|
+
steps=[
|
33
|
+
create_add_subrepo_task(
|
34
|
+
origin=origin,
|
35
|
+
folder=folder,
|
36
|
+
branch=branch,
|
37
|
+
task_name=f"add-{kebab_name}-subrepo",
|
38
|
+
),
|
39
|
+
create_pull_subrepo_task(
|
40
|
+
origin=origin,
|
41
|
+
folder=folder,
|
42
|
+
branch=branch,
|
43
|
+
task_name=f"pull-{kebab_name}-subrepo",
|
44
|
+
),
|
45
|
+
],
|
46
|
+
)
|
47
|
+
runner.register(pull_subrepo)
|
48
|
+
|
49
|
+
linked_pull_subrepo = FlowTask(
|
50
|
+
name=f"pull-{kebab_name}",
|
51
|
+
upstreams=[PULL_SUBREPO_UPSTREAM],
|
52
|
+
steps=[
|
53
|
+
create_add_subrepo_task(
|
54
|
+
origin=origin,
|
55
|
+
folder=folder,
|
56
|
+
branch=branch,
|
57
|
+
task_name=f"add-{kebab_name}-subrepo",
|
58
|
+
),
|
59
|
+
create_pull_subrepo_task(
|
60
|
+
origin=origin,
|
61
|
+
folder=folder,
|
62
|
+
branch=branch,
|
63
|
+
task_name=f"pull-{kebab_name}-subrepo",
|
64
|
+
),
|
65
|
+
],
|
66
|
+
)
|
67
|
+
PULL_SUBREPO_UPSTREAM = linked_pull_subrepo
|
68
|
+
|
69
|
+
push_subrepo = FlowTask(
|
70
|
+
name="push",
|
71
|
+
group=group,
|
72
|
+
upstreams=[_pull_monorepo],
|
73
|
+
steps=[
|
74
|
+
create_add_subrepo_task(
|
75
|
+
origin=origin,
|
76
|
+
folder=folder,
|
77
|
+
branch=branch,
|
78
|
+
task_name=f"add-{kebab_name}-subrepo",
|
79
|
+
),
|
80
|
+
create_pull_subrepo_task(
|
81
|
+
origin=origin,
|
82
|
+
folder=folder,
|
83
|
+
branch=branch,
|
84
|
+
task_name=f"pull-{kebab_name}-subrepo",
|
85
|
+
),
|
86
|
+
create_push_subrepo_task(
|
87
|
+
origin=origin,
|
88
|
+
folder=folder,
|
89
|
+
branch=branch,
|
90
|
+
task_name=f"push-{kebab_name}-subrepo",
|
91
|
+
),
|
92
|
+
create_push_monorepo_task(task_name="push-monorepo"),
|
93
|
+
],
|
94
|
+
)
|
95
|
+
runner.register(push_subrepo)
|
96
|
+
|
97
|
+
linked_push_subrepo = FlowTask(
|
98
|
+
name=f"push-{kebab_name}",
|
99
|
+
upstreams=[PUSH_SUBREPO_UPSTREAM],
|
100
|
+
steps=[
|
101
|
+
create_add_subrepo_task(
|
102
|
+
origin=origin,
|
103
|
+
folder=folder,
|
104
|
+
branch=branch,
|
105
|
+
task_name=f"add-{kebab_name}-subrepo",
|
106
|
+
),
|
107
|
+
create_pull_subrepo_task(
|
108
|
+
origin=origin,
|
109
|
+
folder=folder,
|
110
|
+
branch=branch,
|
111
|
+
task_name=f"pull-{kebab_name}-subrepo",
|
112
|
+
),
|
113
|
+
create_push_subrepo_task(
|
114
|
+
origin=origin,
|
115
|
+
folder=folder,
|
116
|
+
branch=branch,
|
117
|
+
task_name=f"push-{kebab_name}-subrepo",
|
118
|
+
),
|
119
|
+
],
|
120
|
+
)
|
121
|
+
PUSH_SUBREPO_UPSTREAM = linked_push_subrepo
|
122
|
+
|
123
|
+
|
124
|
+
_push_monorepo = create_push_monorepo_task(task_name="push-monorepo")
|
125
|
+
PUSH_SUBREPO_UPSTREAM >> _push_monorepo
|
126
|
+
PUSH_SUBREPO_UPSTREAM = _push_monorepo
|
@@ -0,0 +1,22 @@
|
|
1
|
+
set -e
|
2
|
+
|
3
|
+
if [ -d "${FOLDER}" ]
|
4
|
+
then
|
5
|
+
exit 0
|
6
|
+
fi
|
7
|
+
|
8
|
+
CONFLICT="$(git diff --name-only --diff-filter=U)"
|
9
|
+
if [ -n "${CONFLICT}" ]
|
10
|
+
then
|
11
|
+
log_conflict_error "${CONFLICT}"
|
12
|
+
exit 1
|
13
|
+
fi
|
14
|
+
|
15
|
+
log_info "Adding subtree: ${FOLDER}"
|
16
|
+
git subtree add --prefix "${FOLDER}" "${ORIGIN}" "${BRANCH}"
|
17
|
+
git add . -A
|
18
|
+
if [ -n "$(git status --porcelain)" ]
|
19
|
+
then
|
20
|
+
log_info "Commit changes"
|
21
|
+
git commit -m "Adding subtree: ${FOLDER} at ${TIME}"
|
22
|
+
fi
|
@@ -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,18 @@
|
|
1
|
+
set -e
|
2
|
+
|
3
|
+
CONFLICT="$(git diff --name-only --diff-filter=U)"
|
4
|
+
if [ -n "${CONFLICT}" ]
|
5
|
+
then
|
6
|
+
log_conflict_error "${CONFLICT}"
|
7
|
+
exit 1
|
8
|
+
fi
|
9
|
+
|
10
|
+
git add . -A
|
11
|
+
if [ -n "$(git status --porcelain)" ]
|
12
|
+
then
|
13
|
+
log_info "Commit changes"
|
14
|
+
git commit -m "Before pulling from monorepo at ${TIME}"
|
15
|
+
fi
|
16
|
+
|
17
|
+
log_info "Pulling from main repository"
|
18
|
+
git pull origin "$(git branch --show-current)"
|
@@ -0,0 +1,18 @@
|
|
1
|
+
set -e
|
2
|
+
|
3
|
+
CONFLICT="$(git diff --name-only --diff-filter=U)"
|
4
|
+
if [ -n "${CONFLICT}" ]
|
5
|
+
then
|
6
|
+
log_conflict_error "${CONFLICT}"
|
7
|
+
exit 1
|
8
|
+
fi
|
9
|
+
|
10
|
+
log_info "Pulling from subtree"
|
11
|
+
git subtree pull --prefix "${FOLDER}" "${ORIGIN}" "${BRANCH}"
|
12
|
+
|
13
|
+
CONFLICT="$(git diff --name-only --diff-filter=U)"
|
14
|
+
if [ -n "${CONFLICT}" ]
|
15
|
+
then
|
16
|
+
log_conflict_error "${CONFLICT}"
|
17
|
+
exit 1
|
18
|
+
fi
|
@@ -0,0 +1,24 @@
|
|
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"Synchronize subrepos at {datetime.now()}",
|
19
|
+
)
|
20
|
+
],
|
21
|
+
retry=0,
|
22
|
+
)
|
23
|
+
PULL_SUBREPO_UPSTREAM >> pull_from_monorepo
|
24
|
+
runner.register(pull_from_monorepo)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
set -e
|
2
|
+
|
3
|
+
CONFLICT="$(git diff --name-only --diff-filter=U)"
|
4
|
+
if [ -n "${CONFLICT}" ]
|
5
|
+
then
|
6
|
+
log_conflict_error "${CONFLICT}"
|
7
|
+
exit 1
|
8
|
+
fi
|
9
|
+
|
10
|
+
git add . -A
|
11
|
+
if [ -n "$(git status --porcelain)" ]
|
12
|
+
then
|
13
|
+
log_info "Commit changes"
|
14
|
+
git commit -m "${MESSAGE}"
|
15
|
+
fi
|
16
|
+
|
17
|
+
log_info "Pushing to main repository"
|
18
|
+
git push origin "$(git branch --show-current)"
|
@@ -0,0 +1,18 @@
|
|
1
|
+
set -e
|
2
|
+
|
3
|
+
CONFLICT="$(git diff --name-only --diff-filter=U)"
|
4
|
+
if [ -n "${CONFLICT}" ]
|
5
|
+
then
|
6
|
+
log_conflict_error "${CONFLICT}"
|
7
|
+
exit 1
|
8
|
+
fi
|
9
|
+
|
10
|
+
git add . -A
|
11
|
+
if [ -n "$(git status --porcelain)" ]
|
12
|
+
then
|
13
|
+
log_info "Commit changes"
|
14
|
+
git commit -m "${MESSAGE}"
|
15
|
+
fi
|
16
|
+
|
17
|
+
log_info "Pushing to subtree"
|
18
|
+
git subtree push --prefix "${FOLDER}" "${ORIGIN}" "${BRANCH}"
|