122 lines
3.4 KiB
Python
122 lines
3.4 KiB
Python
import os
|
||
import zipfile
|
||
import sys
|
||
|
||
# ===================== 【可配置项】 =====================
|
||
# 输出目录(可自定义修改,例如 D:/release / /home/user/release)
|
||
OUTPUT_DIR = ""
|
||
|
||
# 最小打包内容
|
||
MIN_FILES = [
|
||
"extension",
|
||
"nicsensor.sh",
|
||
"project.config",
|
||
"setup.sh"
|
||
]
|
||
|
||
# 完整工程打包内容(所有文件)
|
||
FULL_FILES = [
|
||
"docs",
|
||
"extension",
|
||
"tool",
|
||
"nicsensor.sh",
|
||
"project.config",
|
||
"readme.md",
|
||
"setup.sh"
|
||
]
|
||
# ======================================================
|
||
|
||
|
||
def get_project_root():
|
||
"""
|
||
自动获取工程根目录(脚本在 tool/auto_package/ 下)
|
||
"""
|
||
# 当前脚本目录:tool/auto_package
|
||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||
# 工程根目录 = 往上两级
|
||
project_root = os.path.abspath(os.path.join(current_dir, "../.."))
|
||
return project_root
|
||
|
||
|
||
def pack_files(zip_path, file_list, project_root):
|
||
"""
|
||
统一打包函数
|
||
"""
|
||
os.chdir(project_root) # 切换到工程根目录,保证打包路径正确
|
||
|
||
with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zipf:
|
||
for item in file_list:
|
||
if not os.path.exists(item):
|
||
print(f"⚠️ 跳过不存在:{item}")
|
||
continue
|
||
|
||
# 递归打包文件夹
|
||
if os.path.isdir(item):
|
||
for root, dirs, files_in_dir in os.walk(item):
|
||
for f in files_in_dir:
|
||
file_path = os.path.join(root, f)
|
||
arc_path = os.path.relpath(file_path, project_root)
|
||
zipf.write(file_path, arc_path)
|
||
print(f" ✔ {arc_path}")
|
||
else:
|
||
zipf.write(item, item)
|
||
print(f" ✔ {item}")
|
||
|
||
|
||
def build_all(version):
|
||
"""
|
||
一次性构建 min + full 两个包
|
||
"""
|
||
project_root = get_project_root()
|
||
OUTPUT_DIR = os.path.join(project_root, "Release")
|
||
output_abs = os.path.abspath(OUTPUT_DIR)
|
||
|
||
# 创建输出目录
|
||
if not os.path.exists(output_abs):
|
||
os.makedirs(output_abs)
|
||
|
||
# 文件名
|
||
zip_min = os.path.join(output_abs, f"nicsensor-{version}-min.zip")
|
||
zip_full = os.path.join(output_abs, f"nicsensor-{version}-full.zip")
|
||
|
||
print("=" * 60)
|
||
print(" 开始自动打包")
|
||
print(f"版本号:{version}")
|
||
print(f"工程根目录:{project_root}")
|
||
print(f"输出目录:{output_abs}")
|
||
print("=" * 60)
|
||
|
||
# 打包最小版
|
||
print("\n📦 开始打包【最小版本】")
|
||
pack_files(zip_min, MIN_FILES, project_root)
|
||
|
||
# 打包完整版
|
||
print("\n📦 开始打包【完整工程】")
|
||
pack_files(zip_full, FULL_FILES, project_root)
|
||
|
||
print("\n✅ 全部打包完成!")
|
||
print(f"📍 最小包:{zip_min}")
|
||
print(f"📍 完整包:{zip_full}")
|
||
print("=" * 60)
|
||
|
||
|
||
def show_usage():
|
||
print("=" * 50)
|
||
print(" Nicsensor 一键打包脚本")
|
||
print("=" * 50)
|
||
print("使用方法:")
|
||
print(" python pack.py 版本号")
|
||
print()
|
||
print("示例:")
|
||
print(" python pack.py v1.0.0")
|
||
print(" python pack.py 2.5.0")
|
||
print("=" * 50)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
if len(sys.argv) != 2:
|
||
show_usage()
|
||
sys.exit(1)
|
||
|
||
version = sys.argv[1]
|
||
build_all(version) |