Skip to content

Commit 4753c45

Browse files
author
mb
committed
fix(scripts): refine commit diff check and conflict marker detection in kimi-fork-update.sh
1 parent b77c174 commit 4753c45

1 file changed

Lines changed: 110 additions & 0 deletions

File tree

scripts/kimi-fork-update.sh

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
#!/usr/bin/env bash
2+
# kimi-fork-update.sh — SINGLE SOURCE für den update-kimi-code Workflow.
3+
# Host-aware: erkennt den Host und wählt die Fork-/Deploy-Pfade selbst.
4+
# Override via ENV: KIMI_FORK_REPO, KIMI_FORK_SYMLINK, KIMI_KIMI_BIN,
5+
# KIMI_UPSTREAM (default origin), KIMI_FORK (default creatiVision).
6+
# Bei unbekanntem Host (z. B. debian1) bricht das Skript ab und verlangt,
7+
# die Pfade per board/buzz bei debian1 zu erfragen und via ENV zu setzen.
8+
#
9+
# Logs: ~/.kimi-code/logs/fork-update.log
10+
set -euo pipefail
11+
12+
HOST=$(hostname)
13+
LOG_FILE="${KIMI_LOG_FILE:-$HOME/.kimi-code/logs/fork-update.log}"
14+
DIST_ENTRY="${KIMI_DIST_ENTRY:-apps/kimi-code/dist/main.mjs}"
15+
16+
# ---- Host-Pfadauflösung ----------------------------------------------------
17+
case "$HOST" in
18+
*laptop*|kimi-*)
19+
# kimi-laptop (Default)
20+
FORK_REPO="${KIMI_FORK_REPO:-/media/work-data/002_cv-projects/cv_ai_kimi-code-cli-fork}"
21+
REPO_DIR="${KIMI_FORK_SYMLINK:-/home/mb/.kimi-code-cli}"
22+
KIMI_BIN="${KIMI_KIMI_BIN:-$HOME/.kimi-code/bin/kimi}"
23+
;;
24+
*)
25+
# Fremder Host (debian1, agy, hermes): Pfade müssen explizit gesetzt sein.
26+
FORK_REPO="${KIMI_FORK_REPO:?Unbekannter Host $HOST: Pfade per board/buzz bei debian1 erfragen und KIMI_FORK_REPO setzen}"
27+
REPO_DIR="${KIMI_FORK_SYMLINK:-$FORK_REPO}"
28+
KIMI_BIN="${KIMI_KIMI_BIN:?Unbekannter Host $HOST: KIMI_KIMI_BIN setzen}"
29+
;;
30+
esac
31+
UPSTREAM="${KIMI_UPSTREAM:-origin}"
32+
FORK_REMOTE="${KIMI_FORK:-creatiVision}"
33+
BIN_DIR="$(dirname "$KIMI_BIN")"
34+
KIMI_BAK="$KIMI_BIN.bak"
35+
36+
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"; }
37+
38+
exec 3>&1 1>>"$LOG_FILE" 2>&1
39+
40+
log "=== kimi-fork-update ($HOST) gestartet ==="
41+
cd "$REPO_DIR"
42+
43+
# 1. Upstream fetchen
44+
log "Fetch upstream ($UPSTREAM)..."
45+
git fetch "$UPSTREAM" main
46+
47+
# 2. Neue Commits in Upstream?
48+
UPSTREAM_NEW=$(git log --oneline main.."$UPSTREAM/main" || true)
49+
if [ -z "$UPSTREAM_NEW" ]; then
50+
log "Keine neuen Upstream-Commits – kein Update nötig."
51+
log "=== kimi-fork-update beendet (keine Änderung) ==="
52+
exit 0
53+
fi
54+
log "Neue Upstream-Commits gefunden."
55+
56+
# 3. Fork main syncen (Achtung: hart reset!)
57+
git checkout main
58+
git reset --hard "$UPSTREAM/main"
59+
git push "$FORK_REMOTE" main --force
60+
log "Fork main gesynct."
61+
62+
# 4. Unsere 3 PR-Branches rebasen + pushen
63+
for BRANCH in fix/latest-with-prompt-cache fix/mcp-schema-limits fix/session-workdir-resume; do
64+
log "Rebase $BRANCH..."
65+
if git checkout "$BRANCH" 2>/dev/null; then
66+
if git rebase "$UPSTREAM/main"; then
67+
git push "$FORK_REMOTE" "$BRANCH" --force
68+
log "$BRANCH rebased und gepusht."
69+
else
70+
log "WARNUNG: Rebase $BRANCH fehlgeschlagen – breche ab."
71+
git rebase --abort 2>/dev/null || true
72+
exit 1
73+
fi
74+
else
75+
log "Branch $BRANCH existiert nicht – überspringe."
76+
fi
77+
done
78+
79+
# Sanity: echte Konflikt-Marker
80+
if git grep -nE '^(<<<<<<<|>>>>>>>)' -- apps/kimi-code/src packages/agent-core-v2/src 2>/dev/null; then
81+
log "FEHLER: Ungelöste Konflikt-Marker. Breche ab."
82+
exit 1
83+
fi
84+
85+
# 5. Merge der 3 in fork main
86+
git checkout main
87+
for BRANCH in fix/latest-with-prompt-cache fix/mcp-schema-limits fix/session-workdir-resume; do
88+
if git branch -a | grep -q "$BRANCH"; then
89+
git merge "$BRANCH" -m "chore: merge $BRANCH into fork main" || git merge --abort 2>/dev/null || true
90+
fi
91+
done
92+
93+
# 6. Install + Build
94+
pnpm install --no-frozen-lockfile || log "WARNUNG: pnpm install Warnungen."
95+
pnpm run build:packages
96+
pnpm --filter @moonshot-ai/kimi-code run build || { log "FEHLER: Build fehlgeschlagen."; exit 1; }
97+
98+
# 7. Deploy Wrapper (atomar)
99+
mkdir -p "$BIN_DIR"
100+
printf '#!/usr/bin/env node\nimport(%s)\n' "'$REPO_DIR/$DIST_ENTRY'" > /tmp/kimi.new
101+
chmod +x /tmp/kimi.new
102+
if [ -f "$KIMI_BIN" ] && [ ! -f "$KIMI_BAK" ]; then cp "$KIMI_BIN" "$KIMI_BAK" 2>/dev/null || true; fi
103+
mv -f /tmp/kimi.new "$KIMI_BIN"
104+
chmod +x "$KIMI_BIN"
105+
log "Wrapper geschrieben: $KIMI_BIN"
106+
107+
# 8. Fork main pushen
108+
git push "$FORK_REMOTE" main
109+
110+
log "=== kimi-fork-update ($HOST) erfolgreich abgeschlossen ==="

0 commit comments

Comments
 (0)