mirror of
https://github.com/Eugeny/tabby-web.git
synced 2025-06-07 21:19:53 +00:00
67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
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):
|
|
help = "Downloads a new app version"
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument("version", type=str)
|
|
|
|
def handle(self, *args, **options):
|
|
version = options["version"]
|
|
target = f"{settings.APP_DIST_STORAGE}/{version}"
|
|
|
|
fs = fsspec.filesystem(urlparse(settings.APP_DIST_STORAGE).scheme)
|
|
|
|
plugin_list = [
|
|
"tabby-web-container",
|
|
"tabby-core",
|
|
"tabby-settings",
|
|
"tabby-terminal",
|
|
"tabby-ssh",
|
|
"tabby-community-color-schemes",
|
|
"tabby-serial",
|
|
"tabby-telnet",
|
|
"tabby-web",
|
|
"tabby-web-demo",
|
|
]
|
|
|
|
with tempfile.TemporaryDirectory() as tempdir:
|
|
tempdir = Path(tempdir)
|
|
for plugin in plugin_list:
|
|
logging.info(f"Resolving {plugin}@{version}")
|
|
response = requests.get(f"{settings.NPM_REGISTRY}/{plugin}/{version}")
|
|
response.raise_for_status()
|
|
info = response.json()
|
|
url = info["dist"]["tarball"]
|
|
|
|
logging.info(f"Downloading {plugin}@{version} from {url}")
|
|
response = requests.get(url)
|
|
|
|
with tempfile.NamedTemporaryFile("wb") as f:
|
|
f.write(response.content)
|
|
f.flush()
|
|
plugin_final_target = Path(tempdir) / plugin
|
|
|
|
with tempfile.TemporaryDirectory() as extraction_tmp:
|
|
subprocess.check_call(
|
|
["tar", "-xzf", f.name, "-C", str(extraction_tmp)]
|
|
)
|
|
shutil.move(
|
|
Path(extraction_tmp) / "package", plugin_final_target
|
|
)
|
|
|
|
if fs.exists(target):
|
|
fs.rm(target, recursive=True)
|
|
fs.mkdir(target)
|
|
fs.put(str(tempdir), target, recursive=True)
|