#!/usr/bin/env python3 """ Script to publish the next batch of 10 component crates. Batch 3: Components 16-25 """ import os import subprocess import sys import time def publish_component(component): """Publish a single component crate""" component_path = os.path.join("packages/leptos", component) try: print(f"šŸš€ Publishing {component}...") # Change to component directory original_cwd = os.getcwd() os.chdir(component_path) # Run cargo publish result = subprocess.run( ["cargo", "publish"], capture_output=True, text=True, timeout=300 # 5 minute timeout ) if result.returncode == 0: print(f"āœ… Successfully published {component}") return {"component": component, "status": "success", "error": None} else: error_msg = result.stderr.strip() print(f"āŒ Failed to publish {component}: {error_msg}") return {"component": component, "status": "failed", "error": error_msg} except subprocess.TimeoutExpired: print(f"ā° Timeout publishing {component}") return {"component": component, "status": "timeout", "error": "Timeout after 5 minutes"} except Exception as e: print(f"šŸ’„ Exception publishing {component}: {str(e)}") return {"component": component, "status": "exception", "error": str(e)} finally: os.chdir(original_cwd) def main(): print("šŸš€ Publishing Batch 3: Components 16-25") print("======================================") # Next 10 components to publish (alphabetically) components = [ "command", "context-menu", "date-picker", "dialog", "drawer", "dropdown-menu", "form", "hover-card", "input-otp", "label" ] print(f"Publishing {len(components)} components:") for i, comp in enumerate(components, 1): print(f" {i}. {comp}") print(f"\nšŸ“¦ Starting publication of {len(components)} crates...") results = [] successful = 0 failed = 0 for i, component in enumerate(components, 1): print(f"\n[{i}/{len(components)}] Publishing {component}...") result = publish_component(component) results.append(result) if result["status"] == "success": successful += 1 else: failed += 1 # Add delay between publications to respect rate limits if i < len(components): print("ā³ Waiting 10 seconds before next publication...") time.sleep(10) # Print summary print(f"\nšŸ“Š Batch 3 Summary") print("=" * 20) print(f"āœ… Successful: {successful}") print(f"āŒ Failed: {failed}") print(f"šŸ“¦ Total: {len(components)}") if failed > 0: print(f"\nāŒ Failed Components:") for result in results: if result["status"] != "success": print(f" - {result['component']}: {result['error']}") if successful == len(components): print(f"\nšŸŽ‰ ALL {len(components)} COMPONENTS IN BATCH 3 PUBLISHED SUCCESSFULLY!") print("🌐 Components 16-25 are now available on crates.io with signal management features!") else: print(f"\nāš ļø {failed} components failed to publish. Check the errors above.") if __name__ == "__main__": main()