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..6a4e93a --- /dev/null +++ b/debian/changelog @@ -0,0 +1,22 @@ +portprotonqt (0.1.9-1) unstable; urgency=medium + + * Добавлены основные и расширенные настройки для ".exe"-файлов + * Добавлена кнопка обновления сетки без необходимости перезапуска PortProtonQt (F5 на клавиатуре, GUIDE + Select на геймпаде) + * Добавлена эмуляция мыши по GUIDE (Xbox или PS) + Start для установки приложений или взаимодействия с инструментами Wine не адаптированные под геймпад (работает только если PortProtonQt вне фокуса) + * При сворачивании приложения в трей оно теперь корректно восстанавливается, вместо запуска нового экземпляра + * Добавлена поддержка SteamGridDB в качестве дополнительного источника обложек + * При добавлении карточки в избранное она автоматически становится первой без необходимости перезапуска + * Изменено оформление виртуальной клавиатуры для лучшего соответствия общей теме + * Ускорено чтение конфигов за счёт уменьшения количества обращений к файловой системе. + * Из стандартной темы удалены неиспользуемые шрифты + * Улучшена совместимость с Qt 6.10 + * Ускорен запуск программы + * В диалог редактирования ярылыка добавлен placeholder с уточнением того что в качевстве обложки можно использовать и ссылку, а не только файл + * Ссылку на обложку в диалоге редактирования ярлыка теперь можно указывать без протокола вроде http или https + * Добавлено больше проверок на None для избежания вылетов + * Улучшена работа с потоками для избежания вылетов + * Исправлен запуск PortProton из Flatpak: теперь используется "flatpak run", а не "start.sh" + * Исправлено применение обложки по ссылке например со steamgriddb.com/ + * Исправлено множественное открытие окон в X11 + + -- Boris Yumankulov Mon, 08 Dec 2025 00:00:00 +0000 diff --git a/debian/changelog.bak b/debian/changelog.bak new file mode 100644 index 0000000..c2e2161 --- /dev/null +++ b/debian/changelog.bak @@ -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/dev-scripts/bump_ver.py b/dev-scripts/bump_ver.py index 46fc256..7aa83a5 100755 --- a/dev-scripts/bump_ver.py +++ b/dev-scripts/bump_ver.py @@ -4,7 +4,7 @@ import argparse import re import subprocess from pathlib import Path -from datetime import date +from datetime import date, datetime # Base directory of the project BASE_DIR = Path(__file__).parent.parent @@ -16,6 +16,7 @@ PYPROJECT = BASE_DIR / "pyproject.toml" APP_PY = BASE_DIR / "portprotonqt" / "app.py" GITEA_WORKFLOW = BASE_DIR / ".gitea" / "workflows" / "build.yml" CHANGELOG = BASE_DIR / "CHANGELOG.md" +DEBIAN_CHANGELOG = BASE_DIR / "debian" / "changelog" def bump_appimage(path: Path, old: str, new: str) -> bool: """ @@ -109,6 +110,138 @@ def bump_changelog(path: Path, old: str, new: str) -> bool: path.write_text(new_text, encoding='utf-8') return bool(count) +def bump_debian_changelog(path: Path, old: str, new: str) -> bool: + """ + Update debian/changelog with new version + """ + if not path.exists(): + return False + + # Extract changelog entries from CHANGELOG.md for this version + changelog_md_path = BASE_DIR / "CHANGELOG.md" + changelog_entries = [] + changelog_date = None + + if changelog_md_path.exists(): + changelog_text = changelog_md_path.read_text(encoding='utf-8') + lines = changelog_text.splitlines() + + # Find the section for the new version and extract the date + start_reading = False + end_reading = False + in_contributors_section = False + + for line in lines: + if line.startswith(f"## [{new}]"): + # Extract date from line like "## [0.1.9] - 2025-12-08" + date_match = re.search(r'\[.+\] - (\d{4}-\d{2}-\d{2})', line) + if date_match: + changelog_date_str = date_match.group(1) + # Convert to the expected Debian format + date_obj = datetime.strptime(changelog_date_str, '%Y-%m-%d') + changelog_date = date_obj.strftime('%a, %d %b %Y') + " 00:00:00 +0000" + + start_reading = True + in_contributors_section = False + continue + elif line.startswith("## [") and start_reading: + end_reading = True + break + elif line.strip().lower() == "### contributors": + # Start of contributors section - skip following lines until next section + in_contributors_section = True + continue + + # Skip section headers and contributor sections + if start_reading and not end_reading and not in_contributors_section: + stripped_line = line.strip() + if stripped_line and not line.startswith("#") and not line.startswith("[") and not line.lower().startswith("###"): + # Check if this line is a list item with changes + if re.match(r'^\s*[*-]\s+', line): + # Remove markdown list formatting and add proper Debian format + clean_line = re.sub(r'^\s*[*-]\s+', ' * ', line.rstrip()) + # Remove common markdown formatting like backticks + clean_line = re.sub(r'`([^`]+)`', r'"\1"', clean_line) # Replace `code` with "code" + changelog_entries.append(clean_line) + # Also include lines that are sub-items (indented changes) + elif line.startswith(" ") and re.match(r'^\s*[*-]\s+', line[4:]): + clean_line = re.sub(r'^\s*[*-]\s+', ' * ', line[4:].rstrip()) + clean_line = " " + clean_line # Add extra indentation + # Remove common markdown formatting + clean_line = re.sub(r'`([^`]+)`', r'"\1"', clean_line) + changelog_entries.append(clean_line) + + # If no specific entries found for this version, use generic message + if not changelog_entries: + changelog_entries = [" * New upstream release"] + + # Use changelog date if available, otherwise use current time + current_time = changelog_date if changelog_date else datetime.now().strftime('%a, %d %b %Y %H:%M:%S +0000') + + # Read the existing changelog to get maintainer info and other fields + text = path.read_text(encoding='utf-8') + + # If the file is empty or doesn't contain proper maintainer info, use a default + lines = text.splitlines() + + if not lines or not any(line.startswith(" -- ") for line in lines): + # Create a default changelog entry with proper format + package_name = "portprotonqt" + new_version_line = f"{package_name} ({new}-1) unstable; urgency=medium" + + # Default maintainer info from the original file + default_maintainer = "Boris Yumankulov " + maintainer_line = f" -- {default_maintainer} {current_time}" + + new_content = new_version_line + "\n\n" + "\n".join(changelog_entries) + "\n\n" + maintainer_line + "\n" + else: + # Extract the header template from the current first entry + header_parts = [] + entry_end_index = 0 + + for i, line in enumerate(lines): + header_parts.append(line) + if line.startswith(" -- "): + entry_end_index = i + 1 + break + + # Construct new changelog entry + new_entry_lines = [] + + if header_parts: + # Parse the first line to extract package name (before the version) + first_line = header_parts[0] + # Extract package name by getting everything before the opening parenthesis + if '(' in first_line: + package_name = first_line.split('(')[0].strip() + new_version_line = f"{package_name} ({new}-1) unstable; urgency=medium" + else: + # Fallback: if no parentheses found, use a default format + new_version_line = f"portprotonqt ({new}-1) unstable; urgency=medium" + + new_entry_lines.append(new_version_line) + + # Add the changelog entries + new_entry_lines.extend(changelog_entries) + + # Add the maintainer info and timestamp + for j in range(1, len(header_parts)): + if header_parts[j].startswith(" -- "): + # Extract the maintainer information (everything after "-- ") + maintainer_part = header_parts[j][4:] # Remove leading " -- " + # Extract only the name and email, ignore timestamp + maintainer_info = maintainer_part.split(' ')[0].strip() + new_entry_lines.append(f" -- {maintainer_info} {current_time}") + elif not header_parts[j].startswith(" *"): # Skip existing changes since we added new ones + new_entry_lines.append(header_parts[j]) + + # Reconstruct the file with new entry at the top followed by the rest + new_content = '\n'.join(new_entry_lines) + '\n' + '\n'.join(lines[entry_end_index:]) + + path.write_text(new_content, encoding='utf-8') + return True + + def main(): parser = argparse.ArgumentParser(description='Bump project version in specific files') parser.add_argument('old', help='Old version string') @@ -123,7 +256,8 @@ def main(): (PYPROJECT, bump_pyproject), (APP_PY, bump_app_py), (GITEA_WORKFLOW, bump_workflow), - (CHANGELOG, bump_changelog) + (CHANGELOG, bump_changelog), + (DEBIAN_CHANGELOG, bump_debian_changelog) ] updated = [] 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, +)