diff --git a/.gitea/workflows/build-nightlly.yml b/.gitea/workflows/build-nightlly.yml index cef2b8c..f8f8683 100644 --- a/.gitea/workflows/build-nightlly.yml +++ b/.gitea/workflows/build-nightlly.yml @@ -1,4 +1,4 @@ -name: Nightly Build - AppImage, Arch, Fedora +name: Nightly Build - AppImage, Debian, Arch, Fedora on: workflow_dispatch: @@ -8,6 +8,32 @@ env: PACKAGE: "portprotonqt" jobs: + build-debian: + name: Build Debian Package + runs-on: ubuntu-22.04 + steps: + - uses: https://gitea.com/actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 + + - name: Install required dependencies + run: | + sudo apt update + sudo apt install -y python3-all python3-setuptools python3-build python3-installer dh-python debhelper devscripts build-essential python3-dev pybuild-plugin-pyproject + + - name: Build Debian package + run: | + dpkg-buildpackage -us -uc -b + ls -la ../*.deb + # Copy Debian packages to a consistent location for upload + mkdir -p ./dist + cp ../*.deb ./dist/ || true + + - name: Upload Debian package + uses: https://gitea.com/actions/gitea-upload-artifact@v4 + with: + name: PortProtonQt-Debian + path: | + dist/*.deb + build-appimage: name: Build AppImage runs-on: ubuntu-22.04 diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 0bbaaa4..aa62fbc 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -1,4 +1,4 @@ -name: Build AppImage, Arch and Fedora Packages +name: Build AppImage, Debian, Arch and Fedora Packages on: workflow_dispatch: @@ -14,6 +14,32 @@ env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} jobs: + build-debian: + name: Build Debian Package + runs-on: ubuntu-22.04 + steps: + - uses: https://gitea.com/actions/checkout@v4 + + - name: Install required dependencies + run: | + sudo apt update + sudo apt install -y python3-all python3-setuptools python3-build python3-installer dh-python debhelper devscripts build-essential python3-dev pybuild-plugin-pyproject + + - name: Build Debian package + run: | + dpkg-buildpackage -us -uc -b + ls -la ../*.deb + # Copy Debian packages to a consistent location for upload + mkdir -p ./dist + cp ../*.deb ./dist/ || true + + - name: Upload Debian package + uses: https://gitea.com/actions/gitea-upload-artifact@v4 + with: + name: PortProtonQt-Debian + path: | + dist/*.deb + build-appimage: name: Build AppImage runs-on: ubuntu-22.04 @@ -149,7 +175,7 @@ jobs: release: name: Create and Publish Release - needs: [build-appimage, build-arch, build-fedora] + needs: [build-debian, build-appimage, build-arch, build-fedora] runs-on: ubuntu-latest steps: - uses: https://gitea.com/actions/checkout@v4 diff --git a/.gitea/workflows/code-build.yml b/.gitea/workflows/code-build.yml index b3d94e1..bf09d5a 100644 --- a/.gitea/workflows/code-build.yml +++ b/.gitea/workflows/code-build.yml @@ -1,10 +1,11 @@ -name: Build Check - AppImage, Arch, Fedora +name: Build Check - AppImage, Debian, Arch, Fedora on: workflow_dispatch: pull_request: paths: - 'build-aux/**' + - 'debian/**' env: PKGDEST: "/tmp/portprotonqt" @@ -15,6 +16,7 @@ jobs: runs-on: ubuntu-latest outputs: appimage: ${{ steps.check.outputs.appimage }} + debian: ${{ steps.check.outputs.debian }} fedora: ${{ steps.check.outputs.fedora }} arch: ${{ steps.check.outputs.arch }} steps: @@ -43,6 +45,13 @@ jobs: echo "appimage=false" >> $GITHUB_OUTPUT fi + # Check Debian directory + if grep -q "debian/" changed_files.txt || ls debian/ 1> /dev/null 2>&1; then + echo "debian=true" >> $GITHUB_OUTPUT + else + echo "debian=false" >> $GITHUB_OUTPUT + fi + # Check Fedora spec files (only fedora-git.spec) if grep -q "build-aux/fedora-git.spec" changed_files.txt; then echo "fedora=true" >> $GITHUB_OUTPUT @@ -57,6 +66,31 @@ jobs: echo "arch=false" >> $GITHUB_OUTPUT fi + build-debian: + name: Build Debian Package + runs-on: ubuntu-22.04 + needs: changes + if: needs.changes.outputs.debian == 'true' || github.event_name == 'workflow_dispatch' + steps: + - uses: https://gitea.com/actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 + + - name: Install required dependencies + run: | + sudo apt update + sudo apt install -y python3-all python3-setuptools python3-build python3-installer dh-python debhelper devscripts build-essential python3-dev pybuild-plugin-pyproject + + - name: Build Debian package + run: | + dpkg-buildpackage -us -uc -b + ls -la ../*.deb + + - name: Upload Debian package + uses: https://gitea.com/actions/gitea-upload-artifact@v4 + with: + name: PortProtonQt-Debian + path: | + ../*.deb + build-appimage: name: Build AppImage runs-on: ubuntu-22.04 diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..8a155b7 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,2 @@ +recursive-include portprotonqt/themes * +recursive-include portprotonqt/locales * diff --git a/build-aux/AppImageBuilder.yml b/build-aux/AppImageBuilder.yml index a9954cc..1f4ad6e 100644 --- a/build-aux/AppImageBuilder.yml +++ b/build-aux/AppImageBuilder.yml @@ -5,8 +5,7 @@ script: - uv venv - uv pip install --no-cache-dir ../ - cp -r .venv/lib/python3.10/site-packages/* AppDir/usr/local/lib/python3.10/dist-packages - - cp -r share AppDir/usr - - cp -r lib AppDir/usr + - cp -r usr AppDir/ - rm -rf AppDir/usr/local/lib/python3.10/dist-packages/PySide6/Qt/qml/ - rm -f AppDir/usr/local/lib/python3.10/dist-packages/PySide6/{assistant,designer,linguist,lrelease,lupdate} - rm -f AppDir/usr/local/lib/python3.10/dist-packages/PySide6/{Qt3DAnimation*,Qt3DCore*,Qt3DExtras*,Qt3DInput*,Qt3DLogic*,Qt3DRender*,QtBluetooth*,QtCharts*,QtConcurrent*,QtDataVisualization*,QtDesigner*,QtExampleIcons*,QtGraphs*,QtGraphsWidgets*,QtHelp*,QtHttpServer*,QtLocation*,QtMultimedia*,QtMultimediaWidgets*,QtNetworkAuth*,QtNfc*,QtOpenGL*,QtOpenGLWidgets*,QtPdf*,QtPdfWidgets*,QtPositioning*,QtPrintSupport*,QtQml*,QtQuick*,QtQuick3D*,QtQuickControls2*,QtQuickTest*,QtQuickWidgets*,QtRemoteObjects*,QtScxml*,QtSensors*,QtSerialBus*,QtSerialPort*,QtSpatialAudio*,QtSql*,QtStateMachine*,QtSvgWidgets*,QtTest*,QtTextToSpeech*,QtUiTools*,QtWebChannel*,QtWebEngineCore*,QtWebEngineQuick*,QtWebEngineWidgets*,QtWebSockets*,QtWebView*,QtXml*} diff --git a/build-aux/PKGBUILD b/build-aux/PKGBUILD index deada35..291873e 100644 --- a/build-aux/PKGBUILD +++ b/build-aux/PKGBUILD @@ -19,6 +19,5 @@ build() { package() { cd "$srcdir/PortProtonQt" python -m installer --destdir="$pkgdir" dist/*.whl - cp -r build-aux/share "$pkgdir/usr/" - cp -r build-aux/lib "$pkgdir/usr/" + cp -r build-aux/usr "$pkgdir/" } diff --git a/build-aux/PKGBUILD-git b/build-aux/PKGBUILD-git index 501a42b..e5b69db 100644 --- a/build-aux/PKGBUILD-git +++ b/build-aux/PKGBUILD-git @@ -24,6 +24,5 @@ build() { package() { cd "$srcdir/PortProtonQt" python -m installer --destdir="$pkgdir" dist/*.whl - cp -r build-aux/share "$pkgdir/usr/" - cp -r build-aux/lib "$pkgdir/usr/" + cp -r build-aux/usr "$pkgdir/" } diff --git a/build-aux/fedora-git.spec b/build-aux/fedora-git.spec index fc97d7d..b152955 100644 --- a/build-aux/fedora-git.spec +++ b/build-aux/fedora-git.spec @@ -70,8 +70,7 @@ cd %{oname} cd %{oname} %pyproject_install %pyproject_save_files %{pypi_name} -cp -r build-aux/share %{buildroot}/usr/ -cp -r build-aux/lib %{buildroot}/usr/ +cp -r build-aux/usr %{buildroot}/ %files -n python3-%{pypi_name}-git -f %{pyproject_files} %{_bindir}/%{pypi_name} diff --git a/build-aux/fedora.spec b/build-aux/fedora.spec index 3211950..6fbea15 100644 --- a/build-aux/fedora.spec +++ b/build-aux/fedora.spec @@ -69,8 +69,7 @@ cd %{oname} cd %{oname} %pyproject_install %pyproject_save_files %{pypi_name} -cp -r build-aux/share %{buildroot}/usr/ -cp -r build-aux/lib %{buildroot}/usr/ +cp -r build-aux/usr %{buildroot}/ %files -n python3-%{pypi_name} -f %{pyproject_files} %{_bindir}/%{pypi_name} diff --git a/build-aux/lib/udev/rules.d/60-portprotonqt.rules b/build-aux/usr/lib/udev/rules.d/60-portprotonqt.rules similarity index 100% rename from build-aux/lib/udev/rules.d/60-portprotonqt.rules rename to build-aux/usr/lib/udev/rules.d/60-portprotonqt.rules diff --git a/build-aux/share/applications/ru.linux_gaming.PortProtonQt.desktop b/build-aux/usr/share/applications/ru.linux_gaming.PortProtonQt.desktop similarity index 100% rename from build-aux/share/applications/ru.linux_gaming.PortProtonQt.desktop rename to build-aux/usr/share/applications/ru.linux_gaming.PortProtonQt.desktop diff --git a/build-aux/share/bash-completion/completions/portprotonqt b/build-aux/usr/share/bash-completion/completions/portprotonqt similarity index 100% rename from build-aux/share/bash-completion/completions/portprotonqt rename to build-aux/usr/share/bash-completion/completions/portprotonqt diff --git a/build-aux/share/icons/hicolor/scalable/apps/ru.linux_gaming.PortProtonQt.svg b/build-aux/usr/share/icons/hicolor/scalable/apps/ru.linux_gaming.PortProtonQt.svg similarity index 100% rename from build-aux/share/icons/hicolor/scalable/apps/ru.linux_gaming.PortProtonQt.svg rename to build-aux/usr/share/icons/hicolor/scalable/apps/ru.linux_gaming.PortProtonQt.svg diff --git a/build-aux/share/metainfo/ru.linux_gaming.PortProtonQt.metainfo.xml b/build-aux/usr/share/metainfo/ru.linux_gaming.PortProtonQt.metainfo.xml similarity index 100% rename from build-aux/share/metainfo/ru.linux_gaming.PortProtonQt.metainfo.xml rename to build-aux/usr/share/metainfo/ru.linux_gaming.PortProtonQt.metainfo.xml diff --git a/debian/README.Debian b/debian/README.Debian new file mode 100644 index 0000000..4e9ad85 --- /dev/null +++ b/debian/README.Debian @@ -0,0 +1,8 @@ +PortProtonQt for Debian +----------------------- + +This package provides a modern GUI for managing and launching games from +PortProton, Steam, and Epic Games Store. + +For more information about PortProtonQt, please see the project homepage: +https://git.linux-gaming.ru/Boria138/PortProtonQt diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..c2e2161 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +portprotonqt (0.1.9-1) unstable; urgency=medium + + * Initial release of PortProtonQt for Debian + + -- Boris Yumankulov Thu, 11 Dec 2025 00:00:00 +0000 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..b1bd38b --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +13 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..4ba2403 --- /dev/null +++ b/debian/control @@ -0,0 +1,47 @@ +Source: portprotonqt +Priority: optional +Maintainer: Boris Yumankulov +Build-Depends: debhelper (>= 13), + dh-python, + python3-all, + python3-setuptools, + python3-build, + python3-installer, + pybuild-plugin-pyproject +Standards-Version: 4.6.0 +Homepage: https://git.linux-gaming.ru/Boria138/PortProtonQt + +Package: python3-portprotonqt +Architecture: all +Depends: ${python3:Depends}, + ${misc:Depends}, + python3-babel, + python3-beautifulsoup4, + python3-evdev, + python3-icoextract, + python3-numpy, + python3-orjson, + python3-pillow, + python3-psutil, + python3-pyside6, + python3-pyudev, + python3-rapidfuzz, + python3-requests, + python3-tqdm, + python3-vdf, + python3-websocket-client, + perl-image-exiftool, + xdg-utils, + cabextract, + gzip, + unzip, + curl, + unrar +Description: Modern GUI for managing and launching games from PortProton, Steam, and Epic Games Store + This application provides a sleek, intuitive graphical interface for managing + and launching games from PortProton, Steam, and Epic Games Store. It + consolidates your game libraries into a single, user-friendly hub for seamless + navigation and organization. Its lightweight structure and cross-platform + support deliver a cohesive gaming experience, eliminating the need for + multiple launchers. Unique PortProton integration enhances Linux gaming, + enabling effortless play of Windows-based titles with minimal setup. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..814b0e0 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,7 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: PortProtonQt +Source: https://git.linux-gaming.ru/Boria138/PortProtonQt + +Files: * +Copyright: 2024-2025 Boris Yumankulov +License: GPL-3.0+ diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..a91e998 --- /dev/null +++ b/debian/rules @@ -0,0 +1,33 @@ +#!/usr/bin/make -f + +export PYBUILD_NAME=portprotonqt +export DEB_BUILD_OPTIONS=nocheck +export DH_VERBOSE=1 + +%: + dh $@ --with python3 --buildsystem=pybuild + +override_dh_install: + dh_install + # Create necessary directories + mkdir -p debian/python3-portprotonqt/usr/lib/udev/rules.d + mkdir -p debian/python3-portprotonqt/usr/share/applications + mkdir -p debian/python3-portprotonqt/usr/share/bash-completion/completions + mkdir -p debian/python3-portprotonqt/usr/share/icons/hicolor/scalable/apps + mkdir -p debian/python3-portprotonqt/usr/share/metainfo + # Copy additional files from build-aux/usr (if they exist) + if [ -d "$(CURDIR)/build-aux/usr/lib/udev/rules.d" ]; then \ + cp -r $(CURDIR)/build-aux/usr/lib/udev/rules.d/* debian/python3-portprotonqt/usr/lib/udev/rules.d/ || true; \ + fi + if [ -d "$(CURDIR)/build-aux/usr/share/applications" ]; then \ + cp -r $(CURDIR)/build-aux/usr/share/applications/* debian/python3-portprotonqt/usr/share/applications/ || true; \ + fi + if [ -d "$(CURDIR)/build-aux/usr/share/bash-completion/completions" ]; then \ + cp -r $(CURDIR)/build-aux/usr/share/bash-completion/completions/* debian/python3-portprotonqt/usr/share/bash-completion/completions/ || true; \ + fi + if [ -d "$(CURDIR)/build-aux/usr/share/icons/hicolor/scalable/apps" ]; then \ + cp -r $(CURDIR)/build-aux/usr/share/icons/hicolor/scalable/apps/* debian/python3-portprotonqt/usr/share/icons/hicolor/scalable/apps/ || true; \ + fi + if [ -d "$(CURDIR)/build-aux/usr/share/metainfo" ]; then \ + cp -r $(CURDIR)/build-aux/usr/share/metainfo/* debian/python3-portprotonqt/usr/share/metainfo/ || true; \ + fi diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..89ae9db --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/debian/source/options b/debian/source/options new file mode 100644 index 0000000..a93d867 --- /dev/null +++ b/debian/source/options @@ -0,0 +1,7 @@ +# Configuration for Debian source package +compression = "gzip" + +# Files and directories to exclude from source package +tar-ignore = "dev-scripts" +tar-ignore = ".*" +tar-ignore = "__pycache__" diff --git a/pyproject.toml b/pyproject.toml index a3818f7..12bf46a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["setuptools >= 77.0.3"] +requires = ["setuptools >= 75.0.0", "wheel"] build-backend = "setuptools.build_meta" [project] diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..295398f --- /dev/null +++ b/setup.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +""" +Setup script for PortProtonQt +Debian package build configuration +""" + +from setuptools import setup, find_packages +from pathlib import Path +import re + +# Читаем версию из pyproject.toml простым regex +pyproject_file = Path(__file__).parent / "pyproject.toml" +version_match = re.search(r'^version\s*=\s*"([^"]+)"', pyproject_file.read_text(), re.MULTILINE) +version = version_match.group(1) if version_match else "0.0.0" + +# Читаем README для long_description +readme_file = Path(__file__).parent / "README.md" +long_description = readme_file.read_text(encoding="utf-8") if readme_file.exists() else "" + +setup( + name="portprotonqt", + version=version, + description="A project to rewrite PortProton (PortWINE) using PySide", + long_description=long_description, + long_description_content_type="text/markdown", + author="Boria138, BlackSnaker, Mikhail Tergoev(Castro-Fidel)", + author_email="", + url="https://github.com/Castro-Fidel/PortProton", + license="GPL-3.0", + + # Классификаторы PyPI + classifiers=[ + "Development Status :: 3 - Alpha", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Operating System :: POSIX :: Linux", + "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", + "Intended Audience :: End Users/Desktop", + "Topic :: Games/Entertainment", + ], + keywords=["portproton", "wine", "game", "steam", "proton", "linux"], + + # Python версия + python_requires=">=3.10", + + # Пакеты + packages=find_packages(exclude=["build-aux", "dev-scripts", "documentation", "data"]), + + # Включаемые файлы пакета + package_data={ + "portprotonqt": [ + "themes/**/*", + "themes/**/fonts/*", + "themes/**/images/*", + "themes/**/images/icons/*", + "themes/**/images/screenshots/*", + "locales/**/*", + "locales/**/*.po", + "locales/**/*.mo", + ], + }, + + # Точка входа - исполняемый скрипт + entry_points={ + "console_scripts": [ + "portprotonqt=portprotonqt.app:main", + ], + }, + + # Дополнительные опции + include_package_data=True, + zip_safe=False, +)