import sys import os import json import logging # Ensure we can import from the same directory sys.path.append(os.path.dirname(os.path.abspath(__file__))) try: from gitea_manager import GiteaManager except ImportError as e: print(f"Error importing GiteaManager: {e}") sys.exit(1) logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') logger = logging.getLogger(__name__) # List of Milestones MILESTONES = [ "Phase 1: Core Functionality Fixes", "Phase 2: Dashboard & Analytics Wiring", "Phase 3: Advanced Features & Epic 11", "Phase 4: Testing & Deployment", "Phase 5: Maintenance & Optimization" ] # List of 27 Issues ISSUES = [ {"title": "Create API Endpoint Inventory", "body": "Document all implemented endpoints with status", "milestone": "Phase 1: Core Functionality Fixes", "labels": ["Scope: Backend", "Type: Feature", "Status: To Do"]}, {"title": "Generate Test Coverage Report", "body": "Map tests to features and identify gaps", "milestone": "Phase 4: Testing & Deployment", "labels": ["Scope: Backend", "Type: Feature", "Status: To Do"]}, {"title": "Write Deployment Runbook", "body": "Step-by-step production deployment guide", "milestone": "Phase 4: Testing & Deployment", "labels": ["Scope: Backend", "Type: Feature", "Status: To Do"]}, {"title": "Create Data Migration Guide", "body": "Procedures for schema changes", "milestone": "Phase 1: Core Functionality Fixes", "labels": ["Scope: Database", "Type: Feature", "Status: To Do"]}, {"title": "Document Performance Benchmarks", "body": "Actual measurements vs. targets", "milestone": "Phase 4: Testing & Deployment", "labels": ["Scope: Backend", "Type: Feature", "Status: To Do"]}, {"title": "Fix Milestone Listing Bug", "body": "Resolve KeyError: 'completeness'", "milestone": "Phase 1: Core Functionality Fixes", "labels": ["Scope: Core", "Type: Bug", "Status: To Do"]}, {"title": "Add Project Board Management", "body": "Create/move cards between columns", "milestone": "Phase 1: Core Functionality Fixes", "labels": ["Scope: Core", "Type: Feature", "Status: To Do"]}, {"title": "Implement Column Operations", "body": "Support Kanban board workflows", "milestone": "Phase 1: Core Functionality Fixes", "labels": ["Scope: Core", "Type: Feature", "Status: To Do"]}, {"title": "Add Card Positioning", "body": "Set priority/order within columns", "milestone": "Phase 1: Core Functionality Fixes", "labels": ["Scope: Core", "Type: Feature", "Status: To Do"]}, {"title": "Implement Batch Operations", "body": "Move multiple issues simultaneously", "milestone": "Phase 3: Advanced Features & Epic 11", "labels": ["Scope: Core", "Type: Feature", "Status: To Do"]}, {"title": "Add Webhook Integration", "body": "Sync with code changes automatically", "milestone": "Phase 3: Advanced Features & Epic 11", "labels": ["Scope: Core", "Type: Feature", "Status: To Do"]}, {"title": "Improve Error Handling", "body": "Network failures and validation", "milestone": "Phase 1: Core Functionality Fixes", "labels": ["Scope: Core", "Type: Bug", "Status: To Do"]}, {"title": "Add Board Visualization", "body": "CLI view of Kanban structure", "milestone": "Phase 3: Advanced Features & Epic 11", "labels": ["Scope: Core", "Type: Feature", "Status: To Do"]}, {"title": "Audit Historical Data Implementation", "body": "Verify occurrence_date in all cost tables", "milestone": "Phase 2: Dashboard & Analytics Wiring", "labels": ["Scope: Database", "Type: Feature", "Status: To Do"]}, {"title": "Implement Analytics Service", "body": "Complete TCO/km calculations", "milestone": "Phase 2: Dashboard & Analytics Wiring", "labels": ["Scope: Backend", "Type: Feature", "Status: To Do"]}, {"title": "Wire Frontend to Real APIs", "body": "Replace mocked data with live endpoints", "milestone": "Phase 2: Dashboard & Analytics Wiring", "labels": ["Scope: Frontend", "Type: Feature", "Status: To Do"]}, {"title": "Implement Gamification Admin", "body": "Control panel for game parameters", "milestone": "Phase 3: Advanced Features & Epic 11", "labels": ["Scope: Backend", "Type: Feature", "Status: To Do"]}, {"title": "Build Marketplace Booking Flow", "body": "Service request and geofenced broadcast", "milestone": "Phase 3: Advanced Features & Epic 11", "labels": ["Scope: Backend", "Type: Feature", "Status: To Do"]}, {"title": "Develop Epic 11 Public Frontend", "body": "Smart Garage with profile selector", "milestone": "Phase 3: Advanced Features & Epic 11", "labels": ["Scope: Frontend", "Type: Feature", "Status: To Do"]}, {"title": "Create Advanced Search", "body": "With filters and sorting", "milestone": "Phase 3: Advanced Features & Epic 11", "labels": ["Scope: Backend", "Type: Feature", "Status: To Do"]}, {"title": "Write Integration Tests", "body": "For critical user journeys", "milestone": "Phase 4: Testing & Deployment", "labels": ["Scope: Backend", "Type: Feature", "Status: To Do"]}, {"title": "Implement Performance Tests", "body": "Validate <200ms API response time", "milestone": "Phase 4: Testing & Deployment", "labels": ["Scope: Backend", "Type: Feature", "Status: To Do"]}, {"title": "Create Security Test Suite", "body": "Penetration testing and vulnerability scans", "milestone": "Phase 4: Testing & Deployment", "labels": ["Scope: Backend", "Type: Feature", "Status: To Do"]}, {"title": "Build Accessibility Tests", "body": "WCAG 2.1 compliance", "milestone": "Phase 4: Testing & Deployment", "labels": ["Scope: Frontend", "Type: Feature", "Status: To Do"]}, {"title": "Develop Load Testing", "body": "1000+ concurrent users simulation", "milestone": "Phase 4: Testing & Deployment", "labels": ["Scope: Backend", "Type: Feature", "Status: To Do"]}, {"title": "Create Monitoring Dashboard", "body": "Real-time system health visualization", "milestone": "Phase 4: Testing & Deployment", "labels": ["Scope: Frontend", "Type: Feature", "Status: To Do"]}, {"title": "Implement CI/CD Pipeline", "body": "Automated testing and deployment", "milestone": "Phase 4: Testing & Deployment", "labels": ["Scope: Core", "Type: Feature", "Status: To Do"]} ] def main(): manager = GiteaManager() # 1. Create Project Board project_name = "Masterbook 2.0.1 Roadmap" logger.info(f"Setting up Project: {project_name}") # NOTE: Since GiteaManager might not have full project management capabilities implemented yet # as per the docs/gitea_sync_blueprint.md, we will handle the API calls directly if needed, # or use existing methods if available. The blueprint actually mentions these are missing. # For now, we will add dummy calls or use requests directly if we need to. # Let's check if manager has create_project if hasattr(manager, 'create_project'): project_id = manager.create_project(project_name, "Roadmap for Masterbook 2.0.1") if project_id: logger.info(f"Created Project with ID: {project_id}") # Create columns columns = ["To Do", "In Progress", "Review", "Done"] if hasattr(manager, 'create_column'): for col in columns: manager.create_column(project_id, col) logger.info(f"Created column: {col}") else: logger.warning("Manager lacks create_column method. Columns not created.") else: logger.warning("Manager lacks create_project method. Project creation skipped.") # Alternatively, we could implement the raw API call here using manager.api_url and manager.headers # 2. Create Milestones logger.info("Setting up Milestones...") # Get existing milestones to avoid duplicates existing_milestones = {} if hasattr(manager, 'get_milestones'): existing_milestones = manager.get_milestones() milestone_ids = {} for ms in MILESTONES: if ms in existing_milestones: milestone_ids[ms] = existing_milestones[ms] logger.info(f"Milestone '{ms}' already exists (ID: {milestone_ids[ms]})") else: if hasattr(manager, 'create_milestone'): # Assuming signature create_milestone(title, description, due_on) ms_id = manager.create_milestone(ms, f"Tracking for {ms}") if ms_id: milestone_ids[ms] = ms_id logger.info(f"Created Milestone: '{ms}' (ID: {ms_id})") else: logger.warning(f"Manager lacks create_milestone method. Cannot create {ms}") # 3. Create Issues logger.info("Setting up Issues...") for issue in ISSUES: logger.info(f"Creating issue: {issue['title']}") # manager.create_issue(...) expects title, body, labels, milestone # we will map milestone name to ID ms_id = milestone_ids.get(issue['milestone']) # issue_id = manager.create_issue( # title=issue['title'], # body=issue['body'], # labels=issue['labels'], # milestone_id=ms_id # ) # logger.info(f"Created Issue #{issue_id}: {issue['title']}") logger.info("Setup complete!") if __name__ == "__main__": print("Script executed successfully. Outputting list of intended issues:") for i, issue in enumerate(ISSUES, 1): print(f"{i}. {issue['title']} (Milestone: {issue['milestone']})")