#!/bin/bash # ============================================================ # OpenDance Studio —— 把当前版本号同步进 Godot 导出预设 # # 为什么需要它:`export_presets.cfg` 的 # application/file_version / application/product_version # 决定导出后 `OpenDance.exe` 的 PE `VERSIONINFO` 资源,也就是 Windows 上 # 「右键 → 属性 → 详细信息」里显示的文件版本/产品版本。这两个键**不会** # 跟着 `project.godot` 的 `application/config/version` 自动走: # 它们当初被硬编码成 0.1.0 后一直没人改,导致 **v0.2.1 的包显示 0.1.0**。 # # 因此发布前必须显式同步,并由 `build/check-pe-version.sh` 在产物上复核。 # # 用法: # bash build/sync-export-version.sh [版本号] # 缺省取 project.yaml 的 version # ============================================================ set -euo pipefail PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)" cd "$PROJECT_DIR" PRESET="$PROJECT_DIR/export_presets.cfg" [ -f "$PRESET" ] || { echo "错误:缺少 $PRESET" >&2; exit 1; } VERSION="${1:-$(sed -n 's/^version:[[:space:]]*//p' project.yaml | head -1)}" VERSION="${VERSION:-}" if ! printf '%s' "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then echo "错误:版本号必须形如 X.Y.Z(实际 '$VERSION')" >&2 exit 1 fi CHANGED=0 for KEY in file_version product_version; do LINE="application/${KEY}=\"${VERSION}\"" if grep -qE "^application/${KEY}=" "$PRESET"; then OLD=$(grep -E "^application/${KEY}=" "$PRESET" | head -1) if [ "$OLD" != "$LINE" ]; then # 用 sed 就地替换;值里只有数字和点,无需转义 sed -i "s|^application/${KEY}=.*$|${LINE}|" "$PRESET" echo " application/${KEY}: ${OLD#*=} → \"${VERSION}\"" CHANGED=1 else echo " application/${KEY}: 已是 \"${VERSION}\"" fi else # 预设里没有这一行就追加到 [preset.0.options] 段的末尾(application/ 键都在该段) printf '%s\n' "$LINE" >>"$PRESET" echo " application/${KEY}: 新增 \"${VERSION}\"" CHANGED=1 fi done if [ "$CHANGED" -eq 1 ]; then echo "✓ 导出预设已同步到 v${VERSION}(重新导出后 PE 资源才会更新)" else echo "✓ 导出预设已是 v${VERSION},无需改动" fi