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/

🗄️ Report Data and Retention

The daily 📊 Production Reports workflow (.github/workflows/reporting-production.yaml) keeps its outputs in two places:

  • GitHub Pages (deployed with actions/deploy-pages): the latest report.html, report.md, report_raw.json and metadata.json per project. Each run rebuilds the whole site from report artifacts and replaces the previous deployment. An active project without a report from that run keeps the newest unexpired reports-<slug> artifact holding a report.html from an earlier scheduled or dispatched run of this workflow on the default branch; once none remains, it drops off the site. A failed API lookup for such an artifact fails the run instead and leaves the previous deployment live.
  • Workflow run artifacts: raw-data-<slug>, reports-<slug>, clone-manifest-<slug> and clone-log-<slug>, kept for 90 days, after which GitHub deletes them.

To fetch data from an earlier run within those 90 days, download the artifacts from that workflow run in the Actions tab, or use .github/scripts/download-artifacts.sh. The workflow no longer copies outputs into the lfreleng-actions/project-reporting-artifacts repository, so that repository receives no new daily folders.

⚡ Quick Start

# Run without installing
uvx lf-releng-project-reporting generate \
  --project my-project \
  --repos-path ./repos

# Or install as a tool, then run lf-releng-project-reporting directly
uv tool install lf-releng-project-reporting

🚀 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

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

# Run the published package without installing
uvx lf-releng-project-reporting --help

# Or install it as a tool
uv tool install lf-releng-project-reporting

Developing from a checkout

# Install dependencies
uv sync

# 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)
uv run 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


Metadata

Release files for lf-releng-project-reporting 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lf-releng-project-reporting 0.4.0
File Size Uploaded Provenance Actions
lf_releng_project_reporting-0.4.0.tar.gz 905.2 kB With provenance Details for lf_releng_project_reporting-0.4.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for lf-releng-project-reporting 0.4.0
File Interpreter ABI Platform Actions
lf_releng_project_reporting-0.4.0-py3-none-any.whl Python 3 none any Details for lf_releng_project_reporting-0.4.0-py3-none-any.whl

Total release size: 1.4 MB

Release files / lf_releng_project_reporting-0.4.0.tar.gz

Download URL lf_releng_project_reporting-0.4.0.tar.gz
Size 905.2 kB
Tags Source
SHA-256 checksum
How to use checksums
46492faeeb8fe2acb5d3d9f4d8b1a06219f3d833f15a06fb08e4aeb83c095d10
BLAKE2b-256 checksum
How to use checksums
79892eb8dff54acc0e6fc9fd852c45680f5c50647bb2f9ae2952c5a04a031392
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

Release files / lf_releng_project_reporting-0.4.0-py3-none-any.whl

Download URL lf_releng_project_reporting-0.4.0-py3-none-any.whl
Size 462.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
068bb3d837caa27e0fc9d353d89e0eacfdd7459df9e5e37db4e697dccb693d8f
BLAKE2b-256 checksum
How to use checksums
3e2b446a32d4517d93cb1c7117f6ac3d5db7bb84b76fde84dd25441a5dde1da5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

Security for lf-releng-project-reporting 0.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for lf_releng_project_reporting-0.4.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 5, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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