From 9949c57f8f17ac0688aa33f6160ac3bef2989899 Mon Sep 17 00:00:00 2001 From: Destin Moss Date: Sat, 23 May 2026 15:55:21 -0700 Subject: [PATCH 1/2] ci: install rpm + libarchive-tools on Linux runners before npm run build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #98 added rpm + pacman targets to electron-builder.yml without updating the CI workflows that run `npm run build` on ubuntu-latest. electron-builder shells out to fpm → bsdtar for the pacman target and to rpm for the rpm target — both binaries are not on the stock ubuntu-latest image. Result: every Desktop CI and Android CI run since 2026-05-20 (commit 4679cc89) has been red with `fpm process failed 1` / `bash exit 127` deep inside the pacman packaging step. desktop-release.yml already installs both packages (line 68); this commit mirrors that step into the four workflows that were missing it: - desktop-ci.yml (per-push verification) - android-ci.yml (bundleWebUi → build-web-ui.sh → npm run build) - android-test-build.yml (workflow_dispatch parity build) - desktop-test-build.yml (workflow_dispatch matrix; only Linux slot) No code or build-output change — purely a runner-environment fix. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/android-ci.yml | 12 ++++++++++++ .github/workflows/android-test-build.yml | 7 +++++++ .github/workflows/desktop-ci.yml | 11 +++++++++++ .github/workflows/desktop-test-build.yml | 7 +++++++ 4 files changed, 37 insertions(+) diff --git a/.github/workflows/android-ci.yml b/.github/workflows/android-ci.yml index 64dacb19..7709f0c4 100644 --- a/.github/workflows/android-ci.yml +++ b/.github/workflows/android-ci.yml @@ -32,6 +32,18 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@v4 + # bundleWebUi (a Gradle dep of preBuild) shells out to + # scripts/build-web-ui.sh, which runs `npm run build` in desktop/. That + # invokes electron-builder for ALL configured Linux targets + # (AppImage + deb + rpm + pacman), so the runner needs rpm + bsdtar + # even though Android doesn't consume the installers. PR #98 added + # pacman+rpm targets without updating this workflow; every Android CI + # run since 2026-05-20 has been red on bsdtar exit 127. + # libarchive-tools -> provides bsdtar (pacman target) + # rpm -> rpm target + - name: Install Linux build deps + run: sudo apt-get install -y rpm libarchive-tools + - name: Run unit tests run: ./gradlew test diff --git a/.github/workflows/android-test-build.yml b/.github/workflows/android-test-build.yml index f13ce88a..d33e7d72 100644 --- a/.github/workflows/android-test-build.yml +++ b/.github/workflows/android-test-build.yml @@ -26,6 +26,13 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@v4 + # build-web-ui.sh runs `npm run build` in desktop/, which invokes + # electron-builder for all configured Linux targets. Pacman needs + # bsdtar (libarchive-tools); rpm target needs the rpm package. See + # android-ci.yml for the full backstory on the PR #98 regression. + - name: Install Linux build deps + run: sudo apt-get install -y rpm libarchive-tools + # Build the full React UI so the APK has a working WebView. # bundleWebUi (Gradle preBuild dep) would do this too, but running # it explicitly here keeps this workflow's intent self-documenting. diff --git a/.github/workflows/desktop-ci.yml b/.github/workflows/desktop-ci.yml index fdc0d2f9..5757ba79 100644 --- a/.github/workflows/desktop-ci.yml +++ b/.github/workflows/desktop-ci.yml @@ -27,5 +27,16 @@ jobs: - name: Run tests run: npm test + # Must run BEFORE the build — electron-builder's deb/rpm/pacman packagers + # run inside `npm run build` (see desktop/electron-builder.yml linux.target). + # PR #98 added rpm + pacman targets without updating CI, so every Desktop + # CI run since 2026-05-20 (commit 4679cc89) has been red on the same + # bsdtar-missing failure. Mirror desktop-release.yml's setup step: + # libarchive-tools -> provides bsdtar, required by the pacman target + # rpm -> required by the rpm target + - name: Install Linux build deps + run: sudo apt-get install -y rpm libarchive-tools + working-directory: . + - name: Build run: npm run build diff --git a/.github/workflows/desktop-test-build.yml b/.github/workflows/desktop-test-build.yml index 0abb0a4e..39076ad5 100644 --- a/.github/workflows/desktop-test-build.yml +++ b/.github/workflows/desktop-test-build.yml @@ -39,6 +39,13 @@ jobs: - name: Run tests run: npm test + # Must run BEFORE the build — electron-builder's deb/rpm/pacman packagers + # run inside `npm run build`. See desktop-ci.yml for the PR #98 backstory. + - name: Install Linux build deps + if: runner.os == 'Linux' + run: sudo apt-get install -y rpm libarchive-tools + working-directory: . + - name: Build run: npm run build From 3bd1ebd1ee196a228c2c5beccafbaa5cf86fed42 Mon Sep 17 00:00:00 2001 From: Destin Moss Date: Sat, 23 May 2026 15:59:04 -0700 Subject: [PATCH 2/2] =?UTF-8?q?ci:=20apt-get=20update=20before=20install?= =?UTF-8?q?=20=E2=80=94=20fix=20stale=20index=20404=20on=20ubuntu-latest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First push of #101 hit a fresh failure: ubuntu-latest's cached package index pointed to libarchive-tools_3.7.2-2ubuntu0.6 but the mirror had already rolled to a newer version, so the bare apt-get install died with HTTP 404 / exit 100 in <20s. Prepend `apt-get update` so we always resolve against the current index. Applied to all four workflows touched in this PR. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/android-ci.yml | 5 ++++- .github/workflows/android-test-build.yml | 5 ++++- .github/workflows/desktop-ci.yml | 6 +++++- .github/workflows/desktop-test-build.yml | 5 ++++- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/.github/workflows/android-ci.yml b/.github/workflows/android-ci.yml index 7709f0c4..99d3eb64 100644 --- a/.github/workflows/android-ci.yml +++ b/.github/workflows/android-ci.yml @@ -42,7 +42,10 @@ jobs: # libarchive-tools -> provides bsdtar (pacman target) # rpm -> rpm target - name: Install Linux build deps - run: sudo apt-get install -y rpm libarchive-tools + # `apt-get update` prefix: the cached package index on ubuntu-latest + # often points to .deb versions that have rolled off the mirror, so + # a bare install hits HTTP 404 / exit 100. Refresh the index first. + run: sudo apt-get update && sudo apt-get install -y rpm libarchive-tools - name: Run unit tests run: ./gradlew test diff --git a/.github/workflows/android-test-build.yml b/.github/workflows/android-test-build.yml index d33e7d72..296a1b95 100644 --- a/.github/workflows/android-test-build.yml +++ b/.github/workflows/android-test-build.yml @@ -31,7 +31,10 @@ jobs: # bsdtar (libarchive-tools); rpm target needs the rpm package. See # android-ci.yml for the full backstory on the PR #98 regression. - name: Install Linux build deps - run: sudo apt-get install -y rpm libarchive-tools + # `apt-get update` prefix: the cached package index on ubuntu-latest + # often points to .deb versions that have rolled off the mirror, so + # a bare install hits HTTP 404 / exit 100. Refresh the index first. + run: sudo apt-get update && sudo apt-get install -y rpm libarchive-tools # Build the full React UI so the APK has a working WebView. # bundleWebUi (Gradle preBuild dep) would do this too, but running diff --git a/.github/workflows/desktop-ci.yml b/.github/workflows/desktop-ci.yml index 5757ba79..979f8143 100644 --- a/.github/workflows/desktop-ci.yml +++ b/.github/workflows/desktop-ci.yml @@ -35,7 +35,11 @@ jobs: # libarchive-tools -> provides bsdtar, required by the pacman target # rpm -> required by the rpm target - name: Install Linux build deps - run: sudo apt-get install -y rpm libarchive-tools + # apt-get update prefix: the cached package index on ubuntu-latest + # frequently points to .deb versions that have already rolled off + # the mirror, so a bare `install` fails with HTTP 404 / exit 100. + # Refresh the index first. + run: sudo apt-get update && sudo apt-get install -y rpm libarchive-tools working-directory: . - name: Build diff --git a/.github/workflows/desktop-test-build.yml b/.github/workflows/desktop-test-build.yml index 39076ad5..6216b11f 100644 --- a/.github/workflows/desktop-test-build.yml +++ b/.github/workflows/desktop-test-build.yml @@ -43,7 +43,10 @@ jobs: # run inside `npm run build`. See desktop-ci.yml for the PR #98 backstory. - name: Install Linux build deps if: runner.os == 'Linux' - run: sudo apt-get install -y rpm libarchive-tools + # `apt-get update` prefix: the cached package index on ubuntu-latest + # often points to .deb versions that have rolled off the mirror, so + # a bare install hits HTTP 404 / exit 100. Refresh the index first. + run: sudo apt-get update && sudo apt-get install -y rpm libarchive-tools working-directory: . - name: Build