Release 0.10.7-bearhub.6

Complete M1 identity work, fix runtime URL regressions, repair the test
suite, add CI, migrate packaging/AppImage branding to Bearhub, and
document the Qt6/PySide6 migration plan.
This commit is contained in:
Sebastian Palencsar
2026-06-26 19:22:28 +02:00
parent 63698709a6
commit 4a119968bc
35 changed files with 1984 additions and 224 deletions

View File

@@ -1,21 +0,0 @@
[Desktop Entry]
Type=Application
Name=Applications (Bearhub)
Name[pt]=Aplicativos (Bearhub)
Name[es]=Aplicaciones (Bearhub)
Name[ca]=Aplicacions (Bearhub)
Name[it]=Applicazioni (Bearhub)
Name[de]=Anwendungen (Bearhub)
Name[ru]=Приложения (Bearhub)
Name[tr]=Paket Yönetici (Bearhub)
Categories=System;
Comment=Install and remove applications (AppImage, Arch, Flatpak, Web)
Comment[pt]=Instale e remova aplicativos (AppImage, Arch, Flatpak, Web)
Comment[es]=Instalar y eliminar aplicaciones (AppImage, Arch, Flatpak, Web)
Comment[it]=Installa e rimuovi applicazioni (AppImage, Arch, Flatpak, Web)
Comment[de]=Anwendungen installieren und entfernen (AppImage, Arch, Flatpak, Web)
Comment[ca]=Instal·lar i eliminar aplicacions (AppImage, Arch, Flatpak, Web)
Comment[ru]=Установка и удаление приложений (AppImage, Arch, Flatpak, Web)
Comment[tr]=Uygulama yükle/kaldır (AppImage, Arch, Flatpak, Web)
Exec=env QT_QPA_PLATFORM=xcb /usr/bin/bearhub
Icon=bearhub

View File

@@ -1,21 +0,0 @@
[Desktop Entry]
Type=Application
Name=Applications (Bearhub tray)
Name[pt]=Aplicativos (Bearhub tray)
Name[es]=Aplicaciones (Bearhub tray)
Name[ca]=Aplicacions (Bearhub tray)
Name[it]=Applicazioni (Bearhub tray)
Name[de]=Anwendungen (Bearhub tray)
Name[ru]=Приложения (Bearhub tray)
Name[tr]=Paket Yönetici (Bearhub tray)
Categories=System;
Comment=Install and remove applications (AppImage, Arch, Flatpak, Web)
Comment[pt]=Instale e remova aplicativos (AppImage, Arch, Flatpak, Web)
Comment[es]=Instalar y eliminar aplicaciones (AppImage, Arch, Flatpak, Web)
Comment[it]=Installa e rimuovi applicazioni (AppImage, Arch, Flatpak, Web)
Comment[de]=Anwendungen installieren und entfernen (AppImage, Arch, Flatpak, Web)
Comment[ca]=Instal·lar i eliminar aplicacions (AppImage, Arch, Flatpak, Web)
Comment[ru]=Установка и удаление приложений (AppImage, Arch, Flatpak, Web)
Comment[tr]=Uygulama yükle/kaldır (AppImage, Arch, Flatpak, Web)
Exec=env QT_QPA_PLATFORM=xcb /usr/bin/bearhub-tray
Icon=bearhub

View File

@@ -2,7 +2,6 @@ import os
from pathlib import Path
from typing import Optional
from bauh import __app_name__
from bauh.api.paths import CONFIG_DIR, TEMP_DIR, CACHE_DIR, BINARIES_DIR, SHARED_FILES_DIR
from bauh.commons import resource
@@ -13,7 +12,7 @@ CONFIG_FILE = f'{CONFIG_DIR}/appimage.yml'
APPIMAGE_CONFIG_DIR = f'{CONFIG_DIR}/appimage'
UPDATES_IGNORED_FILE = f'{APPIMAGE_CONFIG_DIR}/updates_ignored.txt'
SYMLINKS_DIR = BINARIES_DIR
URL_COMPRESSED_DATABASES = f'https://raw.githubusercontent.com/vinifmor/{__app_name__}-files/master/appimage/dbs.tar.gz'
URL_COMPRESSED_DATABASES = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/appimage/dbs.tar.gz'
APPIMAGE_CACHE_DIR = f'{CACHE_DIR}/appimage'
DATABASE_APPS_FILE = f'{APPIMAGE_CACHE_DIR}/apps.db'
DATABASE_RELEASES_FILE = f'{APPIMAGE_CACHE_DIR}/releases.db'

View File

@@ -12,6 +12,7 @@ from typing import Set, Type, List, Tuple, Optional, Iterable, Generator
from colorama import Fore
from bauh import __app_name__
from bauh.api.abstract.context import ApplicationContext
from bauh.api.abstract.controller import SoftwareManager, SearchResult, UpgradeRequirements, UpgradeRequirement, \
TransactionResult, SoftwareAction, SettingsView, SettingsController
@@ -721,7 +722,7 @@ class AppImageManager(SoftwareManager, SettingsController):
return TransactionResult.fail()
def _gen_desktop_entry_path(self, app: AppImage) -> str:
return f'{DESKTOP_ENTRIES_DIR}/bauh_appimage_{app.get_clean_name()}.desktop'
return f'{DESKTOP_ENTRIES_DIR}/{__app_name__}_appimage_{app.get_clean_name()}.desktop'
def is_enabled(self) -> bool:
return self.enabled
@@ -855,14 +856,14 @@ class AppImageManager(SoftwareManager, SettingsController):
for f in glob.glob(f'{APPIMAGE_SHARED_DIR}/*.db'):
try:
if logs:
print(f'[bauh][appimage] Deleting {f}')
print(f'[{__app_name__}][appimage] Deleting {f}')
os.remove(f)
if logs:
print(f'{Fore.YELLOW}[bauh][appimage] {f} deleted{Fore.RESET}')
print(f'{Fore.YELLOW}[{__app_name__}][appimage] {f} deleted{Fore.RESET}')
except Exception:
if logs:
print(f'{Fore.RED}[bauh][appimage] An exception has happened when deleting {f}{Fore.RESET}')
print(f'{Fore.RED}[{__app_name__}][appimage] An exception has happened when deleting {f}{Fore.RESET}')
traceback.print_exc()
def get_settings(self) -> Optional[Generator[SettingsView, None, None]]:
@@ -1092,7 +1093,7 @@ class AppImageManager(SoftwareManager, SettingsController):
@property
def app_repository(self) -> str:
if self._app_repository is None:
self._app_repository = f"https://github.com/vinifmor/{self.context.app_name}"
self._app_repository = 'https://github.com/spalencsar/bearhub'
return self._app_repository

View File

@@ -1,15 +1,14 @@
import os
from typing import Optional
from bauh import __app_name__
from bauh.api.paths import CONFIG_DIR, TEMP_DIR, CACHE_DIR, get_temp_dir
from bauh.commons import resource
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
ARCH_CACHE_DIR = f'{CACHE_DIR}/arch'
CATEGORIES_FILE_PATH = f'{ARCH_CACHE_DIR}/categories.txt'
URL_CATEGORIES_FILE = f'https://raw.githubusercontent.com/vinifmor/{__app_name__}-files/master/arch/categories.txt'
URL_GPG_SERVERS = f'https://raw.githubusercontent.com/vinifmor/{__app_name__}-files/master/arch/gpgservers.txt'
URL_CATEGORIES_FILE = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/arch/categories.txt'
URL_GPG_SERVERS = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/arch/gpgservers.txt'
ARCH_CONFIG_DIR = f'{CONFIG_DIR}/arch'
CUSTOM_MAKEPKG_FILE = f'{ARCH_CONFIG_DIR}/makepkg.conf'
AUR_INDEX_FILE = f'{ARCH_CACHE_DIR}/aur/index.txt'

View File

@@ -13,6 +13,7 @@ from typing import Optional
import requests
from bauh import __app_name__
from bauh.api.abstract.context import ApplicationContext
from bauh.api.abstract.handler import TaskManager
from bauh.commons.boot import CreateConfigFile
@@ -361,7 +362,7 @@ class ArchCompilationOptimizer(Thread):
self.taskman.update_progress(self.task_id, 80, None)
if custom_makepkg and optimizations:
generated_by = '# <generated by bauh>\n'
generated_by = f'# <generated by {__app_name__}>\n'
custom_makepkg = custom_makepkg + '\n' + generated_by + '\n'.join(optimizations) + '\n'
with open(CUSTOM_MAKEPKG_FILE, 'w+') as f:

View File

@@ -15,6 +15,7 @@ import yaml
from colorama import Fore
from requests import Response
from bauh import __app_name__
from bauh.api.abstract.context import ApplicationContext
from bauh.api.abstract.controller import SoftwareManager, SearchResult, UpgradeRequirements, TransactionResult, \
SoftwareAction, SettingsView, SettingsController
@@ -1149,15 +1150,15 @@ class WebApplicationManager(SoftwareManager, SettingsController):
def clear_data(self, logs: bool = True):
if os.path.exists(ENV_PATH):
if logs:
print('[bauh][web] Deleting directory {}'.format(ENV_PATH))
print('[{}][web] Deleting directory {}'.format(__app_name__, ENV_PATH))
try:
shutil.rmtree(ENV_PATH)
if logs:
print('{}[bauh][web] Directory {} deleted{}'.format(Fore.YELLOW, ENV_PATH, Fore.RESET))
print('{}[{}][web] Directory {} deleted{}'.format(Fore.YELLOW, __app_name__, ENV_PATH, Fore.RESET))
except Exception:
if logs:
print('{}[bauh][web] An exception has happened when deleting {}{}'.format(Fore.RED, ENV_PATH,
print('{}[{}][web] An exception has happened when deleting {}{}'.format(Fore.RED, __app_name__, ENV_PATH,
Fore.RESET))
traceback.print_exc()

View File

@@ -7,7 +7,7 @@ from bauh import __version__, ROOT_DIR
from bauh.context import generate_i18n
from bauh.view.util import resource
DISPLAY_NAME = 'bearhub'
DISPLAY_NAME = 'Bearhub'
PROJECT_URL = 'https://github.com/spalencsar/bearhub'
LICENSE_URL = 'https://raw.githubusercontent.com/spalencsar/bearhub/main/LICENSE'

View File

@@ -136,7 +136,9 @@ class TrayIcon(QSystemTrayIcon):
if config['ui']['tray']['default_icon']:
self.icon_default = QIcon(config['ui']['tray']['default_icon'])
else:
self.icon_default = QIcon.fromTheme('bauh_tray_default')
self.icon_default = QIcon.fromTheme(f'{__app_name__}_tray_default')
if self.icon_default.isNull():
self.icon_default = QIcon.fromTheme('bauh_tray_default')
if self.icon_default.isNull():
self.icon_default = load_resource_icon('img/logo.svg', 24)
@@ -144,7 +146,9 @@ class TrayIcon(QSystemTrayIcon):
if config['ui']['tray']['updates_icon']:
self.icon_updates = QIcon(config['ui']['tray']['updates_icon'])
else:
self.icon_updates = QIcon.fromTheme('bauh_tray_updates')
self.icon_updates = QIcon.fromTheme(f'{__app_name__}_tray_updates')
if self.icon_updates.isNull():
self.icon_updates = QIcon.fromTheme('bauh_tray_updates')
if self.icon_updates.isNull():
self.icon_updates = load_resource_icon('img/logo_update.svg', 24)

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

@@ -64,20 +64,20 @@ def get_distro():
def clean_app_files(managers: List[SoftwareManager], logs: bool = True):
if logs:
print('[bauh] Cleaning configuration and cache files')
print('[{}] Cleaning configuration and cache files'.format(__app_name__))
for path in (CACHE_DIR, CONFIG_DIR, TEMP_DIR):
if logs:
print('[bauh] Deleting directory {}'.format(path))
print('[{}] Deleting directory {}'.format(__app_name__, path))
if os.path.exists(path):
try:
shutil.rmtree(path)
if logs:
print('{}[bauh] Directory {} deleted{}'.format(Fore.YELLOW, path, Fore.RESET))
print('{}[{}] Directory {} deleted{}'.format(Fore.YELLOW, __app_name__, path, Fore.RESET))
except Exception:
if logs:
print('{}[bauh] An exception has happened when deleting {}{}'.format(Fore.RED, path, Fore.RESET))
print('{}[{}] An exception has happened when deleting {}{}'.format(Fore.RED, __app_name__, path, Fore.RESET))
traceback.print_exc()
if managers:
@@ -85,4 +85,4 @@ def clean_app_files(managers: List[SoftwareManager], logs: bool = True):
m.clear_data()
if logs:
print('[bauh] Cleaning finished')
print('[{}] Cleaning finished'.format(__app_name__))