137 lines
4.6 KiB
Python
Executable File
137 lines
4.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Build script for creating nightly versions of Crawl4AI.
|
|
This script temporarily modifies pyproject.toml to build the nightly package.
|
|
"""
|
|
|
|
import shutil
|
|
import sys
|
|
import os
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
def modify_files_for_nightly():
|
|
"""Modify pyproject.toml and __version__.py for nightly package."""
|
|
|
|
from datetime import datetime
|
|
|
|
# Generate date-based version: YY.M.D.HHMMSS
|
|
now = datetime.utcnow()
|
|
nightly_version = f"{now.year % 100}.{now.month}.{now.day}.{now.strftime('%H%M%S')}"
|
|
|
|
# 1. Modify pyproject.toml
|
|
pyproject_path = Path("pyproject.toml")
|
|
if not pyproject_path.exists():
|
|
print("Error: pyproject.toml not found!")
|
|
sys.exit(1)
|
|
|
|
with open(pyproject_path, 'r') as f:
|
|
content = f.read()
|
|
|
|
# Create backup
|
|
pyproject_backup = pyproject_path.with_suffix('.toml.backup')
|
|
shutil.copy2(pyproject_path, pyproject_backup)
|
|
print(f"Created backup: {pyproject_backup}")
|
|
|
|
# Modify content for nightly build
|
|
modified_content = content.replace(
|
|
'name = "Crawl4AI"',
|
|
'name = "crawl4ai-nightly"'
|
|
)
|
|
|
|
# Also update the description
|
|
modified_content = modified_content.replace(
|
|
'description = "🚀🤖 Crawl4AI: Open-source LLM Friendly Web Crawler & scraper"',
|
|
'description = "🚀🤖 Crawl4AI: Open-source LLM Friendly Web Crawler & scraper (Nightly Build)"'
|
|
)
|
|
|
|
# Update the version attribute to use __nightly_version__
|
|
modified_content = modified_content.replace(
|
|
'version = {attr = "crawl4ai.__version__.__version__"}',
|
|
'version = {attr = "crawl4ai.__version__.__nightly_version__"}'
|
|
)
|
|
|
|
# Write modified content
|
|
with open(pyproject_path, 'w') as f:
|
|
f.write(modified_content)
|
|
print("Modified pyproject.toml for nightly build")
|
|
|
|
# 2. Update __nightly_version__ in __version__.py
|
|
version_path = Path("crawl4ai/__version__.py")
|
|
if not version_path.exists():
|
|
print("Error: crawl4ai/__version__.py not found!")
|
|
sys.exit(1)
|
|
|
|
with open(version_path, 'r') as f:
|
|
version_content = f.read()
|
|
|
|
# Create backup
|
|
version_backup = version_path.with_suffix('.py.backup')
|
|
shutil.copy2(version_path, version_backup)
|
|
print(f"Created backup: {version_backup}")
|
|
|
|
# Update __nightly_version__
|
|
modified_version_content = version_content.replace(
|
|
'__nightly_version__ = None',
|
|
f'__nightly_version__ = "{nightly_version}"'
|
|
)
|
|
|
|
# Write modified content
|
|
with open(version_path, 'w') as f:
|
|
f.write(modified_version_content)
|
|
print(f"Set nightly version: {nightly_version}")
|
|
|
|
return pyproject_backup, version_backup
|
|
|
|
def restore_files(pyproject_backup, version_backup):
|
|
"""Restore original files from backups."""
|
|
# Restore pyproject.toml
|
|
pyproject_path = Path("pyproject.toml")
|
|
shutil.move(pyproject_backup, pyproject_path)
|
|
print("Restored original pyproject.toml")
|
|
|
|
# Restore __version__.py
|
|
version_path = Path("crawl4ai/__version__.py")
|
|
shutil.move(version_backup, version_path)
|
|
print("Restored original __version__.py")
|
|
|
|
def main():
|
|
"""Main function to handle build process."""
|
|
# Set environment variable for nightly versioning
|
|
os.environ['CRAWL4AI_NIGHTLY'] = '1'
|
|
|
|
try:
|
|
# Modify files for nightly
|
|
pyproject_backup, version_backup = modify_files_for_nightly()
|
|
|
|
print("\nReady for nightly build!")
|
|
print("Run your build command now (e.g., 'python -m build')")
|
|
print(f"\nTo restore original files, run:")
|
|
print(f" python build-nightly.py --restore")
|
|
|
|
except Exception as e:
|
|
print(f"Error: {e}")
|
|
sys.exit(1)
|
|
|
|
def restore_mode():
|
|
"""Restore original files from backups."""
|
|
pyproject_backup = Path("pyproject.toml.backup")
|
|
version_backup = Path("crawl4ai/__version__.py.backup")
|
|
|
|
if pyproject_backup.exists() and version_backup.exists():
|
|
restore_files(pyproject_backup, version_backup)
|
|
else:
|
|
if pyproject_backup.exists():
|
|
shutil.move(pyproject_backup, Path("pyproject.toml"))
|
|
print("Restored pyproject.toml")
|
|
if version_backup.exists():
|
|
shutil.move(version_backup, Path("crawl4ai/__version__.py"))
|
|
print("Restored __version__.py")
|
|
if not pyproject_backup.exists() and not version_backup.exists():
|
|
print("No backups found. Nothing to restore.")
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) > 1 and sys.argv[1] == "--restore":
|
|
restore_mode()
|
|
else:
|
|
main() |