Files
hkuds--openharness/scripts/sync_nanobot_channels.sh
wehub-resource-sync 0418dc5cf9
CI / Python tests (3.10) (push) Has been cancelled
CI / Python tests (3.11) (push) Has been cancelled
CI / Python quality (push) Has been cancelled
CI / Frontend typecheck (push) Has been cancelled
Autopilot Pages / deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:45:00 +08:00

91 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# sync_nanobot_channels.sh — diff and optionally apply upstream nanobot changes
#
# Usage:
# ./scripts/sync_nanobot_channels.sh [--apply] [--nanobot-dir DIR]
#
# Without --apply: shows a diff between the recorded upstream commit and HEAD.
# With --apply: copies updated files, rewrites imports, and updates UPSTREAM.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
UPSTREAM_FILE="$REPO_ROOT/src/openharness/channels/UPSTREAM"
CHANNELS_DEST="$REPO_ROOT/src/openharness/channels"
# ---------- parse args ----------
APPLY=false
NANOBOT_DIR="${NANOBOT_DIR:-$HOME/nanobot}"
while [[ $# -gt 0 ]]; do
case "$1" in
--apply) APPLY=true; shift ;;
--nanobot-dir) NANOBOT_DIR="$2"; shift 2 ;;
*) echo "Unknown arg: $1" >&2; exit 1 ;;
esac
done
# ---------- read recorded commit ----------
OLD_COMMIT=$(grep '^commit:' "$UPSTREAM_FILE" | awk '{print $2}')
echo "Upstream UPSTREAM commit : $OLD_COMMIT"
cd "$NANOBOT_DIR"
NEW_COMMIT=$(git rev-parse HEAD)
echo "Nanobot HEAD : $NEW_COMMIT"
if [[ "$OLD_COMMIT" == "$NEW_COMMIT" ]]; then
echo "Already up-to-date."
exit 0
fi
# ---------- show diff ----------
echo ""
echo "=== diff nanobot/bus/ ==="
git diff "$OLD_COMMIT".."$NEW_COMMIT" -- nanobot/bus/ || true
echo ""
echo "=== diff nanobot/channels/ ==="
git diff "$OLD_COMMIT".."$NEW_COMMIT" -- nanobot/channels/ || true
if [[ "$APPLY" == false ]]; then
echo ""
echo "Run with --apply to apply these changes."
exit 0
fi
# ---------- apply ----------
echo ""
echo "Applying changes..."
# Copy files
cp nanobot/bus/events.py "$CHANNELS_DEST/bus/events.py"
cp nanobot/bus/queue.py "$CHANNELS_DEST/bus/queue.py"
for f in nanobot/channels/*.py; do
fname="$(basename "$f")"
[[ "$fname" == "__init__.py" ]] && continue
cp "$f" "$CHANNELS_DEST/impl/$fname"
done
# Rewrite imports
for f in "$CHANNELS_DEST/bus/"*.py "$CHANNELS_DEST/impl/"*.py; do
sed -i \
-e 's/from nanobot\.bus\./from openharness.channels.bus./g' \
-e 's/from nanobot\.channels\./from openharness.channels.impl./g' \
-e 's/from nanobot\.config\.schema import/from openharness.config.schema import/g' \
-e 's/from nanobot\.utils\.helpers import/from openharness.utils.helpers import/g' \
-e 's/from nanobot\.config\.loader import/from openharness.config.loader import/g' \
"$f"
# Replace loguru
sed -i \
's/^from loguru import logger$/import logging\nlogger = logging.getLogger(__name__)/' \
"$f"
done
# Update UPSTREAM
SYNC_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
sed -i "s/^commit: .*/commit: $NEW_COMMIT/" "$UPSTREAM_FILE"
sed -i "s/^synced: .*/synced: $SYNC_TIME/" "$UPSTREAM_FILE"
echo "Done. Updated UPSTREAM to $NEW_COMMIT (synced $SYNC_TIME)"