mirror of
https://github.com/KeksPirates/SoftwareManager.git
synced 2026-08-04 01:49:42 +02:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ddc45f41c1 | |||
| a58cda7e8a | |||
| 375925e56c | |||
| 0b3c8819de | |||
| 626bb7ff62 | |||
| f10c51f894 | |||
| 6a1f7fa677 |
+86
-58
@@ -57,13 +57,7 @@ jobs:
|
|||||||
- name: Install Python dependencies
|
- name: Install Python dependencies
|
||||||
run: |
|
run: |
|
||||||
uv pip install -r requirements.txt
|
uv pip install -r requirements.txt
|
||||||
uv pip install Pillow
|
uv pip install nuitka
|
||||||
env:
|
|
||||||
UV_SYSTEM_PYTHON: 1
|
|
||||||
|
|
||||||
- name: Install Nuitka (Windows only)
|
|
||||||
if: runner.os == 'Windows'
|
|
||||||
run: uv pip install nuitka
|
|
||||||
env:
|
env:
|
||||||
UV_SYSTEM_PYTHON: 1
|
UV_SYSTEM_PYTHON: 1
|
||||||
|
|
||||||
@@ -88,29 +82,29 @@ jobs:
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
- name: Install UPX (Windows)
|
- name: Install UPX
|
||||||
if: runner.os == 'Windows'
|
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
if [ "$RUNNER_OS" == "Windows" ]; then
|
||||||
curl -sL https://github.com/upx/upx/releases/download/v5.1.0/upx-5.1.0-win64.zip -o upx.zip
|
curl -sL https://github.com/upx/upx/releases/download/v5.1.0/upx-5.1.0-win64.zip -o upx.zip
|
||||||
7z x upx.zip -oupx-dir
|
7z x upx.zip -oupx-dir
|
||||||
UPX_DIR="$(pwd)/upx-dir/upx-5.1.0-win64"
|
UPX_DIR="$(pwd)/upx-dir/upx-5.1.0-win64"
|
||||||
echo "$UPX_DIR" >> $GITHUB_PATH
|
echo "$UPX_DIR" >> $GITHUB_PATH
|
||||||
export PATH="$UPX_DIR:$PATH"
|
export PATH="$UPX_DIR:$PATH"
|
||||||
echo "UPX_BINARY=$UPX_DIR/upx.exe" >> $GITHUB_ENV
|
echo "UPX_BINARY=$UPX_DIR/upx.exe" >> $GITHUB_ENV
|
||||||
|
elif [ "$RUNNER_OS" == "Linux" ]; then
|
||||||
|
curl -sL https://github.com/upx/upx/releases/download/v5.1.0/upx-5.1.0-amd64_linux.tar.xz -o upx.tar.xz
|
||||||
|
tar xf upx.tar.xz
|
||||||
|
UPX_DIR="$(pwd)/upx-5.1.0-amd64_linux"
|
||||||
|
echo "$UPX_DIR" >> $GITHUB_PATH
|
||||||
|
export PATH="$UPX_DIR:$PATH"
|
||||||
|
echo "UPX_BINARY=$UPX_DIR/upx" >> $GITHUB_ENV
|
||||||
|
else
|
||||||
|
brew install upx
|
||||||
|
echo "UPX_BINARY=$(which upx)" >> $GITHUB_ENV
|
||||||
|
fi
|
||||||
upx --version | head -1
|
upx --version | head -1
|
||||||
|
|
||||||
- name: Convert icon for Windows
|
|
||||||
if: runner.os == 'Windows'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
python -c "
|
|
||||||
from PIL import Image
|
|
||||||
img = Image.open('core/interface/assets/logo.png')
|
|
||||||
img.save('app_icon.ico', format='ICO', sizes=[(256,256),(128,128),(64,64),(48,48),(32,32),(16,16)])
|
|
||||||
print('Icon converted successfully')
|
|
||||||
"
|
|
||||||
|
|
||||||
- name: Build with Nuitka (Windows)
|
- name: Build with Nuitka (Windows)
|
||||||
if: runner.os == 'Windows'
|
if: runner.os == 'Windows'
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -121,11 +115,23 @@ jobs:
|
|||||||
--onefile-tempdir-spec="{CACHE_DIR}/${{ env.APP_NAME }}/${{ env.VERSION }}" \
|
--onefile-tempdir-spec="{CACHE_DIR}/${{ env.APP_NAME }}/${{ env.VERSION }}" \
|
||||||
--assume-yes-for-downloads \
|
--assume-yes-for-downloads \
|
||||||
--windows-console-mode=disable \
|
--windows-console-mode=disable \
|
||||||
--windows-icon-from-ico=app_icon.ico \
|
|
||||||
--enable-plugin=pyside6 \
|
--enable-plugin=pyside6 \
|
||||||
--enable-plugin=upx \
|
--enable-plugin=upx \
|
||||||
--upx-binary="${{ env.UPX_BINARY }}" \
|
--upx-binary="${{ env.UPX_BINARY }}" \
|
||||||
--noinclude-qt-translations \
|
--noinclude-qt-translations \
|
||||||
|
--noinclude-dlls='Qt6WebEngine*' \
|
||||||
|
--noinclude-dlls='Qt6Multimedia*' \
|
||||||
|
--noinclude-dlls='Qt6Quick*' \
|
||||||
|
--noinclude-dlls='Qt6Qml*' \
|
||||||
|
--noinclude-dlls='Qt6Designer*' \
|
||||||
|
--noinclude-dlls='Qt63D*' \
|
||||||
|
--noinclude-dlls='Qt6Bluetooth*' \
|
||||||
|
--noinclude-dlls='Qt6Nfc*' \
|
||||||
|
--noinclude-dlls='Qt6Sensors*' \
|
||||||
|
--noinclude-dlls='Qt6Serial*' \
|
||||||
|
--noinclude-dlls='Qt6Test*' \
|
||||||
|
--noinclude-dlls='Qt6Location*' \
|
||||||
|
--noinclude-dlls='Qt6Pdf*' \
|
||||||
--include-data-dir=core/interface/assets=core/interface/assets \
|
--include-data-dir=core/interface/assets=core/interface/assets \
|
||||||
--include-data-files=build_info.json=build_info.json \
|
--include-data-files=build_info.json=build_info.json \
|
||||||
--include-data-files=build_info.json=core/build_info.json \
|
--include-data-files=build_info.json=core/build_info.json \
|
||||||
@@ -133,63 +139,85 @@ jobs:
|
|||||||
--output-filename=${{ env.APP_NAME }}.exe \
|
--output-filename=${{ env.APP_NAME }}.exe \
|
||||||
main.py
|
main.py
|
||||||
|
|
||||||
- name: Build with PyInstaller (Linux)
|
- name: Build with Nuitka (Linux)
|
||||||
if: runner.os == 'Linux'
|
if: runner.os == 'Linux'
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
pyinstaller --onefile --windowed \
|
python -m nuitka \
|
||||||
--add-data "build_info.json:." \
|
--onefile \
|
||||||
--add-data "build_info.json:core" \
|
--onefile-tempdir-spec="{CACHE_DIR}/${{ env.APP_NAME }}/${{ env.VERSION }}" \
|
||||||
--add-data "build_info.json:core/interface" \
|
--assume-yes-for-downloads \
|
||||||
--add-data "core/interface/assets:core/interface/assets" \
|
--enable-plugin=pyside6 \
|
||||||
--icon "core/interface/assets/logo.png" \
|
--enable-plugin=upx \
|
||||||
--exclude-module PyQt6 \
|
--upx-binary="${{ env.UPX_BINARY }}" \
|
||||||
--exclude-module PyQt5 \
|
--noinclude-qt-translations \
|
||||||
--hidden-import=backports.tarfile \
|
--noinclude-dlls='libQt6WebEngine*' \
|
||||||
--hidden-import=backports \
|
--noinclude-dlls='libQt6Multimedia*' \
|
||||||
--hidden-import=jaraco.context \
|
--noinclude-dlls='libQt6Quick*' \
|
||||||
--hidden-import=jaraco.text \
|
--noinclude-dlls='libQt6Qml*' \
|
||||||
--hidden-import=jaraco.functools \
|
--noinclude-dlls='libQt6Designer*' \
|
||||||
--name ${{ env.APP_NAME }} \
|
--noinclude-dlls='libQt63D*' \
|
||||||
|
--noinclude-dlls='libQt6Bluetooth*' \
|
||||||
|
--noinclude-dlls='libQt6Nfc*' \
|
||||||
|
--noinclude-dlls='libQt6Sensors*' \
|
||||||
|
--noinclude-dlls='libQt6Serial*' \
|
||||||
|
--noinclude-dlls='libQt6Test*' \
|
||||||
|
--noinclude-dlls='libQt6Location*' \
|
||||||
|
--noinclude-dlls='libQt6Pdf*' \
|
||||||
|
--include-data-dir=core/interface/assets=core/interface/assets \
|
||||||
|
--include-data-files=build_info.json=build_info.json \
|
||||||
|
--include-data-files=build_info.json=core/build_info.json \
|
||||||
|
--include-data-files=build_info.json=core/interface/build_info.json \
|
||||||
|
--output-filename=${{ env.APP_NAME }} \
|
||||||
main.py
|
main.py
|
||||||
|
|
||||||
- name: Build with PyInstaller (macOS)
|
- name: Build with Nuitka (macOS)
|
||||||
if: runner.os == 'macOS'
|
if: runner.os == 'macOS'
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
pyinstaller --onefile \
|
python -m nuitka \
|
||||||
--add-data "build_info.json:." \
|
--onefile \
|
||||||
--add-data "build_info.json:core" \
|
--onefile-tempdir-spec="{CACHE_DIR}/${{ env.APP_NAME }}/${{ env.VERSION }}" \
|
||||||
--add-data "build_info.json:core/interface" \
|
--assume-yes-for-downloads \
|
||||||
--add-data "core/interface/assets:core/interface/assets" \
|
--enable-plugin=pyside6 \
|
||||||
--icon "core/interface/assets/logo.png" \
|
--noinclude-qt-translations \
|
||||||
--exclude-module PyQt6 \
|
--noinclude-dlls='libQt6WebEngine*' \
|
||||||
--exclude-module PyQt5 \
|
--noinclude-dlls='libQt6Multimedia*' \
|
||||||
--hidden-import=backports.tarfile \
|
--noinclude-dlls='libQt6Quick*' \
|
||||||
--hidden-import=backports \
|
--noinclude-dlls='libQt6Qml*' \
|
||||||
--hidden-import=jaraco.context \
|
--noinclude-dlls='libQt6Designer*' \
|
||||||
--hidden-import=jaraco.text \
|
--noinclude-dlls='libQt63D*' \
|
||||||
--hidden-import=jaraco.functools \
|
--noinclude-dlls='libQt6Bluetooth*' \
|
||||||
--name ${{ env.APP_NAME }} \
|
--noinclude-dlls='libQt6Nfc*' \
|
||||||
|
--noinclude-dlls='libQt6Sensors*' \
|
||||||
|
--noinclude-dlls='libQt6Serial*' \
|
||||||
|
--noinclude-dlls='libQt6Test*' \
|
||||||
|
--noinclude-dlls='libQt6Location*' \
|
||||||
|
--noinclude-dlls='libQt6Pdf*' \
|
||||||
|
--include-data-dir=core/interface/assets=core/interface/assets \
|
||||||
|
--include-data-files=build_info.json=build_info.json \
|
||||||
|
--include-data-files=build_info.json=core/build_info.json \
|
||||||
|
--include-data-files=build_info.json=core/interface/build_info.json \
|
||||||
|
--output-filename=${{ env.APP_NAME }} \
|
||||||
main.py
|
main.py
|
||||||
|
|
||||||
- name: Rename artifact
|
- name: Prepare artifact
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
mkdir -p dist-final
|
mkdir -p dist
|
||||||
if [ "$RUNNER_OS" == "Windows" ]; then
|
if [ "$RUNNER_OS" == "Windows" ]; then
|
||||||
mv ${{ env.APP_NAME }}.exe dist-final/${{ matrix.artifact_name }}
|
mv ${{ env.APP_NAME }}.exe dist/${{ matrix.artifact_name }}
|
||||||
else
|
else
|
||||||
chmod +x dist/${{ env.APP_NAME }}
|
mv ${{ env.APP_NAME }} dist/${{ matrix.artifact_name }}
|
||||||
mv dist/${{ env.APP_NAME }} dist-final/${{ matrix.artifact_name }}
|
chmod +x dist/${{ matrix.artifact_name }}
|
||||||
fi
|
fi
|
||||||
ls -la dist-final/
|
ls -la dist/
|
||||||
|
|
||||||
- name: Upload build artifact
|
- name: Upload build artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.os }}-build
|
name: ${{ matrix.os }}-build
|
||||||
path: dist-final/${{ matrix.artifact_name }}
|
path: dist/${{ matrix.artifact_name }}
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
release:
|
release:
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ SoftwareManager is a Python-based GUI tool that simplifies searching and downloa
|
|||||||
## Additional Information
|
## Additional Information
|
||||||
- SoftwareManager is still in Development and most likely contains issues. Please report any bugs you find via the Issues tab. Contributions are also greatly appreciated.
|
- SoftwareManager is still in Development and most likely contains issues. Please report any bugs you find via the Issues tab. Contributions are also greatly appreciated.
|
||||||
- MacOS Builds haven't been properly tested - We're thankful to receive feedback.
|
- MacOS Builds haven't been properly tested - We're thankful to receive feedback.
|
||||||
- If you want to host your own server, clone our [server repository](https://github.com/KeksPirates/SoftwareManager-Server), enter your cookie for rutracker.org and run server.py. Detailed Instructions on how to get your rutracker cookie are in the README of the server repo.
|
- If you want to host your own server, clone the server branch of this repo, enter your cookie for rutracker.org and run server.py. Detailed Instructions on how to get your rutracker cookie are in the README of the server branch.
|
||||||
|
|
||||||
## Python Dependencies
|
## Python Dependencies
|
||||||
(also included in requirements.txt)
|
(also included in requirements.txt)
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import libtorrent as lt
|
|||||||
import time
|
import time
|
||||||
import sys
|
import sys
|
||||||
import json
|
import json
|
||||||
import asyncio
|
|
||||||
from core.utils.general.logs import consoleLog, remove_download_log, flush_log_buffer
|
from core.utils.general.logs import consoleLog, remove_download_log, flush_log_buffer
|
||||||
from core.utils.general.wrappers import run_thread
|
from core.utils.general.wrappers import run_thread
|
||||||
from core.utils.data.state import state
|
from core.utils.data.state import state
|
||||||
@@ -104,7 +103,8 @@ class MainWindow(QtWidgets.QMainWindow, QWidget):
|
|||||||
state.version = build_info.get("version")
|
state.version = build_info.get("version")
|
||||||
|
|
||||||
# Check for updates on Windows
|
# Check for updates on Windows
|
||||||
if state.ignore_updates is False and platform.system() == "Windows":
|
if state.ignore_updates is False:
|
||||||
|
if platform.system() == "Windows":
|
||||||
result = check_for_updates()
|
result = check_for_updates()
|
||||||
if result != (None, None):
|
if result != (None, None):
|
||||||
assets, latest_version = result
|
assets, latest_version = result
|
||||||
@@ -476,7 +476,6 @@ class MainWindow(QtWidgets.QMainWindow, QWidget):
|
|||||||
MainWindow._instance.log_signal.emit(text)
|
MainWindow._instance.log_signal.emit(text)
|
||||||
|
|
||||||
def _on_log_signal(self, text):
|
def _on_log_signal(self, text):
|
||||||
if hasattr(self, 'consoleLog'):
|
|
||||||
self.consoleLog.append(text)
|
self.consoleLog.append(text)
|
||||||
self.consoleLog.verticalScrollBar().setValue(
|
self.consoleLog.verticalScrollBar().setValue(
|
||||||
self.consoleLog.verticalScrollBar().maximum()
|
self.consoleLog.verticalScrollBar().maximum()
|
||||||
|
|||||||
Reference in New Issue
Block a user