gitflow-analytics 1.0.3__py3-none-any.whl → 1.3.6__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.
- gitflow_analytics/_version.py +1 -1
- gitflow_analytics/classification/__init__.py +31 -0
- gitflow_analytics/classification/batch_classifier.py +752 -0
- gitflow_analytics/classification/classifier.py +464 -0
- gitflow_analytics/classification/feature_extractor.py +725 -0
- gitflow_analytics/classification/linguist_analyzer.py +574 -0
- gitflow_analytics/classification/model.py +455 -0
- gitflow_analytics/cli.py +4108 -350
- gitflow_analytics/cli_rich.py +198 -48
- gitflow_analytics/config/__init__.py +43 -0
- gitflow_analytics/config/errors.py +261 -0
- gitflow_analytics/config/loader.py +904 -0
- gitflow_analytics/config/profiles.py +264 -0
- gitflow_analytics/config/repository.py +124 -0
- gitflow_analytics/config/schema.py +441 -0
- gitflow_analytics/config/validator.py +154 -0
- gitflow_analytics/config.py +44 -508
- gitflow_analytics/core/analyzer.py +1209 -98
- gitflow_analytics/core/cache.py +1337 -29
- gitflow_analytics/core/data_fetcher.py +1193 -0
- gitflow_analytics/core/identity.py +363 -14
- gitflow_analytics/core/metrics_storage.py +526 -0
- gitflow_analytics/core/progress.py +372 -0
- gitflow_analytics/core/schema_version.py +269 -0
- gitflow_analytics/extractors/ml_tickets.py +1100 -0
- gitflow_analytics/extractors/story_points.py +8 -1
- gitflow_analytics/extractors/tickets.py +749 -11
- gitflow_analytics/identity_llm/__init__.py +6 -0
- gitflow_analytics/identity_llm/analysis_pass.py +231 -0
- gitflow_analytics/identity_llm/analyzer.py +464 -0
- gitflow_analytics/identity_llm/models.py +76 -0
- gitflow_analytics/integrations/github_integration.py +175 -11
- gitflow_analytics/integrations/jira_integration.py +461 -24
- gitflow_analytics/integrations/orchestrator.py +124 -1
- gitflow_analytics/metrics/activity_scoring.py +322 -0
- gitflow_analytics/metrics/branch_health.py +470 -0
- gitflow_analytics/metrics/dora.py +379 -20
- gitflow_analytics/models/database.py +843 -53
- gitflow_analytics/pm_framework/__init__.py +115 -0
- gitflow_analytics/pm_framework/adapters/__init__.py +50 -0
- gitflow_analytics/pm_framework/adapters/jira_adapter.py +1845 -0
- gitflow_analytics/pm_framework/base.py +406 -0
- gitflow_analytics/pm_framework/models.py +211 -0
- gitflow_analytics/pm_framework/orchestrator.py +652 -0
- gitflow_analytics/pm_framework/registry.py +333 -0
- gitflow_analytics/qualitative/__init__.py +9 -10
- gitflow_analytics/qualitative/chatgpt_analyzer.py +259 -0
- gitflow_analytics/qualitative/classifiers/__init__.py +3 -3
- gitflow_analytics/qualitative/classifiers/change_type.py +518 -244
- gitflow_analytics/qualitative/classifiers/domain_classifier.py +272 -165
- gitflow_analytics/qualitative/classifiers/intent_analyzer.py +321 -222
- gitflow_analytics/qualitative/classifiers/llm/__init__.py +35 -0
- gitflow_analytics/qualitative/classifiers/llm/base.py +193 -0
- gitflow_analytics/qualitative/classifiers/llm/batch_processor.py +383 -0
- gitflow_analytics/qualitative/classifiers/llm/cache.py +479 -0
- gitflow_analytics/qualitative/classifiers/llm/cost_tracker.py +435 -0
- gitflow_analytics/qualitative/classifiers/llm/openai_client.py +403 -0
- gitflow_analytics/qualitative/classifiers/llm/prompts.py +373 -0
- gitflow_analytics/qualitative/classifiers/llm/response_parser.py +287 -0
- gitflow_analytics/qualitative/classifiers/llm_commit_classifier.py +607 -0
- gitflow_analytics/qualitative/classifiers/risk_analyzer.py +215 -189
- gitflow_analytics/qualitative/core/__init__.py +4 -4
- gitflow_analytics/qualitative/core/llm_fallback.py +239 -235
- gitflow_analytics/qualitative/core/nlp_engine.py +157 -148
- gitflow_analytics/qualitative/core/pattern_cache.py +214 -192
- gitflow_analytics/qualitative/core/processor.py +381 -248
- gitflow_analytics/qualitative/enhanced_analyzer.py +2236 -0
- gitflow_analytics/qualitative/example_enhanced_usage.py +420 -0
- gitflow_analytics/qualitative/models/__init__.py +7 -7
- gitflow_analytics/qualitative/models/schemas.py +155 -121
- gitflow_analytics/qualitative/utils/__init__.py +4 -4
- gitflow_analytics/qualitative/utils/batch_processor.py +136 -123
- gitflow_analytics/qualitative/utils/cost_tracker.py +142 -140
- gitflow_analytics/qualitative/utils/metrics.py +172 -158
- gitflow_analytics/qualitative/utils/text_processing.py +146 -104
- gitflow_analytics/reports/__init__.py +100 -0
- gitflow_analytics/reports/analytics_writer.py +539 -14
- gitflow_analytics/reports/base.py +648 -0
- gitflow_analytics/reports/branch_health_writer.py +322 -0
- gitflow_analytics/reports/classification_writer.py +924 -0
- gitflow_analytics/reports/cli_integration.py +427 -0
- gitflow_analytics/reports/csv_writer.py +1676 -212
- gitflow_analytics/reports/data_models.py +504 -0
- gitflow_analytics/reports/database_report_generator.py +427 -0
- gitflow_analytics/reports/example_usage.py +344 -0
- gitflow_analytics/reports/factory.py +499 -0
- gitflow_analytics/reports/formatters.py +698 -0
- gitflow_analytics/reports/html_generator.py +1116 -0
- gitflow_analytics/reports/interfaces.py +489 -0
- gitflow_analytics/reports/json_exporter.py +2770 -0
- gitflow_analytics/reports/narrative_writer.py +2287 -158
- gitflow_analytics/reports/story_point_correlation.py +1144 -0
- gitflow_analytics/reports/weekly_trends_writer.py +389 -0
- gitflow_analytics/training/__init__.py +5 -0
- gitflow_analytics/training/model_loader.py +377 -0
- gitflow_analytics/training/pipeline.py +550 -0
- gitflow_analytics/tui/__init__.py +1 -1
- gitflow_analytics/tui/app.py +129 -126
- gitflow_analytics/tui/screens/__init__.py +3 -3
- gitflow_analytics/tui/screens/analysis_progress_screen.py +188 -179
- gitflow_analytics/tui/screens/configuration_screen.py +154 -178
- gitflow_analytics/tui/screens/loading_screen.py +100 -110
- gitflow_analytics/tui/screens/main_screen.py +89 -72
- gitflow_analytics/tui/screens/results_screen.py +305 -281
- gitflow_analytics/tui/widgets/__init__.py +2 -2
- gitflow_analytics/tui/widgets/data_table.py +67 -69
- gitflow_analytics/tui/widgets/export_modal.py +76 -76
- gitflow_analytics/tui/widgets/progress_widget.py +41 -46
- gitflow_analytics-1.3.6.dist-info/METADATA +1015 -0
- gitflow_analytics-1.3.6.dist-info/RECORD +122 -0
- gitflow_analytics-1.0.3.dist-info/METADATA +0 -490
- gitflow_analytics-1.0.3.dist-info/RECORD +0 -62
- {gitflow_analytics-1.0.3.dist-info → gitflow_analytics-1.3.6.dist-info}/WHEEL +0 -0
- {gitflow_analytics-1.0.3.dist-info → gitflow_analytics-1.3.6.dist-info}/entry_points.txt +0 -0
- {gitflow_analytics-1.0.3.dist-info → gitflow_analytics-1.3.6.dist-info}/licenses/LICENSE +0 -0
- {gitflow_analytics-1.0.3.dist-info → gitflow_analytics-1.3.6.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
gitflow_analytics/__init__.py,sha256=yN1dyAUu4l9qX-YNAGRItEf4RFFe-5GQiOntXPIfdxo,683
|
|
2
|
+
gitflow_analytics/_version.py,sha256=9PnCSmhRIvnAdYvd_L43lJY5JxZ9voHOQOlNDFzIYB8,137
|
|
3
|
+
gitflow_analytics/cli.py,sha256=RtXDOZlE3fq-xV0sWIvU_F1Slwr9Ma23CJNIdSrO8s0,207102
|
|
4
|
+
gitflow_analytics/cli_rich.py,sha256=1Heeyadbqpn5d13jtI7jtcrpmbA0BmPY9lnMXrgSncI,19326
|
|
5
|
+
gitflow_analytics/config.py,sha256=XRuxvzLWyn_ML7mDCcuZ9-YFNAEsnt33vIuWxQQ_jxg,1033
|
|
6
|
+
gitflow_analytics/classification/__init__.py,sha256=p8shPUZpGaw7-ivhfAVrPDbSP2LrpvWC1WEsBJIg-PI,969
|
|
7
|
+
gitflow_analytics/classification/batch_classifier.py,sha256=-6--0j_7la-BDKczAtxAclQ69kL0j11vYRnVDZrKW1A,30539
|
|
8
|
+
gitflow_analytics/classification/classifier.py,sha256=U1vpdiMXqGdHR8iHWf_wPdrJxxNRB5By94BDpck8R9g,17750
|
|
9
|
+
gitflow_analytics/classification/feature_extractor.py,sha256=W82vztPQO8-MFw9Yt17K1kXrLZ5lNtuMSwC1NBsZPLQ,23804
|
|
10
|
+
gitflow_analytics/classification/linguist_analyzer.py,sha256=HjLx9mM7hGXtrvMba6osovHJLAacTx9oDmN6CS5w0bE,17687
|
|
11
|
+
gitflow_analytics/classification/model.py,sha256=2KbmFh9MpyvHMcNHbqwUTAAVLHHu3MiTfFIPyZSGa-8,16356
|
|
12
|
+
gitflow_analytics/config/__init__.py,sha256=lzFOHsJGoeDHuu_NEgcSeUFwU0bgV3lnL9w0Pyc4FI0,1037
|
|
13
|
+
gitflow_analytics/config/errors.py,sha256=IBKhAIwJ4gscZFnLDyE3jEp03wn2stPR7JQJXNSIfok,10386
|
|
14
|
+
gitflow_analytics/config/loader.py,sha256=afdr_uQN5BDhK0iEIbUL4O3XbDVtCSEWZ-by_zp8E58,34172
|
|
15
|
+
gitflow_analytics/config/profiles.py,sha256=yUjFAWW6uzOUdi5qlPE-QV9681HigyrLiSJFpL8X9A0,7967
|
|
16
|
+
gitflow_analytics/config/repository.py,sha256=maptMAdCKDsuMAfoTAaTrMPVfVd_tKNLRenvuPe1-t4,4350
|
|
17
|
+
gitflow_analytics/config/schema.py,sha256=NQO2KmaVDaCiPH6kwmMvAOw7cwufSjp3-Gpwl8-ox2U,14636
|
|
18
|
+
gitflow_analytics/config/validator.py,sha256=l7AHjXYJ8wEmyA1rn2WiItZXtAiRb9YBLjFCDl53qKM,5907
|
|
19
|
+
gitflow_analytics/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
+
gitflow_analytics/core/analyzer.py,sha256=59kGObzjziOb8geFyZMKCUvWmo3hcXE0eTgrjYEc1XA,58736
|
|
21
|
+
gitflow_analytics/core/branch_mapper.py,sha256=1L1ctrhTEqMZ61eS1nZRkcyaarLipeQgotw4HdXcSmM,7407
|
|
22
|
+
gitflow_analytics/core/cache.py,sha256=O3I_1Jbuj3GcnUo6CBe0nEJ_8fxKY2wcxeq9sff-OhY,67807
|
|
23
|
+
gitflow_analytics/core/data_fetcher.py,sha256=eroe7MKA6g9_3Uxs03DSXAYX65Rc6_JyLYlcRi11xPo,52987
|
|
24
|
+
gitflow_analytics/core/identity.py,sha256=k7i-vcRJ2eiTU0_kYGY5QOhxcqnitibTTx7DVONW0kg,31237
|
|
25
|
+
gitflow_analytics/core/metrics_storage.py,sha256=hNXVXjpAaPHYoBFUCj_qR-hs9g8PbQKux_5esyevNEQ,21199
|
|
26
|
+
gitflow_analytics/core/progress.py,sha256=KUQU7ToX63JvPTm8RRy31OmnVeqzc8HfrdGpb2ZvtoY,12509
|
|
27
|
+
gitflow_analytics/core/schema_version.py,sha256=fhYKxerCgPHJoX4SAoJQO38sQcKDNguMEUWSj367Ilc,10660
|
|
28
|
+
gitflow_analytics/extractors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
|
+
gitflow_analytics/extractors/base.py,sha256=AKbYkFiMhNxVj7zfNzsJfh0rpyTdNr4Faea3bcZPPBo,1168
|
|
30
|
+
gitflow_analytics/extractors/ml_tickets.py,sha256=ZQpb8s_1HMy7F037UcBd0CTJPZilS-Djxumnlhj_E5E,43177
|
|
31
|
+
gitflow_analytics/extractors/story_points.py,sha256=IggP-Ei832oV9aD08a3li08kmjF3BqyU9i8EgAZcpfs,5324
|
|
32
|
+
gitflow_analytics/extractors/tickets.py,sha256=Ga_wdaViy_Wp8ok9JJ6ZhDYyOHyVdldxhx8PhVCWpx8,39979
|
|
33
|
+
gitflow_analytics/identity_llm/__init__.py,sha256=tpWDwapm6zIyb8LxLO8A6pHlE3wNorT_fBL-Yp9-XnU,250
|
|
34
|
+
gitflow_analytics/identity_llm/analysis_pass.py,sha256=mJUC8Cts2m6vAd_VEXRcZOF1FqHtnma8-N5yqd1Csh0,8787
|
|
35
|
+
gitflow_analytics/identity_llm/analyzer.py,sha256=iYx7CxgYpfiliY0qOtTpoy1GLAM-hvrJdtNuFO9llqc,17336
|
|
36
|
+
gitflow_analytics/identity_llm/models.py,sha256=YcTh1tz0_OgBPqapMzVglBAIUOfG5uPzur72631VFUU,2375
|
|
37
|
+
gitflow_analytics/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
|
+
gitflow_analytics/integrations/github_integration.py,sha256=52lyq5GNJIlTXIv7iwrkuxg0firpTcwYtTU9RAn8EIk,13324
|
|
39
|
+
gitflow_analytics/integrations/jira_integration.py,sha256=owGCiCPXKrrcVACjCRjE-U-IXO8xbcLmo9LJijssJdU,28757
|
|
40
|
+
gitflow_analytics/integrations/orchestrator.py,sha256=qbHEAuFCk0FUA487ustkEthwO2qVUtGg10ekKRX8blA,12230
|
|
41
|
+
gitflow_analytics/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
42
|
+
gitflow_analytics/metrics/activity_scoring.py,sha256=h1uj_6dTKpCwNJfsimfaY0TB3Qaexw7I7IEFutoHwUY,12539
|
|
43
|
+
gitflow_analytics/metrics/branch_health.py,sha256=WxQS2IHl81lPCmkxMediHULyl_lQtuGKRAKNEA8yb9A,17401
|
|
44
|
+
gitflow_analytics/metrics/dora.py,sha256=U4Xk0tr7kPcpR7r-PevYBUDtZPkDIG-w_yS2DJOlTrk,27549
|
|
45
|
+
gitflow_analytics/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
|
+
gitflow_analytics/models/database.py,sha256=IVSEoAYT-V0EOFlKnrZujZlq_iiFboRr-hN2OnC1Eqs,39925
|
|
47
|
+
gitflow_analytics/pm_framework/__init__.py,sha256=2wEfO1uF6TlsymnKeMJimdLYay3K9rigGThhpGVBA3A,3698
|
|
48
|
+
gitflow_analytics/pm_framework/base.py,sha256=3fXjekfscGy_WslIbyVXdAhWDIIElei9okSyleUJgqU,15247
|
|
49
|
+
gitflow_analytics/pm_framework/models.py,sha256=uikCapq6KGe_zbWymzvNFvJaN38Nld9i9gBJFKTVtNo,7115
|
|
50
|
+
gitflow_analytics/pm_framework/orchestrator.py,sha256=RrcCFkbVHeYiF7CKGPhj5rCl99GjG1Z8-8F-8CDgfAs,27219
|
|
51
|
+
gitflow_analytics/pm_framework/registry.py,sha256=ggUHS3WFsKXifaYPZgY15r2vGZEKyx-G33bjIv0kwJQ,13636
|
|
52
|
+
gitflow_analytics/pm_framework/adapters/__init__.py,sha256=vS5btB-yIwVHZfoFYacWxHk3HszxIMWLnvBUgVDdNDU,1756
|
|
53
|
+
gitflow_analytics/pm_framework/adapters/jira_adapter.py,sha256=Cp4SAqvF6Yu9-HkmjNFMXk5phgCkePj0eKTWhNRtL38,72330
|
|
54
|
+
gitflow_analytics/qualitative/__init__.py,sha256=fwlb_xrv7Gatjylk5wclzckZxyss8K5cdZhhTHMWfYw,1184
|
|
55
|
+
gitflow_analytics/qualitative/chatgpt_analyzer.py,sha256=CHiaGO5ESGCcQ6pJPxfVZI9gTMp_9OD4TTltmgxCypU,11816
|
|
56
|
+
gitflow_analytics/qualitative/enhanced_analyzer.py,sha256=XWN27-hRkxLcQUt_XVejyGkPCkxA1qpHyGyACe2xtw8,92429
|
|
57
|
+
gitflow_analytics/qualitative/example_enhanced_usage.py,sha256=pKKhAjOCwmBaJPzZ8RDl8R4uG23NwFXUUeAqv6oYM2E,14924
|
|
58
|
+
gitflow_analytics/qualitative/classifiers/__init__.py,sha256=lgabpW-_aub_O-1CVbmgeUVEo2jf5O-DK0Y2dF-WrZc,346
|
|
59
|
+
gitflow_analytics/qualitative/classifiers/change_type.py,sha256=3glCIkNxTQAbk0s0Urp4nLp9OXtYzF0-I8SzOEpx9JE,23291
|
|
60
|
+
gitflow_analytics/qualitative/classifiers/domain_classifier.py,sha256=2bEXyKeO2QVCD8nBuSboi3kVSBnZAeNhxtYuPtaBpdQ,15747
|
|
61
|
+
gitflow_analytics/qualitative/classifiers/intent_analyzer.py,sha256=jjCbc0mdNccnLKTRTgZ3HsYka_yD_u-o-p_IGStpjw8,17442
|
|
62
|
+
gitflow_analytics/qualitative/classifiers/llm_commit_classifier.py,sha256=_FqTydUQV9dbJRyRmRC-O7TfKra6HJf91m6vJHPfp_M,21484
|
|
63
|
+
gitflow_analytics/qualitative/classifiers/risk_analyzer.py,sha256=UoSUa0DF2rEK5chA-dzUvWf44w-ofnghS1W6xbEv8KI,15015
|
|
64
|
+
gitflow_analytics/qualitative/classifiers/llm/__init__.py,sha256=QWBt39jmINB_Z2jJMuBiMxmd5Xlgw1v3otAq-0ymLHU,953
|
|
65
|
+
gitflow_analytics/qualitative/classifiers/llm/base.py,sha256=1_GEb-Q5hxj109nvJaZlimAJPyGErovSXV1atbNLyjM,6058
|
|
66
|
+
gitflow_analytics/qualitative/classifiers/llm/batch_processor.py,sha256=oSlJPYOAp-JXQRYVj9PFNSkoiFp8BdZViH-0cNNpo5E,13138
|
|
67
|
+
gitflow_analytics/qualitative/classifiers/llm/cache.py,sha256=5UWRMgz0bOc_GRShE5gvYEzLhxB-VBDkhZKRECNmjOI,16930
|
|
68
|
+
gitflow_analytics/qualitative/classifiers/llm/cost_tracker.py,sha256=2mqWPHo9SrhwZQ0Q_FNViI_M83Rl18sJVg3p1lwkcBM,14902
|
|
69
|
+
gitflow_analytics/qualitative/classifiers/llm/openai_client.py,sha256=845819deLuN6o5gZ2_lakklmmqovp0MWIbAYbuBGO0g,14083
|
|
70
|
+
gitflow_analytics/qualitative/classifiers/llm/prompts.py,sha256=7dLvCb8bQyZGOsQF_ajZpFxaXyHIbtfUfTO2yQJPxJs,12906
|
|
71
|
+
gitflow_analytics/qualitative/classifiers/llm/response_parser.py,sha256=AyGfTpmvpx4QvRKJDWGS3CbylLm2SOAD0nSZVrkGTrM,9931
|
|
72
|
+
gitflow_analytics/qualitative/core/__init__.py,sha256=22tZJDPyYE0k5-9lx_84R2SsZN8PRc_1I1L6prSkoSE,315
|
|
73
|
+
gitflow_analytics/qualitative/core/llm_fallback.py,sha256=-Q1tqy-vqN7kBe_tQN6odJjCGcFzVasS-piwuO1TGRw,24068
|
|
74
|
+
gitflow_analytics/qualitative/core/nlp_engine.py,sha256=c-R0chjKmCif5ilBl3JIURNushVNw5musc8INJhL3cc,14490
|
|
75
|
+
gitflow_analytics/qualitative/core/pattern_cache.py,sha256=H_t759ftWGJC3QQy6dKqdt3Mf2TojWfV6C41eVdPZTo,18537
|
|
76
|
+
gitflow_analytics/qualitative/core/processor.py,sha256=qcyCuw1c6gwYwOCBzMnbch9adOtXvWwb3SeyWRDGMDo,26507
|
|
77
|
+
gitflow_analytics/qualitative/models/__init__.py,sha256=Ro_lAXyt3jfL29xgZ6jn_DvDRv3PZ6myzsrXq_ctqRQ,457
|
|
78
|
+
gitflow_analytics/qualitative/models/schemas.py,sha256=9GRvp_mFOtIRiAbaNjzxq5Lo8PzD-r4F_-sqoyOjN3w,10670
|
|
79
|
+
gitflow_analytics/qualitative/utils/__init__.py,sha256=YGLGiP4WWFO-KnZERJ6uj8M3uJsmizsSeoR1tsoGK0c,319
|
|
80
|
+
gitflow_analytics/qualitative/utils/batch_processor.py,sha256=r0P_SrgDjBoed1K_VRNvxnilh32SBZa1X0symsnWtmg,11697
|
|
81
|
+
gitflow_analytics/qualitative/utils/cost_tracker.py,sha256=GPoO3ywlGqiJkjz6Uca4TVq3UGxz_NwAqP5B6_R6cNQ,12130
|
|
82
|
+
gitflow_analytics/qualitative/utils/metrics.py,sha256=_Gfyfrenxv-ynkSxVnkGpViROCDpDb1EI6K-x461nEk,13054
|
|
83
|
+
gitflow_analytics/qualitative/utils/text_processing.py,sha256=j3fF5K9DYuRauKGIAxnezyGmqedXkR9wIXailkhG0BY,9205
|
|
84
|
+
gitflow_analytics/reports/__init__.py,sha256=bU43ev2EDMKsCEQEzCyZU5yO2ZL4Oymq4N_3YD3pCQg,2156
|
|
85
|
+
gitflow_analytics/reports/analytics_writer.py,sha256=_w7rZrO6RzxqtqC7L3-NvBr074cN8_d88naTYBv7jhU,45217
|
|
86
|
+
gitflow_analytics/reports/base.py,sha256=IjYX7PbnpVyyB6LI6dz_oLd3vtYsu1eBB978X0zIJDE,23203
|
|
87
|
+
gitflow_analytics/reports/branch_health_writer.py,sha256=Yfd4rGQLx1oBK8tA8t_jQ0b3OeTXEb4GJYrPbXHmsBU,13111
|
|
88
|
+
gitflow_analytics/reports/classification_writer.py,sha256=3kyISHrLXUu8h4vtqBfn0N_k9uESfa2dSUX_MYqEQsc,46115
|
|
89
|
+
gitflow_analytics/reports/cli_integration.py,sha256=4znVx9arRT6WQHvbS4MDjJmdg_8HBLdegXGqH00qAqw,15361
|
|
90
|
+
gitflow_analytics/reports/csv_writer.py,sha256=XxyjcUIz3T6tvqUygOymOdzpkfjJgcGxLK6PbJ_QuO8,75685
|
|
91
|
+
gitflow_analytics/reports/data_models.py,sha256=ZUWVzafwT1fBQ2YWM5f4xk0OuWxofy8zwvUrnuJmwhg,14140
|
|
92
|
+
gitflow_analytics/reports/database_report_generator.py,sha256=WoYkCCKfO55UVDTXhZq5jZaJfmT31ruudUob3sKHkyo,17876
|
|
93
|
+
gitflow_analytics/reports/example_usage.py,sha256=MLIkSsbh_8VLXWZSPddoc2BVKXqnemAXD1k7AWcXiXo,11572
|
|
94
|
+
gitflow_analytics/reports/factory.py,sha256=1UutSVProqPS0pEqNik7tqQO55RgfHiN9bjtUiIerBI,15890
|
|
95
|
+
gitflow_analytics/reports/formatters.py,sha256=RFocNTbDwrNCw4IoL5etemWOPeengvDJ-97xzIyxzmU,19274
|
|
96
|
+
gitflow_analytics/reports/html_generator.py,sha256=gl4vhQZb8_oxvDonBP--v_wOXXgn32OCLwwyuzuKncE,62549
|
|
97
|
+
gitflow_analytics/reports/interfaces.py,sha256=XJJxmwhQ3-4iJrDQ1n5r8vFgL4gRgw_3HMpW3RPYrAU,12194
|
|
98
|
+
gitflow_analytics/reports/json_exporter.py,sha256=p-GpOBJsdmvXpwORTy7LLpipFFUzI8eGuNasmKn57kA,114323
|
|
99
|
+
gitflow_analytics/reports/narrative_writer.py,sha256=cCLnIHjXICUqq0Rd2Y20JnXxlOAYRUUDgjZeDj8Dn60,116360
|
|
100
|
+
gitflow_analytics/reports/story_point_correlation.py,sha256=V9fnqNOxJxK00w0Mx69BMpcZgdgQJyja_Pu4qD-SWw0,51210
|
|
101
|
+
gitflow_analytics/reports/weekly_trends_writer.py,sha256=m_TQ6ThSaa5rkAwfQpPRms2Jwgq3RReYwVBsts67cLk,15720
|
|
102
|
+
gitflow_analytics/training/__init__.py,sha256=YT5p7Wm4U8trzLnbS5FASJBWPMKhqp3rlAThjpxWnxo,143
|
|
103
|
+
gitflow_analytics/training/model_loader.py,sha256=xGZLSopGxDhC--2XN6ytRgi2CyjOKY4zS4fZ-ZlO6lM,13245
|
|
104
|
+
gitflow_analytics/training/pipeline.py,sha256=PQegTk_-OsPexVyRDfiy-3Df-7pcs25C4vPASr-HT9E,19951
|
|
105
|
+
gitflow_analytics/tui/__init__.py,sha256=1liMpth2RvUkmKfNUEnYEZkYi2RpYITFMmGKtBBwiUk,126
|
|
106
|
+
gitflow_analytics/tui/app.py,sha256=lZMgnAzfOqv-t3WlqecEgSAigyrfHSUEdwVsNoK4SGY,22029
|
|
107
|
+
gitflow_analytics/tui/screens/__init__.py,sha256=JVnPy-o4V6D2jehliXAbRET9x8zWmHR7PPk2is-l9OM,327
|
|
108
|
+
gitflow_analytics/tui/screens/analysis_progress_screen.py,sha256=FGFJ50-wB1a51XmldP1CqyjFPSGpsXHnRcwzNHeLQ-o,21160
|
|
109
|
+
gitflow_analytics/tui/screens/configuration_screen.py,sha256=QLtTz8xFAGdIxYsRmUyBr4m-1PteAk3_kxfE1UexqgA,19345
|
|
110
|
+
gitflow_analytics/tui/screens/loading_screen.py,sha256=5kh0kKKCa6-NMlZyPfu2fE4ROgmjU8_jA2xCUX3z5iY,14451
|
|
111
|
+
gitflow_analytics/tui/screens/main_screen.py,sha256=6aIzJrDtgXDlgGcW--wQUqncBBa_hcUytiLu76fMALw,11482
|
|
112
|
+
gitflow_analytics/tui/screens/results_screen.py,sha256=_u_gBbgLsemt3zAZq9lyjaTyNz3dUBHRCgv4O0YtYEw,28623
|
|
113
|
+
gitflow_analytics/tui/widgets/__init__.py,sha256=85l6vkJuRGJNvej-nUZZoNg562zl_1JFOlewVer1mLI,259
|
|
114
|
+
gitflow_analytics/tui/widgets/data_table.py,sha256=8fGNG4m7H41vCid3QwCHJa7bd8qu_DKrDf22iCks3XA,8722
|
|
115
|
+
gitflow_analytics/tui/widgets/export_modal.py,sha256=L-XKPOc6u-fow2TudPgDnC0kXZM1WZuGd_jahtV8lhg,10737
|
|
116
|
+
gitflow_analytics/tui/widgets/progress_widget.py,sha256=Qny6Q1nU0Pr3aj4aHfXLaRjya9MH3rldR2HWYiaQyGE,6167
|
|
117
|
+
gitflow_analytics-1.3.6.dist-info/licenses/LICENSE,sha256=xwvSwY1GYXpRpmbnFvvnbmMwpobnrdN9T821sGvjOY0,1066
|
|
118
|
+
gitflow_analytics-1.3.6.dist-info/METADATA,sha256=lkK6bJEnq7bp50-CI5adwJtGQxP4ush1UeRdV9k_pak,34091
|
|
119
|
+
gitflow_analytics-1.3.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
120
|
+
gitflow_analytics-1.3.6.dist-info/entry_points.txt,sha256=a3y8HnfLOvK1QVOgAkDY6VQXXm3o9ZSQRZrpiaS3hEM,65
|
|
121
|
+
gitflow_analytics-1.3.6.dist-info/top_level.txt,sha256=CQyxZXjKvpSB1kgqqtuE0PCRqfRsXZJL8JrYpJKtkrk,18
|
|
122
|
+
gitflow_analytics-1.3.6.dist-info/RECORD,,
|
|
@@ -1,490 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: gitflow-analytics
|
|
3
|
-
Version: 1.0.3
|
|
4
|
-
Summary: Analyze Git repositories for developer productivity insights
|
|
5
|
-
Author-email: Bob Matyas <bobmatnyc@gmail.com>
|
|
6
|
-
License: MIT
|
|
7
|
-
Project-URL: Homepage, https://github.com/bobmatnyc/gitflow-analytics
|
|
8
|
-
Project-URL: Documentation, https://github.com/bobmatnyc/gitflow-analytics/blob/main/README.md
|
|
9
|
-
Project-URL: Repository, https://github.com/bobmatnyc/gitflow-analytics
|
|
10
|
-
Project-URL: Issues, https://github.com/bobmatnyc/gitflow-analytics/issues
|
|
11
|
-
Keywords: git,analytics,productivity,metrics,development
|
|
12
|
-
Classifier: Development Status :: 5 - Production/Stable
|
|
13
|
-
Classifier: Intended Audience :: Developers
|
|
14
|
-
Classifier: Programming Language :: Python :: 3
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
-
Classifier: Topic :: Software Development :: Version Control :: Git
|
|
20
|
-
Classifier: Topic :: Software Development :: Quality Assurance
|
|
21
|
-
Requires-Python: >=3.9
|
|
22
|
-
Description-Content-Type: text/markdown
|
|
23
|
-
License-File: LICENSE
|
|
24
|
-
Requires-Dist: click>=8.1
|
|
25
|
-
Requires-Dist: gitpython>=3.1
|
|
26
|
-
Requires-Dist: tqdm>=4.65
|
|
27
|
-
Requires-Dist: sqlalchemy>=2.0
|
|
28
|
-
Requires-Dist: pandas>=2.0
|
|
29
|
-
Requires-Dist: pyyaml>=6.0
|
|
30
|
-
Requires-Dist: python-dateutil>=2.8
|
|
31
|
-
Requires-Dist: python-dotenv>=1.0
|
|
32
|
-
Requires-Dist: rich>=13.0.0
|
|
33
|
-
Requires-Dist: spacy>=3.7.0
|
|
34
|
-
Requires-Dist: scikit-learn>=1.3.0
|
|
35
|
-
Requires-Dist: openai>=1.30.0
|
|
36
|
-
Requires-Dist: tiktoken>=0.7.0
|
|
37
|
-
Requires-Dist: numpy>=1.24.0
|
|
38
|
-
Provides-Extra: dev
|
|
39
|
-
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
40
|
-
Requires-Dist: pytest-cov>=4.0; extra == "dev"
|
|
41
|
-
Requires-Dist: pytest-mock>=3.0; extra == "dev"
|
|
42
|
-
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
43
|
-
Requires-Dist: mypy>=1.0; extra == "dev"
|
|
44
|
-
Requires-Dist: black>=23.0; extra == "dev"
|
|
45
|
-
Requires-Dist: isort>=5.0; extra == "dev"
|
|
46
|
-
Requires-Dist: bandit[toml]>=1.7; extra == "dev"
|
|
47
|
-
Requires-Dist: safety>=2.0; extra == "dev"
|
|
48
|
-
Requires-Dist: python-semantic-release>=8.0.0; extra == "dev"
|
|
49
|
-
Requires-Dist: types-PyYAML>=6.0; extra == "dev"
|
|
50
|
-
Requires-Dist: types-requests>=2.28; extra == "dev"
|
|
51
|
-
Provides-Extra: github
|
|
52
|
-
Requires-Dist: pygithub>=1.58; extra == "github"
|
|
53
|
-
Provides-Extra: tui
|
|
54
|
-
Requires-Dist: textual>=0.41.0; extra == "tui"
|
|
55
|
-
Provides-Extra: all
|
|
56
|
-
Requires-Dist: gitflow-analytics[github,tui]; extra == "all"
|
|
57
|
-
Dynamic: license-file
|
|
58
|
-
|
|
59
|
-
# GitFlow Analytics
|
|
60
|
-
|
|
61
|
-
[](https://badge.fury.io/py/gitflow-analytics)
|
|
62
|
-
[](https://pypi.org/project/gitflow-analytics/)
|
|
63
|
-
[](https://opensource.org/licenses/MIT)
|
|
64
|
-
|
|
65
|
-
A Python package for analyzing Git repositories to generate comprehensive developer productivity reports. It extracts data directly from Git history and GitHub APIs, providing weekly summaries, productivity insights, and gap analysis.
|
|
66
|
-
|
|
67
|
-
## Features
|
|
68
|
-
|
|
69
|
-
- 🚀 **Multi-repository analysis** with project grouping
|
|
70
|
-
- 🏢 **Organization-based repository discovery** from GitHub
|
|
71
|
-
- 👥 **Developer identity resolution** and normalization
|
|
72
|
-
- 📊 **Work volume analysis** (absolute vs relative effort)
|
|
73
|
-
- 🎯 **Story point extraction** from commit messages and PR descriptions
|
|
74
|
-
- 🎫 **Multi-platform ticket tracking** (JIRA, GitHub Issues, ClickUp, Linear)
|
|
75
|
-
- 📈 **Weekly CSV reports** with productivity metrics
|
|
76
|
-
- 🔒 **Data anonymization** for external sharing
|
|
77
|
-
- ⚡ **Smart caching** for fast repeated analyses
|
|
78
|
-
- 🔄 **Batch processing** for large repositories
|
|
79
|
-
|
|
80
|
-
## Quick Start
|
|
81
|
-
|
|
82
|
-
### Installation
|
|
83
|
-
|
|
84
|
-
**From PyPI (Recommended):**
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
pip install gitflow-analytics
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
**From Source (Development):**
|
|
91
|
-
|
|
92
|
-
```bash
|
|
93
|
-
git clone https://github.com/bobmatnyc/gitflow-analytics.git
|
|
94
|
-
cd gitflow-analytics
|
|
95
|
-
pip install -e ".[dev]"
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### Basic Usage
|
|
99
|
-
|
|
100
|
-
1. Create a configuration file (`config.yaml`):
|
|
101
|
-
|
|
102
|
-
**Option A: Organization-based (Automatic Repository Discovery)**
|
|
103
|
-
```yaml
|
|
104
|
-
version: "1.0"
|
|
105
|
-
|
|
106
|
-
github:
|
|
107
|
-
token: "${GITHUB_TOKEN}"
|
|
108
|
-
organization: "myorg" # Automatically discovers all repositories
|
|
109
|
-
|
|
110
|
-
analysis:
|
|
111
|
-
story_point_patterns:
|
|
112
|
-
- "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
|
|
113
|
-
- "\\[(\\d+)\\s*(?:sp|pts?)\\]"
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
**Option B: Repository-based (Manual Configuration)**
|
|
117
|
-
```yaml
|
|
118
|
-
version: "1.0"
|
|
119
|
-
|
|
120
|
-
github:
|
|
121
|
-
token: "${GITHUB_TOKEN}"
|
|
122
|
-
owner: "${GITHUB_OWNER}"
|
|
123
|
-
|
|
124
|
-
repositories:
|
|
125
|
-
- name: "frontend"
|
|
126
|
-
path: "~/repos/frontend"
|
|
127
|
-
github_repo: "myorg/frontend"
|
|
128
|
-
project_key: "FRONTEND"
|
|
129
|
-
|
|
130
|
-
- name: "backend"
|
|
131
|
-
path: "~/repos/backend"
|
|
132
|
-
github_repo: "myorg/backend"
|
|
133
|
-
project_key: "BACKEND"
|
|
134
|
-
|
|
135
|
-
analysis:
|
|
136
|
-
story_point_patterns:
|
|
137
|
-
- "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
|
|
138
|
-
- "\\[(\\d+)\\s*(?:sp|pts?)\\]"
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
2. Create a `.env` file in the same directory as your `config.yaml`:
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
# .env
|
|
145
|
-
GITHUB_TOKEN=ghp_your_github_token_here
|
|
146
|
-
GITHUB_OWNER=your_github_org # Only for repository-based setup
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
3. Run the analysis:
|
|
150
|
-
|
|
151
|
-
```bash
|
|
152
|
-
gitflow-analytics analyze -c config.yaml
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
## Configuration Options
|
|
156
|
-
|
|
157
|
-
### Environment Variables and Credentials
|
|
158
|
-
|
|
159
|
-
GitFlow Analytics automatically loads environment variables from a `.env` file in the same directory as your configuration YAML. This is the recommended approach for managing credentials securely.
|
|
160
|
-
|
|
161
|
-
#### Step 1: Create a `.env` file
|
|
162
|
-
|
|
163
|
-
Create a `.env` file next to your configuration YAML:
|
|
164
|
-
|
|
165
|
-
```bash
|
|
166
|
-
# .env file (same directory as your config.yaml)
|
|
167
|
-
# GitHub credentials (required)
|
|
168
|
-
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
|
|
169
|
-
GITHUB_OWNER=myorg # Optional: default owner for repositories
|
|
170
|
-
|
|
171
|
-
# JIRA credentials (optional - only if using JIRA integration)
|
|
172
|
-
JIRA_ACCESS_USER=your.email@company.com
|
|
173
|
-
JIRA_ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxx
|
|
174
|
-
|
|
175
|
-
# Other optional tokens
|
|
176
|
-
CLICKUP_TOKEN=pk_xxxxxxxxxxxx
|
|
177
|
-
LINEAR_TOKEN=lin_api_xxxxxxxxxxxx
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
#### Step 2: Reference in YAML configuration
|
|
181
|
-
|
|
182
|
-
Use `${VARIABLE_NAME}` syntax in your YAML to reference environment variables:
|
|
183
|
-
|
|
184
|
-
```yaml
|
|
185
|
-
# config.yaml
|
|
186
|
-
version: "1.0"
|
|
187
|
-
|
|
188
|
-
github:
|
|
189
|
-
token: "${GITHUB_TOKEN}" # Required
|
|
190
|
-
owner: "${GITHUB_OWNER}" # Optional
|
|
191
|
-
organization: "${GITHUB_ORG}" # Optional (for org-based discovery)
|
|
192
|
-
|
|
193
|
-
# Optional: JIRA integration
|
|
194
|
-
jira:
|
|
195
|
-
access_user: "${JIRA_ACCESS_USER}"
|
|
196
|
-
access_token: "${JIRA_ACCESS_TOKEN}"
|
|
197
|
-
base_url: "https://yourcompany.atlassian.net"
|
|
198
|
-
|
|
199
|
-
# Optional: Configure which JIRA fields contain story points
|
|
200
|
-
jira_integration:
|
|
201
|
-
story_point_fields:
|
|
202
|
-
- "Story Points"
|
|
203
|
-
- "customfield_10016" # Your custom field ID
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
#### Important Notes:
|
|
207
|
-
|
|
208
|
-
- **Never commit `.env` files** to version control (add to `.gitignore`)
|
|
209
|
-
- If credentials are not found in the `.env` file, the tool will exit with an informative error
|
|
210
|
-
- The `.env` file must be in the same directory as your YAML configuration
|
|
211
|
-
- All configured services must have corresponding environment variables set
|
|
212
|
-
|
|
213
|
-
### Organization vs Repository-based Setup
|
|
214
|
-
|
|
215
|
-
GitFlow Analytics supports two main configuration approaches:
|
|
216
|
-
|
|
217
|
-
#### Organization-based Configuration (Recommended)
|
|
218
|
-
|
|
219
|
-
Automatically discovers all non-archived repositories from a GitHub organization:
|
|
220
|
-
|
|
221
|
-
```yaml
|
|
222
|
-
version: "1.0"
|
|
223
|
-
|
|
224
|
-
github:
|
|
225
|
-
token: "${GITHUB_TOKEN}"
|
|
226
|
-
organization: "myorg" # Your GitHub organization name
|
|
227
|
-
|
|
228
|
-
# Optional: Customize analysis settings
|
|
229
|
-
analysis:
|
|
230
|
-
story_point_patterns:
|
|
231
|
-
- "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
|
|
232
|
-
|
|
233
|
-
exclude:
|
|
234
|
-
authors:
|
|
235
|
-
- "dependabot[bot]"
|
|
236
|
-
- "github-actions[bot]"
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
**Benefits:**
|
|
240
|
-
- Automatically discovers new repositories as they're added to the organization
|
|
241
|
-
- No need to manually configure each repository
|
|
242
|
-
- Simplified configuration management
|
|
243
|
-
- Perfect for teams with many repositories
|
|
244
|
-
|
|
245
|
-
**Requirements:**
|
|
246
|
-
- Your GitHub token must have organization read access
|
|
247
|
-
- Repositories will be automatically cloned to local directories if they don't exist
|
|
248
|
-
|
|
249
|
-
#### Repository-based Configuration
|
|
250
|
-
|
|
251
|
-
Manually specify each repository to analyze:
|
|
252
|
-
|
|
253
|
-
```yaml
|
|
254
|
-
version: "1.0"
|
|
255
|
-
|
|
256
|
-
github:
|
|
257
|
-
token: "${GITHUB_TOKEN}"
|
|
258
|
-
owner: "${GITHUB_OWNER}" # Default owner for repositories
|
|
259
|
-
|
|
260
|
-
repositories:
|
|
261
|
-
- name: "frontend"
|
|
262
|
-
path: "~/repos/frontend"
|
|
263
|
-
github_repo: "myorg/frontend"
|
|
264
|
-
project_key: "FRONTEND"
|
|
265
|
-
|
|
266
|
-
- name: "backend"
|
|
267
|
-
path: "~/repos/backend"
|
|
268
|
-
github_repo: "myorg/backend"
|
|
269
|
-
project_key: "BACKEND"
|
|
270
|
-
|
|
271
|
-
analysis:
|
|
272
|
-
story_point_patterns:
|
|
273
|
-
- "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
**Benefits:**
|
|
277
|
-
- Fine-grained control over which repositories to analyze
|
|
278
|
-
- Custom project keys and local paths
|
|
279
|
-
- Works with mixed-ownership repositories
|
|
280
|
-
- Compatible with existing configurations
|
|
281
|
-
|
|
282
|
-
### Directory Defaults
|
|
283
|
-
|
|
284
|
-
GitFlow Analytics now defaults cache and report directories to be relative to the configuration file location:
|
|
285
|
-
|
|
286
|
-
- **Reports**: Default to same directory as config file (unless overridden with `--output`)
|
|
287
|
-
- **Cache**: Default to `.gitflow-cache/` in config file directory
|
|
288
|
-
- **Backward compatibility**: Absolute paths in configuration continue to work as before
|
|
289
|
-
|
|
290
|
-
Example directory structure:
|
|
291
|
-
```
|
|
292
|
-
/project/
|
|
293
|
-
├── config.yaml # Configuration file
|
|
294
|
-
├── weekly_metrics.csv # Reports generated here by default
|
|
295
|
-
├── summary.csv
|
|
296
|
-
└── .gitflow-cache/ # Cache directory
|
|
297
|
-
├── gitflow_cache.db
|
|
298
|
-
└── identities.db
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
## Command Line Interface
|
|
302
|
-
|
|
303
|
-
### Main Commands
|
|
304
|
-
|
|
305
|
-
```bash
|
|
306
|
-
# Analyze repositories
|
|
307
|
-
gitflow-analytics analyze -c config.yaml --weeks 12 --output ./reports
|
|
308
|
-
|
|
309
|
-
# Show cache statistics
|
|
310
|
-
gitflow-analytics cache-stats -c config.yaml
|
|
311
|
-
|
|
312
|
-
# List known developers
|
|
313
|
-
gitflow-analytics list-developers -c config.yaml
|
|
314
|
-
|
|
315
|
-
# Merge developer identities
|
|
316
|
-
gitflow-analytics merge-identity -c config.yaml dev1_id dev2_id
|
|
317
|
-
|
|
318
|
-
# Discover JIRA story point fields
|
|
319
|
-
gitflow-analytics discover-jira-fields -c config.yaml
|
|
320
|
-
```
|
|
321
|
-
|
|
322
|
-
### Options
|
|
323
|
-
|
|
324
|
-
- `--weeks, -w`: Number of weeks to analyze (default: 12)
|
|
325
|
-
- `--output, -o`: Output directory for reports (default: ./reports)
|
|
326
|
-
- `--anonymize`: Anonymize developer information
|
|
327
|
-
- `--no-cache`: Disable caching for fresh analysis
|
|
328
|
-
- `--clear-cache`: Clear cache before analysis
|
|
329
|
-
- `--validate-only`: Validate configuration without running
|
|
330
|
-
|
|
331
|
-
## Complete Configuration Example
|
|
332
|
-
|
|
333
|
-
Here's a complete example showing `.env` file and corresponding YAML configuration:
|
|
334
|
-
|
|
335
|
-
### `.env` file
|
|
336
|
-
```bash
|
|
337
|
-
# GitHub Configuration
|
|
338
|
-
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
|
|
339
|
-
GITHUB_ORG=EWTN-Global
|
|
340
|
-
|
|
341
|
-
# JIRA Configuration
|
|
342
|
-
JIRA_ACCESS_USER=developer@ewtn.com
|
|
343
|
-
JIRA_ACCESS_TOKEN=ATATT3xxxxxxxxxxx
|
|
344
|
-
|
|
345
|
-
# Optional: Other integrations
|
|
346
|
-
# CLICKUP_TOKEN=pk_xxxxxxxxxxxx
|
|
347
|
-
# LINEAR_TOKEN=lin_api_xxxxxxxxxxxx
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
### `config.yaml` file
|
|
351
|
-
```yaml
|
|
352
|
-
version: "1.0"
|
|
353
|
-
|
|
354
|
-
# GitHub configuration with organization discovery
|
|
355
|
-
github:
|
|
356
|
-
token: "${GITHUB_TOKEN}"
|
|
357
|
-
organization: "${GITHUB_ORG}"
|
|
358
|
-
|
|
359
|
-
# JIRA integration for story points
|
|
360
|
-
jira:
|
|
361
|
-
access_user: "${JIRA_ACCESS_USER}"
|
|
362
|
-
access_token: "${JIRA_ACCESS_TOKEN}"
|
|
363
|
-
base_url: "https://ewtn.atlassian.net"
|
|
364
|
-
|
|
365
|
-
jira_integration:
|
|
366
|
-
enabled: true
|
|
367
|
-
fetch_story_points: true
|
|
368
|
-
story_point_fields:
|
|
369
|
-
- "Story point estimate" # Your field name
|
|
370
|
-
- "customfield_10016" # Fallback field ID
|
|
371
|
-
|
|
372
|
-
# Analysis configuration
|
|
373
|
-
analysis:
|
|
374
|
-
# Only track JIRA tickets (ignore GitHub issues, etc.)
|
|
375
|
-
ticket_platforms:
|
|
376
|
-
- jira
|
|
377
|
-
|
|
378
|
-
# Exclude bot commits and boilerplate files
|
|
379
|
-
exclude:
|
|
380
|
-
authors:
|
|
381
|
-
- "dependabot[bot]"
|
|
382
|
-
- "renovate[bot]"
|
|
383
|
-
paths:
|
|
384
|
-
- "**/node_modules/**"
|
|
385
|
-
- "**/*.min.js"
|
|
386
|
-
- "**/package-lock.json"
|
|
387
|
-
|
|
388
|
-
# Developer identity consolidation
|
|
389
|
-
identity:
|
|
390
|
-
similarity_threshold: 0.85
|
|
391
|
-
manual_mappings:
|
|
392
|
-
- primary_email: "john.doe@company.com"
|
|
393
|
-
aliases:
|
|
394
|
-
- "jdoe@oldcompany.com"
|
|
395
|
-
- "john@personal.com"
|
|
396
|
-
|
|
397
|
-
# Output configuration
|
|
398
|
-
output:
|
|
399
|
-
directory: "./reports"
|
|
400
|
-
formats:
|
|
401
|
-
- csv
|
|
402
|
-
- markdown
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
## Output Reports
|
|
406
|
-
|
|
407
|
-
The tool generates three CSV reports:
|
|
408
|
-
|
|
409
|
-
1. **Weekly Metrics** (`weekly_metrics_YYYYMMDD.csv`)
|
|
410
|
-
- Week-by-week developer productivity
|
|
411
|
-
- Story points, commits, lines changed
|
|
412
|
-
- Ticket coverage percentages
|
|
413
|
-
- Per-project breakdown
|
|
414
|
-
|
|
415
|
-
2. **Summary Statistics** (`summary_YYYYMMDD.csv`)
|
|
416
|
-
- Overall project statistics
|
|
417
|
-
- Platform-specific ticket counts
|
|
418
|
-
- Top contributors
|
|
419
|
-
|
|
420
|
-
3. **Developer Report** (`developers_YYYYMMDD.csv`)
|
|
421
|
-
- Complete developer profiles
|
|
422
|
-
- Total contributions
|
|
423
|
-
- Identity aliases
|
|
424
|
-
|
|
425
|
-
## Story Point Patterns
|
|
426
|
-
|
|
427
|
-
Configure custom regex patterns to match your team's story point format:
|
|
428
|
-
|
|
429
|
-
```yaml
|
|
430
|
-
story_point_patterns:
|
|
431
|
-
- "SP: (\\d+)" # SP: 5
|
|
432
|
-
- "\\[([0-9]+) pts\\]" # [3 pts]
|
|
433
|
-
- "estimate: (\\d+)" # estimate: 8
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
## Ticket Platform Support
|
|
437
|
-
|
|
438
|
-
Automatically detects and tracks tickets from:
|
|
439
|
-
- **JIRA**: `PROJ-123`
|
|
440
|
-
- **GitHub**: `#123`, `GH-123`
|
|
441
|
-
- **ClickUp**: `CU-abc123`
|
|
442
|
-
- **Linear**: `ENG-123`
|
|
443
|
-
|
|
444
|
-
### JIRA Integration
|
|
445
|
-
|
|
446
|
-
GitFlow Analytics can fetch story points directly from JIRA tickets. Configure your JIRA instance:
|
|
447
|
-
|
|
448
|
-
```yaml
|
|
449
|
-
jira:
|
|
450
|
-
access_user: "${JIRA_ACCESS_USER}"
|
|
451
|
-
access_token: "${JIRA_ACCESS_TOKEN}"
|
|
452
|
-
base_url: "https://your-company.atlassian.net"
|
|
453
|
-
|
|
454
|
-
jira_integration:
|
|
455
|
-
enabled: true
|
|
456
|
-
story_point_fields:
|
|
457
|
-
- "Story point estimate" # Your custom field name
|
|
458
|
-
- "customfield_10016" # Or use field ID
|
|
459
|
-
```
|
|
460
|
-
|
|
461
|
-
To discover your JIRA story point fields:
|
|
462
|
-
```bash
|
|
463
|
-
gitflow-analytics discover-jira-fields -c config.yaml
|
|
464
|
-
```
|
|
465
|
-
|
|
466
|
-
## Caching
|
|
467
|
-
|
|
468
|
-
The tool uses SQLite for intelligent caching:
|
|
469
|
-
- Commit analysis results
|
|
470
|
-
- Developer identity mappings
|
|
471
|
-
- Pull request data
|
|
472
|
-
|
|
473
|
-
Cache is automatically managed with configurable TTL.
|
|
474
|
-
|
|
475
|
-
## Developer Identity Resolution
|
|
476
|
-
|
|
477
|
-
Intelligently merges developer identities across:
|
|
478
|
-
- Different email addresses
|
|
479
|
-
- Name variations
|
|
480
|
-
- GitHub usernames
|
|
481
|
-
|
|
482
|
-
Manual overrides supported in configuration.
|
|
483
|
-
|
|
484
|
-
## Contributing
|
|
485
|
-
|
|
486
|
-
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
487
|
-
|
|
488
|
-
## License
|
|
489
|
-
|
|
490
|
-
This project is licensed under the MIT License - see the LICENSE file for details.
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
gitflow_analytics/__init__.py,sha256=yN1dyAUu4l9qX-YNAGRItEf4RFFe-5GQiOntXPIfdxo,683
|
|
2
|
-
gitflow_analytics/_version.py,sha256=K1RfTm9uAPTEUj21mrxdqQ3kT2CuA6F1ML8t6HzEZwk,137
|
|
3
|
-
gitflow_analytics/cli.py,sha256=xHfdi9qYNgy2My78paWsFYPZg5Exo3fJXHmw7liI4Sw,37378
|
|
4
|
-
gitflow_analytics/cli_rich.py,sha256=FqOBGWNqTmxD2BHfmqtHWvHx4AFO-FgOTRwtx9eOEHE,13604
|
|
5
|
-
gitflow_analytics/config.py,sha256=08f5n9FFfA2wj-tEHQwYrQzBT42GSKURzhZgWRzTk0w,20966
|
|
6
|
-
gitflow_analytics/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
-
gitflow_analytics/core/analyzer.py,sha256=RgdfpH8tCjJJRKAhZGSiGQ83F-ekGQ9YtL4hf8r-rNw,10737
|
|
8
|
-
gitflow_analytics/core/branch_mapper.py,sha256=1L1ctrhTEqMZ61eS1nZRkcyaarLipeQgotw4HdXcSmM,7407
|
|
9
|
-
gitflow_analytics/core/cache.py,sha256=LIrp4O5GQfMvvgW_rG8zHr8vurYOsH6Du5u3Exh8S9k,14292
|
|
10
|
-
gitflow_analytics/core/identity.py,sha256=vcPcvKyIgf3gIjrdamW_ma7av6igK89ZH-1AZ0pQWMQ,17191
|
|
11
|
-
gitflow_analytics/extractors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
-
gitflow_analytics/extractors/base.py,sha256=AKbYkFiMhNxVj7zfNzsJfh0rpyTdNr4Faea3bcZPPBo,1168
|
|
13
|
-
gitflow_analytics/extractors/story_points.py,sha256=oS8nb0PWkZfhq3Jq14Hf_OMZN_tQwJWw9Dqc8ur5Kuk,5044
|
|
14
|
-
gitflow_analytics/extractors/tickets.py,sha256=erXzMPBTv2Wx2lbXE9HeOm0cy6hHu1pF6ZaQG6KATqg,7233
|
|
15
|
-
gitflow_analytics/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
-
gitflow_analytics/integrations/github_integration.py,sha256=0v9CtXQ6IhDCQBfoh_etAwiEFiPeHWTy0HQBtoItQBs,6437
|
|
17
|
-
gitflow_analytics/integrations/jira_integration.py,sha256=DRBXqILinsuyON8lxmhT-hRFhB85StX0DD3d7JMu808,10240
|
|
18
|
-
gitflow_analytics/integrations/orchestrator.py,sha256=KtBm3LBtwOK41azL3S1SYcpVuoJbGDy2BvojA7_rJEU,5732
|
|
19
|
-
gitflow_analytics/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
-
gitflow_analytics/metrics/dora.py,sha256=H86NSqSL7ngWapt09w_mGGSVwpv04Dth8e5q4ZGar3I,12053
|
|
21
|
-
gitflow_analytics/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
-
gitflow_analytics/models/database.py,sha256=EUalU5RaQ8WB5idQSIw45rrpnyn-305j8tL9UnI0wxQ,10015
|
|
23
|
-
gitflow_analytics/qualitative/__init__.py,sha256=KUMF-RPpItm1ZcgVGRXeLkU12T1G0xDsowFdsGp0_so,886
|
|
24
|
-
gitflow_analytics/qualitative/classifiers/__init__.py,sha256=GSjcSNFzbtPfY6cMINExTd2Mssb7xJpRPeXmJRW22bc,348
|
|
25
|
-
gitflow_analytics/qualitative/classifiers/change_type.py,sha256=9EKbwFs8x4hV2J_57DZTYRDVeMm9YTRI25q6ySQMDTU,17828
|
|
26
|
-
gitflow_analytics/qualitative/classifiers/domain_classifier.py,sha256=azGjMpHLanm-rkZCZnihvHCukC0H9Cp5RiOx32Jwcc0,14881
|
|
27
|
-
gitflow_analytics/qualitative/classifiers/intent_analyzer.py,sha256=jfRPJUr3XgbEpwJ6CL-zyMCMZrkfhy2XisMdht-XK-M,16354
|
|
28
|
-
gitflow_analytics/qualitative/classifiers/risk_analyzer.py,sha256=XDt0CTv_ALqON47GEFoUvkC631084bDzrUIr99U2KBY,15395
|
|
29
|
-
gitflow_analytics/qualitative/core/__init__.py,sha256=1QkGWNhkWnVRWNCDuLUCYSrt1CM4hNwms33trBcCKEs,315
|
|
30
|
-
gitflow_analytics/qualitative/core/llm_fallback.py,sha256=8HQ-ekp9gevquvhiZotNhIXkWe7ir9N6gCVUAswUCt0,25206
|
|
31
|
-
gitflow_analytics/qualitative/core/nlp_engine.py,sha256=erde27Nag6YTbAbtk9Nb3Tm9rpnm8kwOW76Q1R4QvZI,14463
|
|
32
|
-
gitflow_analytics/qualitative/core/pattern_cache.py,sha256=4cFpYOEIEai8BXeTaHhGLilfnV0a_yLJ0ttlBWOTV8k,18985
|
|
33
|
-
gitflow_analytics/qualitative/core/processor.py,sha256=UqS2YWd0KFxhR8QoCV1x7KQg7worYB5aLUwXY0NhKX0,22329
|
|
34
|
-
gitflow_analytics/qualitative/models/__init__.py,sha256=VV4s_5_VvK4lPvRktdT_K0DGRx65rzQ4oB8NjQGFIfg,458
|
|
35
|
-
gitflow_analytics/qualitative/models/schemas.py,sha256=8T8BAUju7c3aQMZN4XyBB5P0Vn5TLdx0JANxkHXHw2g,10357
|
|
36
|
-
gitflow_analytics/qualitative/utils/__init__.py,sha256=M_zkw--7cDuWbUq-_pXzMIwkz-pqC6fmncz2INPPggU,320
|
|
37
|
-
gitflow_analytics/qualitative/utils/batch_processor.py,sha256=34Zh4KTPwn0JRk7D9bPj4eTK_F0iJPL_v3bHN4QtJ0g,12335
|
|
38
|
-
gitflow_analytics/qualitative/utils/cost_tracker.py,sha256=-NiIAIZUNDEfWqXZmumqyigN7QUuRnmJjIgdHXnQARQ,12709
|
|
39
|
-
gitflow_analytics/qualitative/utils/metrics.py,sha256=_TLFRsx5cYUOsBJix_VtCZv6mhoC_QXWGfIegnjai10,13443
|
|
40
|
-
gitflow_analytics/qualitative/utils/text_processing.py,sha256=RoZChe3je_M617HNxZSwPm3uTIrVJPvMSBB1ldz9LGg,9195
|
|
41
|
-
gitflow_analytics/reports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
42
|
-
gitflow_analytics/reports/analytics_writer.py,sha256=hpIMQMNvoD0srSfSAPTvZzyKvk9i3K_uz9OkBXNDY8Y,19870
|
|
43
|
-
gitflow_analytics/reports/csv_writer.py,sha256=XWaeL6Avj0TW6cQ_0Tl-5wNLT7XcDCJjuyqEK584Fig,14053
|
|
44
|
-
gitflow_analytics/reports/narrative_writer.py,sha256=HTUG44sKkO0kLStqHDFOiVi2LXcG_BUCDPf34kwAfGE,13048
|
|
45
|
-
gitflow_analytics/tui/__init__.py,sha256=fySf6x1-WQuyvXA0qKsBpgNFW9Akazi5WdvwYHeSi9I,125
|
|
46
|
-
gitflow_analytics/tui/app.py,sha256=LL0jTUuGYDFuPGojM6_2ecp2o3sf7bLfI_9BY_AaQO0,22756
|
|
47
|
-
gitflow_analytics/tui/screens/__init__.py,sha256=KuXesK7UNaJEvzpQ83lMhe1UGWmgRNtTrUOL8cnDJBU,326
|
|
48
|
-
gitflow_analytics/tui/screens/analysis_progress_screen.py,sha256=xW4oNcPyxksysjBdQNof1C3trqYXJItj1LcY751Od1k,21490
|
|
49
|
-
gitflow_analytics/tui/screens/configuration_screen.py,sha256=uT9nKlcF1ZMw7Y6dQnZDkFuoeKa5mSsvvk-2zOpJ8K8,20207
|
|
50
|
-
gitflow_analytics/tui/screens/loading_screen.py,sha256=cRuebJDZ9SSV8naaMolOD9BeDtakjrSQa8BgK1ioHtY,15351
|
|
51
|
-
gitflow_analytics/tui/screens/main_screen.py,sha256=AW0lJBVs_uB4VrP79_TdO33xkwWwMYXWj9ijZR116B4,11735
|
|
52
|
-
gitflow_analytics/tui/screens/results_screen.py,sha256=zfR6JIMbKNAIAuqhT4dyss7H9F0pFvjphEUEKjC5TJU,29608
|
|
53
|
-
gitflow_analytics/tui/widgets/__init__.py,sha256=l4U-2_DmxEm4wgjK0OS9KthI-9KBWY0d_k49PAbqTqc,258
|
|
54
|
-
gitflow_analytics/tui/widgets/data_table.py,sha256=FLBUZBN_LJ527NMyhKjnxVUGm95VopIB8xRbwLShTgI,9050
|
|
55
|
-
gitflow_analytics/tui/widgets/export_modal.py,sha256=rXbjgnfqy1vi4dm3qpk4Ng1pX7w_zfj8aUlYZbIjwII,11189
|
|
56
|
-
gitflow_analytics/tui/widgets/progress_widget.py,sha256=L0L5h5PlClajLUT0tH4MriRRCXEw359BoZwPPbP0xlw,6504
|
|
57
|
-
gitflow_analytics-1.0.3.dist-info/licenses/LICENSE,sha256=xwvSwY1GYXpRpmbnFvvnbmMwpobnrdN9T821sGvjOY0,1066
|
|
58
|
-
gitflow_analytics-1.0.3.dist-info/METADATA,sha256=Z2wxKlmDXtipMIyqY56hEZ3ULg0gN-SsUQcvPXPCa-U,13703
|
|
59
|
-
gitflow_analytics-1.0.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
60
|
-
gitflow_analytics-1.0.3.dist-info/entry_points.txt,sha256=a3y8HnfLOvK1QVOgAkDY6VQXXm3o9ZSQRZrpiaS3hEM,65
|
|
61
|
-
gitflow_analytics-1.0.3.dist-info/top_level.txt,sha256=CQyxZXjKvpSB1kgqqtuE0PCRqfRsXZJL8JrYpJKtkrk,18
|
|
62
|
-
gitflow_analytics-1.0.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|