#!/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 "构建完成!"