Skip to main content

📊 Linux Foundation Project Reporting System

Comprehensive multi-repository analysis tool for Linux Foundation projects

Generate detailed reports on Gerrit projects, contributor activity, Jenkins jobs, GitHub CI/CD workflows, and development practices across repositories.


🗒️ Published Reports

https://lfreleng-actions.github.io/project-reporting-tool/

⚡ Quick Start

# Install
pip install .

# Generate your first report
lf-releng-project-reporting generate \
  --project my-project \
  --repos-path ./repos

🚀 Key Features

  • 📈 Git Analytics - Commit activity, lines of code, contributor metrics across configurable time windows
  • 📋 INFO.yaml Reporting - Project metadata, committer activity, and lifecycle state tracking from info-master
  • 🔍 Feature Detection - Automatic detection of CI/CD, documentation, dependency management, security tools
  • 👥 Contributor Intelligence - Author and organization analysis with domain mapping
  • 🌐 API Integration - GitHub, Gerrit, and Jenkins API support
  • 🎯 CI-Management Integration - Authoritative Jenkins job allocation using JJB definitions (99%+ accuracy)
  • 📊 Interactive Reports - JSON (data), Markdown (readable), HTML (interactive), ZIP (bundled)
  • ⚡ High Performance - Parallel processing with caching support

📚 Documentation

🎯 Getting Started

⚙️ Setup & Configuration

🔧 Advanced Usage

👨‍💻 Development

🔍 Development Tools

  • Template Audit Script - python scripts/audit_templates.py - Comprehensive audit of all Jinja2 templates to verify field accesses match context builders, preventing runtime errors

💻 Installation

Using UV (Recommended)

# Install UV
curl -LsSf https://astral.sh/uv/install.sh | sh

# Install dependencies
uv sync

# Run the tool
uv run lf-releng-project-reporting generate --project my-project --repos-path ./repos

Using pip

# Install from source
pip install .

# Run the tool
# Note: repos-path should match the directory created by gerrit-clone-action
# which defaults to the Gerrit server hostname (e.g., ./gerrit.o-ran-sc.org)
lf-releng-project-reporting generate --project O-RAN-SC --repos-path ./gerrit.o-ran-sc.org

Detailed Setup Instructions


🎯 Common Use Cases

Use Case Command
Basic report (O-RAN-SC) lf-releng-project-reporting generate --project O-RAN-SC --repos-path ./gerrit.o-ran-sc.org
Basic report (ONAP) lf-releng-project-reporting generate --project ONAP --repos-path ./gerrit.onap.org
With caching lf-releng-project-reporting generate --project O-RAN-SC --repos-path ./gerrit.o-ran-sc.org --cache --workers 8
Check config lf-releng-project-reporting generate --project O-RAN-SC --repos-path ./gerrit.o-ran-sc.org --dry-run
Get help lf-releng-project-reporting --help

Note: The --repos-path should point to the directory created by gerrit-clone-action, which uses the Gerrit server hostname as the directory name (e.g., ./gerrit.o-ran-sc.org for O-RAN-SC, ./gerrit.onap.org for ONAP).


📊 Output Formats

reports/
  <PROJECT>/
    ├── report_raw.json              # Complete dataset (canonical)
    ├── report.md                    # Markdown report (readable)
    ├── report.html                  # Interactive HTML (sortable tables)
    ├── config_resolved.json         # Applied configuration
    └── <PROJECT>_report_bundle.zip  # Complete bundle

🔌 CI/CD Integration

GitHub Actions

- name: Generate Report
  run: |
    uv run lf-releng-project-reporting generate \
      --project "${{ matrix.project }}" \
      --repos-path "./${{ matrix.server }}" \
      --cache \
      --quiet
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

🔧 Requirements

  • Python: 3.11+ (supports 3.11, 3.12, 3.13, 3.14)
  • Dependencies: PyYAML, httpx, Jinja2, typer, rich
  • Optional: GitHub token for API features (required for workflow status colors)

GitHub Token Requirements

For full workflow status reporting (colored status indicators), you need a GitHub Personal Access Token (Classic) with these permissions:

Required Scopes:

  • repo - Full repository access (or public_repo for public repositories)
  • actions:read - Read GitHub Actions workflow runs and status

Note: Fine-grained tokens are not supported as they cannot span organizations.

Setup:

# Set environment variable
export GITHUB_TOKEN=ghp_your_token_here
# OR for CI/production:
export CLASSIC_READ_ONLY_PAT_TOKEN=ghp_your_token_here

# Then run the tool
lf-releng-project-reporting generate --project my-project --repos-path ./repos

Create token: https://github.com/settings/tokens

Without a token: The tool detects workflows but shows them as grey (unknown status) instead of colored status indicators.

See also: Configuration Guide for detailed token setup

Jenkins Authentication (Optional)

Some Jenkins servers require authentication to view job information. If you encounter a "returned 0 jobs" error, you need to provide Jenkins credentials.

Setup:

# Generate API token in Jenkins: User → Configure → API Token → Add new Token
export JENKINS_USER="your-username"
export JENKINS_API_TOKEN="your-api-token"

# Then run the tool
lf-releng-project-reporting generate --project my-project --repos-path ./repos

Create token: Log into your Jenkins instance → Your Username → Configure → API Token

Without credentials: The tool will fail with an error if Jenkins requires authentication.

See also: Troubleshooting Guide for detailed setup


📖 Key Documentation Files

Topic Document
Getting Started docs/GETTING_STARTED.md
Commands docs/COMMANDS.md
FAQ docs/FAQ.md
Configuration docs/CONFIGURATION.md
Usage Examples docs/USAGE_EXAMPLES.md
Performance docs/PERFORMANCE.md
Troubleshooting docs/TROUBLESHOOTING.md
CI/CD Setup docs/CI_CD_INTEGRATION.md
Developer Guide docs/DEVELOPER_GUIDE.md

💡 Quick Tips

  • 🎯 First time? Start with Getting Started Guide
  • Slow? Add --cache --workers 8 for parallel processing
  • 🐛 Issues? Check Troubleshooting Guide
  • Questions? See FAQ
  • 📖 Need help? Run lf-releng-project-reporting --help
  • 🔍 Developing templates? Run python scripts/audit_templates.py to verify all field accesses

🛠️ Development Scripts

Template Audit Script

python scripts/audit_templates.py

This script performs a comprehensive audit of all Jinja2 templates to:

  • Extract all field accesses from templates (e.g., repo.field, org.field)
  • Analyze context builders to see what fields they provide
  • Identify mismatches that could cause "Undefined variable" errors at runtime

When to use:

  • Before committing template changes
  • After modifying context builders
  • When debugging template rendering errors
  • During code review to verify template correctness

Output:

  • Green checkmarks - All required fields present
  • ⚠️ Warnings - Extra fields exist (safe, unused)
  • Red errors - Missing fields that will cause runtime failures

Example output:

================================================================================
TEMPLATE FIELD ACCESS AUDIT
================================================================================

📄 html/sections/summary.html.j2
  summary:
    - active_count
    - current_count
    - repositories_analyzed

✅ No critical issues found!
   Extra fields are safe - they're unused.

🤝 Support


📜 License

Apache-2.0 License - Copyright 2025 The Linux Foundation


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lf_releng_project_reporting-0.3.1.tar.gz (948.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lf_releng_project_reporting-0.3.1-py3-none-any.whl (727.8 kB view details)

Uploaded Python 3

File details

Details for the file lf_releng_project_reporting-0.3.1.tar.gz.

File metadata

File hashes

Hashes for lf_releng_project_reporting-0.3.1.tar.gz
Algorithm Hash digest
SHA256 5fb52e1993d640dac844b4c79bdf96e54ee646afc82f480ddffef5b6d02ba9b6
MD5 e3714f98dcf86db395e4381d1b6aa5a0
BLAKE2b-256 7cb9aa9e1aa79de43fbe8a3576dbacd2c55e93670a875370e34c55804775b2dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for lf_releng_project_reporting-0.3.1.tar.gz:

Publisher: build-test-release.yaml on lfreleng-actions/project-reporting-tool

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lf_releng_project_reporting-0.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for lf_releng_project_reporting-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 784fb1e382044063ac96ba95acf949411e40e3e42d7b46b4439bbf4d3f10b5b8
MD5 3b219996f8574d4b8ef0081c76adba16
BLAKE2b-256 99e98d4e887452486efaa2667bd2cb1d323125f9b205b9f4ae45c58b7c32c973

See more details on using hashes here.

Provenance

The following attestation bundles were made for lf_releng_project_reporting-0.3.1-py3-none-any.whl:

Publisher: build-test-release.yaml on lfreleng-actions/project-reporting-tool

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 files

0.3.0

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page