From 715f764c11be956dc5a57dd1adc7be25b660367d Mon Sep 17 00:00:00 2001 From: tianfenghan Date: Mon, 27 Apr 2026 13:39:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(build):=20=E6=B7=BB=E5=8A=A0PHP=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E8=A6=81=E6=B1=82=E5=92=8C=E7=BC=96=E8=AF=91=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在composer.json中添加PHP 8.2-8.6版本要求和pcntl扩展依赖 - 修改package.sh脚本支持版本号自动递增管理 - 添加version.txt文件用于存储版本号 - 实现带版本号的二进制文件命名机制 - 更新UPX压缩逻辑以处理版本化二进制文件 - 改进打包流程中的文件管理和清理机制 - 添加版本号显示和打包成功后的版本信息输出 --- composer.json | 2 ++ package.sh | 47 +++++++++++++++++++++++++++++++++++++---------- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/composer.json b/composer.json index 21d51350..d8a9f3a5 100644 --- a/composer.json +++ b/composer.json @@ -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", diff --git a/package.sh b/package.sh index 8fa8de00..db262c1d 100755 --- a/package.sh +++ b/package.sh @@ -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