From 2680614c1520c819c0d7fc68609183093a287e67 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Fri, 3 Jul 2026 18:38:25 +0900 Subject: [PATCH] ci(nightly): fix nightly update detection broken by AppImage bundling hang (#4909) Since 2026-06-29 the nightly Linux legs hang forever while bundling the AppImage and hit the job-level timeout, which reports the legs as 'cancelled'. The assemble-manifest guard treats 'cancelled' as run cancellation and skips promoting nightly/latest.json, so nightly update detection has been broken for ALL platforms since then (#4906). Root cause: the truly-portable AppImage bundler in the tauri fork downloads quick-sharun.sh from the unpinned main branch of pkgforge-dev/Anylinux-AppImages. Upstream strace-mode changes on 2026-06-29 (acb1d719, 867c0b15) made the script execute the staged app launcher scripts and WebKitGTK binaries under Xvfb to trace dlopened libraries; the spawned WebKit processes survive the process-group kill and quick-sharun waits forever. Fixes: - Pre-seed the tauri tools cache with quick-sharun.sh pinned to the last known-good revision (b3a9e985, used by the green 06-27/06-28 nightlies) in both nightly.yml and release.yml. The bundler only downloads the moving main-branch script when the file is absent. - Add step-level timeout-minutes to the nightly build steps and raise the job timeout to a 75-minute backstop, so a future hang fails only that leg ('failure') instead of tripping the job timeout ('cancelled'), and assemble-manifest still promotes the manifest fragments from the healthy legs. Closes #4906 Co-authored-by: Claude Fable 5 --- .github/workflows/nightly.yml | 27 ++++++++++++++++++++++++++- .github/workflows/release.yml | 16 ++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 0e41ec02..09c6d123 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -78,7 +78,9 @@ jobs: args: '--target aarch64-pc-windows-msvc --bundles nsis' runs-on: ${{ matrix.config.os }} - timeout-minutes: 60 + # Backstop only — must stay ABOVE setup time + the per-step timeouts below, + # because a job-level timeout reports `cancelled` and skips assemble-manifest. + timeout-minutes: 75 steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: @@ -173,6 +175,7 @@ jobs: - name: build and sign Android apks if: matrix.config.release == 'android' shell: bash + timeout-minutes: 55 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} NDK_HOME: ${{ env.ANDROID_HOME }}/ndk/28.2.13676358 @@ -213,9 +216,30 @@ jobs: if: matrix.config.release == 'linux' run: cargo install tauri-cli --git https://github.com/tauri-apps/tauri --branch feat/truly-portable-appimage --force + # The truly-portable AppImage bundler downloads quick-sharun.sh from + # Anylinux-AppImages@main ONLY when it is not already in the tauri tools + # cache. An upstream strace-mode change (2026-06-29) made bundling launch + # the app under Xvfb and hang forever, timing out the Linux legs (#4906). + # Seed the cache with the last known-good revision so the bundler never + # fetches the moving main-branch script. + - name: pin quick-sharun.sh for AppImage bundling (Linux) + if: matrix.config.release == 'linux' + run: | + set -euo pipefail + cache_dir="${XDG_CACHE_HOME:-$HOME/.cache}/tauri" + mkdir -p "$cache_dir" + curl -fsSL --retry 3 -o "$cache_dir/quick-sharun.sh" \ + "https://raw.githubusercontent.com/pkgforge-dev/Anylinux-AppImages/b3a9e985cdedf7efa81d172f182cd13983743147/useful-tools/quick-sharun.sh" + chmod +x "$cache_dir/quick-sharun.sh" + - name: build desktop bundles if: matrix.config.release != 'android' shell: bash + # A hung build must fail the STEP (step timeout -> job failure), not hit + # the job-level timeout: job timeouts report `cancelled`, which the + # assemble-manifest guard treats as run cancellation and skips promoting + # latest.json for ALL platforms (#4906). + timeout-minutes: 45 env: TAURI_BUNDLER_NEW_APPIMAGE_FORMAT: 'true' TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} @@ -244,6 +268,7 @@ jobs: - name: build and sign portable binaries (Windows only) if: matrix.config.os == 'windows-latest' shell: bash + timeout-minutes: 30 env: TAURI_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} TAURI_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 20f32f1b..0664447e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -320,6 +320,22 @@ jobs: if: matrix.config.release == 'linux' run: cargo install tauri-cli --git https://github.com/tauri-apps/tauri --branch feat/truly-portable-appimage --force + # The truly-portable AppImage bundler downloads quick-sharun.sh from + # Anylinux-AppImages@main ONLY when it is not already in the tauri tools + # cache. An upstream strace-mode change (2026-06-29) made bundling launch + # the app under Xvfb and hang forever (#4906). Seed the cache with the + # last known-good revision so the bundler never fetches the moving + # main-branch script. Keep in sync with nightly.yml. + - name: pin quick-sharun.sh for AppImage bundling (Linux) + if: matrix.config.release == 'linux' + run: | + set -euo pipefail + cache_dir="${XDG_CACHE_HOME:-$HOME/.cache}/tauri" + mkdir -p "$cache_dir" + curl -fsSL --retry 3 -o "$cache_dir/quick-sharun.sh" \ + "https://raw.githubusercontent.com/pkgforge-dev/Anylinux-AppImages/b3a9e985cdedf7efa81d172f182cd13983743147/useful-tools/quick-sharun.sh" + chmod +x "$cache_dir/quick-sharun.sh" + - uses: tauri-apps/tauri-action@1deb371b0cd8bd54025b384f1cd735e725c4060f # v1.0.0 id: tauri if: matrix.config.release != 'android'