gitflow-analytics 1.0.0__tar.gz → 1.0.3__tar.gz
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-1.0.3/CHANGELOG.md +112 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/CLAUDE.md +151 -13
- gitflow_analytics-1.0.3/PKG-INFO +490 -0
- gitflow_analytics-1.0.3/README.md +432 -0
- gitflow_analytics-1.0.3/docs/DEPLOY.md +308 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/docs/configuration.md +93 -7
- gitflow_analytics-1.0.3/docs/design/qualitative_data_extraction.md +947 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/pyproject.toml +66 -8
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/__init__.py +11 -9
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/_version.py +2 -2
- gitflow_analytics-1.0.3/src/gitflow_analytics/cli.py +889 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/cli_rich.py +353 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/config.py +508 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/core/analyzer.py +292 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/core/branch_mapper.py +221 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/core/cache.py +344 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/core/identity.py +214 -178
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/extractors/base.py +13 -11
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/extractors/story_points.py +70 -59
- gitflow_analytics-1.0.3/src/gitflow_analytics/extractors/tickets.py +180 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/integrations/github_integration.py +91 -77
- gitflow_analytics-1.0.3/src/gitflow_analytics/integrations/jira_integration.py +284 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/integrations/orchestrator.py +146 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/metrics/dora.py +331 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/models/database.py +308 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/__init__.py +30 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/classifiers/__init__.py +13 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/classifiers/change_type.py +468 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/classifiers/domain_classifier.py +399 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/classifiers/intent_analyzer.py +436 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/classifiers/risk_analyzer.py +412 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/core/__init__.py +13 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/core/llm_fallback.py +653 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/core/nlp_engine.py +373 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/core/pattern_cache.py +457 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/core/processor.py +540 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/models/__init__.py +25 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/models/schemas.py +272 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/utils/__init__.py +13 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/utils/batch_processor.py +326 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/utils/cost_tracker.py +343 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/utils/metrics.py +347 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/utils/text_processing.py +243 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/reports/analytics_writer.py +25 -8
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/reports/csv_writer.py +60 -32
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/reports/narrative_writer.py +21 -15
- gitflow_analytics-1.0.3/src/gitflow_analytics/tui/__init__.py +5 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/tui/app.py +721 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/tui/screens/__init__.py +8 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/tui/screens/analysis_progress_screen.py +487 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/tui/screens/configuration_screen.py +547 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/tui/screens/loading_screen.py +358 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/tui/screens/main_screen.py +304 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/tui/screens/results_screen.py +698 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/tui/widgets/__init__.py +7 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/tui/widgets/data_table.py +257 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/tui/widgets/export_modal.py +301 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics/tui/widgets/progress_widget.py +192 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics.egg-info/PKG-INFO +490 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics.egg-info/SOURCES.txt +88 -0
- gitflow_analytics-1.0.3/src/gitflow_analytics.egg-info/requires.txt +37 -0
- gitflow_analytics-1.0.3/tests/__init__.py +6 -0
- gitflow_analytics-1.0.3/tests/conftest.py +140 -0
- gitflow_analytics-1.0.3/tests/core/__init__.py +1 -0
- gitflow_analytics-1.0.3/tests/core/test_analyzer.py +235 -0
- gitflow_analytics-1.0.3/tests/core/test_cache.py +441 -0
- gitflow_analytics-1.0.3/tests/core/test_identity.py +198 -0
- gitflow_analytics-1.0.3/tests/extractors/__init__.py +1 -0
- gitflow_analytics-1.0.3/tests/integrations/__init__.py +1 -0
- gitflow_analytics-1.0.3/tests/metrics/__init__.py +1 -0
- gitflow_analytics-1.0.3/tests/models/__init__.py +1 -0
- gitflow_analytics-1.0.3/tests/qualitative/__init__.py +1 -0
- gitflow_analytics-1.0.3/tests/qualitative/test_basic_integration.py +216 -0
- gitflow_analytics-1.0.3/tests/reports/__init__.py +1 -0
- gitflow_analytics-1.0.3/tests/test_cli.py +132 -0
- gitflow_analytics-1.0.3/tests/test_metrics.py +249 -0
- gitflow_analytics-1.0.3/tests/test_reports.py +358 -0
- gitflow_analytics-1.0.0/CHANGELOG.md +0 -54
- gitflow_analytics-1.0.0/PKG-INFO +0 -201
- gitflow_analytics-1.0.0/README.md +0 -156
- gitflow_analytics-1.0.0/docs/DEPLOY.md +0 -261
- gitflow_analytics-1.0.0/src/gitflow_analytics/cli.py +0 -441
- gitflow_analytics-1.0.0/src/gitflow_analytics/config.py +0 -215
- gitflow_analytics-1.0.0/src/gitflow_analytics/core/analyzer.py +0 -195
- gitflow_analytics-1.0.0/src/gitflow_analytics/core/branch_mapper.py +0 -221
- gitflow_analytics-1.0.0/src/gitflow_analytics/core/cache.py +0 -275
- gitflow_analytics-1.0.0/src/gitflow_analytics/extractors/tickets.py +0 -157
- gitflow_analytics-1.0.0/src/gitflow_analytics/integrations/orchestrator.py +0 -119
- gitflow_analytics-1.0.0/src/gitflow_analytics/metrics/dora.py +0 -327
- gitflow_analytics-1.0.0/src/gitflow_analytics/models/database.py +0 -171
- gitflow_analytics-1.0.0/src/gitflow_analytics.egg-info/PKG-INFO +0 -201
- gitflow_analytics-1.0.0/src/gitflow_analytics.egg-info/SOURCES.txt +0 -39
- gitflow_analytics-1.0.0/src/gitflow_analytics.egg-info/requires.txt +0 -21
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/LICENSE +0 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/MANIFEST.in +0 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/docs/design/git_pm_correlation_design.md +0 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/setup.cfg +0 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/core/__init__.py +0 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/extractors/__init__.py +0 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/integrations/__init__.py +0 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/metrics/__init__.py +0 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/models/__init__.py +0 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/reports/__init__.py +0 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics.egg-info/dependency_links.txt +0 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics.egg-info/entry_points.txt +0 -0
- {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to GitFlow Analytics will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.0.3] - 2025-08-01
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- Fixed comprehensive timezone comparison issues in database queries and report generation
|
|
12
|
+
- Improved timezone-aware datetime handling across all components
|
|
13
|
+
- Fixed timezone-related errors that were still affecting v1.0.2
|
|
14
|
+
|
|
15
|
+
## [1.0.2] - 2025-08-01
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
- Fixed SQLite index naming conflicts that could cause database errors
|
|
19
|
+
- Fixed PR cache UNIQUE constraint errors with proper upsert logic
|
|
20
|
+
- Fixed timezone comparison errors in report generation
|
|
21
|
+
- Added loading screen to TUI (before abandoning TUI approach)
|
|
22
|
+
- Moved Rich to core dependencies for better CLI output
|
|
23
|
+
|
|
24
|
+
## [1.0.1] - 2025-07-31
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
- Path exclusion support for filtering boilerplate/generated files from line count metrics
|
|
28
|
+
- Configurable via `analysis.exclude.paths` in YAML configuration
|
|
29
|
+
- Default exclusions for common patterns (node_modules, lock files, minified files, etc.)
|
|
30
|
+
- Filtered metrics available as `filtered_insertions`, `filtered_deletions`, `filtered_files_changed`
|
|
31
|
+
- JIRA integration for fetching story points from tickets
|
|
32
|
+
- Configurable story point field names via `jira_integration.story_point_fields`
|
|
33
|
+
- Automatic story point extraction from JIRA tickets referenced in commits
|
|
34
|
+
- Support for custom field IDs and field names
|
|
35
|
+
- Organization-based repository discovery from GitHub
|
|
36
|
+
- Automatic discovery of all non-archived repositories in an organization
|
|
37
|
+
- No manual repository configuration needed for organization-wide analysis
|
|
38
|
+
- Ticket platform filtering via `analysis.ticket_platforms`
|
|
39
|
+
- Ability to track only specific platforms (e.g., only JIRA, ignoring GitHub Issues)
|
|
40
|
+
- Enhanced `.env` file support
|
|
41
|
+
- Automatic loading from configuration directory
|
|
42
|
+
- Validation of required environment variables
|
|
43
|
+
- Clear error messages for missing credentials
|
|
44
|
+
- New CLI command: `discover-jira-fields` to find custom field IDs
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
- All report generators now use filtered line counts when available
|
|
48
|
+
- Cache and output directories now default to config file location (not current directory)
|
|
49
|
+
- Improved developer identity resolution with better consolidation
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
- Timezone comparison errors between GitHub and local timestamps
|
|
53
|
+
- License configuration in pyproject.toml for PyPI compatibility
|
|
54
|
+
- Manual identity mapping format validation
|
|
55
|
+
- Linting errors for better code quality
|
|
56
|
+
|
|
57
|
+
### Documentation
|
|
58
|
+
- Added comprehensive environment variable configuration guide
|
|
59
|
+
- Complete configuration examples with `.env` and YAML files
|
|
60
|
+
- Path exclusion documentation with default patterns
|
|
61
|
+
- Updated README with clearer setup instructions
|
|
62
|
+
|
|
63
|
+
## [1.0.0] - 2025-07-29
|
|
64
|
+
|
|
65
|
+
### Added
|
|
66
|
+
- Initial release of GitFlow Analytics
|
|
67
|
+
- Core Git repository analysis with batch processing
|
|
68
|
+
- Developer identity resolution with fuzzy matching
|
|
69
|
+
- Manual identity mapping support
|
|
70
|
+
- Story point extraction from commit messages
|
|
71
|
+
- Multi-platform ticket tracking (GitHub, JIRA, Linear, ClickUp)
|
|
72
|
+
- Comprehensive caching system with SQLite
|
|
73
|
+
- CSV report generation:
|
|
74
|
+
- Weekly metrics
|
|
75
|
+
- Developer statistics
|
|
76
|
+
- Activity distribution
|
|
77
|
+
- Developer focus analysis
|
|
78
|
+
- Qualitative insights
|
|
79
|
+
- Markdown narrative reports with insights
|
|
80
|
+
- JSON export for API integration
|
|
81
|
+
- DORA metrics calculation:
|
|
82
|
+
- Deployment frequency
|
|
83
|
+
- Lead time for changes
|
|
84
|
+
- Mean time to recovery
|
|
85
|
+
- Change failure rate
|
|
86
|
+
- GitHub PR enrichment (optional)
|
|
87
|
+
- Branch to project mapping
|
|
88
|
+
- YAML configuration with environment variable support
|
|
89
|
+
- Progress bars for long operations
|
|
90
|
+
- Anonymization support for reports
|
|
91
|
+
|
|
92
|
+
### Configuration Features
|
|
93
|
+
- Repository definitions with project keys
|
|
94
|
+
- Story point extraction patterns
|
|
95
|
+
- Developer identity similarity threshold
|
|
96
|
+
- Manual identity mappings
|
|
97
|
+
- Default ticket platform specification
|
|
98
|
+
- Branch mapping rules
|
|
99
|
+
- Output format selection
|
|
100
|
+
- Cache TTL configuration
|
|
101
|
+
|
|
102
|
+
### Developer Experience
|
|
103
|
+
- Clear CLI with helpful error messages
|
|
104
|
+
- Comprehensive documentation
|
|
105
|
+
- Sample configuration files
|
|
106
|
+
- Progress indicators during analysis
|
|
107
|
+
- Detailed logging of operations
|
|
108
|
+
|
|
109
|
+
[1.0.3]: https://github.com/bobmatnyc/gitflow-analytics/releases/tag/v1.0.3
|
|
110
|
+
[1.0.2]: https://github.com/bobmatnyc/gitflow-analytics/releases/tag/v1.0.2
|
|
111
|
+
[1.0.1]: https://github.com/bobmatnyc/gitflow-analytics/releases/tag/v1.0.1
|
|
112
|
+
[1.0.0]: https://github.com/bobmatnyc/gitflow-analytics/releases/tag/v1.0.0
|
|
@@ -42,9 +42,28 @@ The project uses SQLite for caching:
|
|
|
42
42
|
|
|
43
43
|
Configuration uses YAML with environment variable support:
|
|
44
44
|
- Variables use format: `${VARIABLE_NAME}`
|
|
45
|
+
- **Environment files**: Automatically loads `.env` file from same directory as config YAML
|
|
46
|
+
- **Organization support**: `github.organization` field enables automatic repository discovery
|
|
47
|
+
- **Directory defaults**: Cache and reports now default to config file directory (not current working directory)
|
|
45
48
|
- Default ticket platform can be specified
|
|
46
49
|
- Branch mapping rules for project inference
|
|
47
50
|
- Manual identity mappings for consolidating developer identities
|
|
51
|
+
- Full backward compatibility with existing repository-based configurations
|
|
52
|
+
|
|
53
|
+
#### Using .env Files
|
|
54
|
+
|
|
55
|
+
The system automatically looks for a `.env` file in the same directory as your configuration YAML:
|
|
56
|
+
```bash
|
|
57
|
+
# Example .env file
|
|
58
|
+
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
|
|
59
|
+
JIRA_ACCESS_USER=your.email@company.com
|
|
60
|
+
JIRA_ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxx
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
This approach is recommended for:
|
|
64
|
+
- Keeping credentials out of configuration files
|
|
65
|
+
- Easy credential management across environments
|
|
66
|
+
- Preventing accidental credential commits
|
|
48
67
|
|
|
49
68
|
### 5. Report Generation
|
|
50
69
|
|
|
@@ -87,6 +106,40 @@ When testing changes:
|
|
|
87
106
|
3. Clear cache and re-run analysis
|
|
88
107
|
4. Check for typos in email addresses
|
|
89
108
|
|
|
109
|
+
#### Working with Organization Support
|
|
110
|
+
|
|
111
|
+
1. **Organization Discovery**: When `github.organization` is specified and no repositories are manually configured:
|
|
112
|
+
- All non-archived repositories are automatically discovered from the GitHub organization
|
|
113
|
+
- Repositories are cloned to local directories if they don't exist
|
|
114
|
+
- Uses the organization name as the project key prefix if not specified
|
|
115
|
+
|
|
116
|
+
2. **Testing Organization Configs**:
|
|
117
|
+
```bash
|
|
118
|
+
# Test with organization discovery
|
|
119
|
+
gitflow-analytics analyze -c config-org.yaml --weeks 4 --validate-only
|
|
120
|
+
|
|
121
|
+
# Run with discovered repositories
|
|
122
|
+
gitflow-analytics analyze -c config-org.yaml --weeks 4
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
3. **Directory Structure**: With organization support, the recommended directory structure is:
|
|
126
|
+
```
|
|
127
|
+
/project/
|
|
128
|
+
├── config-org.yaml # Organization config
|
|
129
|
+
├── repos/ # Auto-cloned repositories
|
|
130
|
+
│ ├── repo1/
|
|
131
|
+
│ ├── repo2/
|
|
132
|
+
│ └── repo3/
|
|
133
|
+
├── .gitflow-cache/ # Cache (relative to config)
|
|
134
|
+
└── reports/ # Reports (default output location)
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
4. **Debugging Organization Discovery**:
|
|
138
|
+
- Check GitHub token has organization read permissions
|
|
139
|
+
- Verify organization name is correct (case-sensitive)
|
|
140
|
+
- Use `--validate-only` to test configuration without full analysis
|
|
141
|
+
- Check for API rate limiting issues
|
|
142
|
+
|
|
90
143
|
### 8. Performance Considerations
|
|
91
144
|
|
|
92
145
|
- **Batch processing**: Commits are processed in batches (default: 1000)
|
|
@@ -145,22 +198,97 @@ gitflow-analytics/
|
|
|
145
198
|
└── README.md # User documentation
|
|
146
199
|
```
|
|
147
200
|
|
|
148
|
-
##
|
|
201
|
+
## Atomic Versioning System
|
|
149
202
|
|
|
150
|
-
-
|
|
151
|
-
- Follow semantic versioning (MAJOR.MINOR.PATCH)
|
|
152
|
-
- Update version before releases
|
|
153
|
-
- Tag releases with `v` prefix (e.g., `v1.0.0`)
|
|
203
|
+
The project uses **python-semantic-release** for automated, atomic version management. This ensures consistency between the source code version, git tags, PyPI releases, and GitHub releases.
|
|
154
204
|
|
|
155
|
-
|
|
205
|
+
### Version Source of Truth
|
|
156
206
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
207
|
+
The single source of truth for versioning is:
|
|
208
|
+
- **File**: `src/gitflow_analytics/_version.py`
|
|
209
|
+
- **Format**: `__version__ = "X.Y.Z"`
|
|
210
|
+
- **Management**: Automatically updated by semantic-release
|
|
211
|
+
|
|
212
|
+
### Semantic Versioning Rules
|
|
213
|
+
|
|
214
|
+
Version bumps are determined by conventional commit messages:
|
|
215
|
+
- **MAJOR** (X.0.0): Breaking changes (rare, manual intervention required)
|
|
216
|
+
- **MINOR** (0.X.0): New features (`feat:` commits)
|
|
217
|
+
- **PATCH** (0.0.X): Bug fixes and maintenance (`fix:`, `docs:`, `chore:`, etc.)
|
|
218
|
+
|
|
219
|
+
### Conventional Commit Format
|
|
220
|
+
|
|
221
|
+
Use these prefixes for automatic version detection:
|
|
222
|
+
```bash
|
|
223
|
+
# Minor version bump (new features)
|
|
224
|
+
feat: add new story point extraction pattern
|
|
225
|
+
feat(cli): add --validate-only flag for configuration testing
|
|
226
|
+
|
|
227
|
+
# Patch version bump (fixes, improvements, maintenance)
|
|
228
|
+
fix: resolve identity resolution bug with similar names
|
|
229
|
+
fix(cache): handle database lock errors gracefully
|
|
230
|
+
docs: update installation instructions
|
|
231
|
+
chore: update dependency versions
|
|
232
|
+
style: fix code formatting issues
|
|
233
|
+
refactor: improve error handling in GitHub client
|
|
234
|
+
perf: optimize commit batch processing
|
|
235
|
+
test: add integration tests for organization discovery
|
|
236
|
+
ci: update GitHub Actions workflow
|
|
237
|
+
build: update pyproject.toml configuration
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### CLI Version Display Fix
|
|
241
|
+
|
|
242
|
+
The project includes a fix for proper CLI version display:
|
|
243
|
+
- Version is dynamically imported from `_version.py`
|
|
244
|
+
- CLI command `gitflow-analytics --version` correctly shows current version
|
|
245
|
+
- Prevents version mismatch between package and CLI
|
|
246
|
+
|
|
247
|
+
## Automated Release Process
|
|
248
|
+
|
|
249
|
+
The project uses GitHub Actions for fully automated releases:
|
|
250
|
+
|
|
251
|
+
### Workflow Triggers
|
|
252
|
+
1. **Push to main branch**: Triggers semantic analysis
|
|
253
|
+
2. **Manual dispatch**: Can be triggered manually via GitHub UI
|
|
254
|
+
3. **Conventional commits**: Drive version bump decisions
|
|
255
|
+
|
|
256
|
+
### Release Steps (Automated)
|
|
257
|
+
1. **Semantic Analysis**: Analyze commits since last release
|
|
258
|
+
2. **Version Calculation**: Determine next version based on commit types
|
|
259
|
+
3. **Version Update**: Update `_version.py` with new version
|
|
260
|
+
4. **Git Operations**: Create git tag and GitHub release
|
|
261
|
+
5. **Quality Checks**: Run full test suite, linting, and type checking
|
|
262
|
+
6. **Package Build**: Build wheel and source distributions
|
|
263
|
+
7. **PyPI Publishing**: Automatically publish to PyPI
|
|
264
|
+
8. **Asset Upload**: Attach build artifacts to GitHub release
|
|
265
|
+
9. **Changelog**: Auto-generate and update CHANGELOG.md
|
|
266
|
+
|
|
267
|
+
### Manual Override (Emergency Only)
|
|
268
|
+
|
|
269
|
+
For emergency releases or version fixes:
|
|
270
|
+
```bash
|
|
271
|
+
# Only if semantic-release is not working
|
|
272
|
+
git checkout main
|
|
273
|
+
git pull origin main
|
|
274
|
+
# Edit src/gitflow_analytics/_version.py manually
|
|
275
|
+
git commit -m "chore(release): manual version bump to X.Y.Z"
|
|
276
|
+
git tag -a vX.Y.Z -m "Emergency release X.Y.Z"
|
|
277
|
+
git push origin main --tags
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### GitHub Actions Configuration
|
|
281
|
+
|
|
282
|
+
The project includes comprehensive CI/CD:
|
|
283
|
+
- **`.github/workflows/semantic-release.yml`**: Main release workflow
|
|
284
|
+
- **`.github/workflows/tests.yml`**: Testing on multiple Python versions
|
|
285
|
+
- **`.github/workflows/release.yml`**: Additional release validation
|
|
286
|
+
|
|
287
|
+
### PyPI Publishing
|
|
288
|
+
|
|
289
|
+
- **Trusted Publishing**: Uses GitHub's OIDC for secure PyPI publishing
|
|
290
|
+
- **No API Keys**: No need to manage PyPI tokens in secrets
|
|
291
|
+
- **Automatic**: Publishing happens on every version tag creation
|
|
164
292
|
|
|
165
293
|
## Common Gotchas
|
|
166
294
|
|
|
@@ -169,6 +297,11 @@ gitflow-analytics/
|
|
|
169
297
|
3. **Memory usage**: Large repositories can consume significant memory
|
|
170
298
|
4. **Identity resolution**: Manual mappings must be applied after initial analysis
|
|
171
299
|
5. **Cache invalidation**: Some changes require clearing the cache
|
|
300
|
+
6. **Directory defaults**: Cache and reports now default to config file directory, not current working directory
|
|
301
|
+
7. **Organization permissions**: GitHub token must have organization read access for automatic repository discovery
|
|
302
|
+
8. **Version conflicts**: Never manually edit version in `_version.py` unless bypassing semantic-release
|
|
303
|
+
9. **Commit message format**: Incorrect commit message format will not trigger version bumps
|
|
304
|
+
10. **Release permissions**: Only repository owners can trigger releases (configured in workflow)
|
|
172
305
|
|
|
173
306
|
## Quick Commands
|
|
174
307
|
|
|
@@ -191,6 +324,11 @@ black src/ tests/
|
|
|
191
324
|
# Check code quality
|
|
192
325
|
ruff check src/
|
|
193
326
|
mypy src/
|
|
327
|
+
|
|
328
|
+
# Version and release commands (automated via CI/CD)
|
|
329
|
+
semantic-release version --dry-run # Preview next version
|
|
330
|
+
semantic-release version # Create release (CI only)
|
|
331
|
+
gitflow-analytics --version # Check current version
|
|
194
332
|
```
|
|
195
333
|
|
|
196
334
|
## Contact
|