diff --git a/.gitea/workflows/build-nightlly.yml b/.gitea/workflows/build-nightlly.yml index cef2b8c..1f51a48 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,29 @@ 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 + + - 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/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 0bbaaa4..b3fa507 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,29 @@ 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 + + - 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 @@ -149,7 +172,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/build-aux/AppImageBuilder.yml b/build-aux/AppImageBuilder.yml index a9954cc..0ebc6b9 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 build-aux/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..f4c89cb 100644 --- a/build-aux/PKGBUILD +++ b/build-aux/PKGBUILD @@ -19,6 +19,4 @@ 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/" } diff --git a/build-aux/PKGBUILD-git b/build-aux/PKGBUILD-git index 501a42b..3311d8d 100644 --- a/build-aux/PKGBUILD-git +++ b/build-aux/PKGBUILD-git @@ -24,6 +24,4 @@ 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/" } diff --git a/build-aux/fedora-git.spec b/build-aux/fedora-git.spec index fc97d7d..6f15819 100644 --- a/build-aux/fedora-git.spec +++ b/build-aux/fedora-git.spec @@ -70,8 +70,6 @@ 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/ %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..4d4810f 100644 --- a/build-aux/fedora.spec +++ b/build-aux/fedora.spec @@ -69,8 +69,6 @@ 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/ %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..109a490 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,25 @@ +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+ + +Files: debian/* +Copyright: 2025 Boris Yumankulov +License: GPL-3.0+ + +License: GPL-3.0+ + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + . + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. diff --git a/debian/install b/debian/install new file mode 100644 index 0000000..05956c4 --- /dev/null +++ b/debian/install @@ -0,0 +1,5 @@ +usr/share/applications/ru.linux_gaming.PortProtonQt.desktop usr/share/applications/ +usr/share/icons/hicolor/scalable/apps/ru.linux_gaming.PortProtonQt.svg usr/share/icons/hicolor/scalable/apps/ +usr/share/metainfo/ru.linux_gaming.PortProtonQt.metainfo.xml usr/share/metainfo/ +usr/share/bash-completion/completions/portprotonqt usr/share/bash-completion/completions/ +usr/lib/udev/rules.d/60-portprotonqt.rules usr/lib/udev/rules.d/ diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..f498958 --- /dev/null +++ b/debian/rules @@ -0,0 +1,22 @@ +#!/usr/bin/make -f +export PYBUILD_NAME=portprotonqt +export DEB_BUILD_OPTIONS=nocheck +export PYTHONDONTWRITEBYTECODE=1 +export DH_VERBOSE=1 + +%: + dh $@ --with python3 --buildsystem=pybuild + +override_dh_auto_install: + dh_auto_install + # Install data files + install -d debian/python3-portprotonqt/usr/share/applications + install -m 644 build-aux/usr/share/applications/ru.linux_gaming.PortProtonQt.desktop debian/python3-portprotonqt/usr/share/applications/ + install -d debian/python3-portprotonqt/usr/share/icons/hicolor/scalable/apps + install -m 644 build-aux/usr/share/icons/hicolor/scalable/apps/ru.linux_gaming.PortProtonQt.svg debian/python3-portprotonqt/usr/share/icons/hicolor/scalable/apps/ + install -d debian/python3-portprotonqt/usr/share/metainfo + install -m 644 build-aux/usr/share/metainfo/ru.linux_gaming.PortProtonQt.metainfo.xml debian/python3-portprotonqt/usr/share/metainfo/ + install -d debian/python3-portprotonqt/usr/share/bash-completion/completions + install -m 644 build-aux/usr/share/bash-completion/completions/portprotonqt debian/python3-portprotonqt/usr/share/bash-completion/completions/ + install -d debian/python3-portprotonqt/usr/lib/udev/rules.d + install -m 644 build-aux/usr/lib/udev/rules.d/60-portprotonqt.rules debian/python3-portprotonqt/usr/lib/udev/rules.d/ 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..e103751 --- /dev/null +++ b/debian/source/options @@ -0,0 +1,18 @@ +# Configuration for Debian source package +compression = "gzip" + +# Files and directories to exclude from source package +tar-ignore = "dev-scripts" +tar-ignore = ".*" +tar-ignore = "__pycache__" +tar-ignore = ".git" +tar-ignore = ".venv" +tar-ignore = ".ruff_cache" +tar-ignore = ".ropeproject" +tar-ignore = "build" +tar-ignore = "dist" +tar-ignore = "*.egg-info" +tar-ignore = ".pytest_cache" +tar-ignore = ".vscode" +tar-ignore = "portprotonqt/themes/.git" +tar-ignore = "portprotonqt/locales/.git" diff --git a/pyproject.toml b/pyproject.toml index a3818f7..13f8d8d 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] @@ -52,6 +52,13 @@ portprotonqt = "portprotonqt.app:main" [tool.setuptools.packages.find] exclude = ["build-aux", "dev-scripts", "documentation", "data"] +[tool.setuptools.data-files] +"share/applications" = ["build-aux/usr/share/applications/ru.linux_gaming.PortProtonQt.desktop"] +"share/icons/hicolor/scalable/apps" = ["build-aux/usr/share/icons/hicolor/scalable/apps/ru.linux_gaming.PortProtonQt.svg"] +"share/metainfo" = ["build-aux/usr/share/metainfo/ru.linux_gaming.PortProtonQt.metainfo.xml"] +"share/bash-completion/completions" = ["build-aux/usr/share/bash-completion/completions/portprotonqt"] +"lib/udev/rules.d" = ["build-aux/usr/lib/udev/rules.d/60-portprotonqt.rules"] + [tool.ruff.lint] select = [ "E", # pycodestyle errors diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..0e9c758 --- /dev/null +++ b/setup.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python3 +from setuptools import setup + +if __name__ == "__main__": + setup(name="portprotonqt")