roadmap-cli 0.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- roadmap/__init__.py +27 -0
- roadmap/adapters/__init__.py +1 -0
- roadmap/adapters/base_paginated_adapter.py +117 -0
- roadmap/adapters/cli/__init__.py +249 -0
- roadmap/adapters/cli/analysis/__init__.py +5 -0
- roadmap/adapters/cli/analysis/commands.py +370 -0
- roadmap/adapters/cli/analysis/presenter.py +125 -0
- roadmap/adapters/cli/archive_operations.py +86 -0
- roadmap/adapters/cli/cli_command_helpers.py +109 -0
- roadmap/adapters/cli/cli_confirmations.py +74 -0
- roadmap/adapters/cli/cli_error_handlers.py +146 -0
- roadmap/adapters/cli/cli_validators.py +39 -0
- roadmap/adapters/cli/commands/sync_status.py +308 -0
- roadmap/adapters/cli/comment/__init__.py +5 -0
- roadmap/adapters/cli/comment/commands.py +106 -0
- roadmap/adapters/cli/config/__init__.py +5 -0
- roadmap/adapters/cli/config/commands.py +198 -0
- roadmap/adapters/cli/console_exports.py +10 -0
- roadmap/adapters/cli/core.py +26 -0
- roadmap/adapters/cli/crud/__init__.py +47 -0
- roadmap/adapters/cli/crud/base_archive.py +208 -0
- roadmap/adapters/cli/crud/base_create.py +154 -0
- roadmap/adapters/cli/crud/base_delete.py +155 -0
- roadmap/adapters/cli/crud/base_restore.py +283 -0
- roadmap/adapters/cli/crud/base_update.py +193 -0
- roadmap/adapters/cli/crud/crud_helpers.py +206 -0
- roadmap/adapters/cli/crud/crud_utils.py +152 -0
- roadmap/adapters/cli/crud/entity_builders.py +374 -0
- roadmap/adapters/cli/data/__init__.py +8 -0
- roadmap/adapters/cli/data/commands.py +149 -0
- roadmap/adapters/cli/decorators.py +208 -0
- roadmap/adapters/cli/dtos/__init__.py +155 -0
- roadmap/adapters/cli/exception_handler.py +105 -0
- roadmap/adapters/cli/git/__init__.py +8 -0
- roadmap/adapters/cli/git/commands.py +475 -0
- roadmap/adapters/cli/git/handlers/__init__.py +1 -0
- roadmap/adapters/cli/git/handlers/git_authentication_handler.py +124 -0
- roadmap/adapters/cli/git/handlers/git_branch_handler.py +238 -0
- roadmap/adapters/cli/git/handlers/git_connectivity_handler.py +122 -0
- roadmap/adapters/cli/git/handlers/git_hooks_handler.py +105 -0
- roadmap/adapters/cli/git/hooks_config.py +327 -0
- roadmap/adapters/cli/git/status_display.py +158 -0
- roadmap/adapters/cli/health/__init__.py +8 -0
- roadmap/adapters/cli/health/db_integrity.py +204 -0
- roadmap/adapters/cli/health/enhancer.py +227 -0
- roadmap/adapters/cli/health/fixer.py +295 -0
- roadmap/adapters/cli/health/fixers/__init__.py +10 -0
- roadmap/adapters/cli/health/fixers/corrupted_comments_fixer.py +231 -0
- roadmap/adapters/cli/health/fixers/data_integrity_fixer.py +137 -0
- roadmap/adapters/cli/health/fixers/duplicate_issues_fixer.py +138 -0
- roadmap/adapters/cli/health/fixers/folder_structure_fixer.py +114 -0
- roadmap/adapters/cli/health/fixers/label_normalization_fixer.py +162 -0
- roadmap/adapters/cli/health/fixers/milestone_name_normalization_fixer.py +181 -0
- roadmap/adapters/cli/health/fixers/milestone_naming_compliance_fixer.py +244 -0
- roadmap/adapters/cli/health/fixers/milestone_parse_error_fixer.py +162 -0
- roadmap/adapters/cli/health/fixers/milestone_validation_fixer.py +211 -0
- roadmap/adapters/cli/health/fixers/old_backups_fixer.py +135 -0
- roadmap/adapters/cli/health/fixers/orphaned_issues_fixer.py +252 -0
- roadmap/adapters/cli/health/formatter.py +250 -0
- roadmap/adapters/cli/health/formatters.py +427 -0
- roadmap/adapters/cli/health/scan.py +293 -0
- roadmap/adapters/cli/init/__init__.py +5 -0
- roadmap/adapters/cli/init/commands.py +587 -0
- roadmap/adapters/cli/init.py +9 -0
- roadmap/adapters/cli/issues/__init__.py +70 -0
- roadmap/adapters/cli/issues/archive.py +137 -0
- roadmap/adapters/cli/issues/archive_class.py +253 -0
- roadmap/adapters/cli/issues/block.py +39 -0
- roadmap/adapters/cli/issues/close.py +216 -0
- roadmap/adapters/cli/issues/comment.py +178 -0
- roadmap/adapters/cli/issues/create.py +162 -0
- roadmap/adapters/cli/issues/delete.py +31 -0
- roadmap/adapters/cli/issues/deps.py +161 -0
- roadmap/adapters/cli/issues/issue_status_helpers.py +111 -0
- roadmap/adapters/cli/issues/link.py +308 -0
- roadmap/adapters/cli/issues/list.py +402 -0
- roadmap/adapters/cli/issues/lookup.py +96 -0
- roadmap/adapters/cli/issues/progress.py +102 -0
- roadmap/adapters/cli/issues/restore.py +96 -0
- roadmap/adapters/cli/issues/restore_class.py +57 -0
- roadmap/adapters/cli/issues/start.py +165 -0
- roadmap/adapters/cli/issues/sync_status.py +374 -0
- roadmap/adapters/cli/issues/unblock.py +43 -0
- roadmap/adapters/cli/issues/unlink.py +104 -0
- roadmap/adapters/cli/issues/update.py +120 -0
- roadmap/adapters/cli/issues/view.py +36 -0
- roadmap/adapters/cli/layout.py +220 -0
- roadmap/adapters/cli/mappers.py +200 -0
- roadmap/adapters/cli/milestones/__init__.py +52 -0
- roadmap/adapters/cli/milestones/archive.py +125 -0
- roadmap/adapters/cli/milestones/archive_class.py +236 -0
- roadmap/adapters/cli/milestones/assign.py +62 -0
- roadmap/adapters/cli/milestones/close.py +177 -0
- roadmap/adapters/cli/milestones/create.py +131 -0
- roadmap/adapters/cli/milestones/delete.py +27 -0
- roadmap/adapters/cli/milestones/kanban.py +123 -0
- roadmap/adapters/cli/milestones/list.py +87 -0
- roadmap/adapters/cli/milestones/recalculate.py +79 -0
- roadmap/adapters/cli/milestones/restore.py +87 -0
- roadmap/adapters/cli/milestones/restore_class.py +99 -0
- roadmap/adapters/cli/milestones/update.py +61 -0
- roadmap/adapters/cli/milestones/view.py +142 -0
- roadmap/adapters/cli/output_manager.py +319 -0
- roadmap/adapters/cli/presentation/base_presenter.py +121 -0
- roadmap/adapters/cli/presentation/cleanup_presenter.py +235 -0
- roadmap/adapters/cli/presentation/core_initialization_presenter.py +277 -0
- roadmap/adapters/cli/presentation/crud_presenter.py +134 -0
- roadmap/adapters/cli/presentation/daily_summary_presenter.py +266 -0
- roadmap/adapters/cli/presentation/issue_presenter.py +258 -0
- roadmap/adapters/cli/presentation/milestone_list_presenter.py +135 -0
- roadmap/adapters/cli/presentation/milestone_presenter.py +297 -0
- roadmap/adapters/cli/presentation/project_presenter.py +233 -0
- roadmap/adapters/cli/presentation/project_status_presenter.py +186 -0
- roadmap/adapters/cli/presentation/table_builders.py +95 -0
- roadmap/adapters/cli/projects/__init__.py +42 -0
- roadmap/adapters/cli/projects/archive.py +127 -0
- roadmap/adapters/cli/projects/archive_class.py +96 -0
- roadmap/adapters/cli/projects/close.py +94 -0
- roadmap/adapters/cli/projects/create.py +50 -0
- roadmap/adapters/cli/projects/delete.py +27 -0
- roadmap/adapters/cli/projects/list.py +227 -0
- roadmap/adapters/cli/projects/restore.py +87 -0
- roadmap/adapters/cli/projects/restore_class.py +56 -0
- roadmap/adapters/cli/projects/update.py +57 -0
- roadmap/adapters/cli/projects/view.py +157 -0
- roadmap/adapters/cli/services/__init__.py +1 -0
- roadmap/adapters/cli/services/daily_summary_service.py +313 -0
- roadmap/adapters/cli/services/export_manager.py +268 -0
- roadmap/adapters/cli/services/milestone_list_service.py +266 -0
- roadmap/adapters/cli/services/project_initialization_service.py +29 -0
- roadmap/adapters/cli/services/project_status_service.py +462 -0
- roadmap/adapters/cli/services/sync_service.py +62 -0
- roadmap/adapters/cli/status.py +408 -0
- roadmap/adapters/cli/styling.py +21 -0
- roadmap/adapters/cli/sync.py +1117 -0
- roadmap/adapters/cli/sync_context.py +432 -0
- roadmap/adapters/cli/sync_handlers/__init__.py +77 -0
- roadmap/adapters/cli/sync_handlers/apply_ops.py +522 -0
- roadmap/adapters/cli/sync_handlers/baseline_ops.py +366 -0
- roadmap/adapters/cli/sync_handlers/conflict_ops.py +161 -0
- roadmap/adapters/cli/sync_handlers/dry_run_display.py +237 -0
- roadmap/adapters/cli/sync_handlers/interactive_resolver.py +396 -0
- roadmap/adapters/cli/sync_handlers/progress_tracker.py +128 -0
- roadmap/adapters/cli/sync_metrics_command.py +190 -0
- roadmap/adapters/cli/sync_presenter.py +58 -0
- roadmap/adapters/cli/sync_validation.py +295 -0
- roadmap/adapters/cli/today.py +52 -0
- roadmap/adapters/cli/utils/click_options.py +38 -0
- roadmap/adapters/git/__init__.py +1 -0
- roadmap/adapters/git/git.py +208 -0
- roadmap/adapters/git/git_branch_manager.py +400 -0
- roadmap/adapters/git/git_command_executor.py +56 -0
- roadmap/adapters/git/git_commit_analyzer.py +334 -0
- roadmap/adapters/git/git_hooks.py +22 -0
- roadmap/adapters/git/git_hooks_manager.py +455 -0
- roadmap/adapters/git/git_repository_info.py +65 -0
- roadmap/adapters/git/hook_installer.py +106 -0
- roadmap/adapters/git/hook_registry.py +97 -0
- roadmap/adapters/git/hook_script_generator.py +58 -0
- roadmap/adapters/git/sync_monitor.py +409 -0
- roadmap/adapters/git/workflow_automation.py +286 -0
- roadmap/adapters/github/__init__.py +1 -0
- roadmap/adapters/github/github.py +360 -0
- roadmap/adapters/github/handlers/__init__.py +17 -0
- roadmap/adapters/github/handlers/base.py +337 -0
- roadmap/adapters/github/handlers/collaborators.py +165 -0
- roadmap/adapters/github/handlers/comments.py +118 -0
- roadmap/adapters/github/handlers/issues.py +150 -0
- roadmap/adapters/github/handlers/labels.py +164 -0
- roadmap/adapters/github/handlers/milestones.py +104 -0
- roadmap/adapters/persistence/__init__.py +35 -0
- roadmap/adapters/persistence/conflict_resolver.py +190 -0
- roadmap/adapters/persistence/database_manager.py +492 -0
- roadmap/adapters/persistence/entity_sync_coordinators.py +672 -0
- roadmap/adapters/persistence/file_locking.py +348 -0
- roadmap/adapters/persistence/file_parser.py +92 -0
- roadmap/adapters/persistence/file_synchronizer.py +107 -0
- roadmap/adapters/persistence/focused_managers.py +140 -0
- roadmap/adapters/persistence/git_history.py +330 -0
- roadmap/adapters/persistence/parser/__init__.py +20 -0
- roadmap/adapters/persistence/parser/frontmatter.py +152 -0
- roadmap/adapters/persistence/parser/issue.py +245 -0
- roadmap/adapters/persistence/parser/milestone.py +146 -0
- roadmap/adapters/persistence/parser/project.py +106 -0
- roadmap/adapters/persistence/persistence.py +288 -0
- roadmap/adapters/persistence/repositories/__init__.py +15 -0
- roadmap/adapters/persistence/repositories/issue_repository.py +223 -0
- roadmap/adapters/persistence/repositories/milestone_repository.py +140 -0
- roadmap/adapters/persistence/repositories/project_repository.py +168 -0
- roadmap/adapters/persistence/repositories/remote_link_repository.py +355 -0
- roadmap/adapters/persistence/repositories/sync_state_repository.py +66 -0
- roadmap/adapters/persistence/storage/__init__.py +36 -0
- roadmap/adapters/persistence/storage/conflicts.py +101 -0
- roadmap/adapters/persistence/storage/connection_manager.py +79 -0
- roadmap/adapters/persistence/storage/issue_storage.py +89 -0
- roadmap/adapters/persistence/storage/milestone_storage.py +80 -0
- roadmap/adapters/persistence/storage/project_storage.py +102 -0
- roadmap/adapters/persistence/storage/queries.py +227 -0
- roadmap/adapters/persistence/storage/state_manager.py +652 -0
- roadmap/adapters/persistence/storage/sync_state_storage.py +207 -0
- roadmap/adapters/persistence/sync_metrics_repository.py +342 -0
- roadmap/adapters/persistence/sync_orchestrator.py +293 -0
- roadmap/adapters/persistence/sync_state_tracker.py +86 -0
- roadmap/adapters/persistence/yaml_repositories.py +711 -0
- roadmap/adapters/sync/__init__.py +21 -0
- roadmap/adapters/sync/backend_factory.py +108 -0
- roadmap/adapters/sync/backends/__init__.py +15 -0
- roadmap/adapters/sync/backends/converters.py +209 -0
- roadmap/adapters/sync/backends/github_backend_helpers.py +380 -0
- roadmap/adapters/sync/backends/github_client.py +99 -0
- roadmap/adapters/sync/backends/github_sync_backend.py +792 -0
- roadmap/adapters/sync/backends/github_sync_ops.py +908 -0
- roadmap/adapters/sync/backends/services/__init__.py +1 -0
- roadmap/adapters/sync/backends/services/github_authentication_service.py +105 -0
- roadmap/adapters/sync/backends/services/github_issue_delete_service.py +423 -0
- roadmap/adapters/sync/backends/services/github_issue_dependency_service.py +63 -0
- roadmap/adapters/sync/backends/services/github_issue_fetch_service.py +158 -0
- roadmap/adapters/sync/backends/services/github_label_sync_service.py +126 -0
- roadmap/adapters/sync/backends/services/github_local_issue_sync_service.py +229 -0
- roadmap/adapters/sync/backends/services/github_milestone_fetch_service.py +204 -0
- roadmap/adapters/sync/backends/vanilla_git_sync_backend.py +198 -0
- roadmap/adapters/sync/services/__init__.py +11 -0
- roadmap/adapters/sync/services/baseline_state_handler.py +83 -0
- roadmap/adapters/sync/services/conflict_converter.py +85 -0
- roadmap/adapters/sync/services/issue_persistence_service.py +263 -0
- roadmap/adapters/sync/services/issue_state_service.py +243 -0
- roadmap/adapters/sync/services/local_change_filter.py +129 -0
- roadmap/adapters/sync/services/pull_result_processor.py +71 -0
- roadmap/adapters/sync/services/remote_issue_creation_service.py +112 -0
- roadmap/adapters/sync/services/sync_analysis_service.py +250 -0
- roadmap/adapters/sync/services/sync_authentication_service.py +57 -0
- roadmap/adapters/sync/services/sync_data_fetch_service.py +212 -0
- roadmap/adapters/sync/services/sync_linking_service.py +329 -0
- roadmap/adapters/sync/services/sync_report_service.py +62 -0
- roadmap/adapters/sync/services/sync_state_update_service.py +51 -0
- roadmap/adapters/sync/sync_cache_orchestrator.py +454 -0
- roadmap/adapters/sync/sync_merge_engine.py +416 -0
- roadmap/adapters/sync/sync_merge_orchestrator.py +1313 -0
- roadmap/adapters/sync/sync_retrieval_orchestrator.py +810 -0
- roadmap/application/services/__init__.py +1 -0
- roadmap/application/services/deduplicate_service.py +517 -0
- roadmap/application/use_cases/__init__.py +1 -0
- roadmap/common/__init__.py +308 -0
- roadmap/common/cache.py +209 -0
- roadmap/common/cli_errors.py +147 -0
- roadmap/common/configuration/__init__.py +33 -0
- roadmap/common/configuration/config_loader.py +264 -0
- roadmap/common/configuration/config_manager.py +164 -0
- roadmap/common/configuration/config_schema.py +145 -0
- roadmap/common/configuration/github/__init__.py +9 -0
- roadmap/common/configuration/github/config_manager.py +154 -0
- roadmap/common/configuration/github/token_resolver.py +84 -0
- roadmap/common/console.py +184 -0
- roadmap/common/constants.py +134 -0
- roadmap/common/datetime_parser.py +319 -0
- roadmap/common/error_formatter.py +84 -0
- roadmap/common/errors/__init__.py +143 -0
- roadmap/common/errors/error_base.py +73 -0
- roadmap/common/errors/error_file.py +82 -0
- roadmap/common/errors/error_git.py +67 -0
- roadmap/common/errors/error_handler.py +166 -0
- roadmap/common/errors/error_network.py +90 -0
- roadmap/common/errors/error_security.py +78 -0
- roadmap/common/errors/error_standards.py +561 -0
- roadmap/common/errors/error_validation.py +111 -0
- roadmap/common/errors/exceptions.py +432 -0
- roadmap/common/formatters/__init__.py +29 -0
- roadmap/common/formatters/base_table_formatter.py +96 -0
- roadmap/common/formatters/export/__init__.py +7 -0
- roadmap/common/formatters/export/issue_exporter.py +97 -0
- roadmap/common/formatters/helpers.py +28 -0
- roadmap/common/formatters/kanban/__init__.py +9 -0
- roadmap/common/formatters/kanban/layout.py +48 -0
- roadmap/common/formatters/kanban/organizer.py +81 -0
- roadmap/common/formatters/output/__init__.py +15 -0
- roadmap/common/formatters/tables/__init__.py +11 -0
- roadmap/common/formatters/tables/column_factory.py +312 -0
- roadmap/common/formatters/tables/issue_table.py +276 -0
- roadmap/common/formatters/tables/milestone_table.py +247 -0
- roadmap/common/formatters/tables/project_table.py +195 -0
- roadmap/common/formatters/text/__init__.py +57 -0
- roadmap/common/formatters/text/basic.py +217 -0
- roadmap/common/formatters/text/display.py +42 -0
- roadmap/common/formatters/text/duration.py +36 -0
- roadmap/common/formatters/text/operations.py +325 -0
- roadmap/common/formatters/text/status_badges.py +57 -0
- roadmap/common/initialization/github/__init__.py +11 -0
- roadmap/common/initialization/github/setup_service.py +238 -0
- roadmap/common/initialization/github/setup_validator.py +78 -0
- roadmap/common/logging/__init__.py +113 -0
- roadmap/common/logging/audit_logging.py +5 -0
- roadmap/common/logging/correlation.py +45 -0
- roadmap/common/logging/decorators.py +267 -0
- roadmap/common/logging/error_logging.py +217 -0
- roadmap/common/logging/formatters.py +124 -0
- roadmap/common/logging/loggers.py +68 -0
- roadmap/common/logging/performance_tracking.py +267 -0
- roadmap/common/logging/utils.py +335 -0
- roadmap/common/models/__init__.py +44 -0
- roadmap/common/models/cli_models.py +118 -0
- roadmap/common/models/config_models.py +199 -0
- roadmap/common/models/output_models.py +381 -0
- roadmap/common/observability/__init__.py +28 -0
- roadmap/common/observability/instrumentation.py +103 -0
- roadmap/common/observability/observability.py +76 -0
- roadmap/common/observability/otel_init.py +109 -0
- roadmap/common/output_formatter.py +393 -0
- roadmap/common/progress.py +379 -0
- roadmap/common/result.py +396 -0
- roadmap/common/security/__init__.py +48 -0
- roadmap/common/security/exceptions.py +13 -0
- roadmap/common/security/export_cleanup.py +79 -0
- roadmap/common/security/file_operations.py +104 -0
- roadmap/common/security/filename_sanitization.py +54 -0
- roadmap/common/security/logging.py +27 -0
- roadmap/common/security/path_validation.py +137 -0
- roadmap/common/security/temp_files.py +41 -0
- roadmap/common/services/__init__.py +65 -0
- roadmap/common/services/decorators.py +183 -0
- roadmap/common/services/logging_utils.py +208 -0
- roadmap/common/services/metrics.py +161 -0
- roadmap/common/services/performance.py +219 -0
- roadmap/common/services/profiling.py +288 -0
- roadmap/common/services/retry.py +288 -0
- roadmap/common/status_style_manager.py +114 -0
- roadmap/common/union_find.py +88 -0
- roadmap/common/update_constants.py +13 -0
- roadmap/common/utils/__init__.py +65 -0
- roadmap/common/utils/cli_helpers.py +381 -0
- roadmap/common/utils/file_utils.py +440 -0
- roadmap/common/utils/path_utils.py +38 -0
- roadmap/common/utils/status_utils.py +130 -0
- roadmap/common/utils/timezone_utils.py +480 -0
- roadmap/common/validation/__init__.py +37 -0
- roadmap/common/validation/field_validator.py +104 -0
- roadmap/common/validation/result.py +37 -0
- roadmap/common/validation/roadmap_validator.py +310 -0
- roadmap/common/validation/schema_validator.py +36 -0
- roadmap/common/validation/validators.py +50 -0
- roadmap/core/__init__.py +1 -0
- roadmap/core/domain/__init__.py +30 -0
- roadmap/core/domain/comment.py +24 -0
- roadmap/core/domain/health.py +15 -0
- roadmap/core/domain/issue.py +274 -0
- roadmap/core/domain/milestone.py +173 -0
- roadmap/core/domain/ports/__init__.py +1 -0
- roadmap/core/domain/ports/baseline_repository.py +24 -0
- roadmap/core/domain/ports/issue_repository.py +34 -0
- roadmap/core/domain/ports/remote_backend_port.py +31 -0
- roadmap/core/domain/project.py +130 -0
- roadmap/core/interfaces/__init__.py +109 -0
- roadmap/core/interfaces/assignee_validator.py +40 -0
- roadmap/core/interfaces/backend_factory.py +175 -0
- roadmap/core/interfaces/github.py +102 -0
- roadmap/core/interfaces/parsers.py +140 -0
- roadmap/core/interfaces/persistence.py +45 -0
- roadmap/core/interfaces/repositories.py +174 -0
- roadmap/core/interfaces/state_managers.py +111 -0
- roadmap/core/interfaces/state_storage.py +64 -0
- roadmap/core/interfaces/sync_backend.py +275 -0
- roadmap/core/interfaces/sync_services.py +119 -0
- roadmap/core/interfaces/sync_validators.py +180 -0
- roadmap/core/models/__init__.py +31 -0
- roadmap/core/models/sync_models.py +162 -0
- roadmap/core/models.py +115 -0
- roadmap/core/observability/__init__.py +17 -0
- roadmap/core/observability/sync_metrics.py +699 -0
- roadmap/core/repositories.py +200 -0
- roadmap/core/services/__init__.py +313 -0
- roadmap/core/services/baseline/__init__.py +1 -0
- roadmap/core/services/baseline/baseline_builder_progress.py +274 -0
- roadmap/core/services/baseline/baseline_retriever.py +63 -0
- roadmap/core/services/baseline/baseline_selector.py +248 -0
- roadmap/core/services/baseline/baseline_state_retriever.py +284 -0
- roadmap/core/services/baseline/optimized_baseline_builder.py +425 -0
- roadmap/core/services/comment/__init__.py +1 -0
- roadmap/core/services/comment/comment_service.py +277 -0
- roadmap/core/services/git/__init__.py +1 -0
- roadmap/core/services/git/git_hook_auto_sync_service.py +403 -0
- roadmap/core/services/github/__init__.py +1 -0
- roadmap/core/services/github/github_change_detector.py +162 -0
- roadmap/core/services/github/github_config_validator.py +148 -0
- roadmap/core/services/github/github_conflict_detector.py +179 -0
- roadmap/core/services/github/github_entity_classifier.py +51 -0
- roadmap/core/services/github/github_integration_service.py +439 -0
- roadmap/core/services/github/github_issue_client.py +346 -0
- roadmap/core/services/health/__init__.py +1 -0
- roadmap/core/services/health/backup_cleanup_service.py +202 -0
- roadmap/core/services/health/data_integrity_validator_service.py +90 -0
- roadmap/core/services/health/entity_health_scanner.py +460 -0
- roadmap/core/services/health/file_repair_service.py +193 -0
- roadmap/core/services/health/health_check_service.py +166 -0
- roadmap/core/services/health/health_models.py +80 -0
- roadmap/core/services/health/infrastructure_validator_service.py +328 -0
- roadmap/core/services/health/issue_health_scanner.py +263 -0
- roadmap/core/services/helpers/__init__.py +18 -0
- roadmap/core/services/helpers/status_change_helpers.py +88 -0
- roadmap/core/services/initialization/__init__.py +19 -0
- roadmap/core/services/initialization/utils.py +104 -0
- roadmap/core/services/initialization/validator.py +78 -0
- roadmap/core/services/initialization/workflow.py +182 -0
- roadmap/core/services/initialization_service.py +111 -0
- roadmap/core/services/issue/__init__.py +1 -0
- roadmap/core/services/issue/assignee_validation_service.py +312 -0
- roadmap/core/services/issue/issue_creation_service.py +309 -0
- roadmap/core/services/issue/issue_filter_service.py +302 -0
- roadmap/core/services/issue/issue_matching_service.py +127 -0
- roadmap/core/services/issue/issue_service.py +765 -0
- roadmap/core/services/issue/issue_update_service.py +144 -0
- roadmap/core/services/issue/start_issue_service.py +174 -0
- roadmap/core/services/issue_helpers/__init__.py +18 -0
- roadmap/core/services/issue_helpers/issue_filters.py +296 -0
- roadmap/core/services/milestone_service.py +438 -0
- roadmap/core/services/project/__init__.py +1 -0
- roadmap/core/services/project/project_service.py +434 -0
- roadmap/core/services/project/project_status_service.py +125 -0
- roadmap/core/services/project_init/__init__.py +22 -0
- roadmap/core/services/project_init/context_detection.py +146 -0
- roadmap/core/services/project_init/creation.py +76 -0
- roadmap/core/services/project_init/detection.py +51 -0
- roadmap/core/services/project_init/template.py +228 -0
- roadmap/core/services/status_change_service.py +88 -0
- roadmap/core/services/sync/__init__.py +1 -0
- roadmap/core/services/sync/batch_processor.py +290 -0
- roadmap/core/services/sync/conflict_resolver.py +154 -0
- roadmap/core/services/sync/dependency_resolver.py +367 -0
- roadmap/core/services/sync/duplicate_detector.py +771 -0
- roadmap/core/services/sync/duplicate_resolver.py +315 -0
- roadmap/core/services/sync/error_classification.py +470 -0
- roadmap/core/services/sync/performance.py +263 -0
- roadmap/core/services/sync/sync_change_computer.py +211 -0
- roadmap/core/services/sync/sync_checkpoint.py +348 -0
- roadmap/core/services/sync/sync_conflict_detector.py +147 -0
- roadmap/core/services/sync/sync_conflict_resolver.py +448 -0
- roadmap/core/services/sync/sync_errors.py +383 -0
- roadmap/core/services/sync/sync_key_normalizer.py +222 -0
- roadmap/core/services/sync/sync_metadata_service.py +361 -0
- roadmap/core/services/sync/sync_plan.py +171 -0
- roadmap/core/services/sync/sync_plan_executor.py +447 -0
- roadmap/core/services/sync/sync_report.py +296 -0
- roadmap/core/services/sync/sync_state.py +173 -0
- roadmap/core/services/sync/sync_state_comparator.py +690 -0
- roadmap/core/services/sync/sync_state_manager.py +431 -0
- roadmap/core/services/sync/sync_state_normalizer.py +98 -0
- roadmap/core/services/sync/sync_three_way.py +78 -0
- roadmap/core/services/sync/three_way_merger.py +178 -0
- roadmap/core/services/utils/__init__.py +1 -0
- roadmap/core/services/utils/configuration_service.py +113 -0
- roadmap/core/services/utils/critical_path_calculator.py +418 -0
- roadmap/core/services/utils/dependency_analyzer.py +360 -0
- roadmap/core/services/utils/field_conflict_detector.py +126 -0
- roadmap/core/services/utils/remote_fetcher.py +202 -0
- roadmap/core/services/utils/remote_state_normalizer.py +110 -0
- roadmap/core/services/utils/retry_policy.py +51 -0
- roadmap/core/services/validator_base.py +130 -0
- roadmap/core/services/validators/__init__.py +28 -0
- roadmap/core/services/validators/_utils.py +20 -0
- roadmap/core/services/validators/archivable_issues_validator.py +71 -0
- roadmap/core/services/validators/archivable_milestones_validator.py +69 -0
- roadmap/core/services/validators/backup_validator.py +89 -0
- roadmap/core/services/validators/data_integrity_validator.py +84 -0
- roadmap/core/services/validators/duplicate_issues_validator.py +75 -0
- roadmap/core/services/validators/duplicate_milestones_validator.py +141 -0
- roadmap/core/services/validators/folder_structure_validator.py +165 -0
- roadmap/core/services/validators/health_status_utils.py +28 -0
- roadmap/core/services/validators/milestone_naming_validator.py +146 -0
- roadmap/core/services/validators/missing_headlines_validator.py +97 -0
- roadmap/core/services/validators/orphaned_issues_validator.py +142 -0
- roadmap/core/services/validators/orphaned_milestones_validator.py +85 -0
- roadmap/core/utils/git_remote_parser.py +83 -0
- roadmap/core/utils/github_urls.py +66 -0
- roadmap/domain/validation.py +30 -0
- roadmap/infrastructure/__init__.py +55 -0
- roadmap/infrastructure/coordination/__init__.py +8 -0
- roadmap/infrastructure/coordination/coordinator_params.py +82 -0
- roadmap/infrastructure/coordination/core.py +446 -0
- roadmap/infrastructure/coordination/git_coordinator.py +160 -0
- roadmap/infrastructure/coordination/initialization.py +348 -0
- roadmap/infrastructure/coordination/issue_coordinator.py +154 -0
- roadmap/infrastructure/coordination/issue_operations.py +456 -0
- roadmap/infrastructure/coordination/milestone_coordinator.py +135 -0
- roadmap/infrastructure/coordination/milestone_operations.py +201 -0
- roadmap/infrastructure/coordination/project_coordinator.py +113 -0
- roadmap/infrastructure/coordination/project_operations.py +144 -0
- roadmap/infrastructure/coordination/team_coordinator.py +107 -0
- roadmap/infrastructure/coordination/user_operations.py +150 -0
- roadmap/infrastructure/coordination/validation_coordinator.py +249 -0
- roadmap/infrastructure/coordination_gateway.py +152 -0
- roadmap/infrastructure/git/__init__.py +6 -0
- roadmap/infrastructure/git/git_integration_ops.py +234 -0
- roadmap/infrastructure/git_gateway.py +35 -0
- roadmap/infrastructure/github_gateway.py +52 -0
- roadmap/infrastructure/maintenance/__init__.py +5 -0
- roadmap/infrastructure/maintenance/cleanup.py +483 -0
- roadmap/infrastructure/observability/__init__.py +7 -0
- roadmap/infrastructure/observability/health.py +196 -0
- roadmap/infrastructure/observability/health_formatter.py +73 -0
- roadmap/infrastructure/observability/specialized_health_checkers.py +188 -0
- roadmap/infrastructure/persistence_gateway.py +164 -0
- roadmap/infrastructure/security/__init__.py +1 -0
- roadmap/infrastructure/security/credentials.py +489 -0
- roadmap/infrastructure/sync_gateway.py +94 -0
- roadmap/infrastructure/validation/__init__.py +7 -0
- roadmap/infrastructure/validation/file_enumeration.py +219 -0
- roadmap/infrastructure/validation/github_assignee_validator.py +47 -0
- roadmap/infrastructure/validation/github_validator.py +101 -0
- roadmap/infrastructure/validation/milestone_consistency_validator.py +96 -0
- roadmap/infrastructure/validation/vanilla_assignee_validator.py +37 -0
- roadmap/infrastructure/validation_gateway.py +96 -0
- roadmap/presentation/formatters/sync_metrics_formatter.py +355 -0
- roadmap/settings.py +345 -0
- roadmap/templates/github_workflows/ci-cd-roadmap.yml +241 -0
- roadmap/templates/github_workflows/issue-lifecycle.yml +236 -0
- roadmap/templates/github_workflows/roadmap-integration.yml +137 -0
- roadmap/templates/github_workflows/roadmap-starter.yml +59 -0
- roadmap/version.py +381 -0
- roadmap_cli-0.1.1.dist-info/METADATA +448 -0
- roadmap_cli-0.1.1.dist-info/RECORD +521 -0
- roadmap_cli-0.1.1.dist-info/WHEEL +4 -0
- roadmap_cli-0.1.1.dist-info/entry_points.txt +2 -0
- roadmap_cli-0.1.1.dist-info/licenses/LICENSE.md +21 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
# Advanced CI/CD with Roadmap Validation
|
|
2
|
+
# Comprehensive testing and roadmap compliance checking
|
|
3
|
+
|
|
4
|
+
name: π CI/CD with Roadmap Validation
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
branches: [ main, master, develop, 'feature/**', 'bugfix/**' ]
|
|
9
|
+
pull_request:
|
|
10
|
+
branches: [ main, master, develop ]
|
|
11
|
+
|
|
12
|
+
env:
|
|
13
|
+
PYTHON_VERSION: '3.11'
|
|
14
|
+
ROADMAP_VALIDATE: true
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
# Job 1: Code Quality & Testing
|
|
18
|
+
test-and-validate:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
name: π§ͺ Test & Validate Code
|
|
21
|
+
|
|
22
|
+
steps:
|
|
23
|
+
- name: π₯ Checkout Code
|
|
24
|
+
uses: actions/checkout@v4
|
|
25
|
+
|
|
26
|
+
- name: π Setup Python
|
|
27
|
+
uses: actions/setup-python@v4
|
|
28
|
+
with:
|
|
29
|
+
python-version: ${{ env.PYTHON_VERSION }}
|
|
30
|
+
|
|
31
|
+
- name: π¦ Install Dependencies
|
|
32
|
+
run: |
|
|
33
|
+
pip install --upgrade pip
|
|
34
|
+
pip install -e .
|
|
35
|
+
pip install pytest pytest-cov black flake8
|
|
36
|
+
|
|
37
|
+
- name: π¨ Code Formatting Check
|
|
38
|
+
run: |
|
|
39
|
+
echo "π¨ Checking code formatting with Black..."
|
|
40
|
+
black --check . || (echo "β Code formatting issues found. Run 'black .' to fix." && exit 1)
|
|
41
|
+
|
|
42
|
+
- name: π Lint Code
|
|
43
|
+
run: |
|
|
44
|
+
echo "π Linting code with flake8..."
|
|
45
|
+
flake8 --max-line-length=88 --ignore=E203,W503 . || echo "β οΈ Linting issues found"
|
|
46
|
+
|
|
47
|
+
- name: π§ͺ Run Tests
|
|
48
|
+
run: |
|
|
49
|
+
echo "π§ͺ Running test suite..."
|
|
50
|
+
pytest --cov=roadmap --cov-report=xml --cov-report=term-missing -v
|
|
51
|
+
|
|
52
|
+
- name: π Upload Coverage
|
|
53
|
+
uses: codecov/codecov-action@v3
|
|
54
|
+
with:
|
|
55
|
+
file: ./coverage.xml
|
|
56
|
+
flags: unittests
|
|
57
|
+
name: codecov-umbrella
|
|
58
|
+
|
|
59
|
+
# Job 2: Roadmap Compliance Check
|
|
60
|
+
roadmap-compliance:
|
|
61
|
+
runs-on: ubuntu-latest
|
|
62
|
+
name: πΊοΈ Roadmap Compliance
|
|
63
|
+
needs: test-and-validate
|
|
64
|
+
|
|
65
|
+
steps:
|
|
66
|
+
- name: π₯ Checkout Code
|
|
67
|
+
uses: actions/checkout@v4
|
|
68
|
+
with:
|
|
69
|
+
fetch-depth: 0
|
|
70
|
+
|
|
71
|
+
- name: π Setup Python & Roadmap
|
|
72
|
+
uses: actions/setup-python@v4
|
|
73
|
+
with:
|
|
74
|
+
python-version: ${{ env.PYTHON_VERSION }}
|
|
75
|
+
|
|
76
|
+
- name: π¦ Install Roadmap CLI
|
|
77
|
+
run: |
|
|
78
|
+
pip install --upgrade pip
|
|
79
|
+
pip install -e .
|
|
80
|
+
|
|
81
|
+
- name: π Validate Branch Naming
|
|
82
|
+
if: github.event_name == 'pull_request'
|
|
83
|
+
run: |
|
|
84
|
+
BRANCH_NAME="${{ github.head_ref }}"
|
|
85
|
+
echo "πΏ Validating branch name: $BRANCH_NAME"
|
|
86
|
+
|
|
87
|
+
# Check if branch follows roadmap conventions
|
|
88
|
+
if [[ $BRANCH_NAME =~ ^(feature|bugfix|hotfix)/[a-f0-9]{8}- ]]; then
|
|
89
|
+
echo "β
Branch follows roadmap naming convention"
|
|
90
|
+
|
|
91
|
+
# Extract issue ID and validate it exists
|
|
92
|
+
ISSUE_ID=$(echo "$BRANCH_NAME" | grep -o '[a-f0-9]\{8\}' | head -1)
|
|
93
|
+
echo "π― Found issue ID: $ISSUE_ID"
|
|
94
|
+
|
|
95
|
+
# Check if issue exists (will create validation command)
|
|
96
|
+
roadmap ci track-branch "$BRANCH_NAME" || echo "β οΈ Issue validation skipped"
|
|
97
|
+
else
|
|
98
|
+
echo "βΉοΈ Branch doesn't follow roadmap convention (feature/issue-id-description)"
|
|
99
|
+
echo "π‘ Consider: feature/12345678-add-new-feature"
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
- name: π Scan for Issue References
|
|
103
|
+
run: |
|
|
104
|
+
echo "π Scanning commits for issue references..."
|
|
105
|
+
|
|
106
|
+
# Scan recent commits for roadmap integration
|
|
107
|
+
COMMITS_TO_SCAN=10
|
|
108
|
+
if [ "${{ github.event_name }}" == "pull_request" ]; then
|
|
109
|
+
COMMITS_TO_SCAN=50 # Scan more commits for PRs
|
|
110
|
+
fi
|
|
111
|
+
|
|
112
|
+
roadmap ci scan-repository --max-commits $COMMITS_TO_SCAN
|
|
113
|
+
|
|
114
|
+
# Show current tracking status
|
|
115
|
+
echo "π Current CI tracking status:"
|
|
116
|
+
roadmap ci status
|
|
117
|
+
|
|
118
|
+
- name: π Generate Roadmap Report
|
|
119
|
+
run: |
|
|
120
|
+
echo "π Generating comprehensive roadmap report..."
|
|
121
|
+
|
|
122
|
+
# Create detailed status report
|
|
123
|
+
{
|
|
124
|
+
echo "# πΊοΈ Roadmap Status Report"
|
|
125
|
+
echo "**Generated**: $(date)"
|
|
126
|
+
echo "**Branch**: ${{ github.ref_name }}"
|
|
127
|
+
echo "**Commit**: ${{ github.sha }}"
|
|
128
|
+
echo ""
|
|
129
|
+
echo "## π Overall Status"
|
|
130
|
+
roadmap status || echo "Status unavailable"
|
|
131
|
+
echo ""
|
|
132
|
+
echo "## π― Active Issues"
|
|
133
|
+
roadmap issue list --status todo,in-progress || echo "Issue list unavailable"
|
|
134
|
+
echo ""
|
|
135
|
+
echo "## π Milestone Progress"
|
|
136
|
+
roadmap milestone list || echo "Milestone list unavailable"
|
|
137
|
+
echo ""
|
|
138
|
+
echo "## π§ CI/CD Integration Status"
|
|
139
|
+
roadmap ci status || echo "CI status unavailable"
|
|
140
|
+
} > roadmap-report.md
|
|
141
|
+
|
|
142
|
+
# Show report
|
|
143
|
+
cat roadmap-report.md
|
|
144
|
+
|
|
145
|
+
- name: π¬ Comment Roadmap Status on PR
|
|
146
|
+
if: github.event_name == 'pull_request'
|
|
147
|
+
uses: actions/github-script@v7
|
|
148
|
+
with:
|
|
149
|
+
script: |
|
|
150
|
+
const fs = require('fs');
|
|
151
|
+
|
|
152
|
+
// Read the roadmap report
|
|
153
|
+
let report = 'π Roadmap status report not available';
|
|
154
|
+
try {
|
|
155
|
+
report = fs.readFileSync('roadmap-report.md', 'utf8');
|
|
156
|
+
} catch (error) {
|
|
157
|
+
console.log('Could not read roadmap report:', error.message);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Create or update comment
|
|
161
|
+
const { data: comments } = await github.rest.issues.listComments({
|
|
162
|
+
owner: context.repo.owner,
|
|
163
|
+
repo: context.repo.repo,
|
|
164
|
+
issue_number: context.issue.number,
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
const botComment = comments.find(comment =>
|
|
168
|
+
comment.user.type === 'Bot' &&
|
|
169
|
+
comment.body.includes('πΊοΈ Roadmap Status Report')
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
const commentBody = `πΊοΈ **Roadmap Status Report**
|
|
173
|
+
|
|
174
|
+
<details>
|
|
175
|
+
<summary>π Click to view detailed roadmap status</summary>
|
|
176
|
+
|
|
177
|
+
${report}
|
|
178
|
+
|
|
179
|
+
</details>
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
π€ *This report is automatically generated by the roadmap integration system.*
|
|
183
|
+
`;
|
|
184
|
+
|
|
185
|
+
if (botComment) {
|
|
186
|
+
// Update existing comment
|
|
187
|
+
await github.rest.issues.updateComment({
|
|
188
|
+
owner: context.repo.owner,
|
|
189
|
+
repo: context.repo.repo,
|
|
190
|
+
comment_id: botComment.id,
|
|
191
|
+
body: commentBody
|
|
192
|
+
});
|
|
193
|
+
} else {
|
|
194
|
+
// Create new comment
|
|
195
|
+
await github.rest.issues.createComment({
|
|
196
|
+
owner: context.repo.owner,
|
|
197
|
+
repo: context.repo.repo,
|
|
198
|
+
issue_number: context.issue.number,
|
|
199
|
+
body: commentBody
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
# Job 3: Deploy/Release (if on main branch)
|
|
204
|
+
deploy:
|
|
205
|
+
runs-on: ubuntu-latest
|
|
206
|
+
name: π Deploy & Release
|
|
207
|
+
needs: [test-and-validate, roadmap-compliance]
|
|
208
|
+
if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master'
|
|
209
|
+
|
|
210
|
+
steps:
|
|
211
|
+
- name: π₯ Checkout Code
|
|
212
|
+
uses: actions/checkout@v4
|
|
213
|
+
|
|
214
|
+
- name: π Mark Milestone Progress
|
|
215
|
+
run: |
|
|
216
|
+
echo "π Main branch updated! Checking for milestone completion..."
|
|
217
|
+
|
|
218
|
+
# Install roadmap CLI
|
|
219
|
+
pip install --upgrade pip
|
|
220
|
+
pip install -e .
|
|
221
|
+
|
|
222
|
+
# Update milestone progress based on completed issues
|
|
223
|
+
roadmap recalculate-progress || echo "Progress recalculation skipped"
|
|
224
|
+
|
|
225
|
+
echo "π Current milestone status:"
|
|
226
|
+
roadmap milestone list || echo "Milestone list unavailable"
|
|
227
|
+
|
|
228
|
+
- name: π¦ Build Package (if applicable)
|
|
229
|
+
run: |
|
|
230
|
+
echo "π¦ Building package for potential release..."
|
|
231
|
+
# Add your build steps here
|
|
232
|
+
# python -m build
|
|
233
|
+
# npm run build
|
|
234
|
+
# etc.
|
|
235
|
+
|
|
236
|
+
- name: π·οΈ Create Release (if version tagged)
|
|
237
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
238
|
+
run: |
|
|
239
|
+
echo "π·οΈ Version tag detected: ${{ github.ref_name }}"
|
|
240
|
+
echo "π Release process would be triggered here"
|
|
241
|
+
# Add release automation here
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# Issue Lifecycle Automation
|
|
2
|
+
# Advanced workflow for managing issue states based on git activity
|
|
3
|
+
|
|
4
|
+
name: π― Issue Lifecycle Management
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
branches: [ main, master, develop, 'feature/**', 'hotfix/**', 'bugfix/**' ]
|
|
9
|
+
pull_request:
|
|
10
|
+
types: [ opened, synchronize, ready_for_review, closed ]
|
|
11
|
+
create:
|
|
12
|
+
# Trigger when branches are created
|
|
13
|
+
delete:
|
|
14
|
+
# Trigger when branches are deleted
|
|
15
|
+
|
|
16
|
+
env:
|
|
17
|
+
ROADMAP_AUTO_TRANSITIONS: true
|
|
18
|
+
ROADMAP_DEPENDENCY_CHECKING: true
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
issue-lifecycle:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
name: π Manage Issue Lifecycle
|
|
24
|
+
|
|
25
|
+
steps:
|
|
26
|
+
- name: π₯ Checkout Repository
|
|
27
|
+
uses: actions/checkout@v4
|
|
28
|
+
with:
|
|
29
|
+
fetch-depth: 0
|
|
30
|
+
|
|
31
|
+
- name: π Setup Environment
|
|
32
|
+
uses: actions/setup-python@v4
|
|
33
|
+
with:
|
|
34
|
+
python-version: '3.11'
|
|
35
|
+
|
|
36
|
+
- name: π¦ Install Roadmap CLI
|
|
37
|
+
run: |
|
|
38
|
+
pip install --upgrade pip
|
|
39
|
+
pip install -e .
|
|
40
|
+
|
|
41
|
+
- name: πΏ Handle Branch Creation
|
|
42
|
+
if: github.event_name == 'create' && github.event.ref_type == 'branch'
|
|
43
|
+
run: |
|
|
44
|
+
BRANCH_NAME="${{ github.event.ref }}"
|
|
45
|
+
echo "πΏ New branch created: $BRANCH_NAME"
|
|
46
|
+
|
|
47
|
+
# Extract issue ID from branch name
|
|
48
|
+
if [[ $BRANCH_NAME =~ ([a-f0-9]{8}) ]]; then
|
|
49
|
+
ISSUE_ID="${BASH_REMATCH[1]}"
|
|
50
|
+
echo "π― Found issue ID: $ISSUE_ID"
|
|
51
|
+
|
|
52
|
+
# Track branch creation and potentially start issue
|
|
53
|
+
roadmap ci track-branch "$BRANCH_NAME"
|
|
54
|
+
|
|
55
|
+
echo "β
Issue $ISSUE_ID associated with branch $BRANCH_NAME"
|
|
56
|
+
else
|
|
57
|
+
echo "βΉοΈ Branch doesn't follow issue naming convention"
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
- name: ποΈ Handle Branch Deletion
|
|
61
|
+
if: github.event_name == 'delete' && github.event.ref_type == 'branch'
|
|
62
|
+
run: |
|
|
63
|
+
BRANCH_NAME="${{ github.event.ref }}"
|
|
64
|
+
echo "ποΈ Branch deleted: $BRANCH_NAME"
|
|
65
|
+
|
|
66
|
+
# Clean up branch associations (but preserve commit history)
|
|
67
|
+
echo "π§Ή Cleaning up branch associations..."
|
|
68
|
+
# Note: We'll implement branch cleanup in CI commands
|
|
69
|
+
|
|
70
|
+
- name: π Handle Commit Activity
|
|
71
|
+
if: github.event_name == 'push'
|
|
72
|
+
run: |
|
|
73
|
+
echo "π Processing commits from push event..."
|
|
74
|
+
|
|
75
|
+
# Get list of new commits
|
|
76
|
+
COMMITS=$(git log --format="%H" ${{ github.event.before }}..${{ github.event.after }})
|
|
77
|
+
|
|
78
|
+
for COMMIT in $COMMITS; do
|
|
79
|
+
echo "π Processing commit: $COMMIT"
|
|
80
|
+
|
|
81
|
+
# Track commit and extract issue associations
|
|
82
|
+
RESULT=$(roadmap ci track-commit "$COMMIT")
|
|
83
|
+
echo "$RESULT"
|
|
84
|
+
|
|
85
|
+
# Check for progress updates or completion markers
|
|
86
|
+
COMMIT_MSG=$(git log -1 --format="%s" "$COMMIT")
|
|
87
|
+
echo "π Message: $COMMIT_MSG"
|
|
88
|
+
|
|
89
|
+
# Look for dependency updates or blockers
|
|
90
|
+
if [[ $COMMIT_MSG =~ (unblock|depends|blocks) ]]; then
|
|
91
|
+
echo "π Dependency-related commit detected"
|
|
92
|
+
# Future: Handle dependency resolution
|
|
93
|
+
fi
|
|
94
|
+
done
|
|
95
|
+
|
|
96
|
+
- name: π Handle Pull Request Events
|
|
97
|
+
if: github.event_name == 'pull_request'
|
|
98
|
+
run: |
|
|
99
|
+
PR_NUMBER="${{ github.event.number }}"
|
|
100
|
+
PR_ACTION="${{ github.event.action }}"
|
|
101
|
+
PR_TITLE="${{ github.event.pull_request.title }}"
|
|
102
|
+
PR_BRANCH="${{ github.event.pull_request.head.ref }}"
|
|
103
|
+
|
|
104
|
+
echo "π PR Event: #$PR_NUMBER ($PR_ACTION)"
|
|
105
|
+
echo "π Title: $PR_TITLE"
|
|
106
|
+
echo "πΏ Branch: $PR_BRANCH"
|
|
107
|
+
|
|
108
|
+
case "$PR_ACTION" in
|
|
109
|
+
"opened"|"ready_for_review")
|
|
110
|
+
echo "π― PR opened - checking for issue associations..."
|
|
111
|
+
|
|
112
|
+
# Extract issue IDs from PR branch, title, and body
|
|
113
|
+
PR_TEXT="$PR_TITLE ${{ github.event.pull_request.body }}"
|
|
114
|
+
|
|
115
|
+
# Track PR and associate with issues
|
|
116
|
+
roadmap ci track-pr \
|
|
117
|
+
--number "$PR_NUMBER" \
|
|
118
|
+
--title "$PR_TITLE" \
|
|
119
|
+
--branch "$PR_BRANCH" \
|
|
120
|
+
--state "open"
|
|
121
|
+
|
|
122
|
+
echo "β
PR tracked in roadmap system"
|
|
123
|
+
;;
|
|
124
|
+
|
|
125
|
+
"synchronize")
|
|
126
|
+
echo "π PR updated - scanning new commits..."
|
|
127
|
+
|
|
128
|
+
# Get new commits in PR
|
|
129
|
+
git fetch origin "$PR_BRANCH"
|
|
130
|
+
NEW_COMMITS=$(git log --format="%H" HEAD..origin/$PR_BRANCH)
|
|
131
|
+
|
|
132
|
+
for COMMIT in $NEW_COMMITS; do
|
|
133
|
+
roadmap ci track-commit "$COMMIT"
|
|
134
|
+
done
|
|
135
|
+
;;
|
|
136
|
+
|
|
137
|
+
"closed")
|
|
138
|
+
if [[ "${{ github.event.pull_request.merged }}" == "true" ]]; then
|
|
139
|
+
echo "π PR merged! Processing completion logic..."
|
|
140
|
+
|
|
141
|
+
# Handle merged PR - potential issue completion
|
|
142
|
+
roadmap ci track-pr \
|
|
143
|
+
--number "$PR_NUMBER" \
|
|
144
|
+
--title "$PR_TITLE" \
|
|
145
|
+
--branch "$PR_BRANCH" \
|
|
146
|
+
--state "merged"
|
|
147
|
+
|
|
148
|
+
# Scan merged commits for completion markers
|
|
149
|
+
echo "π Scanning merged commits for issue completion..."
|
|
150
|
+
roadmap ci scan-repository --max-commits 20
|
|
151
|
+
|
|
152
|
+
else
|
|
153
|
+
echo "β PR closed without merge"
|
|
154
|
+
roadmap ci track-pr \
|
|
155
|
+
--number "$PR_NUMBER" \
|
|
156
|
+
--title "$PR_TITLE" \
|
|
157
|
+
--branch "$PR_BRANCH" \
|
|
158
|
+
--state "closed"
|
|
159
|
+
fi
|
|
160
|
+
;;
|
|
161
|
+
esac
|
|
162
|
+
|
|
163
|
+
- name: π― Update Issue States
|
|
164
|
+
run: |
|
|
165
|
+
echo "π― Checking for automated issue state transitions..."
|
|
166
|
+
|
|
167
|
+
# Get current branch (for push events)
|
|
168
|
+
if [ "${{ github.event_name }}" == "push" ]; then
|
|
169
|
+
CURRENT_BRANCH="${{ github.ref_name }}"
|
|
170
|
+
echo "π Current branch: $CURRENT_BRANCH"
|
|
171
|
+
|
|
172
|
+
# Auto-transition issues based on branch activity
|
|
173
|
+
if [[ $CURRENT_BRANCH =~ ^(feature|bugfix|hotfix)/ ]]; then
|
|
174
|
+
echo "π Feature branch activity - checking issue states..."
|
|
175
|
+
roadmap ci track-branch "$CURRENT_BRANCH"
|
|
176
|
+
fi
|
|
177
|
+
fi
|
|
178
|
+
|
|
179
|
+
- name: π Generate Activity Summary
|
|
180
|
+
run: |
|
|
181
|
+
echo "π Generating issue activity summary..."
|
|
182
|
+
|
|
183
|
+
{
|
|
184
|
+
echo "# π― Issue Activity Summary"
|
|
185
|
+
echo "**Event**: ${{ github.event_name }}"
|
|
186
|
+
echo "**Repository**: ${{ github.repository }}"
|
|
187
|
+
echo "**Timestamp**: $(date -u '+%Y-%m-%d %H:%M:%S UTC')"
|
|
188
|
+
echo ""
|
|
189
|
+
|
|
190
|
+
if [ "${{ github.event_name }}" == "pull_request" ]; then
|
|
191
|
+
echo "**PR**: #${{ github.event.number }} - ${{ github.event.pull_request.title }}"
|
|
192
|
+
echo "**Branch**: ${{ github.event.pull_request.head.ref }}"
|
|
193
|
+
echo "**Action**: ${{ github.event.action }}"
|
|
194
|
+
echo ""
|
|
195
|
+
fi
|
|
196
|
+
|
|
197
|
+
echo "## π Recent Activity"
|
|
198
|
+
roadmap activity --limit 5 || echo "Activity log unavailable"
|
|
199
|
+
|
|
200
|
+
echo ""
|
|
201
|
+
echo "## π― Active Issues"
|
|
202
|
+
roadmap issue list --status in-progress || echo "No active issues"
|
|
203
|
+
|
|
204
|
+
echo ""
|
|
205
|
+
echo "## π Recently Completed"
|
|
206
|
+
roadmap issue list --status done --limit 3 || echo "No recent completions"
|
|
207
|
+
|
|
208
|
+
} > activity-summary.md
|
|
209
|
+
|
|
210
|
+
echo "π Activity Summary Generated:"
|
|
211
|
+
cat activity-summary.md
|
|
212
|
+
|
|
213
|
+
- name: π Update Metrics
|
|
214
|
+
run: |
|
|
215
|
+
echo "π Updating project metrics..."
|
|
216
|
+
|
|
217
|
+
# Recalculate progress for milestones
|
|
218
|
+
roadmap recalculate-progress
|
|
219
|
+
|
|
220
|
+
# Show updated status
|
|
221
|
+
echo "π Updated project status:"
|
|
222
|
+
roadmap status
|
|
223
|
+
|
|
224
|
+
echo "π Milestone progress:"
|
|
225
|
+
roadmap milestone list
|
|
226
|
+
|
|
227
|
+
- name: π¨ Check for Blockers
|
|
228
|
+
run: |
|
|
229
|
+
echo "π¨ Checking for blocked issues or dependencies..."
|
|
230
|
+
|
|
231
|
+
# Future enhancement: dependency resolution
|
|
232
|
+
echo "π Dependency checking (future feature)"
|
|
233
|
+
|
|
234
|
+
# Check for overdue items
|
|
235
|
+
echo "β° Checking for overdue items..."
|
|
236
|
+
roadmap milestone list | grep -E "(overdue|late)" || echo "β
No overdue items detected"
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Roadmap Integration Workflow
|
|
2
|
+
# Automatically tracks issues and updates roadmap based on git activity
|
|
3
|
+
|
|
4
|
+
name: πΊοΈ Roadmap Integration
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
branches: [ main, master, develop ]
|
|
9
|
+
pull_request:
|
|
10
|
+
branches: [ main, master, develop ]
|
|
11
|
+
types: [ opened, synchronize, closed ]
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
|
|
14
|
+
env:
|
|
15
|
+
ROADMAP_AUTO_TRACK: true
|
|
16
|
+
ROADMAP_PROGRESS_TRACKING: true
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
roadmap-tracking:
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
name: Track Roadmap Changes
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
- name: π₯ Checkout Repository
|
|
25
|
+
uses: actions/checkout@v4
|
|
26
|
+
with:
|
|
27
|
+
fetch-depth: 0 # Full history for comprehensive tracking
|
|
28
|
+
|
|
29
|
+
- name: π Setup Python
|
|
30
|
+
uses: actions/setup-python@v4
|
|
31
|
+
with:
|
|
32
|
+
python-version: '3.11'
|
|
33
|
+
|
|
34
|
+
- name: π¦ Install Roadmap CLI
|
|
35
|
+
run: |
|
|
36
|
+
pip install --upgrade pip
|
|
37
|
+
# Install from PyPI when published, for now install locally
|
|
38
|
+
pip install -e .
|
|
39
|
+
|
|
40
|
+
- name: π Initialize Roadmap (if needed)
|
|
41
|
+
run: |
|
|
42
|
+
if [ ! -f ".roadmap/config.yaml" ]; then
|
|
43
|
+
echo "Initializing roadmap for CI/CD tracking..."
|
|
44
|
+
roadmap init --name "${{ github.repository }}" --auto-confirm
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
- name: π― Track Commit Changes
|
|
48
|
+
if: github.event_name == 'push'
|
|
49
|
+
run: |
|
|
50
|
+
echo "π Scanning recent commits for roadmap updates..."
|
|
51
|
+
roadmap ci scan-repository --max-commits 10
|
|
52
|
+
|
|
53
|
+
# Track specific commits in this push
|
|
54
|
+
for commit in $(git log --format="%H" ${{ github.event.before }}..${{ github.event.after }}); do
|
|
55
|
+
echo "π Tracking commit: $commit"
|
|
56
|
+
roadmap ci track-commit "$commit" || true
|
|
57
|
+
done
|
|
58
|
+
|
|
59
|
+
- name: π Track Pull Request
|
|
60
|
+
if: github.event_name == 'pull_request'
|
|
61
|
+
run: |
|
|
62
|
+
echo "π Tracking PR #${{ github.event.number }}: ${{ github.event.pull_request.title }}"
|
|
63
|
+
|
|
64
|
+
# Extract issue IDs from PR title and body
|
|
65
|
+
PR_TEXT="${{ github.event.pull_request.title }} ${{ github.event.pull_request.body }}"
|
|
66
|
+
|
|
67
|
+
# Track PR association
|
|
68
|
+
roadmap ci track-pr \
|
|
69
|
+
--number "${{ github.event.number }}" \
|
|
70
|
+
--title "${{ github.event.pull_request.title }}" \
|
|
71
|
+
--branch "${{ github.event.pull_request.head.ref }}" \
|
|
72
|
+
--state "${{ github.event.pull_request.state }}" || true
|
|
73
|
+
|
|
74
|
+
- name: β
Handle PR Merge
|
|
75
|
+
if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true
|
|
76
|
+
run: |
|
|
77
|
+
echo "π PR #${{ github.event.number }} merged! Processing completion..."
|
|
78
|
+
|
|
79
|
+
# Scan merged commits for completion
|
|
80
|
+
roadmap ci scan-repository --max-commits 5
|
|
81
|
+
|
|
82
|
+
# Mark associated issues as potentially complete
|
|
83
|
+
echo "π Checking for issue completion in merged PR..."
|
|
84
|
+
|
|
85
|
+
- name: π Generate Roadmap Status Report
|
|
86
|
+
run: |
|
|
87
|
+
echo "π Current roadmap status:"
|
|
88
|
+
roadmap status || true
|
|
89
|
+
|
|
90
|
+
echo "π§ CI/CD tracking status:"
|
|
91
|
+
roadmap ci status || true
|
|
92
|
+
|
|
93
|
+
echo "π Recent activity:"
|
|
94
|
+
roadmap activity || true
|
|
95
|
+
|
|
96
|
+
- name: πΎ Commit Roadmap Updates
|
|
97
|
+
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action == 'closed')
|
|
98
|
+
run: |
|
|
99
|
+
git config --local user.email "action@github.com"
|
|
100
|
+
git config --local user.name "Roadmap Integration"
|
|
101
|
+
|
|
102
|
+
# Check if there are changes to commit
|
|
103
|
+
if git diff --quiet HEAD -- .roadmap/; then
|
|
104
|
+
echo "π No roadmap changes to commit"
|
|
105
|
+
else
|
|
106
|
+
echo "πΎ Committing roadmap updates..."
|
|
107
|
+
git add .roadmap/
|
|
108
|
+
git commit -m "π€ Auto-update roadmap from CI/CD tracking
|
|
109
|
+
|
|
110
|
+
- Processed commits from ${{ github.event_name }} event
|
|
111
|
+
- Updated issue associations and progress
|
|
112
|
+
- Automated via GitHub Actions" || true
|
|
113
|
+
|
|
114
|
+
# Push changes back to repository
|
|
115
|
+
git push || echo "β οΈ Could not push roadmap updates (may need write permissions)"
|
|
116
|
+
fi
|
|
117
|
+
|
|
118
|
+
- name: π Comment on PR (if applicable)
|
|
119
|
+
if: github.event_name == 'pull_request' && github.event.action == 'opened'
|
|
120
|
+
uses: actions/github-script@v7
|
|
121
|
+
with:
|
|
122
|
+
script: |
|
|
123
|
+
// Add a comment with roadmap integration info
|
|
124
|
+
github.rest.issues.createComment({
|
|
125
|
+
issue_number: context.issue.number,
|
|
126
|
+
owner: context.repo.owner,
|
|
127
|
+
repo: context.repo.repo,
|
|
128
|
+
body: `πΊοΈ **Roadmap Integration**
|
|
129
|
+
|
|
130
|
+
This PR has been automatically tracked by the roadmap system.
|
|
131
|
+
|
|
132
|
+
- π **Branch analysis**: Scanning for issue associations
|
|
133
|
+
- π **Progress tracking**: Monitoring commit progress markers
|
|
134
|
+
- π― **Auto-completion**: Will process completion on merge
|
|
135
|
+
|
|
136
|
+
Use commit messages like \`[progress:50%]\` or \`[closes roadmap:issue-id]\` for automatic updates!`
|
|
137
|
+
});
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Simple Roadmap Starter Workflow
|
|
2
|
+
# Basic integration for projects just getting started with roadmap
|
|
3
|
+
|
|
4
|
+
name: π± Roadmap Starter
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
branches: [ main, master ]
|
|
9
|
+
pull_request:
|
|
10
|
+
branches: [ main, master ]
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
roadmap-basics:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
name: πΊοΈ Basic Roadmap Integration
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: π₯ Checkout Repository
|
|
19
|
+
uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: π Setup Python
|
|
22
|
+
uses: actions/setup-python@v4
|
|
23
|
+
with:
|
|
24
|
+
python-version: '3.11'
|
|
25
|
+
|
|
26
|
+
- name: π¦ Install Roadmap CLI
|
|
27
|
+
run: |
|
|
28
|
+
pip install --upgrade pip
|
|
29
|
+
# TODO: Replace with actual PyPI package when published
|
|
30
|
+
pip install roadmap-cli
|
|
31
|
+
|
|
32
|
+
- name: π― Track Recent Changes
|
|
33
|
+
run: |
|
|
34
|
+
echo "π Scanning for roadmap-related changes..."
|
|
35
|
+
|
|
36
|
+
# Initialize roadmap if needed
|
|
37
|
+
if [ ! -f ".roadmap/config.yaml" ]; then
|
|
38
|
+
echo "π First time setup - initializing roadmap..."
|
|
39
|
+
roadmap init --name "${{ github.repository }}" --auto-confirm
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
# Track recent commits
|
|
43
|
+
roadmap ci scan-repository --max-commits 5
|
|
44
|
+
|
|
45
|
+
# Show current status
|
|
46
|
+
echo "π Current roadmap status:"
|
|
47
|
+
roadmap status
|
|
48
|
+
|
|
49
|
+
- name: β
Validate Setup
|
|
50
|
+
run: |
|
|
51
|
+
echo "β
Roadmap integration validated!"
|
|
52
|
+
echo "π Your project is now integrated with roadmap tracking."
|
|
53
|
+
echo ""
|
|
54
|
+
echo "π‘ Next steps:"
|
|
55
|
+
echo " - Use issue IDs in branch names: feature/12345678-new-feature"
|
|
56
|
+
echo " - Add progress markers: git commit -m 'Fix bug [progress:50%]'"
|
|
57
|
+
echo " - Mark completion: git commit -m 'Done [closes roadmap:12345678]'"
|
|
58
|
+
echo ""
|
|
59
|
+
echo "π Learn more: https://github.com/roadmap-cli/roadmap"
|