Andrey Epifancev 6ea3740d5f fix(dsh): run.sh чинит dsh/bundle/hooks в worktree (#56)
При core.symlinks=false новый worktree получает dsh/bundle/hooks обычным
файлом с текстом ../../hooks, и пять guard-тестов падают на BLOCKED.
run.sh перед прогоном восстанавливает симлинк (печатает строку о починке),
каталог-копию принимает как есть, незнакомое содержимое — явный FAIL.

Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
2026-10-24 19:03:17 +04:00

31 lines
1.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Tests for the DSH port. Pure Node, no DSH runtime required.
set -euo pipefail
root="$(cd "$(dirname "$0")/../.." && pwd)"
cd "$root"
# `core.symlinks=false` checkouts materialize the tracked `dsh/bundle/hooks`
# symlink as a regular file containing "../../hooks". Repair it before the
# tests, otherwise five guard tests fail with BLOCKED instead of testing.
ensure_bundle_hooks() {
local link="$root/dsh/bundle/hooks"
[ -L "$link" ] && return 0 # symlink (or a repaired one)
[ -d "$link" ] && return 0 # published bundle: a real copy of hooks/
if [ -f "$link" ] && [ "$(cat "$link")" = "../../hooks" ]; then
rm -f "$link"
ln -s ../../hooks "$link"
echo "repaired dsh/bundle/hooks -> ../../hooks (core.symlinks=false checkout)"
return 0
fi
echo "FAIL: dsh/bundle/hooks is neither a symlink to ../../hooks nor a copy of hooks/" >&2
exit 2
}
ensure_bundle_hooks
for f in dsh/bundle/index.js dsh/bundle/command-role.js dsh/bundle/lib/*.js dsh/tests/*.mjs; do
node --check "$f"
done
node --test dsh/tests/*.test.mjs