139 lines
3.4 KiB
Bash
Executable File
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 "构建完成!"
|