#!/usr/bin/env bash
source "$(cd "$(dirname "$0")/.." && pwd)/scripts/_config.sh"
mode="debug"
archive=0
verbose=0
while [[ $# -gt 0 ]]; do
case "$1" in
--release) mode="release"; shift ;;
--archive) archive=1; shift ;;
--verbose) verbose=1; shift ;;
*) shift ;;
esac
done
log "=== Building flexui_engine HAR (mode=$mode) ==="
run_har_build() {
local build_mode="$1"
local build_flag=""
[ "$build_mode" = "release" ] && build_flag="-p buildMode=release"
local logfile="$REPO_ROOT/build/hvigor_har_${build_mode}.log"
mkdir -p "$REPO_ROOT/build"
if [ "$verbose" -eq 1 ]; then
"$HVIGORW" --mode module -p module=flexui_engine@default -p product=default $build_flag assembleHar --no-daemon 2>&1 | tee "$logfile"
else
"$HVIGORW" --mode module -p module=flexui_engine@default -p product=default $build_flag assembleHar --no-daemon > "$logfile" 2>&1
fi
local status=$?
if [ "$status" -ne 0 ]; then
err "hvigorw assembleHar failed (exit=$status). Full log: $logfile"
tail -50 "$logfile"
exit "$status"
fi
tail -5 "$logfile"
}
"$REPO_ROOT/scripts/build-jsfwk.sh" "$mode"
if [ "$mode" = "release" ]; then
map_file="$REPO_ROOT/flexui-engine/framework/ohos/src/main/resources/rawfile/flexui_jsfwk.js.map"
if [ -f "$map_file" ]; then
rm -f "$map_file"
log "Removed stale flexui_jsfwk.js.map (release build)"
fi
fi
log "Building flexui_engine HAR (hvigorw)..."
cd "$REPO_ROOT/flexui-engine"
run_har_build "$mode"
local_src="$REPO_ROOT/flexui-engine/framework/ohos/build/default/outputs/default/flexui_engine.har"
output_har="$REPO_ROOT/flexui-engine/output/flexui_engine.har"
if [ -f "$local_src" ]; then
mkdir -p "$(dirname "$output_har")"
cp "$local_src" "$output_har"
log "flexui_engine HAR → output/ ($(ls -lh "$output_har" | awk '{print $5}'))"
else
err "HAR not found at: $local_src"
exit 1
fi
agent_lib="$REPO_ROOT/ai-agent/libs/flexui_engine.har"
mkdir -p "$(dirname "$agent_lib")"
cp "$output_har" "$agent_lib"
log "HAR → ai-agent/libs/ ($(ls -lh "$agent_lib" | awk '{print $5}'))"
if [ "$archive" -eq 1 ]; then
if [ "$mode" != "release" ]; then
warn "--archive is intended for release builds. Skipping archive."
else
version=$(grep '"version"' "$REPO_ROOT/flexui-engine/framework/ohos/oh-package.json5" | sed -E 's/.*"version"\s*:\s*"([^"]+)".*/\1/')
if [ -z "$version" ]; then
err "Could not determine version from oh-package.json5"
exit 1
fi
log "Archiving release artifacts v$version..."
"$REPO_ROOT/scripts/archive-release.sh" "$version"
log "Building debug HAR for archive..."
RELEASE_HAR_BACKUP="$output_har.release"
cp "$output_har" "$RELEASE_HAR_BACKUP"
"$REPO_ROOT/scripts/build-jsfwk.sh" "debug"
log "Building debug flexui_engine HAR (hvigorw)..."
cd "$REPO_ROOT/flexui-engine"
run_har_build "debug"
local_src_debug="$REPO_ROOT/flexui-engine/framework/ohos/build/default/outputs/default/flexui_engine.har"
if [ -f "$local_src_debug" ]; then
cp "$local_src_debug" "$output_har"
fi
debug_har="$REPO_ROOT/flexui-engine/release/$version/flexui_engine-debug.har"
cp "$output_har" "$debug_har"
log "flexui_engine-debug.har ($(ls -lh "$debug_har" | awk '{print $5}')) → release/$version/"
cp "$RELEASE_HAR_BACKUP" "$output_har"
rm "$RELEASE_HAR_BACKUP"
log "Restored release HAR to output/"
fi
fi
log "=== build-engine complete ==="