mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-27 21:08:00 +00:00
Build staging desktop artifacts in debug profile (#1044)
This commit is contained in:
@@ -288,8 +288,8 @@ jobs:
|
||||
run: |
|
||||
set +e
|
||||
for BIN in \
|
||||
app/src-tauri/target/${{ matrix.settings.target }}/release/OpenHuman \
|
||||
target/${{ matrix.settings.target }}/release/OpenHuman; do
|
||||
app/src-tauri/target/${{ matrix.settings.target }}/${{ inputs.build_target == 'staging' && 'debug' || 'release' }}/OpenHuman \
|
||||
target/${{ matrix.settings.target }}/${{ inputs.build_target == 'staging' && 'debug' || 'release' }}/OpenHuman; do
|
||||
if [ -x "$BIN" ]; then
|
||||
echo "ldd $BIN"
|
||||
ldd "$BIN" | grep 'not found' || echo " all resolved"
|
||||
@@ -443,24 +443,35 @@ jobs:
|
||||
fi
|
||||
SIDE_CAR_BASE="$(node -e "const fs=require('fs');const c=JSON.parse(fs.readFileSync('app/src-tauri/tauri.conf.json','utf8'));const b=(c.bundle&&Array.isArray(c.bundle.externalBin)&&c.bundle.externalBin[0])||'binaries/openhuman-core';process.stdout.write(String(b).split('/').pop());")"
|
||||
CORE_BIN_NAME="${SIDE_CAR_BASE}"
|
||||
BUILD_PROFILE="${BUILD_PROFILE:-release}"
|
||||
echo "core_dir=$CORE_DIR" >> "$GITHUB_OUTPUT"
|
||||
echo "core_manifest=$CORE_DIR/Cargo.toml" >> "$GITHUB_OUTPUT"
|
||||
# Cargo workspace: release artifacts are under repo root target/, not <member>/target/
|
||||
echo "core_target_dir=target/$MATRIX_TARGET/release" >> "$GITHUB_OUTPUT"
|
||||
# Cargo workspace artifacts are under repo root target/, not <member>/target/
|
||||
echo "core_target_dir=target/$MATRIX_TARGET/$BUILD_PROFILE" >> "$GITHUB_OUTPUT"
|
||||
echo "build_profile=$BUILD_PROFILE" >> "$GITHUB_OUTPUT"
|
||||
echo "core_bin_name=$CORE_BIN_NAME" >> "$GITHUB_OUTPUT"
|
||||
echo "sidecar_base=$SIDE_CAR_BASE" >> "$GITHUB_OUTPUT"
|
||||
env:
|
||||
MATRIX_TARGET: ${{ matrix.settings.target }}
|
||||
BUILD_PROFILE: ${{ inputs.build_target == 'staging' && 'debug' || 'release' }}
|
||||
- name: Build sidecar core binary
|
||||
shell: bash
|
||||
run: |
|
||||
cargo build \
|
||||
--manifest-path "$CORE_MANIFEST" \
|
||||
--release \
|
||||
--target "$MATRIX_TARGET" \
|
||||
--bin "$CORE_BIN_NAME"
|
||||
if [ "$BUILD_PROFILE" = "release" ]; then
|
||||
cargo build \
|
||||
--manifest-path "$CORE_MANIFEST" \
|
||||
--release \
|
||||
--target "$MATRIX_TARGET" \
|
||||
--bin "$CORE_BIN_NAME"
|
||||
else
|
||||
cargo build \
|
||||
--manifest-path "$CORE_MANIFEST" \
|
||||
--target "$MATRIX_TARGET" \
|
||||
--bin "$CORE_BIN_NAME"
|
||||
fi
|
||||
env:
|
||||
MATRIX_TARGET: ${{ matrix.settings.target }}
|
||||
BUILD_PROFILE: ${{ steps.core-paths.outputs.build_profile }}
|
||||
CORE_MANIFEST: ${{ steps.core-paths.outputs.core_manifest }}
|
||||
CORE_BIN_NAME: ${{ steps.core-paths.outputs.core_bin_name }}
|
||||
OPENHUMAN_APP_ENV: ${{ inputs.build_target == 'staging' && 'staging' || 'production' }}
|
||||
@@ -552,7 +563,11 @@ jobs:
|
||||
# Inline NODE_OPTIONS so it reaches the vite child spawned by
|
||||
# beforeBuildCommand. Step-level env was observed not to propagate
|
||||
# on macos-arm64 runners, causing OOM at node's ~2GB auto default.
|
||||
NODE_OPTIONS="--max-old-space-size=8192" cargo tauri build -c "$TAURI_CONFIG_OVERRIDE" $MATRIX_ARGS
|
||||
if [ "${{ inputs.build_target }}" = "staging" ]; then
|
||||
NODE_OPTIONS="--max-old-space-size=8192" cargo tauri build --debug -c "$TAURI_CONFIG_OVERRIDE" $MATRIX_ARGS
|
||||
else
|
||||
NODE_OPTIONS="--max-old-space-size=8192" cargo tauri build -c "$TAURI_CONFIG_OVERRIDE" $MATRIX_ARGS
|
||||
fi
|
||||
|
||||
# Upload Rust debug info to Sentry so backend + Tauri-shell stack traces
|
||||
# symbolicate in production. The frontend source maps are handled by
|
||||
@@ -629,12 +644,13 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
TAG: ${{ needs.prepare-build.outputs.tag }}
|
||||
MATRIX_TARGET: ${{ matrix.settings.target }}
|
||||
BUILD_PROFILE: ${{ inputs.build_target == 'staging' && 'debug' || 'release' }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
shopt -s nullglob
|
||||
BUNDLE_ROOTS=(
|
||||
"app/src-tauri/target/${MATRIX_TARGET}/release/bundle"
|
||||
"target/${MATRIX_TARGET}/release/bundle"
|
||||
"app/src-tauri/target/${MATRIX_TARGET}/${BUILD_PROFILE}/bundle"
|
||||
"target/${MATRIX_TARGET}/${BUILD_PROFILE}/bundle"
|
||||
)
|
||||
UPLOAD=()
|
||||
for root in "${BUNDLE_ROOTS[@]}"; do
|
||||
@@ -667,8 +683,8 @@ jobs:
|
||||
# depending on workspace config — search both
|
||||
APP_PATH=""
|
||||
for candidate in \
|
||||
"app/src-tauri/target/${{ matrix.settings.target }}/release/bundle/macos/OpenHuman.app" \
|
||||
"target/${{ matrix.settings.target }}/release/bundle/macos/OpenHuman.app"; do
|
||||
"app/src-tauri/target/${{ matrix.settings.target }}/${{ inputs.build_target == 'staging' && 'debug' || 'release' }}/bundle/macos/OpenHuman.app" \
|
||||
"target/${{ matrix.settings.target }}/${{ inputs.build_target == 'staging' && 'debug' || 'release' }}/bundle/macos/OpenHuman.app"; do
|
||||
if [ -d "$candidate" ]; then
|
||||
APP_PATH="$candidate"
|
||||
break
|
||||
@@ -677,7 +693,7 @@ jobs:
|
||||
|
||||
# Fallback: search for it
|
||||
if [ -z "$APP_PATH" ]; then
|
||||
APP_PATH="$(find . -path '*/release/bundle/macos/OpenHuman.app' -type d 2>/dev/null | head -1)"
|
||||
APP_PATH="$(find . -path "*/${{ inputs.build_target == 'staging' && 'debug' || 'release' }}/bundle/macos/OpenHuman.app" -type d 2>/dev/null | head -1)"
|
||||
fi
|
||||
if [ -z "$APP_PATH" ]; then
|
||||
echo "ERROR: Could not find OpenHuman.app bundle anywhere"
|
||||
@@ -810,8 +826,8 @@ jobs:
|
||||
desktop-bundles-${{ matrix.settings.platform }}-${{ matrix.settings.artifact_suffix
|
||||
}}
|
||||
path: |
|
||||
app/src-tauri/target/${{ matrix.settings.target }}/release/bundle/**
|
||||
target/${{ matrix.settings.target }}/release/bundle/**
|
||||
app/src-tauri/target/${{ matrix.settings.target }}/${{ inputs.build_target == 'staging' && 'debug' || 'release' }}/bundle/**
|
||||
target/${{ matrix.settings.target }}/${{ inputs.build_target == 'staging' && 'debug' || 'release' }}/bundle/**
|
||||
- name: Upload standalone CLI artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
|
||||
@@ -6,6 +6,15 @@ use super::{
|
||||
};
|
||||
use std::io::Write;
|
||||
use std::path::PathBuf;
|
||||
use std::sync::{Mutex, MutexGuard, OnceLock};
|
||||
|
||||
fn env_lock() -> MutexGuard<'static, ()> {
|
||||
static ENV_LOCK: OnceLock<Mutex<()>> = OnceLock::new();
|
||||
ENV_LOCK
|
||||
.get_or_init(|| Mutex::new(()))
|
||||
.lock()
|
||||
.expect("env lock poisoned")
|
||||
}
|
||||
|
||||
struct EnvGuard {
|
||||
key: &'static str,
|
||||
@@ -38,6 +47,7 @@ impl Drop for EnvGuard {
|
||||
|
||||
#[test]
|
||||
fn default_core_run_mode_env_parsing() {
|
||||
let _env_lock = env_lock();
|
||||
let _unset = EnvGuard::unset("OPENHUMAN_CORE_RUN_MODE");
|
||||
assert_eq!(default_core_run_mode(false), CoreRunMode::ChildProcess);
|
||||
|
||||
@@ -50,6 +60,7 @@ fn default_core_run_mode_env_parsing() {
|
||||
|
||||
#[test]
|
||||
fn default_core_port_env_and_fallback() {
|
||||
let _env_lock = env_lock();
|
||||
let _unset = EnvGuard::unset("OPENHUMAN_CORE_PORT");
|
||||
assert_eq!(default_core_port(), 7788);
|
||||
|
||||
@@ -109,6 +120,7 @@ fn same_executable_path_handles_symlinks() {
|
||||
// Tests for default_core_bin() - PR: make linux CEF deb package runnable
|
||||
#[test]
|
||||
fn default_core_bin_env_override_takes_precedence() {
|
||||
let _env_lock = env_lock();
|
||||
let temp_dir = std::env::temp_dir().join("openhuman-core-test-");
|
||||
let _ = std::fs::remove_dir_all(&temp_dir);
|
||||
std::fs::create_dir_all(&temp_dir).expect("create temp dir");
|
||||
@@ -138,11 +150,11 @@ fn default_core_bin_env_override_takes_precedence() {
|
||||
|
||||
// Cleanup
|
||||
let _ = std::fs::remove_dir_all(&temp_dir);
|
||||
std::env::remove_var("OPENHUMAN_CORE_BIN");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn default_core_bin_env_override_nonexistent_warns() {
|
||||
let _env_lock = env_lock();
|
||||
let _guard = EnvGuard::set("OPENHUMAN_CORE_BIN", "/nonexistent/path/openhuman-core");
|
||||
|
||||
let _result = default_core_bin();
|
||||
@@ -154,6 +166,7 @@ fn default_core_bin_env_override_nonexistent_warns() {
|
||||
|
||||
#[test]
|
||||
fn default_core_bin_returns_none_when_no_binary_found() {
|
||||
let _env_lock = env_lock();
|
||||
// Clear env override
|
||||
let _guard = EnvGuard::unset("OPENHUMAN_CORE_BIN");
|
||||
|
||||
@@ -166,6 +179,7 @@ fn default_core_bin_returns_none_when_no_binary_found() {
|
||||
|
||||
#[test]
|
||||
fn default_core_bin_prefers_staged_sidecar_in_dev() {
|
||||
let _env_lock = env_lock();
|
||||
// This test verifies the dev build behavior where we look for
|
||||
// staged binaries in src-tauri/binaries
|
||||
// In test mode (debug_assertions), this path is checked
|
||||
|
||||
Reference in New Issue
Block a user