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.
Files changed (521) hide show
  1. roadmap/__init__.py +27 -0
  2. roadmap/adapters/__init__.py +1 -0
  3. roadmap/adapters/base_paginated_adapter.py +117 -0
  4. roadmap/adapters/cli/__init__.py +249 -0
  5. roadmap/adapters/cli/analysis/__init__.py +5 -0
  6. roadmap/adapters/cli/analysis/commands.py +370 -0
  7. roadmap/adapters/cli/analysis/presenter.py +125 -0
  8. roadmap/adapters/cli/archive_operations.py +86 -0
  9. roadmap/adapters/cli/cli_command_helpers.py +109 -0
  10. roadmap/adapters/cli/cli_confirmations.py +74 -0
  11. roadmap/adapters/cli/cli_error_handlers.py +146 -0
  12. roadmap/adapters/cli/cli_validators.py +39 -0
  13. roadmap/adapters/cli/commands/sync_status.py +308 -0
  14. roadmap/adapters/cli/comment/__init__.py +5 -0
  15. roadmap/adapters/cli/comment/commands.py +106 -0
  16. roadmap/adapters/cli/config/__init__.py +5 -0
  17. roadmap/adapters/cli/config/commands.py +198 -0
  18. roadmap/adapters/cli/console_exports.py +10 -0
  19. roadmap/adapters/cli/core.py +26 -0
  20. roadmap/adapters/cli/crud/__init__.py +47 -0
  21. roadmap/adapters/cli/crud/base_archive.py +208 -0
  22. roadmap/adapters/cli/crud/base_create.py +154 -0
  23. roadmap/adapters/cli/crud/base_delete.py +155 -0
  24. roadmap/adapters/cli/crud/base_restore.py +283 -0
  25. roadmap/adapters/cli/crud/base_update.py +193 -0
  26. roadmap/adapters/cli/crud/crud_helpers.py +206 -0
  27. roadmap/adapters/cli/crud/crud_utils.py +152 -0
  28. roadmap/adapters/cli/crud/entity_builders.py +374 -0
  29. roadmap/adapters/cli/data/__init__.py +8 -0
  30. roadmap/adapters/cli/data/commands.py +149 -0
  31. roadmap/adapters/cli/decorators.py +208 -0
  32. roadmap/adapters/cli/dtos/__init__.py +155 -0
  33. roadmap/adapters/cli/exception_handler.py +105 -0
  34. roadmap/adapters/cli/git/__init__.py +8 -0
  35. roadmap/adapters/cli/git/commands.py +475 -0
  36. roadmap/adapters/cli/git/handlers/__init__.py +1 -0
  37. roadmap/adapters/cli/git/handlers/git_authentication_handler.py +124 -0
  38. roadmap/adapters/cli/git/handlers/git_branch_handler.py +238 -0
  39. roadmap/adapters/cli/git/handlers/git_connectivity_handler.py +122 -0
  40. roadmap/adapters/cli/git/handlers/git_hooks_handler.py +105 -0
  41. roadmap/adapters/cli/git/hooks_config.py +327 -0
  42. roadmap/adapters/cli/git/status_display.py +158 -0
  43. roadmap/adapters/cli/health/__init__.py +8 -0
  44. roadmap/adapters/cli/health/db_integrity.py +204 -0
  45. roadmap/adapters/cli/health/enhancer.py +227 -0
  46. roadmap/adapters/cli/health/fixer.py +295 -0
  47. roadmap/adapters/cli/health/fixers/__init__.py +10 -0
  48. roadmap/adapters/cli/health/fixers/corrupted_comments_fixer.py +231 -0
  49. roadmap/adapters/cli/health/fixers/data_integrity_fixer.py +137 -0
  50. roadmap/adapters/cli/health/fixers/duplicate_issues_fixer.py +138 -0
  51. roadmap/adapters/cli/health/fixers/folder_structure_fixer.py +114 -0
  52. roadmap/adapters/cli/health/fixers/label_normalization_fixer.py +162 -0
  53. roadmap/adapters/cli/health/fixers/milestone_name_normalization_fixer.py +181 -0
  54. roadmap/adapters/cli/health/fixers/milestone_naming_compliance_fixer.py +244 -0
  55. roadmap/adapters/cli/health/fixers/milestone_parse_error_fixer.py +162 -0
  56. roadmap/adapters/cli/health/fixers/milestone_validation_fixer.py +211 -0
  57. roadmap/adapters/cli/health/fixers/old_backups_fixer.py +135 -0
  58. roadmap/adapters/cli/health/fixers/orphaned_issues_fixer.py +252 -0
  59. roadmap/adapters/cli/health/formatter.py +250 -0
  60. roadmap/adapters/cli/health/formatters.py +427 -0
  61. roadmap/adapters/cli/health/scan.py +293 -0
  62. roadmap/adapters/cli/init/__init__.py +5 -0
  63. roadmap/adapters/cli/init/commands.py +587 -0
  64. roadmap/adapters/cli/init.py +9 -0
  65. roadmap/adapters/cli/issues/__init__.py +70 -0
  66. roadmap/adapters/cli/issues/archive.py +137 -0
  67. roadmap/adapters/cli/issues/archive_class.py +253 -0
  68. roadmap/adapters/cli/issues/block.py +39 -0
  69. roadmap/adapters/cli/issues/close.py +216 -0
  70. roadmap/adapters/cli/issues/comment.py +178 -0
  71. roadmap/adapters/cli/issues/create.py +162 -0
  72. roadmap/adapters/cli/issues/delete.py +31 -0
  73. roadmap/adapters/cli/issues/deps.py +161 -0
  74. roadmap/adapters/cli/issues/issue_status_helpers.py +111 -0
  75. roadmap/adapters/cli/issues/link.py +308 -0
  76. roadmap/adapters/cli/issues/list.py +402 -0
  77. roadmap/adapters/cli/issues/lookup.py +96 -0
  78. roadmap/adapters/cli/issues/progress.py +102 -0
  79. roadmap/adapters/cli/issues/restore.py +96 -0
  80. roadmap/adapters/cli/issues/restore_class.py +57 -0
  81. roadmap/adapters/cli/issues/start.py +165 -0
  82. roadmap/adapters/cli/issues/sync_status.py +374 -0
  83. roadmap/adapters/cli/issues/unblock.py +43 -0
  84. roadmap/adapters/cli/issues/unlink.py +104 -0
  85. roadmap/adapters/cli/issues/update.py +120 -0
  86. roadmap/adapters/cli/issues/view.py +36 -0
  87. roadmap/adapters/cli/layout.py +220 -0
  88. roadmap/adapters/cli/mappers.py +200 -0
  89. roadmap/adapters/cli/milestones/__init__.py +52 -0
  90. roadmap/adapters/cli/milestones/archive.py +125 -0
  91. roadmap/adapters/cli/milestones/archive_class.py +236 -0
  92. roadmap/adapters/cli/milestones/assign.py +62 -0
  93. roadmap/adapters/cli/milestones/close.py +177 -0
  94. roadmap/adapters/cli/milestones/create.py +131 -0
  95. roadmap/adapters/cli/milestones/delete.py +27 -0
  96. roadmap/adapters/cli/milestones/kanban.py +123 -0
  97. roadmap/adapters/cli/milestones/list.py +87 -0
  98. roadmap/adapters/cli/milestones/recalculate.py +79 -0
  99. roadmap/adapters/cli/milestones/restore.py +87 -0
  100. roadmap/adapters/cli/milestones/restore_class.py +99 -0
  101. roadmap/adapters/cli/milestones/update.py +61 -0
  102. roadmap/adapters/cli/milestones/view.py +142 -0
  103. roadmap/adapters/cli/output_manager.py +319 -0
  104. roadmap/adapters/cli/presentation/base_presenter.py +121 -0
  105. roadmap/adapters/cli/presentation/cleanup_presenter.py +235 -0
  106. roadmap/adapters/cli/presentation/core_initialization_presenter.py +277 -0
  107. roadmap/adapters/cli/presentation/crud_presenter.py +134 -0
  108. roadmap/adapters/cli/presentation/daily_summary_presenter.py +266 -0
  109. roadmap/adapters/cli/presentation/issue_presenter.py +258 -0
  110. roadmap/adapters/cli/presentation/milestone_list_presenter.py +135 -0
  111. roadmap/adapters/cli/presentation/milestone_presenter.py +297 -0
  112. roadmap/adapters/cli/presentation/project_presenter.py +233 -0
  113. roadmap/adapters/cli/presentation/project_status_presenter.py +186 -0
  114. roadmap/adapters/cli/presentation/table_builders.py +95 -0
  115. roadmap/adapters/cli/projects/__init__.py +42 -0
  116. roadmap/adapters/cli/projects/archive.py +127 -0
  117. roadmap/adapters/cli/projects/archive_class.py +96 -0
  118. roadmap/adapters/cli/projects/close.py +94 -0
  119. roadmap/adapters/cli/projects/create.py +50 -0
  120. roadmap/adapters/cli/projects/delete.py +27 -0
  121. roadmap/adapters/cli/projects/list.py +227 -0
  122. roadmap/adapters/cli/projects/restore.py +87 -0
  123. roadmap/adapters/cli/projects/restore_class.py +56 -0
  124. roadmap/adapters/cli/projects/update.py +57 -0
  125. roadmap/adapters/cli/projects/view.py +157 -0
  126. roadmap/adapters/cli/services/__init__.py +1 -0
  127. roadmap/adapters/cli/services/daily_summary_service.py +313 -0
  128. roadmap/adapters/cli/services/export_manager.py +268 -0
  129. roadmap/adapters/cli/services/milestone_list_service.py +266 -0
  130. roadmap/adapters/cli/services/project_initialization_service.py +29 -0
  131. roadmap/adapters/cli/services/project_status_service.py +462 -0
  132. roadmap/adapters/cli/services/sync_service.py +62 -0
  133. roadmap/adapters/cli/status.py +408 -0
  134. roadmap/adapters/cli/styling.py +21 -0
  135. roadmap/adapters/cli/sync.py +1117 -0
  136. roadmap/adapters/cli/sync_context.py +432 -0
  137. roadmap/adapters/cli/sync_handlers/__init__.py +77 -0
  138. roadmap/adapters/cli/sync_handlers/apply_ops.py +522 -0
  139. roadmap/adapters/cli/sync_handlers/baseline_ops.py +366 -0
  140. roadmap/adapters/cli/sync_handlers/conflict_ops.py +161 -0
  141. roadmap/adapters/cli/sync_handlers/dry_run_display.py +237 -0
  142. roadmap/adapters/cli/sync_handlers/interactive_resolver.py +396 -0
  143. roadmap/adapters/cli/sync_handlers/progress_tracker.py +128 -0
  144. roadmap/adapters/cli/sync_metrics_command.py +190 -0
  145. roadmap/adapters/cli/sync_presenter.py +58 -0
  146. roadmap/adapters/cli/sync_validation.py +295 -0
  147. roadmap/adapters/cli/today.py +52 -0
  148. roadmap/adapters/cli/utils/click_options.py +38 -0
  149. roadmap/adapters/git/__init__.py +1 -0
  150. roadmap/adapters/git/git.py +208 -0
  151. roadmap/adapters/git/git_branch_manager.py +400 -0
  152. roadmap/adapters/git/git_command_executor.py +56 -0
  153. roadmap/adapters/git/git_commit_analyzer.py +334 -0
  154. roadmap/adapters/git/git_hooks.py +22 -0
  155. roadmap/adapters/git/git_hooks_manager.py +455 -0
  156. roadmap/adapters/git/git_repository_info.py +65 -0
  157. roadmap/adapters/git/hook_installer.py +106 -0
  158. roadmap/adapters/git/hook_registry.py +97 -0
  159. roadmap/adapters/git/hook_script_generator.py +58 -0
  160. roadmap/adapters/git/sync_monitor.py +409 -0
  161. roadmap/adapters/git/workflow_automation.py +286 -0
  162. roadmap/adapters/github/__init__.py +1 -0
  163. roadmap/adapters/github/github.py +360 -0
  164. roadmap/adapters/github/handlers/__init__.py +17 -0
  165. roadmap/adapters/github/handlers/base.py +337 -0
  166. roadmap/adapters/github/handlers/collaborators.py +165 -0
  167. roadmap/adapters/github/handlers/comments.py +118 -0
  168. roadmap/adapters/github/handlers/issues.py +150 -0
  169. roadmap/adapters/github/handlers/labels.py +164 -0
  170. roadmap/adapters/github/handlers/milestones.py +104 -0
  171. roadmap/adapters/persistence/__init__.py +35 -0
  172. roadmap/adapters/persistence/conflict_resolver.py +190 -0
  173. roadmap/adapters/persistence/database_manager.py +492 -0
  174. roadmap/adapters/persistence/entity_sync_coordinators.py +672 -0
  175. roadmap/adapters/persistence/file_locking.py +348 -0
  176. roadmap/adapters/persistence/file_parser.py +92 -0
  177. roadmap/adapters/persistence/file_synchronizer.py +107 -0
  178. roadmap/adapters/persistence/focused_managers.py +140 -0
  179. roadmap/adapters/persistence/git_history.py +330 -0
  180. roadmap/adapters/persistence/parser/__init__.py +20 -0
  181. roadmap/adapters/persistence/parser/frontmatter.py +152 -0
  182. roadmap/adapters/persistence/parser/issue.py +245 -0
  183. roadmap/adapters/persistence/parser/milestone.py +146 -0
  184. roadmap/adapters/persistence/parser/project.py +106 -0
  185. roadmap/adapters/persistence/persistence.py +288 -0
  186. roadmap/adapters/persistence/repositories/__init__.py +15 -0
  187. roadmap/adapters/persistence/repositories/issue_repository.py +223 -0
  188. roadmap/adapters/persistence/repositories/milestone_repository.py +140 -0
  189. roadmap/adapters/persistence/repositories/project_repository.py +168 -0
  190. roadmap/adapters/persistence/repositories/remote_link_repository.py +355 -0
  191. roadmap/adapters/persistence/repositories/sync_state_repository.py +66 -0
  192. roadmap/adapters/persistence/storage/__init__.py +36 -0
  193. roadmap/adapters/persistence/storage/conflicts.py +101 -0
  194. roadmap/adapters/persistence/storage/connection_manager.py +79 -0
  195. roadmap/adapters/persistence/storage/issue_storage.py +89 -0
  196. roadmap/adapters/persistence/storage/milestone_storage.py +80 -0
  197. roadmap/adapters/persistence/storage/project_storage.py +102 -0
  198. roadmap/adapters/persistence/storage/queries.py +227 -0
  199. roadmap/adapters/persistence/storage/state_manager.py +652 -0
  200. roadmap/adapters/persistence/storage/sync_state_storage.py +207 -0
  201. roadmap/adapters/persistence/sync_metrics_repository.py +342 -0
  202. roadmap/adapters/persistence/sync_orchestrator.py +293 -0
  203. roadmap/adapters/persistence/sync_state_tracker.py +86 -0
  204. roadmap/adapters/persistence/yaml_repositories.py +711 -0
  205. roadmap/adapters/sync/__init__.py +21 -0
  206. roadmap/adapters/sync/backend_factory.py +108 -0
  207. roadmap/adapters/sync/backends/__init__.py +15 -0
  208. roadmap/adapters/sync/backends/converters.py +209 -0
  209. roadmap/adapters/sync/backends/github_backend_helpers.py +380 -0
  210. roadmap/adapters/sync/backends/github_client.py +99 -0
  211. roadmap/adapters/sync/backends/github_sync_backend.py +792 -0
  212. roadmap/adapters/sync/backends/github_sync_ops.py +908 -0
  213. roadmap/adapters/sync/backends/services/__init__.py +1 -0
  214. roadmap/adapters/sync/backends/services/github_authentication_service.py +105 -0
  215. roadmap/adapters/sync/backends/services/github_issue_delete_service.py +423 -0
  216. roadmap/adapters/sync/backends/services/github_issue_dependency_service.py +63 -0
  217. roadmap/adapters/sync/backends/services/github_issue_fetch_service.py +158 -0
  218. roadmap/adapters/sync/backends/services/github_label_sync_service.py +126 -0
  219. roadmap/adapters/sync/backends/services/github_local_issue_sync_service.py +229 -0
  220. roadmap/adapters/sync/backends/services/github_milestone_fetch_service.py +204 -0
  221. roadmap/adapters/sync/backends/vanilla_git_sync_backend.py +198 -0
  222. roadmap/adapters/sync/services/__init__.py +11 -0
  223. roadmap/adapters/sync/services/baseline_state_handler.py +83 -0
  224. roadmap/adapters/sync/services/conflict_converter.py +85 -0
  225. roadmap/adapters/sync/services/issue_persistence_service.py +263 -0
  226. roadmap/adapters/sync/services/issue_state_service.py +243 -0
  227. roadmap/adapters/sync/services/local_change_filter.py +129 -0
  228. roadmap/adapters/sync/services/pull_result_processor.py +71 -0
  229. roadmap/adapters/sync/services/remote_issue_creation_service.py +112 -0
  230. roadmap/adapters/sync/services/sync_analysis_service.py +250 -0
  231. roadmap/adapters/sync/services/sync_authentication_service.py +57 -0
  232. roadmap/adapters/sync/services/sync_data_fetch_service.py +212 -0
  233. roadmap/adapters/sync/services/sync_linking_service.py +329 -0
  234. roadmap/adapters/sync/services/sync_report_service.py +62 -0
  235. roadmap/adapters/sync/services/sync_state_update_service.py +51 -0
  236. roadmap/adapters/sync/sync_cache_orchestrator.py +454 -0
  237. roadmap/adapters/sync/sync_merge_engine.py +416 -0
  238. roadmap/adapters/sync/sync_merge_orchestrator.py +1313 -0
  239. roadmap/adapters/sync/sync_retrieval_orchestrator.py +810 -0
  240. roadmap/application/services/__init__.py +1 -0
  241. roadmap/application/services/deduplicate_service.py +517 -0
  242. roadmap/application/use_cases/__init__.py +1 -0
  243. roadmap/common/__init__.py +308 -0
  244. roadmap/common/cache.py +209 -0
  245. roadmap/common/cli_errors.py +147 -0
  246. roadmap/common/configuration/__init__.py +33 -0
  247. roadmap/common/configuration/config_loader.py +264 -0
  248. roadmap/common/configuration/config_manager.py +164 -0
  249. roadmap/common/configuration/config_schema.py +145 -0
  250. roadmap/common/configuration/github/__init__.py +9 -0
  251. roadmap/common/configuration/github/config_manager.py +154 -0
  252. roadmap/common/configuration/github/token_resolver.py +84 -0
  253. roadmap/common/console.py +184 -0
  254. roadmap/common/constants.py +134 -0
  255. roadmap/common/datetime_parser.py +319 -0
  256. roadmap/common/error_formatter.py +84 -0
  257. roadmap/common/errors/__init__.py +143 -0
  258. roadmap/common/errors/error_base.py +73 -0
  259. roadmap/common/errors/error_file.py +82 -0
  260. roadmap/common/errors/error_git.py +67 -0
  261. roadmap/common/errors/error_handler.py +166 -0
  262. roadmap/common/errors/error_network.py +90 -0
  263. roadmap/common/errors/error_security.py +78 -0
  264. roadmap/common/errors/error_standards.py +561 -0
  265. roadmap/common/errors/error_validation.py +111 -0
  266. roadmap/common/errors/exceptions.py +432 -0
  267. roadmap/common/formatters/__init__.py +29 -0
  268. roadmap/common/formatters/base_table_formatter.py +96 -0
  269. roadmap/common/formatters/export/__init__.py +7 -0
  270. roadmap/common/formatters/export/issue_exporter.py +97 -0
  271. roadmap/common/formatters/helpers.py +28 -0
  272. roadmap/common/formatters/kanban/__init__.py +9 -0
  273. roadmap/common/formatters/kanban/layout.py +48 -0
  274. roadmap/common/formatters/kanban/organizer.py +81 -0
  275. roadmap/common/formatters/output/__init__.py +15 -0
  276. roadmap/common/formatters/tables/__init__.py +11 -0
  277. roadmap/common/formatters/tables/column_factory.py +312 -0
  278. roadmap/common/formatters/tables/issue_table.py +276 -0
  279. roadmap/common/formatters/tables/milestone_table.py +247 -0
  280. roadmap/common/formatters/tables/project_table.py +195 -0
  281. roadmap/common/formatters/text/__init__.py +57 -0
  282. roadmap/common/formatters/text/basic.py +217 -0
  283. roadmap/common/formatters/text/display.py +42 -0
  284. roadmap/common/formatters/text/duration.py +36 -0
  285. roadmap/common/formatters/text/operations.py +325 -0
  286. roadmap/common/formatters/text/status_badges.py +57 -0
  287. roadmap/common/initialization/github/__init__.py +11 -0
  288. roadmap/common/initialization/github/setup_service.py +238 -0
  289. roadmap/common/initialization/github/setup_validator.py +78 -0
  290. roadmap/common/logging/__init__.py +113 -0
  291. roadmap/common/logging/audit_logging.py +5 -0
  292. roadmap/common/logging/correlation.py +45 -0
  293. roadmap/common/logging/decorators.py +267 -0
  294. roadmap/common/logging/error_logging.py +217 -0
  295. roadmap/common/logging/formatters.py +124 -0
  296. roadmap/common/logging/loggers.py +68 -0
  297. roadmap/common/logging/performance_tracking.py +267 -0
  298. roadmap/common/logging/utils.py +335 -0
  299. roadmap/common/models/__init__.py +44 -0
  300. roadmap/common/models/cli_models.py +118 -0
  301. roadmap/common/models/config_models.py +199 -0
  302. roadmap/common/models/output_models.py +381 -0
  303. roadmap/common/observability/__init__.py +28 -0
  304. roadmap/common/observability/instrumentation.py +103 -0
  305. roadmap/common/observability/observability.py +76 -0
  306. roadmap/common/observability/otel_init.py +109 -0
  307. roadmap/common/output_formatter.py +393 -0
  308. roadmap/common/progress.py +379 -0
  309. roadmap/common/result.py +396 -0
  310. roadmap/common/security/__init__.py +48 -0
  311. roadmap/common/security/exceptions.py +13 -0
  312. roadmap/common/security/export_cleanup.py +79 -0
  313. roadmap/common/security/file_operations.py +104 -0
  314. roadmap/common/security/filename_sanitization.py +54 -0
  315. roadmap/common/security/logging.py +27 -0
  316. roadmap/common/security/path_validation.py +137 -0
  317. roadmap/common/security/temp_files.py +41 -0
  318. roadmap/common/services/__init__.py +65 -0
  319. roadmap/common/services/decorators.py +183 -0
  320. roadmap/common/services/logging_utils.py +208 -0
  321. roadmap/common/services/metrics.py +161 -0
  322. roadmap/common/services/performance.py +219 -0
  323. roadmap/common/services/profiling.py +288 -0
  324. roadmap/common/services/retry.py +288 -0
  325. roadmap/common/status_style_manager.py +114 -0
  326. roadmap/common/union_find.py +88 -0
  327. roadmap/common/update_constants.py +13 -0
  328. roadmap/common/utils/__init__.py +65 -0
  329. roadmap/common/utils/cli_helpers.py +381 -0
  330. roadmap/common/utils/file_utils.py +440 -0
  331. roadmap/common/utils/path_utils.py +38 -0
  332. roadmap/common/utils/status_utils.py +130 -0
  333. roadmap/common/utils/timezone_utils.py +480 -0
  334. roadmap/common/validation/__init__.py +37 -0
  335. roadmap/common/validation/field_validator.py +104 -0
  336. roadmap/common/validation/result.py +37 -0
  337. roadmap/common/validation/roadmap_validator.py +310 -0
  338. roadmap/common/validation/schema_validator.py +36 -0
  339. roadmap/common/validation/validators.py +50 -0
  340. roadmap/core/__init__.py +1 -0
  341. roadmap/core/domain/__init__.py +30 -0
  342. roadmap/core/domain/comment.py +24 -0
  343. roadmap/core/domain/health.py +15 -0
  344. roadmap/core/domain/issue.py +274 -0
  345. roadmap/core/domain/milestone.py +173 -0
  346. roadmap/core/domain/ports/__init__.py +1 -0
  347. roadmap/core/domain/ports/baseline_repository.py +24 -0
  348. roadmap/core/domain/ports/issue_repository.py +34 -0
  349. roadmap/core/domain/ports/remote_backend_port.py +31 -0
  350. roadmap/core/domain/project.py +130 -0
  351. roadmap/core/interfaces/__init__.py +109 -0
  352. roadmap/core/interfaces/assignee_validator.py +40 -0
  353. roadmap/core/interfaces/backend_factory.py +175 -0
  354. roadmap/core/interfaces/github.py +102 -0
  355. roadmap/core/interfaces/parsers.py +140 -0
  356. roadmap/core/interfaces/persistence.py +45 -0
  357. roadmap/core/interfaces/repositories.py +174 -0
  358. roadmap/core/interfaces/state_managers.py +111 -0
  359. roadmap/core/interfaces/state_storage.py +64 -0
  360. roadmap/core/interfaces/sync_backend.py +275 -0
  361. roadmap/core/interfaces/sync_services.py +119 -0
  362. roadmap/core/interfaces/sync_validators.py +180 -0
  363. roadmap/core/models/__init__.py +31 -0
  364. roadmap/core/models/sync_models.py +162 -0
  365. roadmap/core/models.py +115 -0
  366. roadmap/core/observability/__init__.py +17 -0
  367. roadmap/core/observability/sync_metrics.py +699 -0
  368. roadmap/core/repositories.py +200 -0
  369. roadmap/core/services/__init__.py +313 -0
  370. roadmap/core/services/baseline/__init__.py +1 -0
  371. roadmap/core/services/baseline/baseline_builder_progress.py +274 -0
  372. roadmap/core/services/baseline/baseline_retriever.py +63 -0
  373. roadmap/core/services/baseline/baseline_selector.py +248 -0
  374. roadmap/core/services/baseline/baseline_state_retriever.py +284 -0
  375. roadmap/core/services/baseline/optimized_baseline_builder.py +425 -0
  376. roadmap/core/services/comment/__init__.py +1 -0
  377. roadmap/core/services/comment/comment_service.py +277 -0
  378. roadmap/core/services/git/__init__.py +1 -0
  379. roadmap/core/services/git/git_hook_auto_sync_service.py +403 -0
  380. roadmap/core/services/github/__init__.py +1 -0
  381. roadmap/core/services/github/github_change_detector.py +162 -0
  382. roadmap/core/services/github/github_config_validator.py +148 -0
  383. roadmap/core/services/github/github_conflict_detector.py +179 -0
  384. roadmap/core/services/github/github_entity_classifier.py +51 -0
  385. roadmap/core/services/github/github_integration_service.py +439 -0
  386. roadmap/core/services/github/github_issue_client.py +346 -0
  387. roadmap/core/services/health/__init__.py +1 -0
  388. roadmap/core/services/health/backup_cleanup_service.py +202 -0
  389. roadmap/core/services/health/data_integrity_validator_service.py +90 -0
  390. roadmap/core/services/health/entity_health_scanner.py +460 -0
  391. roadmap/core/services/health/file_repair_service.py +193 -0
  392. roadmap/core/services/health/health_check_service.py +166 -0
  393. roadmap/core/services/health/health_models.py +80 -0
  394. roadmap/core/services/health/infrastructure_validator_service.py +328 -0
  395. roadmap/core/services/health/issue_health_scanner.py +263 -0
  396. roadmap/core/services/helpers/__init__.py +18 -0
  397. roadmap/core/services/helpers/status_change_helpers.py +88 -0
  398. roadmap/core/services/initialization/__init__.py +19 -0
  399. roadmap/core/services/initialization/utils.py +104 -0
  400. roadmap/core/services/initialization/validator.py +78 -0
  401. roadmap/core/services/initialization/workflow.py +182 -0
  402. roadmap/core/services/initialization_service.py +111 -0
  403. roadmap/core/services/issue/__init__.py +1 -0
  404. roadmap/core/services/issue/assignee_validation_service.py +312 -0
  405. roadmap/core/services/issue/issue_creation_service.py +309 -0
  406. roadmap/core/services/issue/issue_filter_service.py +302 -0
  407. roadmap/core/services/issue/issue_matching_service.py +127 -0
  408. roadmap/core/services/issue/issue_service.py +765 -0
  409. roadmap/core/services/issue/issue_update_service.py +144 -0
  410. roadmap/core/services/issue/start_issue_service.py +174 -0
  411. roadmap/core/services/issue_helpers/__init__.py +18 -0
  412. roadmap/core/services/issue_helpers/issue_filters.py +296 -0
  413. roadmap/core/services/milestone_service.py +438 -0
  414. roadmap/core/services/project/__init__.py +1 -0
  415. roadmap/core/services/project/project_service.py +434 -0
  416. roadmap/core/services/project/project_status_service.py +125 -0
  417. roadmap/core/services/project_init/__init__.py +22 -0
  418. roadmap/core/services/project_init/context_detection.py +146 -0
  419. roadmap/core/services/project_init/creation.py +76 -0
  420. roadmap/core/services/project_init/detection.py +51 -0
  421. roadmap/core/services/project_init/template.py +228 -0
  422. roadmap/core/services/status_change_service.py +88 -0
  423. roadmap/core/services/sync/__init__.py +1 -0
  424. roadmap/core/services/sync/batch_processor.py +290 -0
  425. roadmap/core/services/sync/conflict_resolver.py +154 -0
  426. roadmap/core/services/sync/dependency_resolver.py +367 -0
  427. roadmap/core/services/sync/duplicate_detector.py +771 -0
  428. roadmap/core/services/sync/duplicate_resolver.py +315 -0
  429. roadmap/core/services/sync/error_classification.py +470 -0
  430. roadmap/core/services/sync/performance.py +263 -0
  431. roadmap/core/services/sync/sync_change_computer.py +211 -0
  432. roadmap/core/services/sync/sync_checkpoint.py +348 -0
  433. roadmap/core/services/sync/sync_conflict_detector.py +147 -0
  434. roadmap/core/services/sync/sync_conflict_resolver.py +448 -0
  435. roadmap/core/services/sync/sync_errors.py +383 -0
  436. roadmap/core/services/sync/sync_key_normalizer.py +222 -0
  437. roadmap/core/services/sync/sync_metadata_service.py +361 -0
  438. roadmap/core/services/sync/sync_plan.py +171 -0
  439. roadmap/core/services/sync/sync_plan_executor.py +447 -0
  440. roadmap/core/services/sync/sync_report.py +296 -0
  441. roadmap/core/services/sync/sync_state.py +173 -0
  442. roadmap/core/services/sync/sync_state_comparator.py +690 -0
  443. roadmap/core/services/sync/sync_state_manager.py +431 -0
  444. roadmap/core/services/sync/sync_state_normalizer.py +98 -0
  445. roadmap/core/services/sync/sync_three_way.py +78 -0
  446. roadmap/core/services/sync/three_way_merger.py +178 -0
  447. roadmap/core/services/utils/__init__.py +1 -0
  448. roadmap/core/services/utils/configuration_service.py +113 -0
  449. roadmap/core/services/utils/critical_path_calculator.py +418 -0
  450. roadmap/core/services/utils/dependency_analyzer.py +360 -0
  451. roadmap/core/services/utils/field_conflict_detector.py +126 -0
  452. roadmap/core/services/utils/remote_fetcher.py +202 -0
  453. roadmap/core/services/utils/remote_state_normalizer.py +110 -0
  454. roadmap/core/services/utils/retry_policy.py +51 -0
  455. roadmap/core/services/validator_base.py +130 -0
  456. roadmap/core/services/validators/__init__.py +28 -0
  457. roadmap/core/services/validators/_utils.py +20 -0
  458. roadmap/core/services/validators/archivable_issues_validator.py +71 -0
  459. roadmap/core/services/validators/archivable_milestones_validator.py +69 -0
  460. roadmap/core/services/validators/backup_validator.py +89 -0
  461. roadmap/core/services/validators/data_integrity_validator.py +84 -0
  462. roadmap/core/services/validators/duplicate_issues_validator.py +75 -0
  463. roadmap/core/services/validators/duplicate_milestones_validator.py +141 -0
  464. roadmap/core/services/validators/folder_structure_validator.py +165 -0
  465. roadmap/core/services/validators/health_status_utils.py +28 -0
  466. roadmap/core/services/validators/milestone_naming_validator.py +146 -0
  467. roadmap/core/services/validators/missing_headlines_validator.py +97 -0
  468. roadmap/core/services/validators/orphaned_issues_validator.py +142 -0
  469. roadmap/core/services/validators/orphaned_milestones_validator.py +85 -0
  470. roadmap/core/utils/git_remote_parser.py +83 -0
  471. roadmap/core/utils/github_urls.py +66 -0
  472. roadmap/domain/validation.py +30 -0
  473. roadmap/infrastructure/__init__.py +55 -0
  474. roadmap/infrastructure/coordination/__init__.py +8 -0
  475. roadmap/infrastructure/coordination/coordinator_params.py +82 -0
  476. roadmap/infrastructure/coordination/core.py +446 -0
  477. roadmap/infrastructure/coordination/git_coordinator.py +160 -0
  478. roadmap/infrastructure/coordination/initialization.py +348 -0
  479. roadmap/infrastructure/coordination/issue_coordinator.py +154 -0
  480. roadmap/infrastructure/coordination/issue_operations.py +456 -0
  481. roadmap/infrastructure/coordination/milestone_coordinator.py +135 -0
  482. roadmap/infrastructure/coordination/milestone_operations.py +201 -0
  483. roadmap/infrastructure/coordination/project_coordinator.py +113 -0
  484. roadmap/infrastructure/coordination/project_operations.py +144 -0
  485. roadmap/infrastructure/coordination/team_coordinator.py +107 -0
  486. roadmap/infrastructure/coordination/user_operations.py +150 -0
  487. roadmap/infrastructure/coordination/validation_coordinator.py +249 -0
  488. roadmap/infrastructure/coordination_gateway.py +152 -0
  489. roadmap/infrastructure/git/__init__.py +6 -0
  490. roadmap/infrastructure/git/git_integration_ops.py +234 -0
  491. roadmap/infrastructure/git_gateway.py +35 -0
  492. roadmap/infrastructure/github_gateway.py +52 -0
  493. roadmap/infrastructure/maintenance/__init__.py +5 -0
  494. roadmap/infrastructure/maintenance/cleanup.py +483 -0
  495. roadmap/infrastructure/observability/__init__.py +7 -0
  496. roadmap/infrastructure/observability/health.py +196 -0
  497. roadmap/infrastructure/observability/health_formatter.py +73 -0
  498. roadmap/infrastructure/observability/specialized_health_checkers.py +188 -0
  499. roadmap/infrastructure/persistence_gateway.py +164 -0
  500. roadmap/infrastructure/security/__init__.py +1 -0
  501. roadmap/infrastructure/security/credentials.py +489 -0
  502. roadmap/infrastructure/sync_gateway.py +94 -0
  503. roadmap/infrastructure/validation/__init__.py +7 -0
  504. roadmap/infrastructure/validation/file_enumeration.py +219 -0
  505. roadmap/infrastructure/validation/github_assignee_validator.py +47 -0
  506. roadmap/infrastructure/validation/github_validator.py +101 -0
  507. roadmap/infrastructure/validation/milestone_consistency_validator.py +96 -0
  508. roadmap/infrastructure/validation/vanilla_assignee_validator.py +37 -0
  509. roadmap/infrastructure/validation_gateway.py +96 -0
  510. roadmap/presentation/formatters/sync_metrics_formatter.py +355 -0
  511. roadmap/settings.py +345 -0
  512. roadmap/templates/github_workflows/ci-cd-roadmap.yml +241 -0
  513. roadmap/templates/github_workflows/issue-lifecycle.yml +236 -0
  514. roadmap/templates/github_workflows/roadmap-integration.yml +137 -0
  515. roadmap/templates/github_workflows/roadmap-starter.yml +59 -0
  516. roadmap/version.py +381 -0
  517. roadmap_cli-0.1.1.dist-info/METADATA +448 -0
  518. roadmap_cli-0.1.1.dist-info/RECORD +521 -0
  519. roadmap_cli-0.1.1.dist-info/WHEEL +4 -0
  520. roadmap_cli-0.1.1.dist-info/entry_points.txt +2 -0
  521. 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"