Skip to content

Commit d5e5dbb

Browse files
therealalephclaude
andcommitted
chore: bump versions to 1.7.11 + drop i686 + harden release artifact download
v1.7.10 release run shipped no assets due to two CI failures stacked: 1. The i686-pc-windows-msvc job (added in v1.7.7 for Win7 support per #318) failed because Rust 1.77.2 — the last stable that produces Win7-loadable binaries — can't parse modern transitive crate manifests (`time` 0.3.47 in this case). Pinning transitives across the dep tree at every MSRV bump in our deps isn't sustainable, so the target is removed from the release matrix. Win7 32-bit users self-build per #318's instructions. 2. The `release` job hit `actions/download-artifact@v4`'s 5-retries- exhausted error on multiple artifacts. Same flake we worked around in #288 for `commit-releases`. The `release` and `telegram` jobs now use `gh run download` wrapped in a 3-attempt retry loop, mirror- ing the working pattern. v1.7.11 is the first full release after v1.7.9; ships #337 (Apps Script gzip-decoded range probe) and #344 (Android Paste button) that were tagged in v1.7.10 but never published as assets. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 46a21b4 commit d5e5dbb

5 files changed

Lines changed: 68 additions & 45 deletions

File tree

.github/workflows/release.yml

Lines changed: 60 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -77,18 +77,17 @@ jobs:
7777
- target: x86_64-pc-windows-gnu
7878
os: windows-latest
7979
name: mhrv-rs-windows-amd64
80-
- target: i686-pc-windows-msvc
81-
os: windows-latest
82-
name: mhrv-rs-windows-i686
83-
# Pin Rust 1.77.2 specifically for this target. Rust 1.78
84-
# (May 2024) raised the Windows MSRV from Win7 to Win10 by
85-
# switching std::time to GetSystemTimePreciseAsFileTime, a
86-
# kernel32 export that doesn't exist on Win7. The whole
87-
# reason this target ships is to support legacy Win7 32-bit
88-
# boxes (#272), so a stock-stable build defeats the purpose.
89-
# 1.77.2 is the last stable that produces a Win7-loadable
90-
# binary; other targets stay on @stable. (Fixes #318.)
91-
rust_toolchain: "1.77.2"
80+
# i686-pc-windows-msvc target was attempted in v1.7.7-v1.7.10
81+
# to support Windows 7 32-bit users (#272, #318). Removed in
82+
# v1.7.11 because keeping it on Rust 1.77.2 (last Win7-stable)
83+
# is fundamentally fragile: every transitive crate that bumps
84+
# its MSRV (e.g. `time` 0.3.47 needs Cargo manifest features
85+
# only available in Rust 1.78+) breaks the build, and pinning
86+
# transitives is brittle across releases. Win7 users should
87+
# self-build per the README; the project no longer ships a
88+
# prebuilt i686 Win7 binary. Replaced by the existing
89+
# x86_64-pc-windows-gnu (windows-amd64) which covers ~99% of
90+
# active Windows installs (incl. all WoA64 emulation).
9291
- target: x86_64-unknown-linux-musl
9392
os: [self-hosted, linux, x64, mhrv-build]
9493
name: mhrv-rs-linux-musl-amd64
@@ -112,12 +111,7 @@ jobs:
112111
# mipsel-softfloat is best-effort: the Rust tier-3 target occasionally
113112
# regresses. Letting it fail keeps the main release going so
114113
# desktop/Android users aren't blocked by MT7621 router support.
115-
# i686-pc-windows-msvc is similarly best-effort — pinned to Rust
116-
# 1.77.2 for Win7 compat (#318), so a future dep MSRV bump above
117-
# 1.77 will fail this one target. Letting it skip keeps the rest
118-
# of the release unblocked; we'd then choose between dropping the
119-
# target or moving to the tier-3 win7-msvc target with build-std.
120-
continue-on-error: ${{ matrix.mipsel_softfloat == true || matrix.target == 'i686-pc-windows-msvc' }}
114+
continue-on-error: ${{ matrix.mipsel_softfloat == true }}
121115

122116
steps:
123117
# Heal any root-owned leftovers from a previous mipsel docker
@@ -165,21 +159,6 @@ jobs:
165159
toolchain: ${{ matrix.rust_toolchain || 'stable' }}
166160
targets: ${{ matrix.target }}
167161

168-
# Cargo.lock from main is generated by stable Rust (1.78+ writes
169-
# version=4 lockfiles). Rust 1.77 only understands version=3, so
170-
# the i686 build with the pinned 1.77.2 toolchain bails with
171-
# "failed to parse lock file at: Cargo.lock" before it ever
172-
# touches our code. Drop the committed lockfile only on the pinned
173-
# job — cargo will regenerate it with version=3 against the same
174-
# Cargo.toml. We don't ship a `Cargo.lock` for binary reproducibility
175-
# contracts, so regenerating per-build is safe.
176-
- name: Regenerate Cargo.lock for older toolchain (Win7 i686 only)
177-
if: matrix.rust_toolchain == '1.77.2'
178-
shell: bash
179-
run: |
180-
rm -f Cargo.lock
181-
cargo +${{ matrix.rust_toolchain }} generate-lockfile
182-
183162
# Cache target/ + cargo registry across runs — this is the big
184163
# self-hosted speedup. Without it, actions/checkout@v4's default
185164
# `git clean -ffdx` wipes target/ between runs and every build is
@@ -619,10 +598,33 @@ jobs:
619598
with:
620599
fetch-depth: 0
621600

622-
- uses: actions/download-artifact@v4
623-
with:
624-
path: dist
625-
merge-multiple: true
601+
# `actions/download-artifact@v4` has been intermittently flaking on
602+
# this workflow with "5 retries exhausted" on a single artifact (~10
603+
# of 13). Wrap it in a manual retry — usually the second attempt
604+
# succeeds, the third nails any laggards. We use `gh run download`
605+
# against the current run so we don't depend on the release page
606+
# existing yet (it doesn't until the softprops step below runs).
607+
- name: Download all build artifacts (with retries)
608+
env:
609+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
610+
run: |
611+
mkdir -p dist
612+
for attempt in 1 2 3; do
613+
if gh run download "${GITHUB_RUN_ID}" --dir dist --repo "${GITHUB_REPOSITORY}"; then
614+
echo "downloaded all artifacts on attempt $attempt"
615+
# `gh run download` puts each artifact in its own subdir;
616+
# flatten so downstream steps that expect dist/<file> work
617+
# the same as `merge-multiple: true` did.
618+
find dist -type f -mindepth 2 -exec mv -f {} dist/ \;
619+
find dist -type d -empty -delete
620+
ls -la dist/
621+
exit 0
622+
fi
623+
echo "download attempt $attempt failed; retrying in 30s..."
624+
sleep 30
625+
done
626+
echo "::error::failed to download artifacts after 3 attempts"
627+
exit 1
626628
627629
# Compose the GitHub release body from `docs/changelog/v<ver>.md`
628630
# so the Releases page tells humans what actually changed —
@@ -859,10 +861,27 @@ jobs:
859861
steps:
860862
- uses: actions/checkout@v4
861863

862-
- uses: actions/download-artifact@v4
863-
with:
864-
name: mhrv-rs-android-universal
865-
path: apk
864+
# Same retry pattern as the `release` job above — `actions/download-artifact@v4`
865+
# has been flaking on this workflow with 5-retries-exhausted errors.
866+
- name: Download universal APK (with retries)
867+
env:
868+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
869+
run: |
870+
mkdir -p apk
871+
for attempt in 1 2 3; do
872+
if gh run download "${GITHUB_RUN_ID}" \
873+
--name mhrv-rs-android-universal \
874+
--dir apk \
875+
--repo "${GITHUB_REPOSITORY}"; then
876+
echo "downloaded universal APK on attempt $attempt"
877+
ls -la apk/
878+
exit 0
879+
fi
880+
echo "download attempt $attempt failed; retrying in 30s..."
881+
sleep 30
882+
done
883+
echo "::error::failed to download universal APK after 3 attempts"
884+
exit 1
866885
867886
- name: Post to Telegram
868887
env:

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mhrv-rs"
3-
version = "1.7.10"
3+
version = "1.7.11"
44
edition = "2021"
55
description = "Rust port of MasterHttpRelayVPN -- DPI bypass via Google Apps Script relay with domain fronting"
66
license = "MIT"

android/app/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ android {
1414
applicationId = "com.therealaleph.mhrv"
1515
minSdk = 24 // Android 7.0 — covers 99%+ of live devices.
1616
targetSdk = 34
17-
versionCode = 155
18-
versionName = "1.7.10"
17+
versionCode = 156
18+
versionName = "1.7.11"
1919

2020
// Ship all four mainstream Android ABIs:
2121
// - arm64-v8a — 95%+ of real-world Android phones since 2019

docs/changelog/v1.7.11.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<!-- see docs/changelog/v1.1.0.md for the file format: Persian, then `---`, then English. -->
2+
• v1.7.10 release page assets منتشر نشد (CI failures): دو bug همزمان بودن — (۱) target `i686-pc-windows-msvc` که در v1.7.7 برای Win7 32-bit اضافه شده بود، در v1.7.10 fail کرد چون Rust 1.77.2 (آخرین stable Win7-compat) نمی‌تونه manifest crate‌های مدرن مثل `time` 0.3.47 رو parse کنه؛ pinning transitive crate‌ها در هر release dep MSRV بمپ می‌کنن غیرقابل دفاع است. (۲) job `release` با `actions/download-artifact@v4` با ۵-retry-exhausted error fail شد. **Fix:** target i686 از matrix حذف شد (کاربران Win7 ۳۲ بیتی باید self-build کنن — instructions در [#318](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/issues/318))؛ release و telegram jobs به `gh run download` با retry loop ۳-attempt تبدیل شدن. v1.7.11 release اولین کاملی هست که از v1.7.9 منتشر می‌شه با همه fixهای v1.7.10 (Apps Script range probe + Android Paste button) plus این workflow fix.
3+
---
4+
• v1.7.10 release page assets failed to publish (CI failures): two concurrent bugs — (1) the `i686-pc-windows-msvc` target added in v1.7.7 for Win7 32-bit support broke in v1.7.10 because Rust 1.77.2 (the last stable that produces Win7-compatible binaries) can't parse the manifest of modern transitive crates like `time` 0.3.47; pinning transitives at every release where a dep bumps MSRV is brittle and unsustainable. (2) The `release` job's `actions/download-artifact@v4` step hit a 5-retries-exhausted error. **Fix:** dropped the i686 target from the matrix entirely (Win7 32-bit users must self-build now — instructions in [#318](https://github.com/therealaleph/MasterHttpRelayVPN-RUST/issues/318)); the `release` and `telegram` jobs now use `gh run download` with a 3-attempt retry loop. v1.7.11 is the first complete release published since v1.7.9 and ships all the v1.7.10 fixes (Apps Script range probe handling per #337, Android Paste button per #344) along with this workflow repair.

0 commit comments

Comments
 (0)