68 lines
2.4 KiB
Python
68 lines
2.4 KiB
Python
import os
|
|
import re
|
|
import zipfile
|
|
|
|
def get_addon_version():
|
|
"""Reads pr3tz/__init__.py and extracts the bl_info version tuple."""
|
|
init_path = os.path.join("pr3tz", "__init__.py")
|
|
if not os.path.exists(init_path):
|
|
raise FileNotFoundError(f"Could not find {init_path}")
|
|
|
|
with open(init_path, "r", encoding="utf-8") as f:
|
|
content = f.read()
|
|
|
|
# Search for the "version": (x, y, z) pattern in bl_info
|
|
match = re.search(r'"version"\s*:\s*\(([^)]+)\)', content)
|
|
if not match:
|
|
raise ValueError("Could not parse version from bl_info in __init__.py")
|
|
|
|
version_str = match.group(1)
|
|
# Parse numbers, e.g. "2, 0, 0" -> ["2", "0", "0"] -> "2.0.0"
|
|
version_parts = [part.strip() for part in version_str.split(",")]
|
|
return ".".join(version_parts)
|
|
|
|
def package_addon():
|
|
"""Zips the pr3tz addon folder, excluding development artifacts."""
|
|
try:
|
|
version = get_addon_version()
|
|
except Exception as e:
|
|
print(f"Warning: Could not parse version: {e}. Defaulting to 'unknown'.")
|
|
version = "unknown"
|
|
|
|
release_dir = "releases"
|
|
if not os.path.exists(release_dir):
|
|
os.makedirs(release_dir)
|
|
print(f"Created output directory: {release_dir}/")
|
|
|
|
zip_filename = f"pr3tz_v{version}.zip"
|
|
zip_path = os.path.join(release_dir, zip_filename)
|
|
|
|
print(f"Packaging addon v{version} into {zip_path}...")
|
|
|
|
addon_dir = "pr3tz"
|
|
ignored_dirs = {"__pycache__", ".git"}
|
|
ignored_extensions = {".pyc", ".pyo", ".py.bak"}
|
|
|
|
added_count = 0
|
|
with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
|
|
for root, dirs, files in os.walk(addon_dir):
|
|
# Prune directories in-place to prevent walking into them
|
|
dirs[:] = [d for d in dirs if d not in ignored_dirs]
|
|
|
|
for file in files:
|
|
_, ext = os.path.splitext(file)
|
|
if ext in ignored_extensions:
|
|
continue
|
|
|
|
file_path = os.path.join(root, file)
|
|
# Ensure the path in the ZIP has "pr3tz/" as its root folder
|
|
arcname = os.path.relpath(file_path, os.path.dirname(addon_dir))
|
|
zipf.write(file_path, arcname)
|
|
print(f" Added: {arcname}")
|
|
added_count += 1
|
|
|
|
print(f"\nSuccess! Packaged {added_count} files into {zip_path}")
|
|
|
|
if __name__ == "__main__":
|
|
package_addon()
|