Promote main → release (conflict-resolved) (#5256)

Co-authored-by: YellowSnnowmann <167776381+YellowSnnowmann@users.noreply.github.com>
Co-authored-by: Steven Enamakel <31011319+senamakel@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Cyrus Gray <144336577+graycyrus@users.noreply.github.com>
Co-authored-by: Horst1993 <horst.w@gmicloud.ai>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: James Gentes <jgentes@users.noreply.github.com>
Co-authored-by: Sam <samrusani@users.noreply.github.com>
Co-authored-by: Sami Rusani <14844597+samrusani@users.noreply.github.com>
Co-authored-by: oxoxDev <164490987+oxoxDev@users.noreply.github.com>
Co-authored-by: Muhammad Ismail <78064250+myi1@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: nb213 <binyangzhu000@gmail.com>
Co-authored-by: binyangzhu000-sudo <224954946+binyangzhu000-sudo@users.noreply.github.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
Co-authored-by: CodeGhost21 <164498022+CodeGhost21@users.noreply.github.com>
Co-authored-by: sanil-23 <sanil@tinyhumans.ai>
Co-authored-by: M3gA-Mind <elvin@mahadao.com>
Co-authored-by: oxoxDev <oxoxdev@users.noreply.github.com>
Co-authored-by: mysma-9403 <64923976+mysma-9403@users.noreply.github.com>
Co-authored-by: mwakidenis <mwakidenice@gmail.com>
Co-authored-by: NgoQuocViet2001 <123613986+NgoQuocViet2001@users.noreply.github.com>
Co-authored-by: viet.ngo <viet.ngo@sotatek.com>
Co-authored-by: Maciej Myszkiewicz <mmyszkiewicz@bwcoders.com>
This commit is contained in:
Mega Mind
2026-07-29 04:21:25 +05:30
committed by GitHub
co-authored by YellowSnnowmann Steven Enamakel github-actions[bot] <github-actions[bot]@users.noreply.github.com> Cyrus Gray Horst1993 Cursor James Gentes Sam Sami Rusani oxoxDev Muhammad Ismail Claude Fable 5 nb213 binyangzhu000-sudo Steven Enamakel CodeGhost21 sanil-23 M3gA-Mind oxoxDev mysma-9403 mwakidenis NgoQuocViet2001 viet.ngo Maciej Myszkiewicz
parent 220e1a041c
commit 8ea875c13d
113 changed files with 3585 additions and 1893 deletions
+60
View File
@@ -0,0 +1,60 @@
#!/usr/bin/env bash
set -euo pipefail
target="${1:-x86_64-unknown-linux-gnu}"
forbidden='^(native-tls|openssl|openssl-sys) v'
check_world() {
local label="$1"
local manifest="$2"
local tree
tree="$(cargo tree --locked --manifest-path "$manifest" --target "$target" --prefix none)"
if [[ "$label" == core ]] &&
matches="$(printf '%s\n' "$tree" | grep -E "$forbidden")"; then
printf 'error: native TLS/OpenSSL dependencies found in %s for %s:\n%s\n' \
"$label" "$target" "$matches" >&2
exit 1
fi
# Tauri legitimately owns reqwest 0.13 for its dev proxy/updater. Sentry
# must never own that tree: OpenHuman supplies its reqwest 0.12 transport.
mapfile -t reqwest_013_versions < <(
printf '%s\n' "$tree" |
sed -nE 's/^reqwest v(0\.13\.[^ ]+).*/\1/p' |
sort -u
)
for version in "${reqwest_013_versions[@]}"; do
owners="$(
cargo tree --locked --manifest-path "$manifest" --target "$target" \
--invert "reqwest@$version" 2>/dev/null || true
)"
if printf '%s\n' "$owners" | grep -Eq '^sentry v'; then
printf 'error: Sentry owns reqwest %s in %s\n%s\n' \
"$version" "$label" "$owners" >&2
exit 1
fi
done
for package in native-tls openssl openssl-sys; do
owners="$(
cargo tree --locked --manifest-path "$manifest" --target "$target" \
--invert "$package" 2>/dev/null || true
)"
if printf '%s\n' "$owners" | grep -Eq '^sentry v'; then
printf 'error: Sentry owns %s in %s\n%s\n' \
"$package" "$label" "$owners" >&2
exit 1
fi
if [[ "$label" == tauri ]] &&
printf '%s\n' "$owners" | grep -Eq '^motosan-ai-oauth v'; then
printf 'error: motosan-ai-oauth owns %s in %s\n%s\n' \
"$package" "$label" "$owners" >&2
exit 1
fi
done
}
check_world core Cargo.toml
check_world tauri app/src-tauri/Cargo.toml
printf 'Linux TLS/Sentry dependency policy passed for both Cargo worlds (%s)\n' "$target"
@@ -158,6 +158,52 @@ smoke_extracted_apprun() {
[ -n "$secret_name" ] && unset_args+=(-u "$secret_name")
done < <(compgen -v OPENAI_ || true)
# ── D-Bus session bus for the smoke window ─────────────────────────────────
#
# A real desktop user always launches the AppImage inside a session that has a
# D-Bus session bus; a CI runner does not. `tauri-plugin-single-instance` calls
# `zbus::blocking::connection::Builder::session().unwrap()` in its `setup()`,
# so with no usable bus it panics before any window exists:
#
# thread 'main' panicked at plugins/single-instance/src/platform_impl/linux.rs:57
# called `Result::unwrap()` on an `Err` value:
# Address("unsupported transport 'disabled'")
#
# ...which is exactly how the Release Production ubuntu smoke failed (exit 101,
# actions/runs/30393949588). Chromium logs the same underlying condition as
# "Failed to connect to the bus: Could not parse server address".
#
# `app/scripts/e2e-run-session.sh` already solves this for the desktop e2e
# runner by starting a bus with `dbus-launch`; the AppImage smoke never got the
# same treatment. Wrapping in `dbus-run-session` is the modern equivalent and
# needs no explicit teardown — the bus dies with the wrapped command, so the
# 15s `timeout` still bounds everything.
#
# Echo the inherited value first: whether it arrives as `disabled`, `disabled:`
# or unset changes which code path the app takes, and the failing log gave us
# no way to tell.
echo "[appimage-runtime] Inherited DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS:-<unset>}"
# Always drop the inherited value: the wrapper below supplies a real one, and
# if no wrapper is available a poisoned `disabled` must not reach the app —
# with the variable absent the app's own `can_register_single_instance_plugin()`
# probe falls back to inspecting `$XDG_RUNTIME_DIR/bus`, whereas the literal
# string `disabled` is precisely what zbus refuses to parse.
unset_args+=(-u DBUS_SESSION_BUS_ADDRESS)
local -a dbus_wrapper=()
if command -v dbus-run-session >/dev/null 2>&1; then
dbus_wrapper=(dbus-run-session --)
echo "[appimage-runtime] Providing a session bus via dbus-run-session"
elif command -v dbus-launch >/dev/null 2>&1; then
# Older images ship dbus-launch (from dbus-x11) but not dbus-run-session.
dbus_wrapper=(dbus-launch --exit-with-session)
echo "[appimage-runtime] Providing a session bus via dbus-launch"
else
echo "[appimage-runtime] WARNING: neither dbus-run-session nor dbus-launch found;" \
"smoking without a session bus (single-instance will be skipped)"
fi
local status
if (
cd "$foreign_cwd"
@@ -170,6 +216,7 @@ smoke_extracted_apprun() {
XDG_CACHE_HOME="$smoke_cache" \
OPENHUMAN_CEF_PREWARM=0 \
OPENHUMAN_DISABLE_GPU=1 \
${dbus_wrapper[@]+"${dbus_wrapper[@]}"} \
"$appdir/AppRun"
) >"$log_file" 2>&1; then
status=0
@@ -197,6 +244,17 @@ smoke_extracted_apprun() {
forbidden=1
fi
# Name this failure explicitly. It exits 101 like any other Rust panic, and the
# generic "status 101" message sent the last investigation looking at the
# non-fatal `libcef.so => not found` ldd lines instead of the actual cause.
if grep -Eq "unsupported transport 'disabled'|single-instance/src/platform_impl/linux\.rs" \
"$log_file"; then
forbidden=1
echo "[appimage-runtime] Detected the single-instance D-Bus panic — the smoke" \
"environment has no usable session bus. Check the dbus-run-session wrapper" \
"above and that 'dbus'/'dbus-x11' are installed on the runner." >&2
fi
# The desktop process is expected to remain alive until timeout ends the
# startup window. An earlier clean exit is a failure as well as loader output.
if [ "$forbidden" -ne 0 ] || [ "$status" -ne 124 ]; then