gitflow-analytics


Namegitflow-analytics JSON
Version 1.0.3 PyPI version JSON
download
home_pageNone
SummaryAnalyze Git repositories for developer productivity insights
upload_time2025-08-01 17:20:00
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT
keywords git analytics productivity metrics development
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # GitFlow Analytics

[![PyPI version](https://badge.fury.io/py/gitflow-analytics.svg)](https://badge.fury.io/py/gitflow-analytics)
[![Python Support](https://img.shields.io/pypi/pyversions/gitflow-analytics.svg)](https://pypi.org/project/gitflow-analytics/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

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.

## Features

- 🚀 **Multi-repository analysis** with project grouping
- 🏢 **Organization-based repository discovery** from GitHub
- 👥 **Developer identity resolution** and normalization
- 📊 **Work volume analysis** (absolute vs relative effort)
- 🎯 **Story point extraction** from commit messages and PR descriptions
- 🎫 **Multi-platform ticket tracking** (JIRA, GitHub Issues, ClickUp, Linear)
- 📈 **Weekly CSV reports** with productivity metrics
- 🔒 **Data anonymization** for external sharing
- ⚡ **Smart caching** for fast repeated analyses
- 🔄 **Batch processing** for large repositories

## Quick Start

### Installation

**From PyPI (Recommended):**

```bash
pip install gitflow-analytics
```

**From Source (Development):**

```bash
git clone https://github.com/bobmatnyc/gitflow-analytics.git
cd gitflow-analytics
pip install -e ".[dev]"
```

### Basic Usage

1. Create a configuration file (`config.yaml`):

**Option A: Organization-based (Automatic Repository Discovery)**
```yaml
version: "1.0"

github:
  token: "${GITHUB_TOKEN}"
  organization: "myorg"  # Automatically discovers all repositories

analysis:
  story_point_patterns:
    - "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
    - "\\[(\\d+)\\s*(?:sp|pts?)\\]"
```

**Option B: Repository-based (Manual Configuration)**
```yaml
version: "1.0"

github:
  token: "${GITHUB_TOKEN}"
  owner: "${GITHUB_OWNER}"

repositories:
  - name: "frontend"
    path: "~/repos/frontend"
    github_repo: "myorg/frontend"
    project_key: "FRONTEND"
    
  - name: "backend"
    path: "~/repos/backend"
    github_repo: "myorg/backend"
    project_key: "BACKEND"

analysis:
  story_point_patterns:
    - "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
    - "\\[(\\d+)\\s*(?:sp|pts?)\\]"
```

2. Create a `.env` file in the same directory as your `config.yaml`:

```bash
# .env
GITHUB_TOKEN=ghp_your_github_token_here
GITHUB_OWNER=your_github_org  # Only for repository-based setup
```

3. Run the analysis:

```bash
gitflow-analytics analyze -c config.yaml
```

## Configuration Options

### Environment Variables and Credentials

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.

#### Step 1: Create a `.env` file

Create a `.env` file next to your configuration YAML:

```bash
# .env file (same directory as your config.yaml)
# GitHub credentials (required)
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
GITHUB_OWNER=myorg  # Optional: default owner for repositories

# JIRA credentials (optional - only if using JIRA integration)
JIRA_ACCESS_USER=your.email@company.com
JIRA_ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxx

# Other optional tokens
CLICKUP_TOKEN=pk_xxxxxxxxxxxx
LINEAR_TOKEN=lin_api_xxxxxxxxxxxx
```

#### Step 2: Reference in YAML configuration

Use `${VARIABLE_NAME}` syntax in your YAML to reference environment variables:

```yaml
# config.yaml
version: "1.0"

github:
  token: "${GITHUB_TOKEN}"        # Required
  owner: "${GITHUB_OWNER}"        # Optional
  organization: "${GITHUB_ORG}"   # Optional (for org-based discovery)

# Optional: JIRA integration
jira:
  access_user: "${JIRA_ACCESS_USER}"
  access_token: "${JIRA_ACCESS_TOKEN}"
  base_url: "https://yourcompany.atlassian.net"

# Optional: Configure which JIRA fields contain story points
jira_integration:
  story_point_fields:
    - "Story Points"
    - "customfield_10016"  # Your custom field ID
```

#### Important Notes:

- **Never commit `.env` files** to version control (add to `.gitignore`)
- If credentials are not found in the `.env` file, the tool will exit with an informative error
- The `.env` file must be in the same directory as your YAML configuration
- All configured services must have corresponding environment variables set

### Organization vs Repository-based Setup

GitFlow Analytics supports two main configuration approaches:

#### Organization-based Configuration (Recommended)

Automatically discovers all non-archived repositories from a GitHub organization:

```yaml
version: "1.0"

github:
  token: "${GITHUB_TOKEN}"
  organization: "myorg"  # Your GitHub organization name

# Optional: Customize analysis settings
analysis:
  story_point_patterns:
    - "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
  
  exclude:
    authors:
      - "dependabot[bot]"
      - "github-actions[bot]"
```

**Benefits:**
- Automatically discovers new repositories as they're added to the organization
- No need to manually configure each repository
- Simplified configuration management
- Perfect for teams with many repositories

**Requirements:**
- Your GitHub token must have organization read access
- Repositories will be automatically cloned to local directories if they don't exist

#### Repository-based Configuration

Manually specify each repository to analyze:

```yaml
version: "1.0"

github:
  token: "${GITHUB_TOKEN}"
  owner: "${GITHUB_OWNER}"  # Default owner for repositories

repositories:
  - name: "frontend"
    path: "~/repos/frontend"
    github_repo: "myorg/frontend"
    project_key: "FRONTEND"
    
  - name: "backend"
    path: "~/repos/backend"
    github_repo: "myorg/backend"
    project_key: "BACKEND"

analysis:
  story_point_patterns:
    - "(?:story\\s*points?|sp|pts?)\\s*[:=]\\s*(\\d+)"
```

**Benefits:**
- Fine-grained control over which repositories to analyze
- Custom project keys and local paths
- Works with mixed-ownership repositories
- Compatible with existing configurations

### Directory Defaults

GitFlow Analytics now defaults cache and report directories to be relative to the configuration file location:

- **Reports**: Default to same directory as config file (unless overridden with `--output`)
- **Cache**: Default to `.gitflow-cache/` in config file directory
- **Backward compatibility**: Absolute paths in configuration continue to work as before

Example directory structure:
```
/project/
├── config.yaml          # Configuration file
├── weekly_metrics.csv    # Reports generated here by default
├── summary.csv
└── .gitflow-cache/       # Cache directory
    ├── gitflow_cache.db
    └── identities.db
```

## Command Line Interface

### Main Commands

```bash
# Analyze repositories
gitflow-analytics analyze -c config.yaml --weeks 12 --output ./reports

# Show cache statistics
gitflow-analytics cache-stats -c config.yaml

# List known developers
gitflow-analytics list-developers -c config.yaml

# Merge developer identities
gitflow-analytics merge-identity -c config.yaml dev1_id dev2_id

# Discover JIRA story point fields
gitflow-analytics discover-jira-fields -c config.yaml
```

### Options

- `--weeks, -w`: Number of weeks to analyze (default: 12)
- `--output, -o`: Output directory for reports (default: ./reports)
- `--anonymize`: Anonymize developer information
- `--no-cache`: Disable caching for fresh analysis
- `--clear-cache`: Clear cache before analysis
- `--validate-only`: Validate configuration without running

## Complete Configuration Example

Here's a complete example showing `.env` file and corresponding YAML configuration:

### `.env` file
```bash
# GitHub Configuration
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
GITHUB_ORG=EWTN-Global

# JIRA Configuration
JIRA_ACCESS_USER=developer@ewtn.com
JIRA_ACCESS_TOKEN=ATATT3xxxxxxxxxxx

# Optional: Other integrations
# CLICKUP_TOKEN=pk_xxxxxxxxxxxx
# LINEAR_TOKEN=lin_api_xxxxxxxxxxxx
```

### `config.yaml` file
```yaml
version: "1.0"

# GitHub configuration with organization discovery
github:
  token: "${GITHUB_TOKEN}"
  organization: "${GITHUB_ORG}"

# JIRA integration for story points
jira:
  access_user: "${JIRA_ACCESS_USER}"
  access_token: "${JIRA_ACCESS_TOKEN}"
  base_url: "https://ewtn.atlassian.net"

jira_integration:
  enabled: true
  fetch_story_points: true
  story_point_fields:
    - "Story point estimate"     # Your field name
    - "customfield_10016"        # Fallback field ID

# Analysis configuration
analysis:
  # Only track JIRA tickets (ignore GitHub issues, etc.)
  ticket_platforms:
    - jira
  
  # Exclude bot commits and boilerplate files
  exclude:
    authors:
      - "dependabot[bot]"
      - "renovate[bot]"
    paths:
      - "**/node_modules/**"
      - "**/*.min.js"
      - "**/package-lock.json"
  
  # Developer identity consolidation
  identity:
    similarity_threshold: 0.85
    manual_mappings:
      - primary_email: "john.doe@company.com"
        aliases:
          - "jdoe@oldcompany.com"
          - "john@personal.com"

# Output configuration
output:
  directory: "./reports"
  formats:
    - csv
    - markdown
```

## Output Reports

The tool generates three CSV reports:

1. **Weekly Metrics** (`weekly_metrics_YYYYMMDD.csv`)
   - Week-by-week developer productivity
   - Story points, commits, lines changed
   - Ticket coverage percentages
   - Per-project breakdown

2. **Summary Statistics** (`summary_YYYYMMDD.csv`)
   - Overall project statistics
   - Platform-specific ticket counts
   - Top contributors

3. **Developer Report** (`developers_YYYYMMDD.csv`)
   - Complete developer profiles
   - Total contributions
   - Identity aliases

## Story Point Patterns

Configure custom regex patterns to match your team's story point format:

```yaml
story_point_patterns:
  - "SP: (\\d+)"           # SP: 5
  - "\\[([0-9]+) pts\\]"   # [3 pts]
  - "estimate: (\\d+)"     # estimate: 8
```

## Ticket Platform Support

Automatically detects and tracks tickets from:
- **JIRA**: `PROJ-123`
- **GitHub**: `#123`, `GH-123`
- **ClickUp**: `CU-abc123`
- **Linear**: `ENG-123`

### JIRA Integration

GitFlow Analytics can fetch story points directly from JIRA tickets. Configure your JIRA instance:

```yaml
jira:
  access_user: "${JIRA_ACCESS_USER}"
  access_token: "${JIRA_ACCESS_TOKEN}"
  base_url: "https://your-company.atlassian.net"

jira_integration:
  enabled: true
  story_point_fields:
    - "Story point estimate"  # Your custom field name
    - "customfield_10016"     # Or use field ID
```

To discover your JIRA story point fields:
```bash
gitflow-analytics discover-jira-fields -c config.yaml
```

## Caching

The tool uses SQLite for intelligent caching:
- Commit analysis results
- Developer identity mappings
- Pull request data

Cache is automatically managed with configurable TTL.

## Developer Identity Resolution

Intelligently merges developer identities across:
- Different email addresses
- Name variations
- GitHub usernames

Manual overrides supported in configuration.

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## License

This project is licensed under the MIT License - see the LICENSE file for details.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "gitflow-analytics",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "git, analytics, productivity, metrics, development",
    "author": null,
    "author_email": "Bob Matyas <bobmatnyc@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/4d/cc/7fb1cf0553dac06be4efc24e61ec6d5154b6c4c81dff459833b19022e13e/gitflow_analytics-1.0.3.tar.gz",
    "platform": null,
    "description": "# GitFlow Analytics\n\n[![PyPI version](https://badge.fury.io/py/gitflow-analytics.svg)](https://badge.fury.io/py/gitflow-analytics)\n[![Python Support](https://img.shields.io/pypi/pyversions/gitflow-analytics.svg)](https://pypi.org/project/gitflow-analytics/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA 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.\n\n## Features\n\n- \ud83d\ude80 **Multi-repository analysis** with project grouping\n- \ud83c\udfe2 **Organization-based repository discovery** from GitHub\n- \ud83d\udc65 **Developer identity resolution** and normalization\n- \ud83d\udcca **Work volume analysis** (absolute vs relative effort)\n- \ud83c\udfaf **Story point extraction** from commit messages and PR descriptions\n- \ud83c\udfab **Multi-platform ticket tracking** (JIRA, GitHub Issues, ClickUp, Linear)\n- \ud83d\udcc8 **Weekly CSV reports** with productivity metrics\n- \ud83d\udd12 **Data anonymization** for external sharing\n- \u26a1 **Smart caching** for fast repeated analyses\n- \ud83d\udd04 **Batch processing** for large repositories\n\n## Quick Start\n\n### Installation\n\n**From PyPI (Recommended):**\n\n```bash\npip install gitflow-analytics\n```\n\n**From Source (Development):**\n\n```bash\ngit clone https://github.com/bobmatnyc/gitflow-analytics.git\ncd gitflow-analytics\npip install -e \".[dev]\"\n```\n\n### Basic Usage\n\n1. Create a configuration file (`config.yaml`):\n\n**Option A: Organization-based (Automatic Repository Discovery)**\n```yaml\nversion: \"1.0\"\n\ngithub:\n  token: \"${GITHUB_TOKEN}\"\n  organization: \"myorg\"  # Automatically discovers all repositories\n\nanalysis:\n  story_point_patterns:\n    - \"(?:story\\\\s*points?|sp|pts?)\\\\s*[:=]\\\\s*(\\\\d+)\"\n    - \"\\\\[(\\\\d+)\\\\s*(?:sp|pts?)\\\\]\"\n```\n\n**Option B: Repository-based (Manual Configuration)**\n```yaml\nversion: \"1.0\"\n\ngithub:\n  token: \"${GITHUB_TOKEN}\"\n  owner: \"${GITHUB_OWNER}\"\n\nrepositories:\n  - name: \"frontend\"\n    path: \"~/repos/frontend\"\n    github_repo: \"myorg/frontend\"\n    project_key: \"FRONTEND\"\n    \n  - name: \"backend\"\n    path: \"~/repos/backend\"\n    github_repo: \"myorg/backend\"\n    project_key: \"BACKEND\"\n\nanalysis:\n  story_point_patterns:\n    - \"(?:story\\\\s*points?|sp|pts?)\\\\s*[:=]\\\\s*(\\\\d+)\"\n    - \"\\\\[(\\\\d+)\\\\s*(?:sp|pts?)\\\\]\"\n```\n\n2. Create a `.env` file in the same directory as your `config.yaml`:\n\n```bash\n# .env\nGITHUB_TOKEN=ghp_your_github_token_here\nGITHUB_OWNER=your_github_org  # Only for repository-based setup\n```\n\n3. Run the analysis:\n\n```bash\ngitflow-analytics analyze -c config.yaml\n```\n\n## Configuration Options\n\n### Environment Variables and Credentials\n\nGitFlow 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.\n\n#### Step 1: Create a `.env` file\n\nCreate a `.env` file next to your configuration YAML:\n\n```bash\n# .env file (same directory as your config.yaml)\n# GitHub credentials (required)\nGITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx\nGITHUB_OWNER=myorg  # Optional: default owner for repositories\n\n# JIRA credentials (optional - only if using JIRA integration)\nJIRA_ACCESS_USER=your.email@company.com\nJIRA_ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxx\n\n# Other optional tokens\nCLICKUP_TOKEN=pk_xxxxxxxxxxxx\nLINEAR_TOKEN=lin_api_xxxxxxxxxxxx\n```\n\n#### Step 2: Reference in YAML configuration\n\nUse `${VARIABLE_NAME}` syntax in your YAML to reference environment variables:\n\n```yaml\n# config.yaml\nversion: \"1.0\"\n\ngithub:\n  token: \"${GITHUB_TOKEN}\"        # Required\n  owner: \"${GITHUB_OWNER}\"        # Optional\n  organization: \"${GITHUB_ORG}\"   # Optional (for org-based discovery)\n\n# Optional: JIRA integration\njira:\n  access_user: \"${JIRA_ACCESS_USER}\"\n  access_token: \"${JIRA_ACCESS_TOKEN}\"\n  base_url: \"https://yourcompany.atlassian.net\"\n\n# Optional: Configure which JIRA fields contain story points\njira_integration:\n  story_point_fields:\n    - \"Story Points\"\n    - \"customfield_10016\"  # Your custom field ID\n```\n\n#### Important Notes:\n\n- **Never commit `.env` files** to version control (add to `.gitignore`)\n- If credentials are not found in the `.env` file, the tool will exit with an informative error\n- The `.env` file must be in the same directory as your YAML configuration\n- All configured services must have corresponding environment variables set\n\n### Organization vs Repository-based Setup\n\nGitFlow Analytics supports two main configuration approaches:\n\n#### Organization-based Configuration (Recommended)\n\nAutomatically discovers all non-archived repositories from a GitHub organization:\n\n```yaml\nversion: \"1.0\"\n\ngithub:\n  token: \"${GITHUB_TOKEN}\"\n  organization: \"myorg\"  # Your GitHub organization name\n\n# Optional: Customize analysis settings\nanalysis:\n  story_point_patterns:\n    - \"(?:story\\\\s*points?|sp|pts?)\\\\s*[:=]\\\\s*(\\\\d+)\"\n  \n  exclude:\n    authors:\n      - \"dependabot[bot]\"\n      - \"github-actions[bot]\"\n```\n\n**Benefits:**\n- Automatically discovers new repositories as they're added to the organization\n- No need to manually configure each repository\n- Simplified configuration management\n- Perfect for teams with many repositories\n\n**Requirements:**\n- Your GitHub token must have organization read access\n- Repositories will be automatically cloned to local directories if they don't exist\n\n#### Repository-based Configuration\n\nManually specify each repository to analyze:\n\n```yaml\nversion: \"1.0\"\n\ngithub:\n  token: \"${GITHUB_TOKEN}\"\n  owner: \"${GITHUB_OWNER}\"  # Default owner for repositories\n\nrepositories:\n  - name: \"frontend\"\n    path: \"~/repos/frontend\"\n    github_repo: \"myorg/frontend\"\n    project_key: \"FRONTEND\"\n    \n  - name: \"backend\"\n    path: \"~/repos/backend\"\n    github_repo: \"myorg/backend\"\n    project_key: \"BACKEND\"\n\nanalysis:\n  story_point_patterns:\n    - \"(?:story\\\\s*points?|sp|pts?)\\\\s*[:=]\\\\s*(\\\\d+)\"\n```\n\n**Benefits:**\n- Fine-grained control over which repositories to analyze\n- Custom project keys and local paths\n- Works with mixed-ownership repositories\n- Compatible with existing configurations\n\n### Directory Defaults\n\nGitFlow Analytics now defaults cache and report directories to be relative to the configuration file location:\n\n- **Reports**: Default to same directory as config file (unless overridden with `--output`)\n- **Cache**: Default to `.gitflow-cache/` in config file directory\n- **Backward compatibility**: Absolute paths in configuration continue to work as before\n\nExample directory structure:\n```\n/project/\n\u251c\u2500\u2500 config.yaml          # Configuration file\n\u251c\u2500\u2500 weekly_metrics.csv    # Reports generated here by default\n\u251c\u2500\u2500 summary.csv\n\u2514\u2500\u2500 .gitflow-cache/       # Cache directory\n    \u251c\u2500\u2500 gitflow_cache.db\n    \u2514\u2500\u2500 identities.db\n```\n\n## Command Line Interface\n\n### Main Commands\n\n```bash\n# Analyze repositories\ngitflow-analytics analyze -c config.yaml --weeks 12 --output ./reports\n\n# Show cache statistics\ngitflow-analytics cache-stats -c config.yaml\n\n# List known developers\ngitflow-analytics list-developers -c config.yaml\n\n# Merge developer identities\ngitflow-analytics merge-identity -c config.yaml dev1_id dev2_id\n\n# Discover JIRA story point fields\ngitflow-analytics discover-jira-fields -c config.yaml\n```\n\n### Options\n\n- `--weeks, -w`: Number of weeks to analyze (default: 12)\n- `--output, -o`: Output directory for reports (default: ./reports)\n- `--anonymize`: Anonymize developer information\n- `--no-cache`: Disable caching for fresh analysis\n- `--clear-cache`: Clear cache before analysis\n- `--validate-only`: Validate configuration without running\n\n## Complete Configuration Example\n\nHere's a complete example showing `.env` file and corresponding YAML configuration:\n\n### `.env` file\n```bash\n# GitHub Configuration\nGITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx\nGITHUB_ORG=EWTN-Global\n\n# JIRA Configuration\nJIRA_ACCESS_USER=developer@ewtn.com\nJIRA_ACCESS_TOKEN=ATATT3xxxxxxxxxxx\n\n# Optional: Other integrations\n# CLICKUP_TOKEN=pk_xxxxxxxxxxxx\n# LINEAR_TOKEN=lin_api_xxxxxxxxxxxx\n```\n\n### `config.yaml` file\n```yaml\nversion: \"1.0\"\n\n# GitHub configuration with organization discovery\ngithub:\n  token: \"${GITHUB_TOKEN}\"\n  organization: \"${GITHUB_ORG}\"\n\n# JIRA integration for story points\njira:\n  access_user: \"${JIRA_ACCESS_USER}\"\n  access_token: \"${JIRA_ACCESS_TOKEN}\"\n  base_url: \"https://ewtn.atlassian.net\"\n\njira_integration:\n  enabled: true\n  fetch_story_points: true\n  story_point_fields:\n    - \"Story point estimate\"     # Your field name\n    - \"customfield_10016\"        # Fallback field ID\n\n# Analysis configuration\nanalysis:\n  # Only track JIRA tickets (ignore GitHub issues, etc.)\n  ticket_platforms:\n    - jira\n  \n  # Exclude bot commits and boilerplate files\n  exclude:\n    authors:\n      - \"dependabot[bot]\"\n      - \"renovate[bot]\"\n    paths:\n      - \"**/node_modules/**\"\n      - \"**/*.min.js\"\n      - \"**/package-lock.json\"\n  \n  # Developer identity consolidation\n  identity:\n    similarity_threshold: 0.85\n    manual_mappings:\n      - primary_email: \"john.doe@company.com\"\n        aliases:\n          - \"jdoe@oldcompany.com\"\n          - \"john@personal.com\"\n\n# Output configuration\noutput:\n  directory: \"./reports\"\n  formats:\n    - csv\n    - markdown\n```\n\n## Output Reports\n\nThe tool generates three CSV reports:\n\n1. **Weekly Metrics** (`weekly_metrics_YYYYMMDD.csv`)\n   - Week-by-week developer productivity\n   - Story points, commits, lines changed\n   - Ticket coverage percentages\n   - Per-project breakdown\n\n2. **Summary Statistics** (`summary_YYYYMMDD.csv`)\n   - Overall project statistics\n   - Platform-specific ticket counts\n   - Top contributors\n\n3. **Developer Report** (`developers_YYYYMMDD.csv`)\n   - Complete developer profiles\n   - Total contributions\n   - Identity aliases\n\n## Story Point Patterns\n\nConfigure custom regex patterns to match your team's story point format:\n\n```yaml\nstory_point_patterns:\n  - \"SP: (\\\\d+)\"           # SP: 5\n  - \"\\\\[([0-9]+) pts\\\\]\"   # [3 pts]\n  - \"estimate: (\\\\d+)\"     # estimate: 8\n```\n\n## Ticket Platform Support\n\nAutomatically detects and tracks tickets from:\n- **JIRA**: `PROJ-123`\n- **GitHub**: `#123`, `GH-123`\n- **ClickUp**: `CU-abc123`\n- **Linear**: `ENG-123`\n\n### JIRA Integration\n\nGitFlow Analytics can fetch story points directly from JIRA tickets. Configure your JIRA instance:\n\n```yaml\njira:\n  access_user: \"${JIRA_ACCESS_USER}\"\n  access_token: \"${JIRA_ACCESS_TOKEN}\"\n  base_url: \"https://your-company.atlassian.net\"\n\njira_integration:\n  enabled: true\n  story_point_fields:\n    - \"Story point estimate\"  # Your custom field name\n    - \"customfield_10016\"     # Or use field ID\n```\n\nTo discover your JIRA story point fields:\n```bash\ngitflow-analytics discover-jira-fields -c config.yaml\n```\n\n## Caching\n\nThe tool uses SQLite for intelligent caching:\n- Commit analysis results\n- Developer identity mappings\n- Pull request data\n\nCache is automatically managed with configurable TTL.\n\n## Developer Identity Resolution\n\nIntelligently merges developer identities across:\n- Different email addresses\n- Name variations\n- GitHub usernames\n\nManual overrides supported in configuration.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Analyze Git repositories for developer productivity insights",
    "version": "1.0.3",
    "project_urls": {
        "Documentation": "https://github.com/bobmatnyc/gitflow-analytics/blob/main/README.md",
        "Homepage": "https://github.com/bobmatnyc/gitflow-analytics",
        "Issues": "https://github.com/bobmatnyc/gitflow-analytics/issues",
        "Repository": "https://github.com/bobmatnyc/gitflow-analytics"
    },
    "split_keywords": [
        "git",
        " analytics",
        " productivity",
        " metrics",
        " development"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "16f9ce15537ec2bf9752bf58f94a8f406cd4731bb97f1f5ab2bc2388d00a7132",
                "md5": "8e7bcf9310bde130140807a4ada5e55d",
                "sha256": "087727e073e0d5955c510c4dcfcb17a4beee9f4da14041ce71b9363b6402d908"
            },
            "downloads": -1,
            "filename": "gitflow_analytics-1.0.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "8e7bcf9310bde130140807a4ada5e55d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 157494,
            "upload_time": "2025-08-01T17:19:59",
            "upload_time_iso_8601": "2025-08-01T17:19:59.593600Z",
            "url": "https://files.pythonhosted.org/packages/16/f9/ce15537ec2bf9752bf58f94a8f406cd4731bb97f1f5ab2bc2388d00a7132/gitflow_analytics-1.0.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4dcc7fb1cf0553dac06be4efc24e61ec6d5154b6c4c81dff459833b19022e13e",
                "md5": "e2ce7e43739dd0c8d435acc68280ccd4",
                "sha256": "a85e95aabd336a593dbbdaa6099e1773164a0b6b2cb4fafca23f0b3cdce21eb2"
            },
            "downloads": -1,
            "filename": "gitflow_analytics-1.0.3.tar.gz",
            "has_sig": false,
            "md5_digest": "e2ce7e43739dd0c8d435acc68280ccd4",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 178772,
            "upload_time": "2025-08-01T17:20:00",
            "upload_time_iso_8601": "2025-08-01T17:20:00.799012Z",
            "url": "https://files.pythonhosted.org/packages/4d/cc/7fb1cf0553dac06be4efc24e61ec6d5154b6c4c81dff459833b19022e13e/gitflow_analytics-1.0.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-01 17:20:00",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "bobmatnyc",
    "github_project": "gitflow-analytics",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "gitflow-analytics"
}
        
Elapsed time: 1.38487s