qubership-pipelines-common-library 0.2.6__py3-none-any.whl → 2.0.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.
Files changed (66) hide show
  1. qubership_pipelines_common_library/__init__.py +1 -1
  2. qubership_pipelines_common_library/v1/artifactory_client.py +1 -1
  3. qubership_pipelines_common_library/v1/execution/exec_command.py +63 -2
  4. qubership_pipelines_common_library/v1/execution/exec_context.py +6 -6
  5. qubership_pipelines_common_library/v1/execution/exec_context_file.py +1 -1
  6. qubership_pipelines_common_library/v1/execution/exec_info.py +4 -0
  7. qubership_pipelines_common_library/v1/execution/exec_logger.py +7 -5
  8. qubership_pipelines_common_library/v1/github_client.py +10 -1
  9. qubership_pipelines_common_library/v1/gitlab_client.py +175 -11
  10. qubership_pipelines_common_library/v1/jenkins_client.py +55 -18
  11. qubership_pipelines_common_library/v1/maven_client.py +2 -2
  12. qubership_pipelines_common_library/v1/minio_client.py +1 -1
  13. qubership_pipelines_common_library/v1/utils/rest.py +1 -1
  14. qubership_pipelines_common_library/v1/utils/utils.py +1 -1
  15. qubership_pipelines_common_library/v1/utils/utils_cli.py +43 -9
  16. qubership_pipelines_common_library/v1/utils/utils_dictionary.py +1 -1
  17. qubership_pipelines_common_library/v1/utils/utils_file.py +17 -0
  18. qubership_pipelines_common_library/v1/utils/utils_logging.py +53 -0
  19. qubership_pipelines_common_library/v2/__init__.py +0 -0
  20. qubership_pipelines_common_library/v2/artifacts_finder/__init__.py +0 -0
  21. qubership_pipelines_common_library/v2/artifacts_finder/artifact_finder.py +56 -0
  22. qubership_pipelines_common_library/v2/artifacts_finder/auth/__init__.py +0 -0
  23. qubership_pipelines_common_library/v2/artifacts_finder/auth/aws_credentials.py +106 -0
  24. qubership_pipelines_common_library/v2/artifacts_finder/auth/azure_credentials.py +72 -0
  25. qubership_pipelines_common_library/v2/artifacts_finder/auth/gcp_credentials.py +88 -0
  26. qubership_pipelines_common_library/v2/artifacts_finder/model/__init__.py +0 -0
  27. qubership_pipelines_common_library/v2/artifacts_finder/model/artifact.py +20 -0
  28. qubership_pipelines_common_library/v2/artifacts_finder/model/artifact_provider.py +35 -0
  29. qubership_pipelines_common_library/v2/artifacts_finder/model/credentials.py +16 -0
  30. qubership_pipelines_common_library/v2/artifacts_finder/model/credentials_provider.py +16 -0
  31. qubership_pipelines_common_library/v2/artifacts_finder/providers/__init__.py +0 -0
  32. qubership_pipelines_common_library/v2/artifacts_finder/providers/artifactory.py +52 -0
  33. qubership_pipelines_common_library/v2/artifacts_finder/providers/aws_code_artifact.py +79 -0
  34. qubership_pipelines_common_library/v2/artifacts_finder/providers/azure_artifacts.py +98 -0
  35. qubership_pipelines_common_library/v2/artifacts_finder/providers/gcp_artifact_registry.py +50 -0
  36. qubership_pipelines_common_library/v2/artifacts_finder/providers/nexus.py +41 -0
  37. qubership_pipelines_common_library/v2/extensions/pipeline_data_importer.py +24 -0
  38. qubership_pipelines_common_library/v2/github/__init__.py +0 -0
  39. qubership_pipelines_common_library/v2/github/github_client.py +5 -0
  40. qubership_pipelines_common_library/v2/github/github_pipeline_data_importer.py +21 -0
  41. qubership_pipelines_common_library/v2/github/github_run_pipeline_command.py +175 -0
  42. qubership_pipelines_common_library/v2/github/safe_github_client.py +24 -0
  43. qubership_pipelines_common_library/v2/gitlab/__init__.py +0 -0
  44. qubership_pipelines_common_library/v2/gitlab/custom_extensions.py +101 -0
  45. qubership_pipelines_common_library/v2/gitlab/gitlab_client.py +36 -0
  46. qubership_pipelines_common_library/v2/gitlab/gitlab_pipeline_data_importer.py +26 -0
  47. qubership_pipelines_common_library/v2/gitlab/gitlab_run_pipeline_command.py +195 -0
  48. qubership_pipelines_common_library/v2/gitlab/safe_gitlab_client.py +32 -0
  49. qubership_pipelines_common_library/v2/jenkins/__init__.py +0 -0
  50. qubership_pipelines_common_library/v2/jenkins/custom_extensions.py +63 -0
  51. qubership_pipelines_common_library/v2/jenkins/jenkins_client.py +5 -0
  52. qubership_pipelines_common_library/v2/jenkins/jenkins_pipeline_data_importer.py +31 -0
  53. qubership_pipelines_common_library/v2/jenkins/jenkins_run_pipeline_command.py +165 -0
  54. qubership_pipelines_common_library/v2/jenkins/safe_jenkins_client.py +14 -0
  55. qubership_pipelines_common_library/v2/podman/__init__.py +0 -0
  56. qubership_pipelines_common_library/v2/podman/podman_command.md +178 -0
  57. qubership_pipelines_common_library/v2/podman/podman_command.py +311 -0
  58. qubership_pipelines_common_library/v2/sops/sops_client.py +116 -0
  59. qubership_pipelines_common_library/v2/utils/crypto_utils.py +48 -0
  60. qubership_pipelines_common_library/v2/utils/extension_utils.py +22 -0
  61. qubership_pipelines_common_library/v2/utils/retry_decorator.py +93 -0
  62. {qubership_pipelines_common_library-0.2.6.dist-info → qubership_pipelines_common_library-2.0.1.dist-info}/METADATA +5 -3
  63. qubership_pipelines_common_library-2.0.1.dist-info/RECORD +76 -0
  64. qubership_pipelines_common_library-0.2.6.dist-info/RECORD +0 -32
  65. {qubership_pipelines_common_library-0.2.6.dist-info → qubership_pipelines_common_library-2.0.1.dist-info}/WHEEL +0 -0
  66. {qubership_pipelines_common_library-0.2.6.dist-info → qubership_pipelines_common_library-2.0.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,116 @@
1
+ import logging
2
+ import os
3
+ import shutil
4
+ import subprocess
5
+ import uuid
6
+ import yaml
7
+
8
+ from pathlib import Path
9
+
10
+
11
+ class SopsClient:
12
+
13
+ def __init__(self, sops_artifact_configs_folder_path: Path):
14
+ self.sops_artifact_configs_folder_path = sops_artifact_configs_folder_path
15
+ self.sops_executable = Path(os.environ.get("SOPS_EXECUTABLE", "/usr/local/bin/sops"))
16
+ self.logger = logging.getLogger()
17
+
18
+ def encrypt_content_by_path(
19
+ self, age_public_key: str, source_file_path_to_encrypt: Path, target_file_path: Path = None):
20
+ """
21
+ Encrypts file and saves result into file by path
22
+ Args:
23
+ age_public_key: age public key
24
+ source_file_path_to_encrypt: file to encrypt
25
+ target_file_path: file to save result of encryption. If None then `source_file_path_to_encrypt` will be used
26
+ """
27
+ if not self.sops_executable.exists():
28
+ self.logger.error(f"Sops executable doesn't exist. Can't encrypt file {source_file_path_to_encrypt}")
29
+ return
30
+
31
+ sops_config_path = self._get_prepared_sops_config_path(age_public_key)
32
+ encrypted_file_path = target_file_path
33
+ if not encrypted_file_path:
34
+ encrypted_file_path = source_file_path_to_encrypt
35
+
36
+ args = (self.sops_executable, "--config", sops_config_path, "encrypt", source_file_path_to_encrypt)
37
+ sops_encrypt_result = subprocess.run(args, capture_output=True, text=True)
38
+ if sops_encrypt_result.stderr:
39
+ self.logger.error(f"Error during encryption of {source_file_path_to_encrypt}. "
40
+ f"Saving empty content into {encrypted_file_path}"
41
+ f"Error: {sops_encrypt_result.stderr}")
42
+
43
+ with open(encrypted_file_path, 'w') as encrypted_file:
44
+ encrypted_file.write("")
45
+ self._remove_sops_config(sops_config_path.parent)
46
+ return
47
+
48
+ with open(encrypted_file_path, 'w') as encrypted_file:
49
+ encrypted_file.write(sops_encrypt_result.stdout)
50
+ self.logger.debug(f"Content {source_file_path_to_encrypt} was encrypted by sops. "
51
+ f"Result saved into {encrypted_file_path}")
52
+ self._remove_sops_config(sops_config_path.parent)
53
+
54
+ def get_decrypted_content_by_path(self, age_private_key: str, source_file_path_to_decrypt: Path) -> str:
55
+ """
56
+ Decrypts file by path
57
+ Args:
58
+ age_private_key: age private key
59
+ source_file_path_to_decrypt: file path to decrypt
60
+
61
+ Returns:
62
+ decrypted file content or empty string if error occurs
63
+ """
64
+ if not self.sops_executable.exists():
65
+ self.logger.error(f"Sops executable doesn't exist. Can't decrypt file {source_file_path_to_decrypt}")
66
+ return ""
67
+ if not age_private_key:
68
+ self.logger.warning("sops_private_key is not defined, skipping decryption")
69
+ return ""
70
+ environment_variables = os.environ.copy()
71
+ environment_variables["SOPS_AGE_KEY"] = age_private_key.strip()
72
+ args = (self.sops_executable, "-d", source_file_path_to_decrypt)
73
+ sops_decrypt_result = subprocess.run(args, env=environment_variables, capture_output=True, text=True)
74
+ if sops_decrypt_result.stderr:
75
+ self.logger.error(f"Error during {source_file_path_to_decrypt} decrypt. Error: {sops_decrypt_result.stderr}")
76
+ return ""
77
+ self.logger.debug(f"Content {source_file_path_to_decrypt} was decrypted by sops")
78
+ return sops_decrypt_result.stdout
79
+
80
+ def _get_prepared_sops_config_path(self, age_public_key) -> Path:
81
+ """
82
+ Generates `.sops.yaml` file `age-public-key`
83
+ Creates folder `uuid.uuid4()` under `self.sops_artifact_configs_folder_path` to make `.sops.yaml`
84
+ unique for exact encryption
85
+ Args:
86
+ age_public_key: age public key
87
+
88
+ Returns:
89
+ path to generated `.sops.yaml`
90
+ """
91
+ self.logger.debug("Preparing sops config for encryption")
92
+ sops_config_content = {
93
+ "creation_rules": [
94
+ {
95
+ "age": age_public_key
96
+ }
97
+ ]
98
+ }
99
+ sops_config_path = self.sops_artifact_configs_folder_path.joinpath(str(uuid.uuid4()), ".sops.yaml")
100
+ sops_config_path.parent.mkdir(parents=True, exist_ok=True)
101
+ with open(sops_config_path, mode="w") as file:
102
+ yaml.dump(sops_config_content, file)
103
+ return sops_config_path
104
+
105
+ def _remove_sops_config(self, sops_config_folder: Path):
106
+ """
107
+ Removes folder with generated sops config
108
+ Args:
109
+ sops_config_folder: path to folder with sops config
110
+
111
+ Returns:
112
+
113
+ """
114
+ self.logger.debug("Removing sops config")
115
+ if sops_config_folder.exists() and sops_config_folder.is_dir():
116
+ shutil.rmtree(sops_config_folder)
@@ -0,0 +1,48 @@
1
+ class CryptoUtils:
2
+ EXCLUDE_KEYS = {"kind", "apiVersion"}
3
+
4
+ @staticmethod
5
+ def is_base64(s) -> bool:
6
+ try:
7
+ if isinstance(s, str):
8
+ s_bytes = s.encode('utf-8')
9
+ else:
10
+ s_bytes = s
11
+ import base64
12
+ return base64.b64encode(base64.b64decode(s_bytes)) == s_bytes
13
+ except Exception:
14
+ return False
15
+
16
+ @staticmethod
17
+ def get_base64_encrypted_str(s) -> str:
18
+ if isinstance(s, str):
19
+ s_bytes = s.encode('utf-8')
20
+ else:
21
+ s_bytes = s
22
+ import base64
23
+ return base64.b64encode(s_bytes).decode('utf-8')
24
+
25
+ @staticmethod
26
+ def mask_values(data, path=None):
27
+ if path is None:
28
+ path = []
29
+
30
+ if isinstance(data, dict):
31
+ return {
32
+ key: (CryptoUtils.mask_values(value, path + [key])
33
+ if not (len(path) == 0 and key in CryptoUtils.EXCLUDE_KEYS)
34
+ else value)
35
+ for key, value in data.items()
36
+ }
37
+ elif isinstance(data, list):
38
+ return [CryptoUtils.mask_values(item, path) for item in data]
39
+ else:
40
+ return "[MASKED]"
41
+
42
+ @staticmethod
43
+ def get_parameters_for_print(content: dict, need_mask: bool):
44
+ import yaml
45
+ if need_mask:
46
+ return yaml.dump(CryptoUtils.mask_values(content), default_flow_style=False)
47
+ else:
48
+ return yaml.dump(content, default_flow_style=False)
@@ -0,0 +1,22 @@
1
+ import importlib
2
+ from typing import Type, Any, Optional
3
+
4
+
5
+ class ExtensionLoader:
6
+ """Utility methods to create instance of a class by its classpath and validate its expected base class"""
7
+
8
+ @staticmethod
9
+ def load_class(class_path: str) -> Type[Any]:
10
+ try:
11
+ module_path, class_name = class_path.rsplit('.', 1)
12
+ module = importlib.import_module(module_path)
13
+ return getattr(module, class_name)
14
+ except (ImportError, AttributeError, ValueError) as e:
15
+ raise ImportError(f"Failed to load class {class_path}: {e}")
16
+
17
+ @staticmethod
18
+ def create_instance(class_path: str, expected_base_class: Optional[Type] = None, **kwargs) -> Any:
19
+ klass = ExtensionLoader.load_class(class_path)
20
+ if expected_base_class and not issubclass(klass, expected_base_class):
21
+ raise TypeError(f"Class {class_path} must inherit from {expected_base_class.__name__}")
22
+ return klass(**kwargs)
@@ -0,0 +1,93 @@
1
+ import logging
2
+ import sys
3
+ import time
4
+ from functools import wraps
5
+ from typing import Callable
6
+
7
+
8
+ class RetryDecorator:
9
+
10
+ def __init__(self, condition_func, retry_timeout_seconds: int = 180, retry_wait_seconds: int = 1):
11
+ self.condition_func = condition_func
12
+ self.retry_timeout_seconds = retry_timeout_seconds
13
+ self.retry_wait_seconds = retry_wait_seconds
14
+ self.logger = logging.getLogger()
15
+
16
+ def __call__(self, func: Callable) -> Callable:
17
+ @wraps(func)
18
+ def wrapper(*args, **kwargs):
19
+ self._update_retry_timeout_seconds_from_kwargs(kwargs, func)
20
+ self._update_retry_wait_seconds_from_kwargs(kwargs, func)
21
+
22
+ count_seconds = 0
23
+ retries = 0
24
+ last_log_time = time.perf_counter()
25
+ last_result = None
26
+ estimated_max_attempts = self.retry_timeout_seconds // self.retry_wait_seconds
27
+
28
+
29
+ while count_seconds < self.retry_timeout_seconds and not self.condition_func(last_result):
30
+ try:
31
+ last_result = func(*args, **kwargs)
32
+ if self.condition_func(last_result):
33
+ self.logger.debug(f"Function {func.__name__} successfully executed after {retries} attempts in {count_seconds}s")
34
+ return last_result
35
+ retries += 1
36
+
37
+ now = time.perf_counter()
38
+ if now - last_log_time >= 10:
39
+ self._sleep_with_warning_log(
40
+ f"Made [{retries} of {estimated_max_attempts}] retries with {self.retry_wait_seconds} seconds between attempts. Trying to execute func: {self.condition_func.__name__}. {count_seconds} of {self.retry_timeout_seconds} seconds left")
41
+ last_log_time = now
42
+ else:
43
+ time.sleep(self.retry_wait_seconds)
44
+
45
+ except Exception as e:
46
+ retries += 1
47
+ now = time.perf_counter()
48
+ if now - last_log_time >= 10:
49
+ self._process_exception_during_func_execution(e, count_seconds, func.__name__, retries, estimated_max_attempts)
50
+ last_log_time = now
51
+ else:
52
+ time.sleep(self.retry_wait_seconds)
53
+
54
+ finally:
55
+ count_seconds += self.retry_wait_seconds
56
+
57
+ if self.condition_func(last_result):
58
+ self.logger.debug(f"Function {func.__name__} successfully executed after {retries} attempts in {count_seconds}s")
59
+ return last_result
60
+
61
+ self._exit_with_error_message(func.__name__)
62
+ return wrapper
63
+
64
+ def _sleep_with_warning_log(self, message):
65
+ self.logger.warning(message)
66
+ time.sleep(self.retry_wait_seconds)
67
+
68
+ def _update_retry_timeout_seconds_from_kwargs(self, kwargs, func):
69
+ kwargs_retry_timeout_seconds = kwargs.get('retry_timeout_seconds')
70
+ if kwargs_retry_timeout_seconds:
71
+ self.retry_timeout_seconds = kwargs_retry_timeout_seconds
72
+ else:
73
+ self.logger.debug(
74
+ f"`retry_timeout_seconds` is not found in func {func.__name__} arguments. Using default value = {self.retry_timeout_seconds}")
75
+
76
+ def _update_retry_wait_seconds_from_kwargs(self, kwargs, func):
77
+ kwargs_retry_wait_seconds = kwargs.get('retry_wait_seconds')
78
+ if kwargs_retry_wait_seconds:
79
+ self.retry_wait_seconds = kwargs_retry_wait_seconds
80
+ else:
81
+ self.logger.debug(
82
+ f"`retry_wait_seconds` is not found in func {func.__name__} arguments. Using default value = {self.retry_wait_seconds}")
83
+
84
+ def _process_exception_during_func_execution(self, exception, count_seconds, func_name, retries, estimated_max_attempts):
85
+ if count_seconds < self.retry_timeout_seconds:
86
+ self._sleep_with_warning_log(
87
+ f"Made [{retries} of {estimated_max_attempts}] retries. Exception happened during function {func_name} execution, waiting {count_seconds} of {self.retry_timeout_seconds}. Exception: {exception}")
88
+ else:
89
+ self._exit_with_error_message(func_name)
90
+
91
+ def _exit_with_error_message(self, func_name):
92
+ self.logger.error(f"Can't execute function {func_name} in {self.retry_timeout_seconds} seconds")
93
+ sys.exit(1)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qubership-pipelines-common-library
3
- Version: 0.2.6
3
+ Version: 2.0.1
4
4
  Summary: Qubership Pipelines common library
5
5
  License: Apache-2.0
6
6
  License-File: LICENSE
@@ -24,6 +24,7 @@ Requires-Dist: python-gitlab (>=4.13.0,<5.0.0)
24
24
  Requires-Dist: python-jenkins (>=1.8.2,<2.0.0)
25
25
  Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
26
26
  Requires-Dist: requests (>=2.32.3,<3.0.0)
27
+ Requires-Dist: rich (>=14.2.0,<15.0.0)
27
28
  Requires-Dist: urllib3 (>=2.2.3,<3.0.0)
28
29
  Requires-Dist: webexpythonsdk (==2.0.1)
29
30
  Description-Content-Type: text/markdown
@@ -37,7 +38,7 @@ Description-Content-Type: text/markdown
37
38
 
38
39
  Open-source python library of clients used by Qubership pipelines/modules.
39
40
 
40
- Library provides easy-to-use clients and wrappers for common devops services (e.g. Jenkins, MiniO, GitLab Pipelines)
41
+ Library provides easy-to-use clients and wrappers for common DevOps services (e.g. Jenkins, MiniO, GitLab Pipelines)
41
42
 
42
43
  ## Sample implementation
43
44
 
@@ -49,7 +50,7 @@ It includes reference python implementation along with the [Development Guide](h
49
50
 
50
51
  Library is presented as a set of clients with predefined operations
51
52
 
52
- Auto-generated reference (via mkdocs) is available on [this repo's GitHub Pages](https://netcracker.github.io/qubership-pipelines-common-python-library)
53
+ Auto-generated reference (via mkdocs) is available on [this repo's GitHub Pages](https://netcracker.github.io/qubership-pipelines-common-python-library/mkdocs)
53
54
 
54
55
  ## Installation
55
56
 
@@ -61,6 +62,7 @@ Auto-generated reference (via mkdocs) is available on [this repo's GitHub Pages]
61
62
  ```
62
63
 
63
64
  - Or you can install it via `pip`:
65
+
64
66
  ```bash
65
67
  pip install qubership-pipelines-common-library
66
68
  ```
@@ -0,0 +1,76 @@
1
+ qubership_pipelines_common_library/__init__.py,sha256=1ipKsZu0XaIlnWobDyzTjFYBMMmAMgDII4s9QNAPx1w,704
2
+ qubership_pipelines_common_library/v1/__init__.py,sha256=QczIlSYNOtXMuMWSznhV_BkXMM5KLn1wOogtlT2kcy0,598
3
+ qubership_pipelines_common_library/v1/artifactory_client.py,sha256=hSMh7hQ0KWkgiCNKGEQzPV4TuIOl-tpQ-i2xLd1b7qo,4107
4
+ qubership_pipelines_common_library/v1/execution/__init__.py,sha256=QczIlSYNOtXMuMWSznhV_BkXMM5KLn1wOogtlT2kcy0,598
5
+ qubership_pipelines_common_library/v1/execution/exec_command.py,sha256=3LwDBgnoSc0LCWTmQgsKEujSqMUzCp0iJb8ZM4gu7qE,5727
6
+ qubership_pipelines_common_library/v1/execution/exec_context.py,sha256=j9NaxdsvoIygidWHkxzl7Kg2Jr6l2L5P8E1i-maHDZE,6073
7
+ qubership_pipelines_common_library/v1/execution/exec_context_file.py,sha256=oovjNvudgzdopaNHDbbLv95skEA7z-kPp3CPE0N-8Xc,7392
8
+ qubership_pipelines_common_library/v1/execution/exec_info.py,sha256=c1ksds6c-NcegSH9SPknzFxd1iw8xT8qS2_aZaVZ7F0,4280
9
+ qubership_pipelines_common_library/v1/execution/exec_logger.py,sha256=ZKEfCfBXluer6gP_zIpyLIh31a-xx3LBvUALIowcbU0,3231
10
+ qubership_pipelines_common_library/v1/git_client.py,sha256=uop4dREW0HoaAbGHSzp3P4vk1Hk-VrPK5RhAP3Hj51o,6100
11
+ qubership_pipelines_common_library/v1/github_client.py,sha256=hgChgE2Qiz2nS0WmpO334h8sivyD5kVg0Ck-wBsGdsk,15068
12
+ qubership_pipelines_common_library/v1/gitlab_client.py,sha256=zotW68yhlD2xZJce8N91K_4njrGBGh2hSAutR6MMHw8,15800
13
+ qubership_pipelines_common_library/v1/jenkins_client.py,sha256=_a86Nd72QUzmixtV__SkEb0M3wq2ONS5OhbZWH1eCiU,10554
14
+ qubership_pipelines_common_library/v1/kube_client.py,sha256=rbdc0Q2r6AhJ49FKr-15_1r9Uit4_6U68rWwGYDjdWc,12715
15
+ qubership_pipelines_common_library/v1/log_client.py,sha256=DTJ8aI_37l570RyolDC2cHaOkkccZWi7cFE6qYUuQeo,1514
16
+ qubership_pipelines_common_library/v1/maven_client.py,sha256=bHB5Hox-YABDZWKXQRC8JosJUUKTzQDm6y2RpNtA-6o,15036
17
+ qubership_pipelines_common_library/v1/minio_client.py,sha256=JDS90KLC12WHs7wvSVKmN_eZOqz-JNkhmAmoFCNjeGo,4334
18
+ qubership_pipelines_common_library/v1/utils/__init__.py,sha256=QczIlSYNOtXMuMWSznhV_BkXMM5KLn1wOogtlT2kcy0,598
19
+ qubership_pipelines_common_library/v1/utils/rest.py,sha256=OfYGPE2tM-vDUg__ytZKfpCeGVCDePSjXDHK61A2KDM,3069
20
+ qubership_pipelines_common_library/v1/utils/utils.py,sha256=aMyUrJqlnRcFSjNtiyKa5TDJ31m2ABpljeQdnil3A20,1866
21
+ qubership_pipelines_common_library/v1/utils/utils_aws.py,sha256=BPPnHBzPPXPqFijtAiw16sTPu1tFZjS95GkSMX_HdjA,808
22
+ qubership_pipelines_common_library/v1/utils/utils_cli.py,sha256=URmspvyL2kzRyoaXJbxsVEEcy9n4l9ezuvFYVW4W1hk,4188
23
+ qubership_pipelines_common_library/v1/utils/utils_context.py,sha256=IlMFXGxS8zJw33Gu3SbOUcj88wquIkobBlWkdFbR7MA,3767
24
+ qubership_pipelines_common_library/v1/utils/utils_dictionary.py,sha256=xe8ftnigzyCKWCZaUnI2Xu2ykYlOl1Nc9ATimXuCbgM,1366
25
+ qubership_pipelines_common_library/v1/utils/utils_file.py,sha256=E4RhpeCRhUt-EQ_6pUz-QEKkH8JidJWwYxZmrAvpHBk,2905
26
+ qubership_pipelines_common_library/v1/utils/utils_json.py,sha256=QczIlSYNOtXMuMWSznhV_BkXMM5KLn1wOogtlT2kcy0,598
27
+ qubership_pipelines_common_library/v1/utils/utils_logging.py,sha256=2kPBjPyQfPOZ8_Zv4W-aBWBlZtN_mDCc3JWHzdW4BJo,1506
28
+ qubership_pipelines_common_library/v1/utils/utils_string.py,sha256=Phx5ZXPRjhjg9AaSPx6WLX9zQvwJH1txslfnG3jJ43w,993
29
+ qubership_pipelines_common_library/v1/webex_client.py,sha256=JU_0NgLu_p6zgaUi-ixgZeFMlJaTAvXwrU1oA607Bv0,2997
30
+ qubership_pipelines_common_library/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
+ qubership_pipelines_common_library/v2/artifacts_finder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ qubership_pipelines_common_library/v2/artifacts_finder/artifact_finder.py,sha256=mhnnt93XMqUV5dfJkBxmjfvFdnmrDeAMb5-FSG3txM4,3180
33
+ qubership_pipelines_common_library/v2/artifacts_finder/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ qubership_pipelines_common_library/v2/artifacts_finder/auth/aws_credentials.py,sha256=Bmq6tPHbTyEiNShypU1gb44b_hhvasHggMxjEjHQUoA,4042
35
+ qubership_pipelines_common_library/v2/artifacts_finder/auth/azure_credentials.py,sha256=fcEzDKONg4QXwZoV6PfWKMRnhJrAfCEFvdpGL6V9ix4,2616
36
+ qubership_pipelines_common_library/v2/artifacts_finder/auth/gcp_credentials.py,sha256=RXK1U_d1wHgcpxZESb9NziWVTeRQdzDHhw5SFy1eRYg,3760
37
+ qubership_pipelines_common_library/v2/artifacts_finder/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
+ qubership_pipelines_common_library/v2/artifacts_finder/model/artifact.py,sha256=5EmS58kOw6TTfilmW1lllpQCgawVPTl-FYOBY2aaedU,776
39
+ qubership_pipelines_common_library/v2/artifacts_finder/model/artifact_provider.py,sha256=vLGLcOYKejII4aIZWXdrP_xpPPK0kUPUz9wm2e7Y3CI,1171
40
+ qubership_pipelines_common_library/v2/artifacts_finder/model/credentials.py,sha256=O5T-hiJ2QXIo1flInywkhUKFusrgLkKMLu38EGjNPXk,415
41
+ qubership_pipelines_common_library/v2/artifacts_finder/model/credentials_provider.py,sha256=eLQoVmZJND73A5ATXWgtldcNzZtmJYiEznLu7-Qywgk,588
42
+ qubership_pipelines_common_library/v2/artifacts_finder/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ qubership_pipelines_common_library/v2/artifacts_finder/providers/artifactory.py,sha256=sd0Pqwyr7yJ7vEEPcgXB4tW0PcANW-JSanWqiK5WGQ8,2338
44
+ qubership_pipelines_common_library/v2/artifacts_finder/providers/aws_code_artifact.py,sha256=kM1w5ZIXyNWqUfhpIjPNWIN84TFW4MnYVvXm4R5XGDY,3908
45
+ qubership_pipelines_common_library/v2/artifacts_finder/providers/azure_artifacts.py,sha256=TvXeyORDKbwgAvseDAYoKuckqo-dA5NTGAWaYrKkofc,5150
46
+ qubership_pipelines_common_library/v2/artifacts_finder/providers/gcp_artifact_registry.py,sha256=STADO5wILFqzfQqax-u89h4XexLH6QuUSJ5kEHZyzJ0,2401
47
+ qubership_pipelines_common_library/v2/artifacts_finder/providers/nexus.py,sha256=8RYW2BmMYcMnkPEwm2jbS1sfEP7mSW1k7aPUgwerXSA,1929
48
+ qubership_pipelines_common_library/v2/extensions/pipeline_data_importer.py,sha256=3I6hvqZy19kZsjhhqaluBFoaGBeDeF0DVOmXjYwibAA,784
49
+ qubership_pipelines_common_library/v2/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
+ qubership_pipelines_common_library/v2/github/github_client.py,sha256=8ZLFnJDXveoxS4-agiYTqv0sZFDT7FCvMRfIln51QnQ,142
51
+ qubership_pipelines_common_library/v2/github/github_pipeline_data_importer.py,sha256=BXq549psTvErvUYOrx38QkpglgZg-TH10TfGk0PcQxE,1035
52
+ qubership_pipelines_common_library/v2/github/github_run_pipeline_command.py,sha256=h9Ldt3RVBBMGWZa_fHoTg4Z016isIsF3pzFCGrtN6bM,11242
53
+ qubership_pipelines_common_library/v2/github/safe_github_client.py,sha256=tS6Huv5K_lkv4mKAY3Uw0PoG21kJkrXQ9e1NdGLvpws,1295
54
+ qubership_pipelines_common_library/v2/gitlab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ qubership_pipelines_common_library/v2/gitlab/custom_extensions.py,sha256=Va7BU0sh74hz2A2xniM2F709MHfE5v_4X6nIIGUMLTc,5627
56
+ qubership_pipelines_common_library/v2/gitlab/gitlab_client.py,sha256=OdAZOZbLwpfxLqvqDMT3uGdNxD1SfRKAWyemIr7lVss,1707
57
+ qubership_pipelines_common_library/v2/gitlab/gitlab_pipeline_data_importer.py,sha256=eWB92mGQl5L2XQpUnzpAPTVFm-p8k6H6LMF6T4VkR7o,1413
58
+ qubership_pipelines_common_library/v2/gitlab/gitlab_run_pipeline_command.py,sha256=IIpImf-aSBqMrtWK4S69QaF0_TscjG5MV4eDsF_LFrw,11829
59
+ qubership_pipelines_common_library/v2/gitlab/safe_gitlab_client.py,sha256=Ptlmgw5OCO0S24B-fAVxSdBO1yxx0LadVTLZXyhOwuI,1813
60
+ qubership_pipelines_common_library/v2/jenkins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
+ qubership_pipelines_common_library/v2/jenkins/custom_extensions.py,sha256=CeNEp1ZCMGobKyZy88XuW3hntji4iZ1SgvMDJCGNobE,3732
62
+ qubership_pipelines_common_library/v2/jenkins/jenkins_client.py,sha256=h-EWIBYHxJ4FEv26N6ZKTJ7x4K3tgEvJ2EhN-gBzkgk,147
63
+ qubership_pipelines_common_library/v2/jenkins/jenkins_pipeline_data_importer.py,sha256=zWNejXoAw1y25Jf6cl6f7UhwnJsyEK87hw7MDdoL0Mk,1572
64
+ qubership_pipelines_common_library/v2/jenkins/jenkins_run_pipeline_command.py,sha256=7ws_V2QO8QwpOKUtgl8PbcnhsUo_pHruue-if-79ee8,10136
65
+ qubership_pipelines_common_library/v2/jenkins/safe_jenkins_client.py,sha256=PD1BaF4TbvzIy49g3EdxsliRyUp_zy6TFAuhBt29FEw,620
66
+ qubership_pipelines_common_library/v2/podman/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
+ qubership_pipelines_common_library/v2/podman/podman_command.md,sha256=EKctWLIXZhoaxe579f-OgqFfjISk2UYgFD8JyzJeAVU,6500
68
+ qubership_pipelines_common_library/v2/podman/podman_command.py,sha256=o78MYtieAD4rdOyRQEioQREhhw0e0Zqa1kNyygvOOSI,15541
69
+ qubership_pipelines_common_library/v2/sops/sops_client.py,sha256=vB1czEqIQ6aRywkfvIQfqGZOTtPy39cnOExhfJbPw4s,4946
70
+ qubership_pipelines_common_library/v2/utils/crypto_utils.py,sha256=zZ32IJY7WKzJEJNyZQVCPdWC4uujo6goR0MyzBAhn78,1504
71
+ qubership_pipelines_common_library/v2/utils/extension_utils.py,sha256=-OyT6xrIg-PdHHy2Y712rbOAB6Q7WXTqGwP7oVne4k4,965
72
+ qubership_pipelines_common_library/v2/utils/retry_decorator.py,sha256=ItYYL7zam4LrpQrsihis_n6aFCAa32ZAOKKSmxkaENM,4391
73
+ qubership_pipelines_common_library-2.0.1.dist-info/METADATA,sha256=leOGiAkgcUaDCECQTxt3p0jzG1vOSno68GLK4UXPr7U,3063
74
+ qubership_pipelines_common_library-2.0.1.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
75
+ qubership_pipelines_common_library-2.0.1.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
76
+ qubership_pipelines_common_library-2.0.1.dist-info/RECORD,,
@@ -1,32 +0,0 @@
1
- qubership_pipelines_common_library/__init__.py,sha256=91r6ljRCMIXiH1mE5cME45OstbTMJTicNEbTpGgJjQY,703
2
- qubership_pipelines_common_library/v1/__init__.py,sha256=QczIlSYNOtXMuMWSznhV_BkXMM5KLn1wOogtlT2kcy0,598
3
- qubership_pipelines_common_library/v1/artifactory_client.py,sha256=Gwf21BXUYNpKT_Y_wMyM07WlpDNTIBSUkSIsJlWfURg,4105
4
- qubership_pipelines_common_library/v1/execution/__init__.py,sha256=QczIlSYNOtXMuMWSznhV_BkXMM5KLn1wOogtlT2kcy0,598
5
- qubership_pipelines_common_library/v1/execution/exec_command.py,sha256=q499vODvHg4oP5Bd6xCAjrAMjTKtMZLGE5njth7vuY0,3317
6
- qubership_pipelines_common_library/v1/execution/exec_context.py,sha256=R9Kmb4t3QRXCJTMhC3qcPtxtyvCrIV037Ix9P_VD5YI,6055
7
- qubership_pipelines_common_library/v1/execution/exec_context_file.py,sha256=kbuL9mA21qhaueVe6SWvI3OM49Ekrm8v1lj1FFspBq4,7397
8
- qubership_pipelines_common_library/v1/execution/exec_info.py,sha256=RsHaSdzAnOzR5XRlpU2F0IYkEAcaWBEONDlkgUPpFWs,4102
9
- qubership_pipelines_common_library/v1/execution/exec_logger.py,sha256=rtSCLo3mqtwIc2S_tBs0uizehdthBGfygB1Vpwa-sRA,3102
10
- qubership_pipelines_common_library/v1/git_client.py,sha256=uop4dREW0HoaAbGHSzp3P4vk1Hk-VrPK5RhAP3Hj51o,6100
11
- qubership_pipelines_common_library/v1/github_client.py,sha256=cyAbPau94XfpVVvgRVk7sVgPWtp4Q-Bx-6HHgjQG3Xc,14607
12
- qubership_pipelines_common_library/v1/gitlab_client.py,sha256=aKvkBRDIxyZ7TG0_AP8SXM2f4sgk7BCL1ZL2JKG-nEc,8658
13
- qubership_pipelines_common_library/v1/jenkins_client.py,sha256=VsD4KQNmLTeFvyVnY0m1xPv3s5bb-sNbgO6SwTJ2FfY,8597
14
- qubership_pipelines_common_library/v1/kube_client.py,sha256=rbdc0Q2r6AhJ49FKr-15_1r9Uit4_6U68rWwGYDjdWc,12715
15
- qubership_pipelines_common_library/v1/log_client.py,sha256=DTJ8aI_37l570RyolDC2cHaOkkccZWi7cFE6qYUuQeo,1514
16
- qubership_pipelines_common_library/v1/maven_client.py,sha256=DbyPp6lh17op04GGeq2jIbk-SyVzCCHRcr2ox-eUv54,15054
17
- qubership_pipelines_common_library/v1/minio_client.py,sha256=4KlkCJvtgGKQOujChxRtKrpoZVukooMLfj5D8C9CKC4,4343
18
- qubership_pipelines_common_library/v1/utils/__init__.py,sha256=QczIlSYNOtXMuMWSznhV_BkXMM5KLn1wOogtlT2kcy0,598
19
- qubership_pipelines_common_library/v1/utils/rest.py,sha256=MaCS6L6Khs_HaWoi3WNj9Go33d9zEVErLP5T8iVRyHA,3068
20
- qubership_pipelines_common_library/v1/utils/utils.py,sha256=5PhXyFC1Zfuz0KDrWC9QgacTLVVk8zu0-6wxYS0bmzE,1865
21
- qubership_pipelines_common_library/v1/utils/utils_aws.py,sha256=BPPnHBzPPXPqFijtAiw16sTPu1tFZjS95GkSMX_HdjA,808
22
- qubership_pipelines_common_library/v1/utils/utils_cli.py,sha256=3b4SbAKUearf2d_W6S8kuMNaB_Up1Qiblm8Nc5DHEqE,3199
23
- qubership_pipelines_common_library/v1/utils/utils_context.py,sha256=IlMFXGxS8zJw33Gu3SbOUcj88wquIkobBlWkdFbR7MA,3767
24
- qubership_pipelines_common_library/v1/utils/utils_dictionary.py,sha256=6wGAoBmLzPGGqdtkoqU9RtMBYuOO-UkZsZDh7GzubjA,1365
25
- qubership_pipelines_common_library/v1/utils/utils_file.py,sha256=6tCGosFjtycGJq0LtR53MiAyR8-VAxiT0-1quJ6FhcE,2233
26
- qubership_pipelines_common_library/v1/utils/utils_json.py,sha256=QczIlSYNOtXMuMWSznhV_BkXMM5KLn1wOogtlT2kcy0,598
27
- qubership_pipelines_common_library/v1/utils/utils_string.py,sha256=Phx5ZXPRjhjg9AaSPx6WLX9zQvwJH1txslfnG3jJ43w,993
28
- qubership_pipelines_common_library/v1/webex_client.py,sha256=JU_0NgLu_p6zgaUi-ixgZeFMlJaTAvXwrU1oA607Bv0,2997
29
- qubership_pipelines_common_library-0.2.6.dist-info/METADATA,sha256=DM_ePVDk5_z7ZmrEj1_cjN8Gw6l4URj8mTsIZauKYw8,3017
30
- qubership_pipelines_common_library-0.2.6.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
31
- qubership_pipelines_common_library-0.2.6.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
32
- qubership_pipelines_common_library-0.2.6.dist-info/RECORD,,