diff --git a/bin/__pycache__/abralib.cpython-39.pyc b/bin/__pycache__/abralib.cpython-39.pyc new file mode 100644 index 0000000..23cc42c Binary files /dev/null and b/bin/__pycache__/abralib.cpython-39.pyc differ diff --git a/bin/abralib.py b/bin/abralib.py new file mode 100644 index 0000000..e7722b7 --- /dev/null +++ b/bin/abralib.py @@ -0,0 +1,103 @@ +"""Shared utilities for bin/*.py scripts.""" + +from logging import DEBUG, basicConfig, getLogger +from os import chdir, mkdir +from os.path import exists, expanduser +from pathlib import Path +from shlex import split +from subprocess import check_output +from sys import exit + +from requests import get + +HOME_PATH = expanduser("~/") +CLONES_PATH = Path(f"{HOME_PATH}/.abra/apps").absolute() +REPOS_TO_SKIP = ( + "abra", + "abra-apps", + "abra-gandi", + "abra-hetzner", + "backup-bot", + "coopcloud.tech", + "coturn", + "docker-cp-deploy", + "docker-dind-bats-kcov", + "docs.coopcloud.tech", + "example", + "gardening", + "organising", + "pyabra", + "radicle-seed-node", + "stack-ssh-deploy", + "swarm-cronjob", +) +YQ_PATH = Path(f"{HOME_PATH}/.abra/vendor/yq") +SCRIPT_PATH = Path(__file__).absolute().parent + +log = getLogger(__name__) +basicConfig() +log.setLevel(DEBUG) + + +def _run_cmd(cmd, shell=False, **kwargs): + """Run a shell command.""" + args = [split(cmd)] + + if shell: + args = [cmd] + kwargs = {"shell": shell} + + try: + return check_output(*args, **kwargs).decode("utf-8").strip() + except Exception as exception: + log.error(f"Failed to run {cmd}, saw {str(exception)}") + exit(1) + + +def get_repos_json(): + """ Retrieve repo list from Gitea """ + + url = "https://git.autonomic.zone/api/v1/orgs/coop-cloud/repos" + + log.info(f"Retrieving {url}") + + repos = [] + response = True + page = 1 + + try: + while response: + log.info(f"Trying to fetch page {page}") + response = get(url + f"?page={page}", timeout=10).json() + repos.extend(response) + page += 1 + + return repos + except Exception as exception: + log.error(f"Failed to retrieve {url}, saw {str(exception)}") + exit(1) + + +def clone_all_apps(repos_json): + """Clone all Co-op Cloud apps to ~/.abra/apps.""" + if not exists(CLONES_PATH): + mkdir(CLONES_PATH) + + repos = [[p["name"], p["ssh_url"]] for p in repos_json] + + for name, url in repos: + if name in REPOS_TO_SKIP: + continue + + if not exists(f"{CLONES_PATH}/{name}"): + log.info(f"Retrieving {url}") + _run_cmd(f"git clone {url} {CLONES_PATH}/{name}") + + chdir(f"{CLONES_PATH}/{name}") + if not int(_run_cmd("git branch --list | wc -l", shell=True)): + log.info(f"Guessing main branch is HEAD for {name}") + _run_cmd("git checkout main") + else: + log.info(f"Updating {name}") + chdir(f"{CLONES_PATH}/{name}") + _run_cmd("git fetch -a") diff --git a/bin/app-json.py b/bin/app-json.py index eb75dab..ba056ac 100755 --- a/bin/app-json.py +++ b/bin/app-json.py @@ -7,84 +7,24 @@ # https://apps.coopcloud.tech from json import dump -from logging import DEBUG, basicConfig, getLogger -from os import chdir, listdir, mkdir -from os.path import basename, exists, expanduser -from pathlib import Path +from os import chdir, listdir +from os.path import basename from re import findall, search -from shlex import split -from subprocess import DEVNULL, check_output -from sys import exit +from subprocess import DEVNULL from requests import get -HOME_PATH = expanduser("~/") -CLONES_PATH = Path(f"{HOME_PATH}/.abra/apps").absolute() -YQ_PATH = Path(f"{HOME_PATH}/.abra/vendor/yq") -SCRIPT_PATH = Path(__file__).absolute().parent -REPOS_TO_SKIP = ( - "abra", - "abra-apps", - "abra-gandi", - "abra-hetzner", - "backup-bot", - "coopcloud.tech", - "coturn", - "docker-cp-deploy", - "docker-dind-bats-kcov", - "docs.coopcloud.tech", - "example", - "gardening", - "organising", - "pyabra", - "radicle-seed-node", - "stack-ssh-deploy", - "swarm-cronjob", +from abralib import ( + CLONES_PATH, + REPOS_TO_SKIP, + SCRIPT_PATH, + YQ_PATH, + _run_cmd, + clone_all_apps, + get_repos_json, + log, ) -log = getLogger(__name__) -basicConfig() -log.setLevel(DEBUG) - - -def _run_cmd(cmd, shell=False, **kwargs): - """Run a shell command.""" - args = [split(cmd)] - - if shell: - args = [cmd] - kwargs = {"shell": shell} - - try: - return check_output(*args, **kwargs).decode("utf-8").strip() - except Exception as exception: - log.error(f"Failed to run {cmd}, saw {str(exception)}") - exit(1) - - -def get_repos_json(): - """ Retrieve repo list from Gitea """ - - url = "https://git.autonomic.zone/api/v1/orgs/coop-cloud/repos" - - log.info(f"Retrieving {url}") - - repos = [] - response = True - page = 1 - - try: - while response: - log.info(f"Trying to fetch page {page}") - response = get(url + f"?page={page}", timeout=10).json() - repos.extend(response) - page += 1 - - return repos - except Exception as exception: - log.error(f"Failed to retrieve {url}, saw {str(exception)}") - exit(1) - def get_published_apps_json(): """Retrieve already published apps json.""" @@ -99,31 +39,6 @@ def get_published_apps_json(): return {} -def clone_all_apps(repos_json): - """Clone all Co-op Cloud apps to ~/.abra/apps.""" - if not exists(CLONES_PATH): - mkdir(CLONES_PATH) - - repos = [[p["name"], p["ssh_url"]] for p in repos_json] - - for name, url in repos: - if name in REPOS_TO_SKIP: - continue - - if not exists(f"{CLONES_PATH}/{name}"): - log.info(f"Retrieving {url}") - _run_cmd(f"git clone {url} {CLONES_PATH}/{name}") - - chdir(f"{CLONES_PATH}/{name}") - if not int(_run_cmd("git branch --list | wc -l", shell=True)): - log.info(f"Guessing main branch is HEAD for {name}") - _run_cmd("git checkout main") - else: - log.info(f"Updating {name}") - chdir(f"{CLONES_PATH}/{name}") - _run_cmd("git fetch -a") - - def generate_apps_json(repos_json): """Generate the abra-apps.json application versions file.""" apps_json = {} diff --git a/bin/clone-all-apps.py b/bin/clone-all-apps.py new file mode 100755 index 0000000..b9ec1f8 --- /dev/null +++ b/bin/clone-all-apps.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python3 + +# Usage: ./clone-all-apps.py +# +# Clone all available apps into ~/.abra/apps using ssh:// URLs + +from abralib import clone_all_apps, get_repos_json + + +def main(): + """Run the script.""" + repos_json = get_repos_json() + clone_all_apps(repos_json) + + +main() diff --git a/bin/renovate-ls-apps.py b/bin/renovate-ls-apps.py index 19839cb..1b602ac 100755 --- a/bin/renovate-ls-apps.py +++ b/bin/renovate-ls-apps.py @@ -4,77 +4,7 @@ # # Output list of apps for Renovate bot configuration -from logging import DEBUG, basicConfig, getLogger -from os.path import expanduser -from pathlib import Path -from shlex import split -from subprocess import check_output -from sys import exit - -from requests import get - -HOME_PATH = expanduser("~/") -CLONES_PATH = Path(f"{HOME_PATH}/.abra/apps").absolute() -YQ_PATH = Path(f"{HOME_PATH}/.abra/vendor/yq") -SCRIPT_PATH = Path(__file__).absolute().parent -REPOS_TO_SKIP = ( - "abra", - "abra-apps", - "abra-gandi", - "abra-hetzner", - "backup-bot", - "coopcloud.tech", - "coturn", - "docker-cp-deploy", - "docker-dind-bats-kcov", - "docs.coopcloud.tech", - "example", - "gardening", - "organising", - "pyabra", - "radicle-seed-node", - "stack-ssh-deploy", - "swarm-cronjob", -) - -log = getLogger(__name__) -basicConfig() -log.setLevel(DEBUG) - - -def _run_cmd(cmd, shell=False, **kwargs): - """Run a shell command.""" - args = [split(cmd)] - - if shell: - args = [cmd] - kwargs = {"shell": shell} - - try: - return check_output(*args, **kwargs).decode("utf-8").strip() - except Exception as exception: - log.error(f"Failed to run {cmd}, saw {str(exception)}") - exit(1) - - -def get_repos_json(): - """ Retrieve repo list from Gitea """ - url = "https://git.autonomic.zone/api/v1/orgs/coop-cloud/repos" - - repos = [] - response = True - page = 1 - - try: - while response: - response = get(url + f"?page={page}", timeout=10).json() - repos.extend(response) - page += 1 - - return repos - except Exception as exception: - log.error(f"Failed to retrieve {url}, saw {str(exception)}") - exit(1) +from abralib import REPOS_TO_SKIP, get_repos_json def main():