feat(build): 添加PHP版本要求和编译脚本版本管理功能

- 在composer.json中添加PHP 8.2-8.6版本要求和pcntl扩展依赖
- 修改package.sh脚本支持版本号自动递增管理
- 添加version.txt文件用于存储版本号
- 实现带版本号的二进制文件命名机制
- 更新UPX压缩逻辑以处理版本化二进制文件
- 改进打包流程中的文件管理和清理机制
- 添加版本号显示和打包成功后的版本信息输出
pull/1/head
韩天峰 4 months ago
parent eba8964d34
commit 715f764c11
  1. 2
      composer.json
  2. 47
      package.sh

@ -1,5 +1,7 @@
{
"require": {
"php": ">=8.2 <8.6",
"ext-pcntl": "*",
"nikic/php-parser": "5.6.1",
"league/climate": "^3.10",
"marcj/topsort": "^2.0",

@ -1,11 +1,29 @@
#!/bin/bash
# 打包脚本:创建包含指定文件的 zip 压缩包(先对二进制文件进行 UPX 压缩)
# 支持版本管理,每次打包版本号自动递增
OUTPUT_FILE="swoole_compiler_package.zip"
BINARY_FILE="swoole_compiler"
VERSION_FILE="version.txt"
BACKUP_FILE="${BINARY_FILE}.backup"
# 读取或初始化版本号
if [ -f "$VERSION_FILE" ]; then
VERSION_ID=$(cat "$VERSION_FILE")
else
VERSION_ID=1000
fi
# 版本号递增
VERSION_ID=$((VERSION_ID + 1))
echo "$VERSION_ID" > "$VERSION_FILE"
echo "当前版本: $VERSION_ID"
# 生成带版本号的二进制文件名
VERSIONED_BINARY="${BINARY_FILE}_v${VERSION_ID}"
# 检查必要文件是否存在
REQUIRED_FILES=(
"$BINARY_FILE"
@ -26,11 +44,17 @@ done
echo "所有文件检查通过"
# 复制二进制文件为带版本号的名称
echo "创建版本化二进制文件: $VERSIONED_BINARY"
cp "$BINARY_FILE" "$VERSIONED_BINARY"
# 检查 upx 是否安装
if ! command -v upx &> /dev/null; then
echo "错误: 未找到 upx 命令,请先安装 upx"
echo "Ubuntu/Debian: sudo apt-get install upx-ucl"
echo "CentOS/RHEL: sudo yum install upx"
# 清理临时文件
rm -f "$VERSIONED_BINARY"
exit 1
fi
@ -40,21 +64,22 @@ echo "检测到 upx: $(upx --version | head -n 1)"
echo "备份原始二进制文件..."
cp "$BINARY_FILE" "$BACKUP_FILE"
# 使用 UPX 压缩二进制文件
echo "使用 UPX 压缩 $BINARY_FILE ..."
upx --best "$BINARY_FILE"
# 使用 UPX 压缩版本化二进制文件
echo "使用 UPX 压缩 $VERSIONED_BINARY ..."
upx --best "$VERSIONED_BINARY"
if [ $? -ne 0 ]; then
echo "✗ UPX 压缩失败!"
# 恢复原始文件
# 恢复原始文件并清理临时文件
mv "$BACKUP_FILE" "$BINARY_FILE"
rm -f "$VERSIONED_BINARY"
exit 1
fi
echo "✓ UPX 压缩完成"
echo " 原始大小: $(du -h "$BACKUP_FILE" | cut -f1)"
echo " 压缩后: $(du -h "$BINARY_FILE" | cut -f1)"
echo " 压缩率: $(echo "scale=2; (1 - $(stat -c%s "$BINARY_FILE") / $(stat -c%s "$BACKUP_FILE")) * 100" | bc)%"
echo " 压缩后: $(du -h "$VERSIONED_BINARY" | cut -f1)"
echo " 压缩率: $(echo "scale=2; (1 - $(stat -c%s "$VERSIONED_BINARY") / $(stat -c%s "$BACKUP_FILE")) * 100" | bc)%"
# 删除旧的压缩包(如果存在)
if [ -f "$OUTPUT_FILE" ]; then
@ -62,10 +87,10 @@ if [ -f "$OUTPUT_FILE" ]; then
echo "已删除旧的压缩包"
fi
# 创建 zip 压缩包
# 创建 zip 压缩包(使用带版本号的二进制文件)
echo "创建压缩包: $OUTPUT_FILE"
zip "$OUTPUT_FILE" \
swoole_compiler \
"$VERSIONED_BINARY" \
composer.json \
composer.lock \
README.md \
@ -74,15 +99,17 @@ zip "$OUTPUT_FILE" \
PACK_RESULT=$?
# 恢复原始二进制文件
# 恢复原始二进制文件并清理临时文件
echo "恢复原始二进制文件..."
mv "$BACKUP_FILE" "$BINARY_FILE"
rm -f "$VERSIONED_BINARY"
if [ $PACK_RESULT -eq 0 ]; then
echo "✓ 打包成功!"
echo "版本号: $VERSION_ID"
echo "压缩包大小: $(du -h "$OUTPUT_FILE" | cut -f1)"
echo "包含文件:"
unzip -l "$OUTPUT_FILE" | grep -E "\.php$|compiler$|\.json$|\.md$"
unzip -l "$OUTPUT_FILE" | grep -E "\.php$|compiler|\.json$|\.md$"
else
echo "✗ 打包失败!"
exit 1

Loading…
Cancel
Save