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
|
# https://apps.coopcloud.tech
|
||||||
|
|
||||||
from json import dump
|
from json import dump
|
||||||
from logging import DEBUG, basicConfig, getLogger
|
from os import chdir, listdir
|
||||||
from os import chdir, listdir, mkdir
|
from os.path import basename
|
||||||
from os.path import basename, exists, expanduser
|
|
||||||
from pathlib import Path
|
|
||||||
from re import findall, search
|
from re import findall, search
|
||||||
from shlex import split
|
from subprocess import DEVNULL
|
||||||
from subprocess import DEVNULL, check_output
|
|
||||||
from sys import exit
|
|
||||||
|
|
||||||
from requests import get
|
from requests import get
|
||||||
|
|
||||||
HOME_PATH = expanduser("~/")
|
from abralib import (
|
||||||
CLONES_PATH = Path(f"{HOME_PATH}/.abra/apps").absolute()
|
CLONES_PATH,
|
||||||
YQ_PATH = Path(f"{HOME_PATH}/.abra/vendor/yq")
|
REPOS_TO_SKIP,
|
||||||
SCRIPT_PATH = Path(__file__).absolute().parent
|
SCRIPT_PATH,
|
||||||
REPOS_TO_SKIP = (
|
YQ_PATH,
|
||||||
"abra",
|
_run_cmd,
|
||||||
"abra-apps",
|
clone_all_apps,
|
||||||
"abra-gandi",
|
get_repos_json,
|
||||||
"abra-hetzner",
|
log,
|
||||||
"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"
|
|
||||||
|
|
||||||
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():
|
def get_published_apps_json():
|
||||||
"""Retrieve already published apps json."""
|
"""Retrieve already published apps json."""
|
||||||
@ -99,31 +39,6 @@ def get_published_apps_json():
|
|||||||
return {}
|
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):
|
def generate_apps_json(repos_json):
|
||||||
"""Generate the abra-apps.json application versions file."""
|
"""Generate the abra-apps.json application versions file."""
|
||||||
apps_json = {}
|
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
|
# Output list of apps for Renovate bot configuration
|
||||||
|
|
||||||
from logging import DEBUG, basicConfig, getLogger
|
from abralib import REPOS_TO_SKIP, get_repos_json
|
||||||
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)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
Loading…
Reference in New Issue
Block a user