From 9e71c4cb537bda0bd2ac2a25cd2cdccccc788e5a Mon Sep 17 00:00:00 2001 From: Dmitry Afanasyev Date: Tue, 15 Mar 2022 20:48:35 +0300 Subject: [PATCH] add gitlab submodules script --- .gitignore | 4 +- .../get_project_core/.gitignore | 1 + .../get_project_core/__init__.py | 4 ++ .../get_project_core/settings.py | 30 ++++++++++++++ .../get_project_core/update-repos.sh | 3 ++ get-gitlab-projects/get_projects.py | 40 +++++++++++++++++++ 6 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 get-gitlab-projects/get_project_core/.gitignore create mode 100644 get-gitlab-projects/get_project_core/__init__.py create mode 100644 get-gitlab-projects/get_project_core/settings.py create mode 100755 get-gitlab-projects/get_project_core/update-repos.sh create mode 100644 get-gitlab-projects/get_projects.py diff --git a/.gitignore b/.gitignore index aa7624b..21a3b90 100644 --- a/.gitignore +++ b/.gitignore @@ -221,8 +221,8 @@ media/ # Configuration file with private data: -# *.env -# .env +*.env +.env # Local settings files: *local.py diff --git a/get-gitlab-projects/get_project_core/.gitignore b/get-gitlab-projects/get_project_core/.gitignore new file mode 100644 index 0000000..2eea525 --- /dev/null +++ b/get-gitlab-projects/get_project_core/.gitignore @@ -0,0 +1 @@ +.env \ No newline at end of file diff --git a/get-gitlab-projects/get_project_core/__init__.py b/get-gitlab-projects/get_project_core/__init__.py new file mode 100644 index 0000000..62a2ee5 --- /dev/null +++ b/get-gitlab-projects/get_project_core/__init__.py @@ -0,0 +1,4 @@ +import requests +from requests.packages.urllib3.exceptions import InsecureRequestWarning + +requests.packages.urllib3.disable_warnings(InsecureRequestWarning) diff --git a/get-gitlab-projects/get_project_core/settings.py b/get-gitlab-projects/get_project_core/settings.py new file mode 100644 index 0000000..67ffab0 --- /dev/null +++ b/get-gitlab-projects/get_project_core/settings.py @@ -0,0 +1,30 @@ +import importlib.util +import logging +import sys + +from decouple import AutoConfig +from pathlib import Path + +current_dir = Path(__file__).parent.parent +config = AutoConfig(search_path=current_dir.joinpath('get_project_core')) + + +# use loguru if it is possible for color output +if importlib.util.find_spec('loguru') is not None: + from loguru import logger + logger.remove() + logger.add(sink=sys.stdout, colorize=True, level='DEBUG', + format="{time:DD.MM.YYYY HH:mm:ss} | {level} | " + "{message}") + +# use standard logging +else: + logger = logging.getLogger() + logger.setLevel(logging.INFO) + + console_handler = logging.StreamHandler() + console_handler.setLevel(logging.INFO) + log_formatter = logging.Formatter("%(asctime)s | %(levelname)s | %(message)s") + console_handler.setFormatter(log_formatter) + + logger.addHandler(console_handler) diff --git a/get-gitlab-projects/get_project_core/update-repos.sh b/get-gitlab-projects/get_project_core/update-repos.sh new file mode 100755 index 0000000..7598269 --- /dev/null +++ b/get-gitlab-projects/get_project_core/update-repos.sh @@ -0,0 +1,3 @@ +#!/usr/bin/bash + +git pull --all \ No newline at end of file diff --git a/get-gitlab-projects/get_projects.py b/get-gitlab-projects/get_projects.py new file mode 100644 index 0000000..3237f14 --- /dev/null +++ b/get-gitlab-projects/get_projects.py @@ -0,0 +1,40 @@ +import json # noqa # pylint: disable=unused-import +import subprocess +import time + +import requests + +from get_project_core.settings import logger, config, current_dir + +headers = {'PRIVATE-TOKEN': config('X5_SCM_TOKEN', cast=str)} + + +def create_repositories(group_id: int): + """ + Create submodules from gitlab group + + :param group_id: Can be find under group name + """ + request = requests.get(f'https://scm.x5.ru/api/v4/groups/{group_id}/projects', headers=headers, verify=False) + # logger.info(f'{json.dumps(request.json(), indent=4, separators=(",", ":"))}') + + repos = request.json() + + for repo in repos: + name = str(repo.get("ssh_url_to_repo", None)).strip() + subprocess.Popen(['git', 'submodule', 'add', name]) + logger.info(f'Created: {name}') + time.sleep(15) + + +def update_submodules(): + """ + Update all submodules + + """ + subprocess.Popen(['git', 'submodule', 'foreach', f'{current_dir}/get-project-core/update-repos.sh']) + + +if __name__ == '__main__': + create_repositories(group_id=3574) + # update_submodules()