chore: commit all pending changes
This commit is contained in:
@@ -5,6 +5,7 @@ RELEASE_VERSION="${RELEASE_VERSION:-20260518-7b32b21-11}"
|
||||
BASE_URL="${BASE_URL:-http://10.8.0.1/ai_deploy}"
|
||||
BUNDLE_NAME="${BUNDLE_NAME:-managed-portal-${RELEASE_VERSION}.zip}"
|
||||
WEIGHTS_ARCHIVE_NAME="${WEIGHTS_ARCHIVE_NAME:-people-flow-weights-${RELEASE_VERSION}.tar.gz}"
|
||||
YOLO_ARCHIVE_NAME="${YOLO_ARCHIVE_NAME:-people-flow-yolo11n-${RELEASE_VERSION}.tar.gz}"
|
||||
INSTALL_ROOT="${INSTALL_ROOT:-/opt/managed-portal-releases}"
|
||||
TARGET_DIR="${TARGET_DIR:-${INSTALL_ROOT}/managed-portal-${RELEASE_VERSION}}"
|
||||
SHARED_ROOT="${SHARED_ROOT:-${INSTALL_ROOT}/shared}"
|
||||
@@ -92,6 +93,27 @@ dir_has_payload_files() {
|
||||
[ -d "$directory" ] && [ -n "$(find "$directory" -type f ! -name '.gitkeep' -print -quit 2>/dev/null)" ]
|
||||
}
|
||||
|
||||
people_flow_weights_complete() {
|
||||
directory="$1"
|
||||
|
||||
people_flow_deepface_weights_complete "$directory" &&
|
||||
people_flow_yolo_weight_present "$directory"
|
||||
}
|
||||
|
||||
people_flow_deepface_weights_complete() {
|
||||
directory="$1"
|
||||
|
||||
[ -f "$directory/deepface/age_model_weights.h5" ] &&
|
||||
[ -f "$directory/deepface/gender_model_weights.h5" ] &&
|
||||
[ -f "$directory/deepface/retinaface.h5" ]
|
||||
}
|
||||
|
||||
people_flow_yolo_weight_present() {
|
||||
directory="$1"
|
||||
|
||||
[ -f "$directory/yolo11n.pt" ]
|
||||
}
|
||||
|
||||
copy_dir_contents() {
|
||||
source_dir="$1"
|
||||
target_dir="$2"
|
||||
@@ -120,6 +142,16 @@ download_weights_archive() {
|
||||
echo "$weights_archive"
|
||||
}
|
||||
|
||||
download_yolo_archive() {
|
||||
tmp_dir="$1"
|
||||
yolo_archive="$tmp_dir/$YOLO_ARCHIVE_NAME"
|
||||
yolo_url="${BASE_URL%/}/$YOLO_ARCHIVE_NAME"
|
||||
|
||||
echo "downloading $yolo_url" >&2
|
||||
curl -fL "$yolo_url" -o "$yolo_archive"
|
||||
echo "$yolo_archive"
|
||||
}
|
||||
|
||||
build_overlay_image() {
|
||||
overlay_name="$1"
|
||||
base_image="$2"
|
||||
@@ -163,7 +195,7 @@ ensure_runtime_directories() {
|
||||
}
|
||||
|
||||
find_existing_people_flow_weights() {
|
||||
if dir_has_files "$MANAGED_PEOPLE_FLOW_WEIGHTS_DIR"; then
|
||||
if people_flow_weights_complete "$MANAGED_PEOPLE_FLOW_WEIGHTS_DIR"; then
|
||||
printf '%s\n' "$MANAGED_PEOPLE_FLOW_WEIGHTS_DIR"
|
||||
return 0
|
||||
fi
|
||||
@@ -173,7 +205,32 @@ find_existing_people_flow_weights() {
|
||||
continue
|
||||
fi
|
||||
|
||||
if dir_has_files "$candidate"; then
|
||||
if people_flow_weights_complete "$candidate"; then
|
||||
printf '%s\n' "$candidate"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
find_existing_people_flow_deepface_weights() {
|
||||
if people_flow_deepface_weights_complete "$MANAGED_PEOPLE_FLOW_WEIGHTS_DIR"; then
|
||||
printf '%s\n' "$MANAGED_PEOPLE_FLOW_WEIGHTS_DIR"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if people_flow_deepface_weights_complete "$TARGET_DIR/managed/people_flow_project/weights"; then
|
||||
printf '%s\n' "$TARGET_DIR/managed/people_flow_project/weights"
|
||||
return 0
|
||||
fi
|
||||
|
||||
for candidate in "$INSTALL_ROOT"/managed-portal-*/managed/people_flow_project/weights; do
|
||||
if [ "$candidate" = "$TARGET_DIR/managed/people_flow_project/weights" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if people_flow_deepface_weights_complete "$candidate"; then
|
||||
printf '%s\n' "$candidate"
|
||||
return 0
|
||||
fi
|
||||
@@ -190,28 +247,63 @@ extract_people_flow_weights_archive() {
|
||||
mkdir -p "$TARGET_DIR/managed"
|
||||
tar -xzf "$weights_archive" -C "$TARGET_DIR/managed"
|
||||
|
||||
if ! dir_has_payload_files "$bundle_weights_dir"; then
|
||||
echo "downloaded weights archive did not populate $bundle_weights_dir" >&2
|
||||
if ! people_flow_weights_complete "$bundle_weights_dir"; then
|
||||
echo "downloaded weights archive did not populate all required people-flow weights under $bundle_weights_dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
printf '%s\n' "$bundle_weights_dir"
|
||||
}
|
||||
|
||||
ensure_people_flow_yolo_weight() {
|
||||
tmp_dir="$1"
|
||||
target_weights_dir="$2"
|
||||
|
||||
if people_flow_yolo_weight_present "$target_weights_dir"; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
yolo_extract_dir="$tmp_dir/yolo"
|
||||
yolo_archive="$(download_yolo_archive "$tmp_dir")"
|
||||
rm -rf "$yolo_extract_dir"
|
||||
mkdir -p "$yolo_extract_dir"
|
||||
tar -xzf "$yolo_archive" -C "$yolo_extract_dir"
|
||||
|
||||
yolo_file="$yolo_extract_dir/people_flow_project/weights/yolo11n.pt"
|
||||
if [ ! -f "$yolo_file" ]; then
|
||||
echo "downloaded yolo archive did not populate people_flow_project/weights/yolo11n.pt" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$target_weights_dir"
|
||||
cp "$yolo_file" "$target_weights_dir/yolo11n.pt"
|
||||
}
|
||||
|
||||
prepare_people_flow_weights() {
|
||||
tmp_dir="$1"
|
||||
bundle_weights_dir="$TARGET_DIR/managed/people_flow_project/weights"
|
||||
source_weights_dir=""
|
||||
deepface_weights_dir=""
|
||||
|
||||
if dir_has_payload_files "$bundle_weights_dir"; then
|
||||
if people_flow_weights_complete "$bundle_weights_dir"; then
|
||||
source_weights_dir="$bundle_weights_dir"
|
||||
echo "seeding shared people-flow weights from bundle" >&2
|
||||
elif source_weights_dir="$(find_existing_people_flow_weights 2>/dev/null)"; then
|
||||
echo "reusing existing people-flow weights from $source_weights_dir" >&2
|
||||
elif deepface_weights_dir="$(find_existing_people_flow_deepface_weights 2>/dev/null)"; then
|
||||
echo "reusing existing people-flow DeepFace weights from $deepface_weights_dir" >&2
|
||||
|
||||
if [ "$deepface_weights_dir" != "$MANAGED_PEOPLE_FLOW_WEIGHTS_DIR" ]; then
|
||||
rm -rf "$MANAGED_PEOPLE_FLOW_WEIGHTS_DIR"
|
||||
copy_dir_contents "$deepface_weights_dir" "$MANAGED_PEOPLE_FLOW_WEIGHTS_DIR"
|
||||
fi
|
||||
|
||||
ensure_people_flow_yolo_weight "$tmp_dir" "$MANAGED_PEOPLE_FLOW_WEIGHTS_DIR"
|
||||
source_weights_dir="$MANAGED_PEOPLE_FLOW_WEIGHTS_DIR"
|
||||
elif source_weights_dir="$(extract_people_flow_weights_archive "$tmp_dir" 2>/dev/null)"; then
|
||||
echo "seeding shared people-flow weights from downloaded archive" >&2
|
||||
else
|
||||
echo "people-flow weights not found; seed $MANAGED_PEOPLE_FLOW_WEIGHTS_DIR, publish $WEIGHTS_ARCHIVE_NAME, or include managed/people_flow_project/weights in the release zip" >&2
|
||||
echo "people-flow weights not found; seed $MANAGED_PEOPLE_FLOW_WEIGHTS_DIR, publish $WEIGHTS_ARCHIVE_NAME and $YOLO_ARCHIVE_NAME, or include managed/people_flow_project/weights in the release zip" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -220,6 +312,11 @@ prepare_people_flow_weights() {
|
||||
copy_dir_contents "$source_weights_dir" "$MANAGED_PEOPLE_FLOW_WEIGHTS_DIR"
|
||||
fi
|
||||
|
||||
if ! people_flow_weights_complete "$MANAGED_PEOPLE_FLOW_WEIGHTS_DIR"; then
|
||||
echo "people-flow weights are incomplete under $MANAGED_PEOPLE_FLOW_WEIGHTS_DIR" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rm -rf "$bundle_weights_dir"
|
||||
mkdir -p "$(dirname "$bundle_weights_dir")"
|
||||
ln -s "$MANAGED_PEOPLE_FLOW_WEIGHTS_DIR" "$bundle_weights_dir"
|
||||
|
||||
@@ -11,10 +11,13 @@ OUTPUT_DIR="${OUTPUT_DIR:-$REPO_ROOT/dist/ota}"
|
||||
STAGE_DIR="${OUTPUT_DIR}/managed-portal-${RELEASE_VERSION}"
|
||||
BUNDLE_PATH="${OUTPUT_DIR}/managed-portal-${RELEASE_VERSION}.zip"
|
||||
INSTALLER_PATH="${OUTPUT_DIR}/install-managed-portal-${RELEASE_VERSION}.sh"
|
||||
LATEST_INSTALLER_PATH="${OUTPUT_DIR}/install-managed-portal-Latest.sh"
|
||||
LOWERCASE_LATEST_INSTALLER_PATH="${OUTPUT_DIR}/install-managed-portal-latest.sh"
|
||||
INCLUDE_WEIGHTS="${INCLUDE_WEIGHTS:-0}"
|
||||
GENERATE_WEIGHTS_ARCHIVE="${GENERATE_WEIGHTS_ARCHIVE:-1}"
|
||||
PEOPLE_FLOW_WEIGHTS_SOURCE="${PEOPLE_FLOW_WEIGHTS_SOURCE:-$REPO_ROOT/managed/people_flow_project/weights}"
|
||||
WEIGHTS_ARCHIVE_PATH="${OUTPUT_DIR}/people-flow-weights-${RELEASE_VERSION}.tar.gz"
|
||||
YOLO_ARCHIVE_PATH="${OUTPUT_DIR}/people-flow-yolo11n-${RELEASE_VERSION}.tar.gz"
|
||||
|
||||
require_path() {
|
||||
target="$1"
|
||||
@@ -113,6 +116,9 @@ content = re.sub(
|
||||
target_path.write_text(content, encoding="utf-8")
|
||||
target_path.chmod(0o755)
|
||||
PY
|
||||
cp "$INSTALLER_PATH" "$LATEST_INSTALLER_PATH"
|
||||
cp "$INSTALLER_PATH" "$LOWERCASE_LATEST_INSTALLER_PATH"
|
||||
chmod 755 "$LATEST_INSTALLER_PATH" "$LOWERCASE_LATEST_INSTALLER_PATH"
|
||||
|
||||
if [ "$GENERATE_WEIGHTS_ARCHIVE" = "1" ] && dir_has_payload_files "$PEOPLE_FLOW_WEIGHTS_SOURCE"; then
|
||||
python3 - "$PEOPLE_FLOW_WEIGHTS_SOURCE" "$WEIGHTS_ARCHIVE_PATH" <<'PY'
|
||||
@@ -135,8 +141,26 @@ with tarfile.open(archive_path, "w:gz") as archive:
|
||||
PY
|
||||
fi
|
||||
|
||||
if [ "$GENERATE_WEIGHTS_ARCHIVE" = "1" ] && [ -f "$PEOPLE_FLOW_WEIGHTS_SOURCE/yolo11n.pt" ]; then
|
||||
python3 - "$PEOPLE_FLOW_WEIGHTS_SOURCE/yolo11n.pt" "$YOLO_ARCHIVE_PATH" <<'PY'
|
||||
from pathlib import Path
|
||||
import sys
|
||||
import tarfile
|
||||
|
||||
source_path = Path(sys.argv[1])
|
||||
archive_path = Path(sys.argv[2])
|
||||
|
||||
if archive_path.exists():
|
||||
archive_path.unlink()
|
||||
|
||||
with tarfile.open(archive_path, "w:gz") as archive:
|
||||
archive.add(source_path, arcname="people_flow_project/weights/yolo11n.pt", recursive=False)
|
||||
PY
|
||||
fi
|
||||
|
||||
echo "OTA bundle created: $BUNDLE_PATH"
|
||||
echo "Versioned installer created: $INSTALLER_PATH"
|
||||
echo "Latest installers created: $LATEST_INSTALLER_PATH and $LOWERCASE_LATEST_INSTALLER_PATH"
|
||||
if [ "$INCLUDE_WEIGHTS" = "1" ]; then
|
||||
echo "Bundle includes managed/people_flow_project/weights"
|
||||
else
|
||||
@@ -147,3 +171,8 @@ if [ "$GENERATE_WEIGHTS_ARCHIVE" = "1" ] && dir_has_payload_files "$PEOPLE_FLOW_
|
||||
else
|
||||
echo "Separate weights archive skipped; no people-flow weights payload found under $PEOPLE_FLOW_WEIGHTS_SOURCE"
|
||||
fi
|
||||
if [ "$GENERATE_WEIGHTS_ARCHIVE" = "1" ] && [ -f "$PEOPLE_FLOW_WEIGHTS_SOURCE/yolo11n.pt" ]; then
|
||||
echo "Separate YOLO archive created: $YOLO_ARCHIVE_PATH"
|
||||
else
|
||||
echo "Separate YOLO archive skipped; no yolo11n.pt found under $PEOPLE_FLOW_WEIGHTS_SOURCE"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user