Преглед изворни кода

Implement build system for Cursor Pro with platform-specific packaging

- Added build.py script to automate the packaging process for macOS and Windows.
- Created CursorKeepAlive.mac.spec and CursorKeepAlive.win.spec for application specifications.
- Updated .gitignore to exclude build artifacts and IDE files.
- Enhanced directory structure for output files and included configuration file handling in the build process.
cheng zhen пре 1 година
родитељ
комит
85c83a9d62
4 измењених фајлова са 157 додато и 4 уклоњено
  1. 21 4
      .gitignore
  2. 57 0
      CursorKeepAlive.mac.spec
  3. 44 0
      CursorKeepAlive.win.spec
  4. 35 0
      build.py

+ 21 - 4
.gitignore

@@ -1,6 +1,23 @@
-.idea
-__pycache__
+# PyInstaller
+build/
+dist/
+*.spec
+!CursorKeepAlive.mac.spec
+!CursorKeepAlive.win.spec
 
-build
+# Python
+__pycache__/
+*.py[cod]
+*$py.class
 
-venv
+# Logs
+*.log
+
+# IDE
+.vscode/
+.idea/
+
+# Mac
+.DS_Store
+
+venv/

+ 57 - 0
CursorKeepAlive.mac.spec

@@ -0,0 +1,57 @@
+# -*- mode: python ; coding: utf-8 -*-
+
+a = Analysis(
+    ['cursor_pro_keep_alive.py'],
+    pathex=[],
+    binaries=[],
+    datas=[
+        ('config.ini', '.'),
+        ('turnstilePatch', 'turnstilePatch'),
+        ('cursor_auth_manager.py', '.'),
+    ],
+    hiddenimports=[
+        'cursor_auth_manager'
+    ],
+    hookspath=[],
+    hooksconfig={},
+    runtime_hooks=[],
+    excludes=[],
+    noarchive=False,
+)
+
+pyz = PYZ(a.pure)
+
+exe = EXE(
+    pyz,
+    a.scripts,
+    a.binaries,
+    a.datas,
+    [],
+    name='CursorPro',
+    debug=False,
+    bootloader_ignore_signals=False,
+    strip=False,
+    upx=True,
+    upx_exclude=[],
+    runtime_tmpdir=None,
+    console=True,
+    disable_windowed_traceback=False,
+    argv_emulation=False,
+    target_arch=None,
+    codesign_identity=None,
+    entitlements_file=None,
+    icon=None
+)
+
+app = BUNDLE(
+    exe,
+    name='CursorPro.app',
+    icon=None,
+    bundle_identifier='com.yourcompany.cursorpro',
+    info_plist={
+        'CFBundleShortVersionString': '1.0.0',
+        'CFBundleVersion': '1.0.0',
+        'NSHighResolutionCapable': True,
+        'LSBackgroundOnly': False,
+    },
+) 

+ 44 - 0
CursorKeepAlive.win.spec

@@ -0,0 +1,44 @@
+# -*- mode: python ; coding: utf-8 -*-
+
+a = Analysis(
+    ['cursor_pro_keep_alive.py'],
+    pathex=[],
+    binaries=[],
+    datas=[
+        ('config.ini', '.'),
+        ('turnstilePatch', 'turnstilePatch'),
+        ('cursor_auth_manager.py', '.'),
+    ],
+    hiddenimports=[
+        'cursor_auth_manager'
+    ],
+    hookspath=[],
+    hooksconfig={},
+    runtime_hooks=[],
+    excludes=[],
+    noarchive=False,
+)
+
+pyz = PYZ(a.pure)
+
+exe = EXE(
+    pyz,
+    a.scripts,
+    a.binaries,
+    a.datas,
+    [],
+    name='CursorPro',
+    debug=False,
+    bootloader_ignore_signals=False,
+    strip=False,
+    upx=True,
+    upx_exclude=[],
+    runtime_tmpdir=None,
+    console=True,
+    disable_windowed_traceback=False,
+    argv_emulation=False,
+    target_arch=None,
+    codesign_identity=None,
+    entitlements_file=None,
+    icon=None
+) 

+ 35 - 0
build.py

@@ -0,0 +1,35 @@
+import os
+import platform
+import subprocess
+
+def build():
+    system = platform.system().lower()
+    
+    if system == 'darwin':
+        spec_file = 'CursorKeepAlive.mac.spec'
+        output_dir = 'dist/mac'
+    elif system == 'windows':
+        spec_file = 'CursorKeepAlive.win.spec'
+        output_dir = 'dist/windows'
+    else:
+        print(f"不支持的操作系统: {system}")
+        return
+    
+    # 创建输出目录
+    os.makedirs(output_dir, exist_ok=True)
+    
+    # 运行 PyInstaller
+    subprocess.run(['pyinstaller', spec_file, '--distpath', output_dir, '--workpath', f'build/{system}'])
+    
+    # 复制配置文件
+    if os.path.exists('config.ini'):
+        if system == 'darwin':
+            os.makedirs(f'{output_dir}/CursorPro.app/Contents/MacOS', exist_ok=True)
+            subprocess.run(['cp', 'config.ini', f'{output_dir}/CursorPro.app/Contents/MacOS/'])
+        else:
+            subprocess.run(['cp', 'config.ini', output_dir])
+    
+    print(f"构建完成,输出目录: {output_dir}")
+
+if __name__ == '__main__':
+    build()