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>
This commit is contained in:
therealaleph
2026-04-28 00:44:23 +03:00
parent 46a21b4f5b
commit d5e5dbb5d7
5 changed files with 68 additions and 45 deletions
+60 -41
View File
@@ -77,18 +77,17 @@ jobs:
- target: x86_64-pc-windows-gnu
os: windows-latest
name: mhrv-rs-windows-amd64
- target: i686-pc-windows-msvc
os: windows-latest
name: mhrv-rs-windows-i686
# Pin Rust 1.77.2 specifically for this target. Rust 1.78
# (May 2024) raised the Windows MSRV from Win7 to Win10 by
# switching std::time to GetSystemTimePreciseAsFileTime, a
# kernel32 export that doesn't exist on Win7. The whole
# reason this target ships is to support legacy Win7 32-bit
# boxes (#272), so a stock-stable build defeats the purpose.
# 1.77.2 is the last stable that produces a Win7-loadable
# binary; other targets stay on @stable. (Fixes #318.)
rust_toolchain: "1.77.2"
# i686-pc-windows-msvc target was attempted in v1.7.7-v1.7.10
# to support Windows 7 32-bit users (#272, #318). Removed in
# v1.7.11 because keeping it on Rust 1.77.2 (last Win7-stable)
# is fundamentally fragile: every transitive crate that bumps
# its MSRV (e.g. `time` 0.3.47 needs Cargo manifest features
# only available in Rust 1.78+) breaks the build, and pinning
# transitives is brittle across releases. Win7 users should
# self-build per the README; the project no longer ships a
# prebuilt i686 Win7 binary. Replaced by the existing
# x86_64-pc-windows-gnu (windows-amd64) which covers ~99% of
# active Windows installs (incl. all WoA64 emulation).
- target: x86_64-unknown-linux-musl
os: [self-hosted, linux, x64, mhrv-build]
name: mhrv-rs-linux-musl-amd64
@@ -112,12 +111,7 @@ jobs:
# mipsel-softfloat is best-effort: the Rust tier-3 target occasionally
# regresses. Letting it fail keeps the main release going so
# desktop/Android users aren't blocked by MT7621 router support.
# i686-pc-windows-msvc is similarly best-effort — pinned to Rust
# 1.77.2 for Win7 compat (#318), so a future dep MSRV bump above
# 1.77 will fail this one target. Letting it skip keeps the rest
# of the release unblocked; we'd then choose between dropping the
# target or moving to the tier-3 win7-msvc target with build-std.
continue-on-error: ${{ matrix.mipsel_softfloat == true || matrix.target == 'i686-pc-windows-msvc' }}
continue-on-error: ${{ matrix.mipsel_softfloat == true }}
steps:
# Heal any root-owned leftovers from a previous mipsel docker
@@ -165,21 +159,6 @@ 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
@@ -619,10 +598,33 @@ jobs:
with:
fetch-depth: 0
- uses: actions/download-artifact@v4
with:
path: dist
merge-multiple: true
# `actions/download-artifact@v4` has been intermittently flaking on
# this workflow with "5 retries exhausted" on a single artifact (~10
# of 13). Wrap it in a manual retry — usually the second attempt
# succeeds, the third nails any laggards. We use `gh run download`
# against the current run so we don't depend on the release page
# existing yet (it doesn't until the softprops step below runs).
- name: Download all build artifacts (with retries)
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
mkdir -p dist
for attempt in 1 2 3; do
if gh run download "${GITHUB_RUN_ID}" --dir dist --repo "${GITHUB_REPOSITORY}"; then
echo "downloaded all artifacts on attempt $attempt"
# `gh run download` puts each artifact in its own subdir;
# flatten so downstream steps that expect dist/<file> work
# the same as `merge-multiple: true` did.
find dist -type f -mindepth 2 -exec mv -f {} dist/ \;
find dist -type d -empty -delete
ls -la dist/
exit 0
fi
echo "download attempt $attempt failed; retrying in 30s..."
sleep 30
done
echo "::error::failed to download artifacts after 3 attempts"
exit 1
# Compose the GitHub release body from `docs/changelog/v<ver>.md`
# so the Releases page tells humans what actually changed —
@@ -859,10 +861,27 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: mhrv-rs-android-universal
path: apk
# Same retry pattern as the `release` job above — `actions/download-artifact@v4`
# has been flaking on this workflow with 5-retries-exhausted errors.
- name: Download universal APK (with retries)
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
mkdir -p apk
for attempt in 1 2 3; do
if gh run download "${GITHUB_RUN_ID}" \
--name mhrv-rs-android-universal \
--dir apk \
--repo "${GITHUB_REPOSITORY}"; then
echo "downloaded universal APK on attempt $attempt"
ls -la apk/
exit 0
fi
echo "download attempt $attempt failed; retrying in 30s..."
sleep 30
done
echo "::error::failed to download universal APK after 3 attempts"
exit 1
- name: Post to Telegram
env: