Comprehensive GitHub statistics extraction and analysis system for the Plone ecosystem, including individual contributor stats, organisation attribution, and PLIP (Plone Improvement Proposals) tracking across all Plone repositories.
- Complete Repository Coverage: Processes all 300+ repositories in the Plone organization
- Multi-Year Analysis: Historical data extraction from 2005-2025
- Volto Team Tracking: Dedicated statistics for 24 Volto team members from plone/volto repository
- Organisation Mapping: Attribution system mapping 109+ contributors to 54+ organisations
- PLIP Tracking: Extract and analyze Plone Improvement Proposals across repositories
- Cross-Year Analysis: Identify Independent contributors for organisation mapping
- GitHub API Integration: Handles authentication, rate limiting, and pagination
- Automated Workflows: Makefile commands for all analysis tasks
# Setup environment and dependencies
make setup
# Run current year (2025) statistics
make run-stats
# Run statistics for individual years (e.g. 2022)
make run-stats-2022
# Run organisation statistics (this requires <YEAR>-plone-contributors.csv files to be present)
make run-organisation-stats
# Generate yearly graphs
make yearly-graphs
# Generate Flourish Graphs
make flourish-graph-individual-contributors-csv-file
make flourish-graph-organisation-contributors-csv-file
# Extract PLIP statistics
make run-plips
# Show all available commands
make help# Current year (2025)
make run-stats
# Specific years (2005-2025 available)
make run-stats-2024
make run-stats-2023
make run-stats-2022
# ... (all years 2005-2025)
# Custom date range
python plone_stats.py --start-date 2024-01-01 --end-date 2024-06-30Extract statistics for Volto team members from the plone/volto repository:
# Current year (defaults to 2025)
python volto_team_stats.py
# Specific year
python volto_team_stats.py --year 2024
python volto_team_stats.py --year 2023
# Custom date range
python volto_team_stats.py --start-date 2024-01-01 --end-date 2024-06-30
# Two year span
python volto_team_stats.py --start-date 2023-01-01 --end-date 2024-12-31The script:
- Reads team member GitHub usernames from
team-volto.md - Extracts PR and commit counts for each member
- Generates sorted CSV output:
data/{year}-volto-team-stats.csv - Columns:
github_username,pull_requests,commits - Results sorted by pull requests (descending)
# Current year organisation stats
make run-organisation-stats
# Specific years (2005-2025 available)
make run-organisation-stats-2024
make run-organisation-stats-2023
make run-organisation-stats-2022
# ... (all years 2005-2025)# Extract PLIP statistics from all repositories
make run-plips
# Generate PLIP organisation statistics
make run-plip-organisations# Analyze Independent contributors for organisation mapping
make analyze-independent
# Clean generated files
make clean
# Code quality checks
make lint
make format
make checkYYYY-plone-contributors.csv- Individual contributor stats by year- Raw data with commits, PRs, repositories, and date ranges per contributor
data/YYYY-volto-team-stats.csv- Volto team member statistics by year- Contains:
github_username,pull_requests,commits - Sorted by pull requests (descending)
- Source:
team-volto.md(24 team members)
YYYY-plone-organisation-contributors.csv- Organisation-aggregated stats- Shows total activity by organisation with contributor attribution
plone-plips.csv- PLIP counts per author (aggregated)plone-plips-detailed.csv- Individual PLIP recordsplone-plip-organisations.csv- PLIP statistics by organisation
- Individual Contributors: https://public.flourish.studio/visualisation/24775871/
- Organisations: https://public.flourish.studio/visualisation/24775561/
organisation_mapping.txt- Maps contributors to organisations- Format:
organisation:contributor1,contributor2,contributor3
The system maps 109+ contributors across 54+ organisations including:
- kitconcept: Leading contributor with comprehensive Plone development
- nuclia: Significant PLIP contributions and core development
- syslab: Multi-year contributor across various repositories
- Independent: Unmapped individual contributors
Extracts PLIPs from three main repositories:
- Products.CMFPlone: Core Plone functionality (222 PLIPs)
- volto: Modern frontend (75 PLIPs)
- plone.restapi: REST API (6 PLIPs)
- Track contributor activity patterns across years
- Identify Independent contributors for potential organisation mapping
- Generate comprehensive statistics from 2005-2025
- Install dependencies:
make install
# or manually: pip install requests pandas python-dotenv- GitHub Token Setup:
make setup
# Edit .env file with your GitHub token- Development Setup (optional):
make dev-setup # Includes linting and formatting tools# 1. Extract individual stats for 2024
make run-stats-2024
# 2. Generate organisation stats for 2024
make run-organisation-stats-2024
# 3. Analyze remaining Independent contributors
make analyze-independent
# 4. Extract PLIP statistics
make run-plips
# 5. Generate PLIP organisation statistics
make run-plip-organisations# Generate organisation stats for multiple years
make run-organisation-stats-2024
make run-organisation-stats-2023
make run-organisation-stats-2022- kitconcept: ~2,000+ commits across 100+ repositories
- nuclia: Major PLIP contributor with 37 proposals
- syslab: Consistent multi-repository contributor
- py76: High-volume individual contributor
- Total PLIPs: 303 (87 open, 216 closed)
- Top PLIP Authors: tisto (61), sneridagh (30), bloodbare (20)
- Repository Distribution: Products.CMFPlone (73%), volto (25%), plone.restapi (2%)
- With token: 5,000 requests per hour
- Without token: 60 requests per hour (not recommended)
- Built-in rate limiting and retry logic
- Handles pagination for large datasets