Ctrl K
ComunidadGuías…

scripts/package_desktop.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""Package a completed Neutralino build: python scripts/package_desktop.py."""

import json
import plistlib
import shutil
import tarfile
import tempfile
from pathlib import Path

from PIL import Image

ROOT = Path(__file__).resolve().parents[1]
DESKTOP = ROOT / "desktop"


def main():
    config = json.loads((DESKTOP / "neutralino.config.json").read_text())
    build = DESKTOP / "dist/aoede"
    output = DESKTOP / "dist/releases"
    output.mkdir(parents=True, exist_ok=True)
    icon = DESKTOP / "resources/icons/appIcon.png"
    platforms = {
        "linux-x64": "linux_x64",
        "linux-arm64": "linux_arm64",
        "mac-universal": "mac_universal",
        "mac-arm64": "mac_arm64",
        "mac-x64": "mac_x64",
        "win-x64": "win_x64.exe",
    }
    for platform, suffix in platforms.items():
        binary = f"aoede-{suffix}"
        with tempfile.TemporaryDirectory() as temporary:
            stage = Path(temporary)
            for name in (binary, "resources.neu"):
                shutil.copy2(build / name, stage / name)
            shutil.copy2(icon, stage / "appIcon.png")
            if platform.startswith("mac-"):
                contents = stage / "Aoede.app/Contents"
                native = contents / "MacOS"
                resources = contents / "Resources"
                native.mkdir(parents=True)
                resources.mkdir()
                shutil.copy2(build / binary, native / "aoede")
                (native / "aoede").chmod(0o755)
                shutil.copy2(build / "resources.neu", native / "resources.neu")
                Image.open(icon).save(resources / "appIcon.icns", format="ICNS")
                shutil.copy2(icon, resources / "appIcon.png")
                with (contents / "Info.plist").open("wb") as file:
                    plistlib.dump(
                        {
                            "CFBundleExecutable": "aoede",
                            "CFBundleIconFile": "appIcon.icns",
                            "CFBundleIdentifier": config["applicationId"],
                            "CFBundleName": "Aoede",
                            "CFBundlePackageType": "APPL",
                            "CFBundleShortVersionString": config["version"],
                            "CFBundleVersion": config["version"],
                            "LSMinimumSystemVersion": "10.15",
                            "NSHighResolutionCapable": True,
                        },
                        file,
                    )
            target = output / f"aoede-{platform}.tar.gz"
            with tarfile.open(target, "w:gz") as archive:
                for path in sorted(stage.iterdir()):
                    archive.add(path, arcname=path.name)
            print(target)


if __name__ == "__main__":
    main()