Build staging desktop artifacts in debug profile (#1044)

This commit is contained in:
Mega Mind
2026-04-30 16:41:46 +05:30
committed by GitHub
parent 84d78145fd
commit 4997a239ec
2 changed files with 48 additions and 18 deletions
+33 -17
View File
@@ -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:
+15 -1
View File
@@ -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