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.
Files changed (106) hide show
  1. gitflow_analytics-1.0.3/CHANGELOG.md +112 -0
  2. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/CLAUDE.md +151 -13
  3. gitflow_analytics-1.0.3/PKG-INFO +490 -0
  4. gitflow_analytics-1.0.3/README.md +432 -0
  5. gitflow_analytics-1.0.3/docs/DEPLOY.md +308 -0
  6. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/docs/configuration.md +93 -7
  7. gitflow_analytics-1.0.3/docs/design/qualitative_data_extraction.md +947 -0
  8. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/pyproject.toml +66 -8
  9. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/__init__.py +11 -9
  10. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/_version.py +2 -2
  11. gitflow_analytics-1.0.3/src/gitflow_analytics/cli.py +889 -0
  12. gitflow_analytics-1.0.3/src/gitflow_analytics/cli_rich.py +353 -0
  13. gitflow_analytics-1.0.3/src/gitflow_analytics/config.py +508 -0
  14. gitflow_analytics-1.0.3/src/gitflow_analytics/core/analyzer.py +292 -0
  15. gitflow_analytics-1.0.3/src/gitflow_analytics/core/branch_mapper.py +221 -0
  16. gitflow_analytics-1.0.3/src/gitflow_analytics/core/cache.py +344 -0
  17. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/core/identity.py +214 -178
  18. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/extractors/base.py +13 -11
  19. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/extractors/story_points.py +70 -59
  20. gitflow_analytics-1.0.3/src/gitflow_analytics/extractors/tickets.py +180 -0
  21. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/integrations/github_integration.py +91 -77
  22. gitflow_analytics-1.0.3/src/gitflow_analytics/integrations/jira_integration.py +284 -0
  23. gitflow_analytics-1.0.3/src/gitflow_analytics/integrations/orchestrator.py +146 -0
  24. gitflow_analytics-1.0.3/src/gitflow_analytics/metrics/dora.py +331 -0
  25. gitflow_analytics-1.0.3/src/gitflow_analytics/models/database.py +308 -0
  26. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/__init__.py +30 -0
  27. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/classifiers/__init__.py +13 -0
  28. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/classifiers/change_type.py +468 -0
  29. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/classifiers/domain_classifier.py +399 -0
  30. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/classifiers/intent_analyzer.py +436 -0
  31. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/classifiers/risk_analyzer.py +412 -0
  32. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/core/__init__.py +13 -0
  33. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/core/llm_fallback.py +653 -0
  34. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/core/nlp_engine.py +373 -0
  35. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/core/pattern_cache.py +457 -0
  36. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/core/processor.py +540 -0
  37. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/models/__init__.py +25 -0
  38. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/models/schemas.py +272 -0
  39. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/utils/__init__.py +13 -0
  40. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/utils/batch_processor.py +326 -0
  41. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/utils/cost_tracker.py +343 -0
  42. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/utils/metrics.py +347 -0
  43. gitflow_analytics-1.0.3/src/gitflow_analytics/qualitative/utils/text_processing.py +243 -0
  44. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/reports/analytics_writer.py +25 -8
  45. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/reports/csv_writer.py +60 -32
  46. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/reports/narrative_writer.py +21 -15
  47. gitflow_analytics-1.0.3/src/gitflow_analytics/tui/__init__.py +5 -0
  48. gitflow_analytics-1.0.3/src/gitflow_analytics/tui/app.py +721 -0
  49. gitflow_analytics-1.0.3/src/gitflow_analytics/tui/screens/__init__.py +8 -0
  50. gitflow_analytics-1.0.3/src/gitflow_analytics/tui/screens/analysis_progress_screen.py +487 -0
  51. gitflow_analytics-1.0.3/src/gitflow_analytics/tui/screens/configuration_screen.py +547 -0
  52. gitflow_analytics-1.0.3/src/gitflow_analytics/tui/screens/loading_screen.py +358 -0
  53. gitflow_analytics-1.0.3/src/gitflow_analytics/tui/screens/main_screen.py +304 -0
  54. gitflow_analytics-1.0.3/src/gitflow_analytics/tui/screens/results_screen.py +698 -0
  55. gitflow_analytics-1.0.3/src/gitflow_analytics/tui/widgets/__init__.py +7 -0
  56. gitflow_analytics-1.0.3/src/gitflow_analytics/tui/widgets/data_table.py +257 -0
  57. gitflow_analytics-1.0.3/src/gitflow_analytics/tui/widgets/export_modal.py +301 -0
  58. gitflow_analytics-1.0.3/src/gitflow_analytics/tui/widgets/progress_widget.py +192 -0
  59. gitflow_analytics-1.0.3/src/gitflow_analytics.egg-info/PKG-INFO +490 -0
  60. gitflow_analytics-1.0.3/src/gitflow_analytics.egg-info/SOURCES.txt +88 -0
  61. gitflow_analytics-1.0.3/src/gitflow_analytics.egg-info/requires.txt +37 -0
  62. gitflow_analytics-1.0.3/tests/__init__.py +6 -0
  63. gitflow_analytics-1.0.3/tests/conftest.py +140 -0
  64. gitflow_analytics-1.0.3/tests/core/__init__.py +1 -0
  65. gitflow_analytics-1.0.3/tests/core/test_analyzer.py +235 -0
  66. gitflow_analytics-1.0.3/tests/core/test_cache.py +441 -0
  67. gitflow_analytics-1.0.3/tests/core/test_identity.py +198 -0
  68. gitflow_analytics-1.0.3/tests/extractors/__init__.py +1 -0
  69. gitflow_analytics-1.0.3/tests/integrations/__init__.py +1 -0
  70. gitflow_analytics-1.0.3/tests/metrics/__init__.py +1 -0
  71. gitflow_analytics-1.0.3/tests/models/__init__.py +1 -0
  72. gitflow_analytics-1.0.3/tests/qualitative/__init__.py +1 -0
  73. gitflow_analytics-1.0.3/tests/qualitative/test_basic_integration.py +216 -0
  74. gitflow_analytics-1.0.3/tests/reports/__init__.py +1 -0
  75. gitflow_analytics-1.0.3/tests/test_cli.py +132 -0
  76. gitflow_analytics-1.0.3/tests/test_metrics.py +249 -0
  77. gitflow_analytics-1.0.3/tests/test_reports.py +358 -0
  78. gitflow_analytics-1.0.0/CHANGELOG.md +0 -54
  79. gitflow_analytics-1.0.0/PKG-INFO +0 -201
  80. gitflow_analytics-1.0.0/README.md +0 -156
  81. gitflow_analytics-1.0.0/docs/DEPLOY.md +0 -261
  82. gitflow_analytics-1.0.0/src/gitflow_analytics/cli.py +0 -441
  83. gitflow_analytics-1.0.0/src/gitflow_analytics/config.py +0 -215
  84. gitflow_analytics-1.0.0/src/gitflow_analytics/core/analyzer.py +0 -195
  85. gitflow_analytics-1.0.0/src/gitflow_analytics/core/branch_mapper.py +0 -221
  86. gitflow_analytics-1.0.0/src/gitflow_analytics/core/cache.py +0 -275
  87. gitflow_analytics-1.0.0/src/gitflow_analytics/extractors/tickets.py +0 -157
  88. gitflow_analytics-1.0.0/src/gitflow_analytics/integrations/orchestrator.py +0 -119
  89. gitflow_analytics-1.0.0/src/gitflow_analytics/metrics/dora.py +0 -327
  90. gitflow_analytics-1.0.0/src/gitflow_analytics/models/database.py +0 -171
  91. gitflow_analytics-1.0.0/src/gitflow_analytics.egg-info/PKG-INFO +0 -201
  92. gitflow_analytics-1.0.0/src/gitflow_analytics.egg-info/SOURCES.txt +0 -39
  93. gitflow_analytics-1.0.0/src/gitflow_analytics.egg-info/requires.txt +0 -21
  94. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/LICENSE +0 -0
  95. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/MANIFEST.in +0 -0
  96. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/docs/design/git_pm_correlation_design.md +0 -0
  97. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/setup.cfg +0 -0
  98. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/core/__init__.py +0 -0
  99. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/extractors/__init__.py +0 -0
  100. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/integrations/__init__.py +0 -0
  101. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/metrics/__init__.py +0 -0
  102. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/models/__init__.py +0 -0
  103. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics/reports/__init__.py +0 -0
  104. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics.egg-info/dependency_links.txt +0 -0
  105. {gitflow_analytics-1.0.0 → gitflow_analytics-1.0.3}/src/gitflow_analytics.egg-info/entry_points.txt +0 -0
  106. {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
- ## Version Management
201
+ ## Atomic Versioning System
149
202
 
150
- - Version is stored in `src/gitflow_analytics/_version.py`
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
- ## Release Process
205
+ ### Version Source of Truth
156
206
 
157
- 1. Update version in `_version.py`
158
- 2. Run full test suite
159
- 3. Update CHANGELOG.md
160
- 4. Commit with message: `chore: bump version to X.Y.Z`
161
- 5. Tag the release: `git tag -a vX.Y.Z -m "Release version X.Y.Z"`
162
- 6. Push tags: `git push origin main --tags`
163
- 7. Build and publish to PyPI (see DEPLOY.md)
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