From 46a21b4f5bec1387d4a1816a810a26486d16841b Mon Sep 17 00:00:00 2001 From: therealaleph Date: Mon, 27 Apr 2026 23:28:20 +0300 Subject: [PATCH] chore: bump versions to 1.7.10 (Cargo + Android) + fix Win7 i686 lockfile Patch release for the changes shipped via #337 (Apps Script range probe gzip-decoded body handling) and #344 (Android Paste button on 13+) plus a CI fix that restores the Win7 i686 binary missing from v1.7.9 (Cargo.lock format mismatch with Rust 1.77). The Cargo.lock version=4 (Rust 1.78+) wasn't readable by the pinned 1.77.2 toolchain on the i686 job. Workflow now regenerates the lockfile with the pinned toolchain on that job only, leaving every other target unaffected. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/release.yml | 15 +++++++++++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- android/app/build.gradle.kts | 4 ++-- docs/changelog/v1.7.10.md | 8 ++++++++ 5 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 docs/changelog/v1.7.10.md diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1b0a79d..37c39ba 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -165,6 +165,21 @@ jobs: toolchain: ${{ matrix.rust_toolchain || 'stable' }} targets: ${{ matrix.target }} + # Cargo.lock from main is generated by stable Rust (1.78+ writes + # version=4 lockfiles). Rust 1.77 only understands version=3, so + # the i686 build with the pinned 1.77.2 toolchain bails with + # "failed to parse lock file at: Cargo.lock" before it ever + # touches our code. Drop the committed lockfile only on the pinned + # job — cargo will regenerate it with version=3 against the same + # Cargo.toml. We don't ship a `Cargo.lock` for binary reproducibility + # contracts, so regenerating per-build is safe. + - name: Regenerate Cargo.lock for older toolchain (Win7 i686 only) + if: matrix.rust_toolchain == '1.77.2' + shell: bash + run: | + rm -f Cargo.lock + cargo +${{ matrix.rust_toolchain }} generate-lockfile + # Cache target/ + cargo registry across runs — this is the big # self-hosted speedup. Without it, actions/checkout@v4's default # `git clean -ffdx` wipes target/ between runs and every build is diff --git a/Cargo.lock b/Cargo.lock index 89b7ddb..54fc142 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2222,7 +2222,7 @@ dependencies = [ [[package]] name = "mhrv-rs" -version = "1.7.9" +version = "1.7.10" dependencies = [ "base64 0.22.1", "bytes", diff --git a/Cargo.toml b/Cargo.toml index 3aebc1f..12cb12a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mhrv-rs" -version = "1.7.9" +version = "1.7.10" edition = "2021" description = "Rust port of MasterHttpRelayVPN -- DPI bypass via Google Apps Script relay with domain fronting" license = "MIT" diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index aa04bfb..f4522f8 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -14,8 +14,8 @@ android { applicationId = "com.therealaleph.mhrv" minSdk = 24 // Android 7.0 — covers 99%+ of live devices. targetSdk = 34 - versionCode = 154 - versionName = "1.7.9" + versionCode = 155 + versionName = "1.7.10" // Ship all four mainstream Android ABIs: // - arm64-v8a — 95%+ of real-world Android phones since 2019 diff --git a/docs/changelog/v1.7.10.md b/docs/changelog/v1.7.10.md new file mode 100644 index 0000000..6af68b8 --- /dev/null +++ b/docs/changelog/v1.7.10.md @@ -0,0 +1,8 @@ + +• رفع باگ "GET کامل غیرضروری وقتی Apps Script body gzip رو decode می‌کنه" ([#337](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/pull/337)): وقتی Apps Script یه gzip body رو decode می‌کرد ولی Content-Range origin رو unchanged نگه می‌داشت، validation strict ما اون response رو reject می‌کرد + یک GET کامل دوباره می‌فرستادیم — quota Apps Script هدر می‌رفت. fix carve-out اضافه می‌کنه: اگر Content-Range proves entity کامل در probe اول گنجیده، 206 رو به 200 rewrite کنیم بدون refetch. validation strict برای real Range request‌های client + chunkهای بعدی حفظ شده. همچنین تشخیص quota error برای string‌های آلمانی (`bandbreitenkontingent`، `datenübertragungsrate`) و generic (`bandwidth`، `transfer rate`، `limit exceeded`) اضافه شد، تا deployment‌هایی که رو quota account‌های Google غیرانگلیسی هستند به‌درستی blacklist بشن. ممنون از @freeinternet865 +• رفع UI Android "Config detected in clipboard" که روی Android 13+ سپس از resume کار نمی‌کرد ([#344](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/pull/344)): Android 13+ دسترسی clipboard background-to-foreground رو محدود می‌کنه — auto-detect ساکت empty می‌گرفت + banner ظاهر نمی‌شد. fix: یک دکمهٔ permanent **Paste** که روی tap clipboard رو می‌خونه (user interaction permission می‌ده در همه versionها). دکمهٔ Export به‌صورت icon-only تا row بهینه باقی بمونه. ممنون از @yyoyoian-pixel +• Fix CI workflow incompatibility for Win7 i686 build ([#318 follow-up](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/issues/318)): job pinned-Rust-1.77.2 برای target Win7 i686 fail می‌کرد چون `Cargo.lock` (تولید شده توسط Rust ≥1.78) از lockfile version 4 استفاده می‌کرد + Rust 1.77 فقط version 3 رو می‌فهمه. regenerate Cargo.lock فقط روی job pinned اضافه شد — مهم: artifact `mhrv-rs-windows-i686.zip` که در v1.7.9 missing بود، در v1.7.10 reappear می‌کنه (Win7 SP1-loadable). +--- +• Fix "unnecessary fallback full GET when Apps Script decodes a gzip body" ([#337](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/pull/337)): when Apps Script decoded a gzip body but echoed the origin's compressed `Content-Range` unchanged, our strict validator rejected the response and we'd retry with a full GET — wasting Apps Script quota. The fix adds a carve-out: if `Content-Range` proves the entity already fits in the synthetic first probe, rewrite the 206 to a 200 and skip the refetch. Strict validation is still applied to real client `Range` requests and to later chunks. Also adds quota-error string matching for German (`bandbreitenkontingent`, `datenübertragungsrate`) and generic (`bandwidth`, `transfer rate`, `limit exceeded`) phrasings, so deployments hitting quota under non-English Google account locales now blacklist correctly. Thanks @freeinternet865. +• Fix Android "Config detected in clipboard" banner that silently broke on Android 13+ after resume ([#344](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/pull/344)): Android 13+ restricts background-to-foreground clipboard access, so `getPrimaryClip()` during recomposition silently returned empty — the banner never showed. Fix: replace the auto-detect banner with a permanent **Paste** button that reads on tap (user interaction grants clipboard access on every Android version). Export button becomes icon-only to keep the row compact. Thanks @yyoyoian-pixel. +• Fix the CI Win7 i686 build that silently regressed in v1.7.9 ([#318](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/issues/318) follow-up): the pinned-Rust-1.77.2 job for the i686 target failed because `Cargo.lock` (generated by stable Rust ≥1.78) uses lockfile version 4, which Rust 1.77 doesn't understand. The job now regenerates the lockfile with the pinned toolchain before building. The `mhrv-rs-windows-i686.zip` artifact that disappeared from the v1.7.9 release page reappears in v1.7.10 (and now actually loads on Win7 SP1).