Files
MediaOrganizer/build.sh
T
Shuery 0df07ad0ae refactor: 迁移至 bashly CLI 与功能域模块结构
- CLI 定义迁移至 src/bashly.yml(bashly 1.4 生成参数解析),入口收敛为 src/root_command.sh
- 源码按功能域重组:config/storage/integrate/media/pipeline,消除扁平散落
- 新增零依赖测试框架 tests/(123 用例)与 CI 流水线(lint + test + build + 产物一致性)
- build.sh 支持版本单一来源注入与 --check 产物校验;新增 lint.sh(bash -n + shellcheck 零容忍)
- 删除旧单文件 media_organizer.sh 与旧扁平模块
2026-08-14 22:41:28 +08:00

87 lines
2.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# ============================================================================
# 构建脚本:bashly generate → 单文件分发脚本 dist/media_organizer
#
# 用法:
# ./build.sh 构建(bashly generate + 语法/重复函数检查)
# ./build.sh --check 仅校验当前 dist/media_organizer 是否与 src/ 最新源码一致
#
# 版本单一来源:src/lib/main.sh 的 SCRIPT_VERSION 是唯一权威版本号,
# 构建时注入 bashly.yml 的 version 字段(产物 --version 与脚本内版本一致)。
#
# 依赖:bashly(gem install bashly;开发期工具,产物运行无需 Ruby)
# ============================================================================
set -euo pipefail
cd "$(dirname "$0")"
OUT="dist/media_organizer"
BASE="$(pwd)"
# 定位 bashly:环境变量 BASHLY 覆盖 > PATH > 本仓库 .rv-rubies(rv 管理的 Ruby)
find_bashly() {
if [[ -n "${BASHLY:-}" ]] && [[ -x "$BASHLY" ]]; then
echo "$BASHLY"
return 0
fi
if command -v bashly >/dev/null 2>&1; then
command -v bashly
return 0
fi
local d
for d in "$BASE"/.rv-rubies/*/bin/bashly; do
[[ -x "$d" ]] && {
echo "$d"
return 0
}
done
return 1
}
if ! BASHLY_CMD="$(find_bashly)"; then
echo "错误:未找到 bashly(gem install bashly,或设 BASHLY=/path/to/bashly)" >&2
exit 1
fi
# 版本单一来源:从 main.sh 提取 SCRIPT_VERSION
VERSION="$(sed -n 's/^readonly SCRIPT_VERSION="\([^"]*\)"/\1/p' src/lib/main.sh | head -1)"
if [[ -z "$VERSION" ]]; then
echo "错误:无法从 src/lib/main.sh 提取 SCRIPT_VERSION" >&2
exit 1
fi
# 在临时目录生成(注入版本号,不触碰工作区源码)
work="$(mktemp -d)"
trap 'rm -rf "$work"' EXIT
cp -r src "$work/src"
sed -i "s/^version: .*/version: $VERSION/" "$work/src/bashly.yml"
(cd "$work" && "$BASHLY_CMD" generate --quiet >/dev/null)
generated="$work/media_organizer"
# 语法检查
if ! bash -n "$generated"; then
echo "错误:构建产物语法检查未通过" >&2
exit 1
fi
# 重复函数定义检查
dups="$(grep -oE '^[A-Za-z_][A-Za-z0-9_]*\(\) \{' "$generated" | sort | uniq -d || true)"
if [[ -n "$dups" ]]; then
echo "错误:存在重复函数定义:$dups" >&2
exit 1
fi
if [[ "${1:-}" == "--check" ]]; then
if [[ -f "$OUT" ]] && cmp -s "$generated" "$OUT"; then
echo "OK:$OUT 与最新源码一致(v$VERSION)"
else
echo "DIFF:$OUT 已过期或不存在,请运行 ./build.sh 重新生成" >&2
exit 1
fi
else
mkdir -p "$(dirname "$OUT")"
chmod +x "$generated"
mv "$generated" "$OUT"
trap - EXIT
echo "构建完成:$OUT v$VERSION($(wc -l <"$OUT") 行,$(wc -c <"$OUT") 字节)"
fi