diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 752cca34..d356a504 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -31,6 +31,11 @@ jobs: image: archlinux:base-devel options: --privileged --device /dev/fuse steps: + - name: Configure Arch mirror + run: | + echo 'Server = https://cdn.lenuma.ru/archlinux-mirror/$repo/os/$arch' > /etc/pacman.d/mirrorlist + sed -i -E 's/^#?[[:space:]]*ParallelDownloads[[:space:]]*=.*/ParallelDownloads = 5/' /etc/pacman.conf + - name: Prepare container uses: https://git.linux-gaming.ru/actions/anylinux-setup-action@7278cbb7c3692fce7241d427614ef7984192f138 # v3 @@ -69,6 +74,11 @@ jobs: image: archlinux:base-devel steps: + - name: Configure Arch mirror + run: | + echo 'Server = https://cdn.lenuma.ru/archlinux-mirror/$repo/os/$arch' > /etc/pacman.d/mirrorlist + sed -i -E 's/^#?[[:space:]]*ParallelDownloads[[:space:]]*=.*/ParallelDownloads = 5/' /etc/pacman.conf + - name: Prepare container run: | pacman -Syuu --noconfirm --disable-download-timeout --needed git wget gnupg nodejs npm diff --git a/.gitea/workflows/code-check.yml b/.gitea/workflows/code-check.yml index ada32089..3cb14d4c 100644 --- a/.gitea/workflows/code-check.yml +++ b/.gitea/workflows/code-check.yml @@ -24,35 +24,23 @@ jobs: container: image: archlinux:base-devel@sha256:061679925e5d5028f2df9395d441ce6c4b9accf0157ff3486c06b6962e014ef1 steps: - - name: Rank Arch mirrors + - name: Configure Arch mirror run: | - if curl -fL --retry 2 --connect-timeout 10 --max-time 60 \ - https://github.com/westandskif/rate-mirrors/releases/download/v0.33.0/rate-mirrors-v0.33.0-x86_64-unknown-linux-musl.tar.gz \ - -o /tmp/rate-mirrors.tar.gz && - echo 'e0ffb221649b7e1ce6b67ffaabe7cfd2b619c8bf8d6971e07ff9507d4e19a4b3 /tmp/rate-mirrors.tar.gz' | sha256sum -c - && - tar -xzf /tmp/rate-mirrors.tar.gz -C /tmp --strip-components=1 \ - rate-mirrors-v0.33.0-x86_64-unknown-linux-musl/rate_mirrors && - timeout --kill-after=5s 120s /tmp/rate_mirrors --allow-root --protocol=https --disable-untested-fallback \ - --save=/tmp/arch-mirrorlist arch --max-delay=21600 && - grep -q '^Server = https://' /tmp/arch-mirrorlist; then - install -m 644 /tmp/arch-mirrorlist /etc/pacman.d/mirrorlist - else - echo '::warning::Mirror ranking failed; keeping the original Arch mirrorlist' - fi + echo 'Server = https://cdn.lenuma.ru/archlinux-mirror/$repo/os/$arch' > /etc/pacman.d/mirrorlist sed -i -E 's/^#?[[:space:]]*ParallelDownloads[[:space:]]*=.*/ParallelDownloads = 5/' /etc/pacman.conf - - name: Install system dependencies + - name: Install CI dependencies run: | - pacman -Syu --noconfirm --needed git nodejs npm mesa libarchive libpulse sdl3 pyside6 qt6-svg qt6-imageformats uv - pacman -Scc --noconfirm + pacman -Syu --noconfirm --needed git nodejs npm - uses: https://git.linux-gaming.ru/actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - - name: Sync dependencies into venv - run: uv sync --all-extras --dev - - - name: Activate .venv & run pre-commit + - name: Install project and check dependencies shell: bash run: | - source .venv/bin/activate - pre-commit run --show-diff-on-failure --color=always --all-files + source build-aux/PKGBUILD-git + pacman -S --noconfirm --needed "${depends[@]}" python-qrcode libpulse mesa pre-commit pyright python-pytest python-pytest-mock + pacman -Scc --noconfirm + + - name: Run pre-commit + run: pre-commit run --show-diff-on-failure --color=always --all-files diff --git a/.gitea/workflows/package-build.yml b/.gitea/workflows/package-build.yml index 2cb625b9..d8c82e43 100644 --- a/.gitea/workflows/package-build.yml +++ b/.gitea/workflows/package-build.yml @@ -83,21 +83,9 @@ jobs: image: archlinux:base-devel@sha256:061679925e5d5028f2df9395d441ce6c4b9accf0157ff3486c06b6962e014ef1 options: --privileged --device /dev/fuse steps: - - name: Rank Arch mirrors + - name: Configure Arch mirror run: | - if curl -fL --retry 2 --connect-timeout 10 --max-time 60 \ - https://github.com/westandskif/rate-mirrors/releases/download/v0.33.0/rate-mirrors-v0.33.0-x86_64-unknown-linux-musl.tar.gz \ - -o /tmp/rate-mirrors.tar.gz && - echo 'e0ffb221649b7e1ce6b67ffaabe7cfd2b619c8bf8d6971e07ff9507d4e19a4b3 /tmp/rate-mirrors.tar.gz' | sha256sum -c - && - tar -xzf /tmp/rate-mirrors.tar.gz -C /tmp --strip-components=1 \ - rate-mirrors-v0.33.0-x86_64-unknown-linux-musl/rate_mirrors && - timeout --kill-after=5s 120s /tmp/rate_mirrors --allow-root --protocol=https --disable-untested-fallback \ - --save=/tmp/arch-mirrorlist arch --max-delay=21600 && - grep -q '^Server = https://' /tmp/arch-mirrorlist; then - install -m 644 /tmp/arch-mirrorlist /etc/pacman.d/mirrorlist - else - echo '::warning::Mirror ranking failed; keeping the original Arch mirrorlist' - fi + echo 'Server = https://cdn.lenuma.ru/archlinux-mirror/$repo/os/$arch' > /etc/pacman.d/mirrorlist sed -i -E 's/^#?[[:space:]]*ParallelDownloads[[:space:]]*=.*/ParallelDownloads = 5/' /etc/pacman.conf - name: Prepare container @@ -210,21 +198,9 @@ jobs: image: archlinux:base-devel@sha256:061679925e5d5028f2df9395d441ce6c4b9accf0157ff3486c06b6962e014ef1 steps: - - name: Rank Arch mirrors + - name: Configure Arch mirror run: | - if curl -fL --retry 2 --connect-timeout 10 --max-time 60 \ - https://github.com/westandskif/rate-mirrors/releases/download/v0.33.0/rate-mirrors-v0.33.0-x86_64-unknown-linux-musl.tar.gz \ - -o /tmp/rate-mirrors.tar.gz && - echo 'e0ffb221649b7e1ce6b67ffaabe7cfd2b619c8bf8d6971e07ff9507d4e19a4b3 /tmp/rate-mirrors.tar.gz' | sha256sum -c - && - tar -xzf /tmp/rate-mirrors.tar.gz -C /tmp --strip-components=1 \ - rate-mirrors-v0.33.0-x86_64-unknown-linux-musl/rate_mirrors && - timeout --kill-after=5s 120s /tmp/rate_mirrors --allow-root --protocol=https --disable-untested-fallback \ - --save=/tmp/arch-mirrorlist arch --max-delay=21600 && - grep -q '^Server = https://' /tmp/arch-mirrorlist; then - install -m 644 /tmp/arch-mirrorlist /etc/pacman.d/mirrorlist - else - echo '::warning::Mirror ranking failed; keeping the original Arch mirrorlist' - fi + echo 'Server = https://cdn.lenuma.ru/archlinux-mirror/$repo/os/$arch' > /etc/pacman.d/mirrorlist sed -i -E 's/^#?[[:space:]]*ParallelDownloads[[:space:]]*=.*/ParallelDownloads = 5/' /etc/pacman.conf - name: Prepare container diff --git a/.gitea/workflows/renovate.yml b/.gitea/workflows/renovate.yml index 48f45770..d42c851b 100644 --- a/.gitea/workflows/renovate.yml +++ b/.gitea/workflows/renovate.yml @@ -9,6 +9,9 @@ jobs: renovate: runs-on: ubuntu-latest container: ghcr.io/renovatebot/renovate:latest@sha256:47421f2f3f82048e969b5195dd808d5ac2c5f69d43d192191c4a3dca390afe06 + env: + UV_PYTHON_INSTALL_MIRROR: https://mirror.nju.edu.cn/github-release/astral-sh/python-build-standalone/ + UV_DEFAULT_INDEX: https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/ steps: - uses: https://git.linux-gaming.ru/actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2c1af92f..28e0e7ce 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,7 +24,7 @@ repos: hooks: - id: pyright name: pyright - entry: uv run pyright + entry: pyright language: system types_or: [python, pyi] require_serial: true @@ -62,7 +62,7 @@ repos: hooks: - id: pytest name: pytest - entry: uv run pytest tests/ -x -q --tb=line + entry: pytest tests/ -x -q --tb=line language: system types: [python] files: ^(tests/|portprotonqt/) diff --git a/CHANGELOG.md b/CHANGELOG.md index 971e7a90..15990c08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ ### Fixed +- Исправлена ошибка форматирования даты последнего запуска и времени игры при системной локали `C` или `POSIX` - Отключена проверка обновлений AppImage при запуске с `--silent`, чтобы не показывать диалог обновления - Исправлена рекурсивная ошибка фильтра событий клавиатуры при закрытии приложения - Исправлена высокая нагрузка на CPU из-за непрерывной перерисовки таблиц в настройках exe diff --git a/build-aux/AppImage/portprotonqt-appimage.sh b/build-aux/AppImage/portprotonqt-appimage.sh index 7d7bf76f..edfe391d 100755 --- a/build-aux/AppImage/portprotonqt-appimage.sh +++ b/build-aux/AppImage/portprotonqt-appimage.sh @@ -16,15 +16,6 @@ export DEPLOY_PYTHON=1 export MAIN_BIN=portprotonqt export OPTIMIZE_LAUNCH=1 -# sharun 2.2.7 needs the matching deployment and preload format from 1.4.1. -ANYLINUX_TOOLS="https://raw.githubusercontent.com/pkgforge-dev/Anylinux-AppImages/bf5e3c44dc2daf8b5de51cdf6b2d11589d047104/useful-tools" -export SHARUN_LINK="https://github.com/pkgforge-dev/Anylinux-sharun/releases/download/2.2.7/sharun-$ARCH" -export ANYLINUX_LIB_SOURCE="$ANYLINUX_TOOLS/lib/anylinux.c" -export HOOKSRC="$ANYLINUX_TOOLS/hooks" -wget --retry-connrefused --tries=30 "$ANYLINUX_TOOLS/quick-sharun.sh" -O ./quick-sharun -echo '6cd9e45a099d7173aa906aaca51e48e51db78069ead14ef8e6683db4cbb4be44 ./quick-sharun' | sha256sum -c - -chmod +x ./quick-sharun - # Adjust comp settings to bypass oom-killer export DWARFS_COMP="zstd:level=15 -S22 -B5" @@ -47,7 +38,7 @@ GAMEPAD_LIBRARY=$(find /usr/lib -type f \ -path '*/site-packages/portprotonqt/libportprotonqt_gamepad.so' \ -print -quit) test -n "$GAMEPAD_LIBRARY" -./quick-sharun \ +quick-sharun \ /usr/bin/portprotonqt* \ /usr/bin/bash \ /usr/bin/update-desktop-database \ @@ -107,4 +98,4 @@ done rm -rf "$PYSIDE_DIR"/QtAsyncio # Turn AppDir into AppImage -./quick-sharun --make-appimage +quick-sharun --make-appimage diff --git a/portprotonqt/localization.py b/portprotonqt/localization.py index 4a7f65dd..f0555a81 100644 --- a/portprotonqt/localization.py +++ b/portprotonqt/localization.py @@ -86,7 +86,7 @@ def get_system_locale(): if ui_config.get_force_english(): return 'en' loc = locale.getlocale()[0] - return loc if loc else 'en' + return loc if loc and loc not in ('C', 'POSIX') else 'en' def get_steam_language(): try: diff --git a/tests/test_base_config.py b/tests/test_base_config.py index 2f28abd1..16069d12 100644 --- a/tests/test_base_config.py +++ b/tests/test_base_config.py @@ -196,6 +196,8 @@ def test_horizontal_card_orientation_uses_theme_until_overridden(tmp_path: Path) @pytest.mark.parametrize("system_locale,force_english,expected", [ ("ru_RU", False, "ru_RU"), (None, False, "en"), + ("C", False, "en"), + ("POSIX", False, "en"), ("ru_RU", True, "en"), ]) def test_system_locale(