Add build scripts and configuration for Elytra PIM Client
This commit is contained in:
parent
459838b2e6
commit
b8a7fb903e
7 changed files with 940 additions and 2 deletions
152
build_wheel.py
Normal file
152
build_wheel.py
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
#!/usr/bin/env python
|
||||
"""Build wheel distribution for Elytra PIM Client.
|
||||
|
||||
This script builds wheel and source distributions for the Elytra PIM Client package.
|
||||
It requires setuptools and wheel to be installed.
|
||||
|
||||
Usage:
|
||||
python build_wheel.py
|
||||
|
||||
Output:
|
||||
- Wheels saved to dist/ directory
|
||||
- Source distribution (sdist) also created for reference
|
||||
"""
|
||||
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def main() -> int:
|
||||
"""Build wheel distribution.
|
||||
|
||||
Returns:
|
||||
Exit code (0 for success, 1 for failure)
|
||||
"""
|
||||
project_root = Path(__file__).parent
|
||||
dist_dir = project_root / "dist"
|
||||
|
||||
print("=" * 70)
|
||||
print("Elytra PIM Client - Wheel Builder")
|
||||
print("=" * 70)
|
||||
|
||||
# Clean previous builds
|
||||
print("\nCleaning previous builds...")
|
||||
if dist_dir.exists():
|
||||
try:
|
||||
shutil.rmtree(dist_dir)
|
||||
print(f"✓ Removed {dist_dir}")
|
||||
except OSError as e:
|
||||
print(f"✗ Failed to remove {dist_dir}: {e}")
|
||||
return 1
|
||||
|
||||
build_dir = project_root / "build"
|
||||
if build_dir.exists():
|
||||
try:
|
||||
shutil.rmtree(build_dir)
|
||||
print(f"✓ Removed {build_dir}")
|
||||
except OSError as e:
|
||||
print(f"✗ Failed to remove {build_dir}: {e}")
|
||||
return 1
|
||||
|
||||
egg_info_dir = project_root / "elytra_pim_client.egg-info"
|
||||
if egg_info_dir.exists():
|
||||
try:
|
||||
shutil.rmtree(egg_info_dir)
|
||||
print(f"✓ Removed {egg_info_dir}")
|
||||
except OSError as e:
|
||||
print(f"✗ Failed to remove {egg_info_dir}: {e}")
|
||||
return 1
|
||||
|
||||
# Build wheel and sdist
|
||||
print("\n" + "-" * 70)
|
||||
print("Building distributions...")
|
||||
print("-" * 70 + "\n")
|
||||
|
||||
try:
|
||||
# Use python -m build for modern approach
|
||||
result = subprocess.run(
|
||||
[sys.executable, "-m", "build"],
|
||||
cwd=project_root,
|
||||
check=False
|
||||
)
|
||||
|
||||
if result.returncode != 0:
|
||||
print("\n✗ Build failed")
|
||||
print("\nTrying alternative build method...")
|
||||
|
||||
# Fallback to direct setuptools invocation
|
||||
result = subprocess.run(
|
||||
[sys.executable, "setup.py", "sdist", "bdist_wheel"],
|
||||
cwd=project_root,
|
||||
check=False
|
||||
)
|
||||
|
||||
if result.returncode != 0:
|
||||
print("\n✗ Build failed with fallback method")
|
||||
return 1
|
||||
except FileNotFoundError:
|
||||
# If 'build' module not available, use setup.py
|
||||
print("Using setuptools directly...\n")
|
||||
result = subprocess.run(
|
||||
[sys.executable, "setup.py", "sdist", "bdist_wheel"],
|
||||
cwd=project_root,
|
||||
check=False
|
||||
)
|
||||
|
||||
if result.returncode != 0:
|
||||
print("\n✗ Build failed")
|
||||
return 1
|
||||
|
||||
# Verify build output
|
||||
print("\n" + "-" * 70)
|
||||
print("Build Results")
|
||||
print("-" * 70 + "\n")
|
||||
|
||||
if not dist_dir.exists():
|
||||
print("✗ dist directory not created")
|
||||
return 1
|
||||
|
||||
wheels = list(dist_dir.glob("*.whl"))
|
||||
sdists = list(dist_dir.glob("*.tar.gz"))
|
||||
|
||||
if not wheels and not sdists:
|
||||
print("✗ No distributions created")
|
||||
return 1
|
||||
|
||||
print("✓ Build successful!\n")
|
||||
|
||||
if wheels:
|
||||
print("Wheels:")
|
||||
for wheel in wheels:
|
||||
size_mb = wheel.stat().st_size / (1024 * 1024)
|
||||
print(f" • {wheel.name} ({size_mb:.2f} MB)")
|
||||
|
||||
if sdists:
|
||||
print("\nSource Distributions:")
|
||||
for sdist in sdists:
|
||||
size_mb = sdist.stat().st_size / (1024 * 1024)
|
||||
print(f" • {sdist.name} ({size_mb:.2f} MB)")
|
||||
|
||||
print(f"\n✓ Distributions saved to: {dist_dir}")
|
||||
|
||||
# Installation instructions
|
||||
print("\n" + "-" * 70)
|
||||
print("Installation Instructions")
|
||||
print("-" * 70 + "\n")
|
||||
|
||||
if wheels:
|
||||
wheel = wheels[0]
|
||||
print(f"Install the wheel locally:\n")
|
||||
print(f" pip install {dist_dir / wheel.name}\n")
|
||||
|
||||
print(f"Or upload to PyPI:\n")
|
||||
print(f" pip install twine")
|
||||
print(f" twine upload dist/*\n")
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Loading…
Add table
Add a link
Reference in a new issue