hanli/build.sh
2025-12-01 18:13:15 +08:00

139 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
# 构建脚本 - 创建多平台发布包
#
# 使用方法:
# ./build.sh phar - 仅打包 PHAR (需要用户有 PHP)
# ./build.sh static - 创建静态可执行文件 (无需 PHP)
# ./build.sh all - 全部
set -e
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
BUILD_DIR="$PROJECT_DIR/build"
VERSION=$(date +%Y%m%d)
# 创建构建目录
mkdir -p "$BUILD_DIR"
build_phar() {
echo "=== 构建 PHAR 包 ==="
# 检查 box 是否安装
if command -v box &> /dev/null; then
box compile
else
# 使用内置脚本
php -d phar.readonly=0 build-phar.php
fi
if [ -f "$BUILD_DIR/hanli-idle.phar" ]; then
echo "✓ PHAR 包已创建: $BUILD_DIR/hanli-idle.phar"
echo " 运行方式: php hanli-idle.phar"
fi
}
build_static() {
echo "=== 构建静态可执行文件 ==="
# 检查是否有预编译的 micro.sfx
MICRO_SFX=""
# 尝试下载 static-php-cli
if [ ! -f "$BUILD_DIR/spc" ]; then
echo "下载 static-php-cli..."
case "$(uname -s)" in
Darwin)
ARCH=$(uname -m)
curl -fsSL "https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-macos-$ARCH" -o "$BUILD_DIR/spc"
;;
Linux)
ARCH=$(uname -m)
curl -fsSL "https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-linux-$ARCH" -o "$BUILD_DIR/spc"
;;
*)
echo "不支持的平台,请手动下载 static-php-cli"
return 1
;;
esac
chmod +x "$BUILD_DIR/spc"
fi
# 先构建 PHAR
if [ ! -f "$BUILD_DIR/hanli-idle.phar" ]; then
build_phar
fi
# 下载 micro.sfx
if [ ! -f "$BUILD_DIR/micro.sfx" ]; then
echo "下载 micro.sfx..."
"$BUILD_DIR/spc" download --for-extensions="mbstring,phar" --prefer-pre-built
"$BUILD_DIR/spc" micro:combine "$BUILD_DIR/hanli-idle.phar" -O "$BUILD_DIR/hanli-idle"
else
cat "$BUILD_DIR/micro.sfx" "$BUILD_DIR/hanli-idle.phar" > "$BUILD_DIR/hanli-idle"
chmod +x "$BUILD_DIR/hanli-idle"
fi
echo "✓ 静态可执行文件: $BUILD_DIR/hanli-idle"
echo " 运行方式: ./hanli-idle"
}
create_release() {
echo "=== 创建发布包 ==="
RELEASE_DIR="$BUILD_DIR/release-$VERSION"
mkdir -p "$RELEASE_DIR"
# 复制文件
cp "$BUILD_DIR/hanli-idle.phar" "$RELEASE_DIR/" 2>/dev/null || true
cp "$BUILD_DIR/hanli-idle" "$RELEASE_DIR/" 2>/dev/null || true
# 创建 README
cat > "$RELEASE_DIR/README.txt" << 'README'
凡人修仙传 - 文字版
==================
运行方式:
1. 如果你有 PHP 环境:
php hanli-idle.phar
2. 如果你没有 PHP 环境 (仅限对应平台):
./hanli-idle (Linux/macOS)
hanli-idle.exe (Windows)
存档位置:
游戏存档保存在当前目录的 save.json 文件中
系统要求:
- 支持 ANSI 颜色的终端
- Windows 用户建议使用 Windows Terminal 或 PowerShell 7+
README
# 打包
cd "$BUILD_DIR"
tar -czf "hanli-idle-$VERSION.tar.gz" "release-$VERSION"
echo "✓ 发布包: $BUILD_DIR/hanli-idle-$VERSION.tar.gz"
}
case "${1:-phar}" in
phar)
build_phar
;;
static)
build_static
;;
all)
build_phar
build_static
create_release
;;
*)
echo "用法: $0 {phar|static|all}"
exit 1
;;
esac
echo ""
echo "构建完成!"