mirror of
https://github.com/Maks1mS/altlinux-autorepacked.git
synced 2025-03-22 02:03:50 +03:00
Compare commits
No commits in common. "85cda3e705b06032c69ddf7fffe9be5621c27434" and "657c424bf1ef69b48707342d369b6963e59b930b" have entirely different histories.
85cda3e705
...
657c424bf1
@ -1,11 +1,12 @@
|
|||||||
FROM registry.altlinux.org/alt/python:p10
|
FROM registry.altlinux.org/alt/python:p10
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y \
|
||||||
|
eepm \
|
||||||
wget \
|
wget \
|
||||||
apt-repo-tools \
|
apt-repo-tools \
|
||||||
alien \
|
alien \
|
||||||
pip && \
|
pip
|
||||||
wget -O- https://eepm.ru/epm.sh | bash /dev/stdin ei
|
# && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
COPY requirements.txt .
|
COPY requirements.txt .
|
||||||
RUN pip --no-cache-dir install -r requirements.txt
|
RUN pip --no-cache-dir install -r requirements.txt
|
||||||
|
@ -13,8 +13,6 @@ def _get_file(directory):
|
|||||||
|
|
||||||
|
|
||||||
class BaseProvider:
|
class BaseProvider:
|
||||||
disabled = False
|
|
||||||
|
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
self.config = config
|
self.config = config
|
||||||
|
|
||||||
@ -25,7 +23,11 @@ class BaseProvider:
|
|||||||
return self._name
|
return self._name
|
||||||
|
|
||||||
def get_version(self):
|
def get_version(self):
|
||||||
url = utils.eget([
|
url = utils.run([
|
||||||
|
'epm',
|
||||||
|
'--silent',
|
||||||
|
'tool',
|
||||||
|
'eget',
|
||||||
'--get-real-url',
|
'--get-real-url',
|
||||||
self.get_download_url(),
|
self.get_download_url(),
|
||||||
])
|
])
|
||||||
@ -40,27 +42,24 @@ class BaseProvider:
|
|||||||
def get_download_url(self):
|
def get_download_url(self):
|
||||||
return self.DOWNLOAD_URL
|
return self.DOWNLOAD_URL
|
||||||
|
|
||||||
def get_download_name(self):
|
|
||||||
return ""
|
|
||||||
|
|
||||||
def download(self):
|
def download(self):
|
||||||
download_directory = tempfile.mkdtemp()
|
download_directory = tempfile.mkdtemp()
|
||||||
repacked_directory = tempfile.mkdtemp()
|
repacked_directory = tempfile.mkdtemp()
|
||||||
|
|
||||||
args = []
|
utils.run([
|
||||||
|
'epm',
|
||||||
download_name = self.get_download_name()
|
'--silent',
|
||||||
|
'tool',
|
||||||
if download_name:
|
'eget',
|
||||||
args += ["-O", download_name]
|
'-q',
|
||||||
|
self.get_download_url(),
|
||||||
args += [self.get_download_url()]
|
], cwd=download_directory)
|
||||||
|
|
||||||
utils.eget(args, cwd=download_directory)
|
|
||||||
|
|
||||||
file = _get_file(download_directory)
|
file = _get_file(download_directory)
|
||||||
|
|
||||||
utils.epm([
|
utils.run([
|
||||||
|
'epm',
|
||||||
|
'--silent',
|
||||||
'-y',
|
'-y',
|
||||||
'repack',
|
'repack',
|
||||||
file,
|
file,
|
||||||
@ -70,7 +69,9 @@ class BaseProvider:
|
|||||||
|
|
||||||
file = _get_file(repacked_directory)
|
file = _get_file(repacked_directory)
|
||||||
|
|
||||||
utils.epm([
|
utils.run([
|
||||||
|
'epm',
|
||||||
|
'--silent',
|
||||||
'repo',
|
'repo',
|
||||||
'pkgadd',
|
'pkgadd',
|
||||||
self.config.get('repo_path'),
|
self.config.get('repo_path'),
|
@ -1,35 +0,0 @@
|
|||||||
import re
|
|
||||||
|
|
||||||
from autorepacked import utils
|
|
||||||
from autorepacked.common_providers.base_provider import BaseProvider
|
|
||||||
|
|
||||||
|
|
||||||
class GithubReleasesProvider(BaseProvider):
|
|
||||||
_repo = ''
|
|
||||||
|
|
||||||
def _last_release_url(self):
|
|
||||||
return utils.eget([
|
|
||||||
'--get-real-url',
|
|
||||||
f'https://github.com/{self._repo}/releases/latest'
|
|
||||||
])
|
|
||||||
|
|
||||||
def _last_tag_name(self):
|
|
||||||
return self.get_version()
|
|
||||||
|
|
||||||
def _get_release_filename(self):
|
|
||||||
return ''
|
|
||||||
|
|
||||||
def get_version(self):
|
|
||||||
url = self._last_release_url()
|
|
||||||
|
|
||||||
pattern = r'\d+\.\d+\.\d+'
|
|
||||||
match = re.search(pattern, url)
|
|
||||||
if match:
|
|
||||||
return match.group()
|
|
||||||
else:
|
|
||||||
return "not found"
|
|
||||||
|
|
||||||
def get_download_url(self):
|
|
||||||
return (f"https://github.com/"
|
|
||||||
f"{self._repo}/releases/download/"
|
|
||||||
f"{self._last_tag_name()}/{self._get_release_filename()}")
|
|
@ -1,35 +0,0 @@
|
|||||||
import json
|
|
||||||
import urllib
|
|
||||||
|
|
||||||
from autorepacked.common_providers.base_provider import BaseProvider
|
|
||||||
from urllib.request import Request, urlopen
|
|
||||||
|
|
||||||
class SnapProvider(BaseProvider):
|
|
||||||
_package_name = "package"
|
|
||||||
_channel = "stable"
|
|
||||||
_arch = "amd64"
|
|
||||||
|
|
||||||
def _get_snap_info(self):
|
|
||||||
request = Request(
|
|
||||||
f"http://api.snapcraft.io/v2/snaps/info/{self._package_name}",
|
|
||||||
headers={"Content-Type": "application/json", "Snap-Device-Series": "16"},
|
|
||||||
)
|
|
||||||
response = urlopen(request).read()
|
|
||||||
return json.loads(response)
|
|
||||||
|
|
||||||
def get_download_name(self):
|
|
||||||
return f"{self._package_name}-{self.get_version()}.snap"
|
|
||||||
|
|
||||||
def get_version(self):
|
|
||||||
snap_info = self._get_snap_info()
|
|
||||||
for channel_map in snap_info["channel-map"]:
|
|
||||||
if (channel_map["channel"]["name"] == self._channel
|
|
||||||
and channel_map["channel"]["architecture"] == self._arch):
|
|
||||||
return channel_map['version']
|
|
||||||
|
|
||||||
def get_download_url(self):
|
|
||||||
snap_info = self._get_snap_info()
|
|
||||||
for channel_map in snap_info["channel-map"]:
|
|
||||||
if (channel_map["channel"]["name"] == self._channel
|
|
||||||
and channel_map["channel"]["architecture"] == self._arch):
|
|
||||||
return channel_map['download']['url']
|
|
@ -9,24 +9,19 @@ import uvicorn
|
|||||||
from fastapi_utils.tasks import repeat_every
|
from fastapi_utils.tasks import repeat_every
|
||||||
|
|
||||||
from autorepacked import utils
|
from autorepacked import utils
|
||||||
from autorepacked.common_providers.base_provider import BaseProvider
|
from autorepacked.base_provider import BaseProvider
|
||||||
from autorepacked.config import Config
|
from autorepacked.config import Config
|
||||||
|
|
||||||
|
|
||||||
def create_repo(config: Config):
|
def create_repo(config: Config):
|
||||||
utils.epm([
|
utils.run([
|
||||||
|
'epm',
|
||||||
'repo',
|
'repo',
|
||||||
'create',
|
'create',
|
||||||
config.get('repo_path')
|
config.get('repo_path')
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
def update_epm():
|
|
||||||
utils.epm([
|
|
||||||
'ei'
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
async def lifespan(app: FastAPI):
|
async def lifespan(app: FastAPI):
|
||||||
await update_repeat()
|
await update_repeat()
|
||||||
@ -56,8 +51,6 @@ def update():
|
|||||||
update_task_started = False
|
update_task_started = False
|
||||||
return
|
return
|
||||||
|
|
||||||
update_epm()
|
|
||||||
|
|
||||||
providers_path = os.path.join(os.getcwd(), 'autorepacked/providers')
|
providers_path = os.path.join(os.getcwd(), 'autorepacked/providers')
|
||||||
modules = os.listdir(providers_path)
|
modules = os.listdir(providers_path)
|
||||||
|
|
||||||
@ -67,23 +60,23 @@ def update():
|
|||||||
module = importlib.import_module(f'providers.{module_name}')
|
module = importlib.import_module(f'providers.{module_name}')
|
||||||
if hasattr(module, 'get_provider'):
|
if hasattr(module, 'get_provider'):
|
||||||
provider = module.get_provider(config) # type: BaseProvider
|
provider = module.get_provider(config) # type: BaseProvider
|
||||||
if not provider.disabled:
|
name = provider.get_name()
|
||||||
name = provider.get_name()
|
print(f"request version of {name}")
|
||||||
print(f"request version of {name}")
|
version = provider.get_version()
|
||||||
version = provider.get_version()
|
if name not in versions or versions[name] != version:
|
||||||
if name not in versions or versions[name] != version:
|
print(f'{name} has new version {version}')
|
||||||
print(f'{name} has new version {version}')
|
versions[name] = version
|
||||||
versions[name] = version
|
provider.download()
|
||||||
provider.download()
|
need_update_index = True
|
||||||
need_update_index = True
|
|
||||||
|
|
||||||
repo_data['versions'] = versions
|
repo_data['versions'] = versions
|
||||||
|
|
||||||
current_date = datetime.datetime.utcnow()
|
current_date = datetime.datetime.utcnow()
|
||||||
|
|
||||||
if need_update_index:
|
if need_update_index:
|
||||||
utils.epm(
|
utils.run(
|
||||||
args=[
|
args=[
|
||||||
|
'epm',
|
||||||
'repo',
|
'repo',
|
||||||
'index',
|
'index',
|
||||||
config.get('repo_path'),
|
config.get('repo_path'),
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from autorepacked.common_providers.base_provider import BaseProvider
|
from autorepacked.base_provider import BaseProvider
|
||||||
|
|
||||||
|
|
||||||
class CodeProvider(BaseProvider):
|
class CodeProvider(BaseProvider):
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from autorepacked.common_providers.base_provider import BaseProvider
|
from autorepacked.base_provider import BaseProvider
|
||||||
|
|
||||||
|
|
||||||
class DiscordProvider(BaseProvider):
|
class DiscordProvider(BaseProvider):
|
||||||
|
@ -1,13 +1,30 @@
|
|||||||
from autorepacked.common_providers.github_releases_provider import GithubReleasesProvider
|
import subprocess
|
||||||
|
|
||||||
|
from autorepacked.base_provider import BaseProvider
|
||||||
|
|
||||||
|
|
||||||
class RustdeskProvider(GithubReleasesProvider):
|
class RustdeskProvider(BaseProvider):
|
||||||
_name = 'rustdesk'
|
_name = 'rustdesk'
|
||||||
|
_release_url = 'https://github.com/rustdesk/rustdesk/releases'
|
||||||
|
_release_file = '[0-9]/rustdesk-[0-9].[0-9].[0-9].deb'
|
||||||
|
|
||||||
_repo = 'rustdesk/rustdesk'
|
def get_download_url(self):
|
||||||
|
url = subprocess.run(
|
||||||
|
args=[
|
||||||
|
'epm',
|
||||||
|
'--silent',
|
||||||
|
'tool',
|
||||||
|
'eget',
|
||||||
|
'--list',
|
||||||
|
'--latest',
|
||||||
|
'--get-real-url',
|
||||||
|
self._release_url,
|
||||||
|
self._release_file,
|
||||||
|
],
|
||||||
|
stdout=subprocess.PIPE
|
||||||
|
).stdout.decode('utf-8')
|
||||||
|
|
||||||
def _get_release_filename(self):
|
return url
|
||||||
return f'rustdesk-{self.get_version()}-x86_64.deb'
|
|
||||||
|
|
||||||
|
|
||||||
def get_provider(config):
|
def get_provider(config):
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
from autorepacked.common_providers.snap_provider import SnapProvider
|
|
||||||
|
|
||||||
|
|
||||||
class SingularityApp(SnapProvider):
|
|
||||||
disabled = True
|
|
||||||
|
|
||||||
_name = 'singularityapp'
|
|
||||||
_package_name = 'singularityapp'
|
|
||||||
|
|
||||||
|
|
||||||
def get_provider(config):
|
|
||||||
return SingularityApp(config)
|
|
@ -1,17 +0,0 @@
|
|||||||
from autorepacked.common_providers.github_releases_provider import GithubReleasesProvider
|
|
||||||
|
|
||||||
|
|
||||||
class TrezorSuiteProvider(GithubReleasesProvider):
|
|
||||||
_name = 'Trezor-Suite'
|
|
||||||
|
|
||||||
_repo = 'trezor/trezor-suite'
|
|
||||||
|
|
||||||
def _last_tag_name(self):
|
|
||||||
return f'v{self.get_version()}'
|
|
||||||
|
|
||||||
def _get_release_filename(self):
|
|
||||||
return f'Trezor-Suite-{self.get_version()}-linux-x86_64.AppImage'
|
|
||||||
|
|
||||||
|
|
||||||
def get_provider(config):
|
|
||||||
return TrezorSuiteProvider(config)
|
|
@ -7,12 +7,3 @@ def run(args, cwd=None):
|
|||||||
cwd=cwd,
|
cwd=cwd,
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
).stdout.decode('utf-8')
|
).stdout.decode('utf-8')
|
||||||
|
|
||||||
|
|
||||||
def epm(args, cwd=None):
|
|
||||||
return run(["epm"] + args, cwd=cwd)
|
|
||||||
|
|
||||||
|
|
||||||
def eget(args, cwd=None):
|
|
||||||
return epm(["tool", "eget"] + args, cwd=cwd)
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user