Files
tabby-web/backend/tabby/app/management/commands/add_version.py

66 lines
2.1 KiB
Python
Raw Normal View History

2021-10-31 18:15:23 +01:00
import fsspec
import logging
import requests
import shutil
import subprocess
import tempfile
from django.core.management.base import BaseCommand
from django.conf import settings
from pathlib import Path
from urllib.parse import urlparse
class Command(BaseCommand):
2022-11-07 18:56:10 +01:00
help = "Downloads a new app version"
2021-10-31 18:15:23 +01:00
def add_arguments(self, parser):
2022-11-07 18:56:10 +01:00
parser.add_argument("version", type=str)
2021-10-31 18:15:23 +01:00
def handle(self, *args, **options):
2022-11-07 18:56:10 +01:00
version = options["version"]
target = f"{settings.APP_DIST_STORAGE}/{version}"
2021-10-31 18:15:23 +01:00
fs = fsspec.filesystem(urlparse(settings.APP_DIST_STORAGE).scheme)
plugin_list = [
2022-11-07 18:56:10 +01:00
"tabby-web-container",
"tabby-core",
"tabby-settings",
"tabby-terminal",
"tabby-ssh",
"tabby-community-color-schemes",
"tabby-serial",
"tabby-telnet",
"tabby-web",
"tabby-web-demo",
2021-10-31 18:15:23 +01:00
]
with tempfile.TemporaryDirectory() as tempdir:
tempdir = Path(tempdir)
for plugin in plugin_list:
2022-11-07 18:56:10 +01:00
logging.info(f"Resolving {plugin}@{version}")
response = requests.get(f"{settings.NPM_REGISTRY}/{plugin}/{version}")
2021-10-31 18:15:23 +01:00
response.raise_for_status()
info = response.json()
2022-11-07 18:56:10 +01:00
url = info["dist"]["tarball"]
2021-10-31 18:15:23 +01:00
2022-11-07 18:56:10 +01:00
logging.info(f"Downloading {plugin}@{version} from {url}")
2021-10-31 18:15:23 +01:00
response = requests.get(url)
2022-11-07 18:56:10 +01:00
with tempfile.NamedTemporaryFile("wb") as f:
2021-10-31 18:15:23 +01:00
f.write(response.content)
plugin_final_target = Path(tempdir) / plugin
with tempfile.TemporaryDirectory() as extraction_tmp:
subprocess.check_call(
2022-11-07 18:56:10 +01:00
["tar", "-xzf", f.name, "-C", str(extraction_tmp)]
2021-10-31 18:15:23 +01:00
)
shutil.move(
2022-11-07 18:56:10 +01:00
Path(extraction_tmp) / "package", plugin_final_target
2021-10-31 18:15:23 +01:00
)
if fs.exists(target):
fs.rm(target, recursive=True)
fs.mkdir(target)
fs.put(str(tempdir), target, recursive=True)