verify-refactor.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #!/usr/bin/env bash
  2. # 验证重构后的端到端流水线(CLI → runDocument → text/audio/renderer → 导出 → OSS → 飞书)。
  3. #
  4. # 用法(在仓库根目录):
  5. # ./scripts/verify-refactor.sh # 默认:github-trending / bilibili / source 采集
  6. # TEMPLATE=github-trending PLATFORM=bilibili SOURCE=github-trending ./scripts/verify-refactor.sh
  7. # INPUT=test/fixtures/sample-knowledge.json TEMPLATE=knowledge ./scripts/verify-refactor.sh # 用本地输入文件
  8. # NO_TTS=1 ./scripts/verify-refactor.sh # 跳过 TTS(静音视频,用于只验布局)
  9. # NO_PUBLISH=1 ./scripts/verify-refactor.sh # 跳过 OSS/飞书
  10. # SKIP_BUILD=1 ./scripts/verify-refactor.sh # 跳过 pnpm build(dist 已是最新时)
  11. #
  12. # 需要的真机依赖:.env 里的 LLM/TTS key、Remotion Chrome、(可选)OSS/飞书凭据。
  13. set -euo pipefail
  14. ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
  15. cd "$ROOT"
  16. TEMPLATE="${TEMPLATE:-github-trending}"
  17. PLATFORM="${PLATFORM:-bilibili}"
  18. SOURCE="${SOURCE:-github-trending}"
  19. echo "================ 验证重构流水线 ================"
  20. echo "模板: $TEMPLATE 平台: $PLATFORM"
  21. [ -n "${INPUT:-}" ] && echo "输入文件: $INPUT" || echo "数据源: $SOURCE"
  22. [ "${NO_TTS:-0}" = "1" ] && echo "TTS: 跳过 (--no-tts)"
  23. [ "${NO_PUBLISH:-0}" = "1" ] && echo "发布: 跳过 (--no-publish)"
  24. echo "================================================"
  25. if [ "${SKIP_BUILD:-0}" != "1" ]; then
  26. echo ">> 构建所有包 (turbo build)..."
  27. pnpm build
  28. fi
  29. CLI="apps/cli/dist/index.js"
  30. if [ ! -f "$CLI" ]; then
  31. echo "!! CLI 未构建($CLI 不存在)。请去掉 SKIP_BUILD 或先 pnpm build。" >&2
  32. exit 1
  33. fi
  34. ARGS=(render -t "$TEMPLATE" -p "$PLATFORM")
  35. if [ -n "${INPUT:-}" ]; then
  36. ARGS+=("$INPUT")
  37. else
  38. ARGS+=("--source" "$SOURCE")
  39. fi
  40. [ "${NO_TTS:-0}" = "1" ] && ARGS+=("--no-tts")
  41. [ "${NO_PUBLISH:-0}" = "1" ] && ARGS+=("--no-publish")
  42. echo ">> 运行: node $CLI ${ARGS[*]}"
  43. echo "------------------------------------------------"
  44. set +e
  45. node "$CLI" "${ARGS[@]}" 2>&1 | tee /tmp/verify-refactor.log
  46. CODE=${PIPESTATUS[0]}
  47. set -e
  48. echo "------------------------------------------------"
  49. if [ "$CODE" -ne 0 ]; then
  50. echo "!! 流水线失败(exit $CODE)。完整日志见 /tmp/verify-refactor.log" >&2
  51. exit "$CODE"
  52. fi
  53. echo ">> 解析产物..."
  54. MP4S=$(grep -oE '\-> (.+\.mp4)' /tmp/verify-refactor.log | sed 's/^-> //' || true)
  55. OSSURLS=$(grep -oE 'oss: (\S+)' /tmp/verify-refactor.log | sed 's/^oss: //' || true)
  56. echo "================ 结果 ================"
  57. if [ -z "$MP4S" ]; then
  58. echo "⚠️ 未在输出中解析到 MP4(检查上方日志)"
  59. else
  60. for mp4 in $MP4S; do
  61. if [ -f "$mp4" ]; then
  62. SIZE=$(du -h "$mp4" | cut -f1)
  63. echo " ✅ $mp4 ($SIZE)"
  64. else
  65. echo " ⚠️ $mp4 (CLI 报告但文件不存在)"
  66. fi
  67. done
  68. fi
  69. if [ -n "$OSSURLS" ]; then
  70. echo " OSS:"
  71. echo "$OSSURLS" | sed 's/^/ - /'
  72. fi
  73. echo "======================================"
  74. echo "完成。如需检视 VideoDocument 契约,运行:node scripts/dump-video-document.mjs"