#!/usr/bin/env python3 import argparse import os import subprocess from pathlib import Path def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser(description=f"Create a DMG installer.") parser.add_argument("-a", "--app-name") parser.add_argument("-i", "--icon-path", type=Path) return parser.parse_args() def create_dmg(app_name: str, dmg_name: str, icon_path: Path, app_bundle_path: Path) -> None: subprocess.run( ( "create-dmg", "--volname", f"{app_name} Installer", "--volicon", str(icon_path), "--window-pos", "200", "120", "--window-size", "800", "400", "--icon-size", "100", "--icon", f"{app_name}.app", "200", "190", "--hide-extension", f"{app_name}.app", "--app-drop-link", "600", "185", str(dmg_name), str(app_bundle_path), ) ) def main() -> None: args = parse_args() dmg_name = Path(f"{args.app_name}-Installer.dmg") if dmg_name.is_file(): dmg_name.unlink() app_bundle_path = Path(f"/tmp/{args.app_name}.app") create_dmg(args.app_name, dmg_name, args.icon_path, app_bundle_path) if __name__ == "__main__": main()