Abstract common functions into a library
This commit is contained in:
parent
f92364af80
commit
7b0fb50e7f
BIN
bin/__pycache__/abralib.cpython-39.pyc
Normal file
BIN
bin/__pycache__/abralib.cpython-39.pyc
Normal file
Binary file not shown.
103
bin/abralib.py
Normal file
103
bin/abralib.py
Normal file
@ -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")
|
109
bin/app-json.py
109
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 = {}
|
||||
|
16
bin/clone-all-apps.py
Executable file
16
bin/clone-all-apps.py
Executable file
@ -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()
|
@ -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():
|
||||
|
Reference in New Issue
Block a user