mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-02 18:21:34 +00:00
Three defects that compounded into a test suite nobody could run and nobody was running. The suite has been red on main since 2026-07-20. `connect_frame_matches_gateway_schema` asserts a TLS-pinned connection advertises no capabilities, but #111933 wrote that assertion while caps held only inline-widgets, and #111920 made `agent-kind` unconditional the same day. No textual conflict, so both landed and the assertion has been wrong ever since. Pinning only withdraws inline widgets, so assert exactly that. `cargo test` could not run on macOS at all: tauri-plugin-notifications links a Swift static library, nothing adds an rpath for the Swift runtime, and every test binary aborted at load with `Library not loaded: @rpath/libswift_Concurrency.dylib`. Emit the rpath from build.rs. Neither surfaced because linux-app.yml never ran `cargo test` - it only checked formatting and built bundles. Run the suite on Linux, and upgrade the macOS job from `check` to `test` so link-time breakage like the rpath is caught at all; `check` never links, so it cannot see this class of failure.
140 lines
4.8 KiB
YAML
140 lines
4.8 KiB
YAML
name: Linux App
|
|
|
|
on:
|
|
pull_request:
|
|
paths:
|
|
- "apps/linux/**"
|
|
- ".github/workflows/linux-app.yml"
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: linux-app-${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
build:
|
|
name: Build Linux companion
|
|
# Match the release build base so PR artifacts have the same glibc floor.
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 30
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
with:
|
|
fetch-depth: 1
|
|
fetch-tags: false
|
|
persist-credentials: false
|
|
submodules: false
|
|
|
|
- name: Install Tauri system dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y --no-install-recommends \
|
|
build-essential \
|
|
curl \
|
|
file \
|
|
libayatana-appindicator3-dev \
|
|
librsvg2-dev \
|
|
libssl-dev \
|
|
libwebkit2gtk-4.1-dev \
|
|
libxdo-dev \
|
|
wget
|
|
|
|
- name: Install Rust
|
|
run: rustup toolchain install stable --profile minimal --component rustfmt
|
|
|
|
- name: Cache Cargo
|
|
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
|
with:
|
|
path: |
|
|
~/.cargo/registry
|
|
~/.cargo/git
|
|
apps/linux/src-tauri/target
|
|
key: linux-app-${{ runner.os }}-${{ hashFiles('apps/linux/src-tauri/Cargo.lock') }}
|
|
restore-keys: |
|
|
linux-app-${{ runner.os }}-
|
|
|
|
- name: Setup Node environment
|
|
uses: ./.github/actions/setup-node-env
|
|
with:
|
|
install-bun: "false"
|
|
install-deps: "false"
|
|
|
|
- name: Check Rust formatting
|
|
working-directory: apps/linux/src-tauri
|
|
run: cargo +stable fmt --check
|
|
|
|
- name: Run Rust tests
|
|
working-directory: apps/linux/src-tauri
|
|
run: cargo +stable test --locked --all-targets
|
|
|
|
- name: Build Linux companion bundles
|
|
working-directory: apps/linux/src-tauri
|
|
env:
|
|
# appimagetool strips fail on CI runners; Tauri documents NO_STRIP for Actions.
|
|
NO_STRIP: "true"
|
|
# PR builds have no TAURI_SIGNING_PRIVATE_KEY, and the configured updater
|
|
# pubkey makes the bundler hard-require it. Skip updater artifacts here;
|
|
# linux-app-release.yml builds the signed updater bundles.
|
|
run: pnpm dlx @tauri-apps/cli@2.11.4 build --bundles deb,appimage --config '{"bundle":{"createUpdaterArtifacts":false}}'
|
|
|
|
- name: Upload bundles
|
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
with:
|
|
name: openclaw-linux-companion
|
|
retention-days: 14
|
|
if-no-files-found: error
|
|
path: |
|
|
apps/linux/src-tauri/target/release/bundle/deb/*.deb
|
|
apps/linux/src-tauri/target/release/bundle/appimage/*.AppImage
|
|
|
|
test-macos:
|
|
name: Test macOS companion
|
|
# This app also ships macOS desktop-test bundles, but the only job that
|
|
# compiles them (linux-app-release.yml build_macos) runs behind a manual
|
|
# dispatch input. Without a per-PR check, a macOS-gated Tauri API can break
|
|
# the macOS target for weeks unnoticed - `WebviewWindowBuilder::transparent`
|
|
# did exactly that.
|
|
#
|
|
# macos-15, not macos-14: tauri-plugin-notifications' Swift sources use
|
|
# typed throws (`throws(FFIResult)`), which needs Swift 6. The macos-14
|
|
# image still ships Swift 5.x and fails to parse them.
|
|
runs-on: macos-15
|
|
timeout-minutes: 30
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
with:
|
|
fetch-depth: 1
|
|
fetch-tags: false
|
|
persist-credentials: false
|
|
submodules: false
|
|
|
|
- name: Install Rust
|
|
run: rustup toolchain install stable --profile minimal
|
|
|
|
- name: Cache Cargo
|
|
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
|
with:
|
|
path: |
|
|
~/.cargo/registry
|
|
~/.cargo/git
|
|
apps/linux/src-tauri/target
|
|
key: macos-app-${{ runner.os }}-${{ hashFiles('apps/linux/src-tauri/Cargo.lock') }}
|
|
restore-keys: |
|
|
macos-app-${{ runner.os }}-
|
|
|
|
- name: Test macOS companion
|
|
working-directory: apps/linux/src-tauri
|
|
# `test` rather than `check`: it additionally links and runs the
|
|
# binaries, which is the only way macOS link-time breakage (a missing
|
|
# Swift runtime rpath, say) shows up at all. `--all-targets` keeps the
|
|
# compile coverage `check --all-targets` used to give.
|
|
run: cargo +stable test --locked --all-targets
|