lf-releng-project-reporting 0.1.0__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.
- lf_releng_project_reporting-0.1.0/.gitignore +103 -0
- lf_releng_project_reporting-0.1.0/LICENSE +1 -0
- lf_releng_project_reporting-0.1.0/PKG-INFO +351 -0
- lf_releng_project_reporting-0.1.0/README.md +302 -0
- lf_releng_project_reporting-0.1.0/SETUP.md +411 -0
- lf_releng_project_reporting-0.1.0/config/README.md +92 -0
- lf_releng_project_reporting-0.1.0/config/default.yaml +335 -0
- lf_releng_project_reporting-0.1.0/config/organizational_domains.yaml +36 -0
- lf_releng_project_reporting-0.1.0/config/test-project.yaml +14 -0
- lf_releng_project_reporting-0.1.0/docs/ARTIFACT_ARCHIVAL_SETUP.md +454 -0
- lf_releng_project_reporting-0.1.0/docs/CHANGELOG_GITHUB_TOKEN_ENV.md +239 -0
- lf_releng_project_reporting-0.1.0/docs/CICD_TABLE_FIX.md +238 -0
- lf_releng_project_reporting-0.1.0/docs/CI_CD_INTEGRATION.md +915 -0
- lf_releng_project_reporting-0.1.0/docs/CODE_CLEANUP_REPORT.md +326 -0
- lf_releng_project_reporting-0.1.0/docs/COMMANDS.md +1005 -0
- lf_releng_project_reporting-0.1.0/docs/CONFIGURATION.md +1741 -0
- lf_releng_project_reporting-0.1.0/docs/CONFIGURATION_MERGING.md +460 -0
- lf_releng_project_reporting-0.1.0/docs/DATATABLES_COMPLETE.md +171 -0
- lf_releng_project_reporting-0.1.0/docs/DATATABLES_IMPLEMENTATION.md +327 -0
- lf_releng_project_reporting-0.1.0/docs/DATATABLES_PHASE1_COMPLETE.md +156 -0
- lf_releng_project_reporting-0.1.0/docs/DATATABLES_USAGE.md +279 -0
- lf_releng_project_reporting-0.1.0/docs/DATA_EXTRACTION_FIX_REPORT.md +551 -0
- lf_releng_project_reporting-0.1.0/docs/DEPLOYMENT.md +2951 -0
- lf_releng_project_reporting-0.1.0/docs/DEVELOPER_GUIDE.md +971 -0
- lf_releng_project_reporting-0.1.0/docs/FAQ.md +961 -0
- lf_releng_project_reporting-0.1.0/docs/FEATURE_DISCOVERY_GUIDE.md +555 -0
- lf_releng_project_reporting-0.1.0/docs/GETTING_STARTED.md +487 -0
- lf_releng_project_reporting-0.1.0/docs/GITHUB_LANGUAGE_COMPARISON.md +516 -0
- lf_releng_project_reporting-0.1.0/docs/GITHUB_NATIVE_IMPLEMENTATION_PLAN.md +820 -0
- lf_releng_project_reporting-0.1.0/docs/GITHUB_NATIVE_IMPLEMENTATION_SUMMARY.md +443 -0
- lf_releng_project_reporting-0.1.0/docs/GITHUB_NATIVE_QUICK_START.md +544 -0
- lf_releng_project_reporting-0.1.0/docs/GITHUB_ONLY_PROJECTS.md +360 -0
- lf_releng_project_reporting-0.1.0/docs/GITHUB_PAGES_SETUP.md +602 -0
- lf_releng_project_reporting-0.1.0/docs/GITHUB_TOKEN_ENV.md +253 -0
- lf_releng_project_reporting-0.1.0/docs/HTTP_FALLBACK_GUIDE.md +188 -0
- lf_releng_project_reporting-0.1.0/docs/IMPLEMENTATION_TOC_FEATURE.md +645 -0
- lf_releng_project_reporting-0.1.0/docs/INDEX.md +321 -0
- lf_releng_project_reporting-0.1.0/docs/INFO_YAML_QUICK_REF.md +246 -0
- lf_releng_project_reporting-0.1.0/docs/INFO_YAML_REPORTING.md +797 -0
- lf_releng_project_reporting-0.1.0/docs/INFO_YAML_SERVER_FILTERING.md +393 -0
- lf_releng_project_reporting-0.1.0/docs/MIGRATION_GUIDE.md +865 -0
- lf_releng_project_reporting-0.1.0/docs/PERFORMANCE.md +1574 -0
- lf_releng_project_reporting-0.1.0/docs/PHASE8_MIGRATION_COMPLETE.md +498 -0
- lf_releng_project_reporting-0.1.0/docs/QUICK_REFERENCE.md +272 -0
- lf_releng_project_reporting-0.1.0/docs/REGEX_PATTERN_MATCHING_SUMMARY.md +427 -0
- lf_releng_project_reporting-0.1.0/docs/RENDERING_ARCHITECTURE_ANALYSIS.md +513 -0
- lf_releng_project_reporting-0.1.0/docs/SCHEMA_VERSION_1.5.0.md +325 -0
- lf_releng_project_reporting-0.1.0/docs/TABLE_COMPARISON.md +492 -0
- lf_releng_project_reporting-0.1.0/docs/TABLE_FIXES_SUMMARY.md +418 -0
- lf_releng_project_reporting-0.1.0/docs/TABLE_OF_CONTENTS.md +496 -0
- lf_releng_project_reporting-0.1.0/docs/TEMPLATE_AND_AUDIT_FIXES_COMPLETE.md +552 -0
- lf_releng_project_reporting-0.1.0/docs/TEMPLATE_AUDIT.md +482 -0
- lf_releng_project_reporting-0.1.0/docs/TEMPLATE_DEVELOPMENT.md +908 -0
- lf_releng_project_reporting-0.1.0/docs/TEMPLATE_FIX_FINAL.md +416 -0
- lf_releng_project_reporting-0.1.0/docs/TEMPLATE_HARDENING_REPORT.md +586 -0
- lf_releng_project_reporting-0.1.0/docs/TESTING.md +1046 -0
- lf_releng_project_reporting-0.1.0/docs/TESTING_GITHUB_NATIVE.md +498 -0
- lf_releng_project_reporting-0.1.0/docs/TOC_BUG_FIX_REPORT.md +362 -0
- lf_releng_project_reporting-0.1.0/docs/TROUBLESHOOTING.md +1772 -0
- lf_releng_project_reporting-0.1.0/docs/USAGE_EXAMPLES.md +1677 -0
- lf_releng_project_reporting-0.1.0/docs/concurrency/model.md +843 -0
- lf_releng_project_reporting-0.1.0/docs/concurrency/performance_tuning.md +755 -0
- lf_releng_project_reporting-0.1.0/docs/concurrency/thread_safety_audit.md +533 -0
- lf_releng_project_reporting-0.1.0/docs/concurrency/troubleshooting.md +827 -0
- lf_releng_project_reporting-0.1.0/docs/features/G2G_PATTERN_FLOW.md +516 -0
- lf_releng_project_reporting-0.1.0/docs/features/G2G_REGEX_PATTERNS.md +491 -0
- lf_releng_project_reporting-0.1.0/docs/features/GITHUB_TOKEN_ENV_VAR.md +118 -0
- lf_releng_project_reporting-0.1.0/docs/guides/CONCURRENCY_CONFIG.md +568 -0
- lf_releng_project_reporting-0.1.0/docs/guides/PERFORMANCE_OPTIMIZATION.md +460 -0
- lf_releng_project_reporting-0.1.0/docs/guides/TEMPLATE_DEVELOPMENT.md +899 -0
- lf_releng_project_reporting-0.1.0/docs/guides/THEME_CREATION.md +922 -0
- lf_releng_project_reporting-0.1.0/docs/testing/ENHANCED_ERRORS_GUIDE.md +547 -0
- lf_releng_project_reporting-0.1.0/docs/testing/PARALLEL_EXECUTION.md +665 -0
- lf_releng_project_reporting-0.1.0/docs/testing/PARALLEL_EXECUTION_QUICK_REF.md +335 -0
- lf_releng_project_reporting-0.1.0/docs/testing/PROPERTY_TESTING_OVERVIEW.md +648 -0
- lf_releng_project_reporting-0.1.0/docs/testing/TEST_PREREQUISITES.md +731 -0
- lf_releng_project_reporting-0.1.0/docs/testing/TEST_WRITING_GUIDE.md +1181 -0
- lf_releng_project_reporting-0.1.0/examples/README.md +130 -0
- lf_releng_project_reporting-0.1.0/examples/dry_run_demo.py +254 -0
- lf_releng_project_reporting-0.1.0/pyproject.toml +325 -0
- lf_releng_project_reporting-0.1.0/src/api/__init__.py +54 -0
- lf_releng_project_reporting-0.1.0/src/api/base_client.py +274 -0
- lf_releng_project_reporting-0.1.0/src/api/gerrit_client.py +502 -0
- lf_releng_project_reporting-0.1.0/src/api/github_client.py +480 -0
- lf_releng_project_reporting-0.1.0/src/api/jenkins_client.py +1000 -0
- lf_releng_project_reporting-0.1.0/src/cli/__init__.py +200 -0
- lf_releng_project_reporting-0.1.0/src/cli/arguments.py +560 -0
- lf_releng_project_reporting-0.1.0/src/cli/error_context.py +622 -0
- lf_releng_project_reporting-0.1.0/src/cli/error_helpers.py +449 -0
- lf_releng_project_reporting-0.1.0/src/cli/errors.py +490 -0
- lf_releng_project_reporting-0.1.0/src/cli/exit_codes.py +190 -0
- lf_releng_project_reporting-0.1.0/src/cli/features.py +752 -0
- lf_releng_project_reporting-0.1.0/src/cli/metrics.py +682 -0
- lf_releng_project_reporting-0.1.0/src/cli/progress.py +435 -0
- lf_releng_project_reporting-0.1.0/src/cli/validation.py +563 -0
- lf_releng_project_reporting-0.1.0/src/cli/wizard.py +691 -0
- lf_releng_project_reporting-0.1.0/src/concurrency/__init__.py +46 -0
- lf_releng_project_reporting-0.1.0/src/concurrency/adaptive_pool.py +295 -0
- lf_releng_project_reporting-0.1.0/src/concurrency/error_handler.py +441 -0
- lf_releng_project_reporting-0.1.0/src/concurrency/hybrid_executor.py +292 -0
- lf_releng_project_reporting-0.1.0/src/concurrency/jenkins_allocation.py +230 -0
- lf_releng_project_reporting-0.1.0/src/config/README.md +524 -0
- lf_releng_project_reporting-0.1.0/src/config/__init__.py +44 -0
- lf_releng_project_reporting-0.1.0/src/config/schema.json +483 -0
- lf_releng_project_reporting-0.1.0/src/config/validator.py +516 -0
- lf_releng_project_reporting-0.1.0/src/domain/README.md +361 -0
- lf_releng_project_reporting-0.1.0/src/domain/__init__.py +54 -0
- lf_releng_project_reporting-0.1.0/src/domain/author_metrics.py +235 -0
- lf_releng_project_reporting-0.1.0/src/domain/info_yaml.py +447 -0
- lf_releng_project_reporting-0.1.0/src/domain/organization_metrics.py +220 -0
- lf_releng_project_reporting-0.1.0/src/domain/repository_metrics.py +243 -0
- lf_releng_project_reporting-0.1.0/src/domain/time_window.py +218 -0
- lf_releng_project_reporting-0.1.0/src/domain/workflow_status.py +178 -0
- lf_releng_project_reporting-0.1.0/src/jjb_attribution/README.md +234 -0
- lf_releng_project_reporting-0.1.0/src/jjb_attribution/__init__.py +20 -0
- lf_releng_project_reporting-0.1.0/src/jjb_attribution/jjb_parser.py +701 -0
- lf_releng_project_reporting-0.1.0/src/jjb_attribution/repo_manager.py +376 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/__init__.py +40 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/__main__.py +17 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/_version.py +34 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/aggregators/__init__.py +18 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/aggregators/data.py +490 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/analysis/__init__.py +17 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/cli.py +358 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/clients/__init__.py +24 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/collectors/__init__.py +18 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/collectors/base.py +107 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/collectors/git.py +1436 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/collectors/info_yaml/__init__.py +32 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/collectors/info_yaml/cache.py +621 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/collectors/info_yaml/collector.py +414 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/collectors/info_yaml/enricher.py +560 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/collectors/info_yaml/matcher.py +384 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/collectors/info_yaml/metrics.py +445 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/collectors/info_yaml/parser.py +351 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/collectors/info_yaml/validator.py +538 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/config.py +408 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/exceptions.py +74 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/features/__init__.py +17 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/features/registry.py +1255 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/main.py +481 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/rendering/__init__.py +19 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/reporter.py +639 -0
- lf_releng_project_reporting-0.1.0/src/lf_releng_project_reporting/statistics.py +286 -0
- lf_releng_project_reporting-0.1.0/src/observability/README.md +566 -0
- lf_releng_project_reporting-0.1.0/src/observability/__init__.py +59 -0
- lf_releng_project_reporting-0.1.0/src/observability/errors.py +512 -0
- lf_releng_project_reporting-0.1.0/src/observability/structured_logging.py +456 -0
- lf_releng_project_reporting-0.1.0/src/performance/__init__.py +261 -0
- lf_releng_project_reporting-0.1.0/src/performance/batch.py +718 -0
- lf_releng_project_reporting-0.1.0/src/performance/cache.py +833 -0
- lf_releng_project_reporting-0.1.0/src/performance/git_optimizer.py +734 -0
- lf_releng_project_reporting-0.1.0/src/performance/memory.py +774 -0
- lf_releng_project_reporting-0.1.0/src/performance/parallel.py +598 -0
- lf_releng_project_reporting-0.1.0/src/performance/profiler.py +652 -0
- lf_releng_project_reporting-0.1.0/src/performance/reporter.py +840 -0
- lf_releng_project_reporting-0.1.0/src/rendering/__init__.py +45 -0
- lf_releng_project_reporting-0.1.0/src/rendering/context.py +1200 -0
- lf_releng_project_reporting-0.1.0/src/rendering/formatters.py +508 -0
- lf_releng_project_reporting-0.1.0/src/rendering/info_yaml_renderer.py +414 -0
- lf_releng_project_reporting-0.1.0/src/rendering/renderer.py +325 -0
- lf_releng_project_reporting-0.1.0/src/templates/html/base.html.j2 +383 -0
- lf_releng_project_reporting-0.1.0/src/templates/html/components/data_table.html.j2 +120 -0
- lf_releng_project_reporting-0.1.0/src/templates/html/components/datatables_support.html.j2 +165 -0
- lf_releng_project_reporting-0.1.0/src/templates/html/components/section_header.html.j2 +71 -0
- lf_releng_project_reporting-0.1.0/src/templates/html/components/stats_table.html.j2 +48 -0
- lf_releng_project_reporting-0.1.0/src/templates/html/components/table_of_contents.html.j2 +30 -0
- lf_releng_project_reporting-0.1.0/src/templates/html/sections/contributors.html.j2 +61 -0
- lf_releng_project_reporting-0.1.0/src/templates/html/sections/features.html.j2 +54 -0
- lf_releng_project_reporting-0.1.0/src/templates/html/sections/organizations.html.j2 +61 -0
- lf_releng_project_reporting-0.1.0/src/templates/html/sections/orphaned_jobs.html.j2 +61 -0
- lf_releng_project_reporting-0.1.0/src/templates/html/sections/repositories.html.j2 +60 -0
- lf_releng_project_reporting-0.1.0/src/templates/html/sections/summary.html.j2 +75 -0
- lf_releng_project_reporting-0.1.0/src/templates/html/sections/unattributed_jobs.html.j2 +88 -0
- lf_releng_project_reporting-0.1.0/src/templates/html/sections/workflows.html.j2 +148 -0
- lf_releng_project_reporting-0.1.0/src/templates/markdown/base.md.j2 +123 -0
- lf_releng_project_reporting-0.1.0/src/templates/markdown/components/header.md.j2 +39 -0
- lf_releng_project_reporting-0.1.0/src/templates/markdown/components/stats_table.md.j2 +36 -0
- lf_releng_project_reporting-0.1.0/src/templates/markdown/components/table_of_contents.md.j2 +29 -0
- lf_releng_project_reporting-0.1.0/src/templates/markdown/sections/contributors.md.j2 +32 -0
- lf_releng_project_reporting-0.1.0/src/templates/markdown/sections/features.md.j2 +28 -0
- lf_releng_project_reporting-0.1.0/src/templates/markdown/sections/info_yaml_committers.md.j2 +149 -0
- lf_releng_project_reporting-0.1.0/src/templates/markdown/sections/info_yaml_lifecycle.md.j2 +14 -0
- lf_releng_project_reporting-0.1.0/src/templates/markdown/sections/organizations.md.j2 +32 -0
- lf_releng_project_reporting-0.1.0/src/templates/markdown/sections/orphaned_jobs.md.j2 +41 -0
- lf_releng_project_reporting-0.1.0/src/templates/markdown/sections/repositories.md.j2 +30 -0
- lf_releng_project_reporting-0.1.0/src/templates/markdown/sections/summary.md.j2 +39 -0
- lf_releng_project_reporting-0.1.0/src/templates/markdown/sections/unattributed_jobs.md.j2 +45 -0
- lf_releng_project_reporting-0.1.0/src/templates/markdown/sections/workflows.md.j2 +46 -0
- lf_releng_project_reporting-0.1.0/src/themes/dark/config.json +37 -0
- lf_releng_project_reporting-0.1.0/src/themes/dark/theme.css +989 -0
- lf_releng_project_reporting-0.1.0/src/themes/default/config.json +35 -0
- lf_releng_project_reporting-0.1.0/src/themes/default/theme.css +1021 -0
- lf_releng_project_reporting-0.1.0/src/themes/default.css +648 -0
- lf_releng_project_reporting-0.1.0/src/themes/minimal/config.json +39 -0
- lf_releng_project_reporting-0.1.0/src/themes/minimal/theme.css +724 -0
- lf_releng_project_reporting-0.1.0/src/util/__init__.py +34 -0
- lf_releng_project_reporting-0.1.0/src/util/formatting.py +159 -0
- lf_releng_project_reporting-0.1.0/src/util/git.py +58 -0
- lf_releng_project_reporting-0.1.0/src/util/github_org.py +199 -0
- lf_releng_project_reporting-0.1.0/src/util/zip_bundle.py +120 -0
- lf_releng_project_reporting-0.1.0/tests/README.md +860 -0
- lf_releng_project_reporting-0.1.0/tests/collectors/test_info_yaml_matcher.py +257 -0
- lf_releng_project_reporting-0.1.0/tests/collectors/test_info_yaml_parser.py +491 -0
- lf_releng_project_reporting-0.1.0/tests/collectors/test_info_yaml_validator_async.py +497 -0
- lf_releng_project_reporting-0.1.0/tests/config/test-project.yaml +15 -0
- lf_releng_project_reporting-0.1.0/tests/conftest.py +156 -0
- lf_releng_project_reporting-0.1.0/tests/domain/test_info_yaml.py +631 -0
- lf_releng_project_reporting-0.1.0/tests/fixtures/README.md +272 -0
- lf_releng_project_reporting-0.1.0/tests/fixtures/__init__.py +45 -0
- lf_releng_project_reporting-0.1.0/tests/fixtures/info_yaml/minimal_project.yaml +8 -0
- lf_releng_project_reporting-0.1.0/tests/fixtures/info_yaml/valid_project.yaml +79 -0
- lf_releng_project_reporting-0.1.0/tests/fixtures/job_attribution/README.md +110 -0
- lf_releng_project_reporting-0.1.0/tests/fixtures/job_attribution/__init__.py +12 -0
- lf_releng_project_reporting-0.1.0/tests/fixtures/job_attribution/production_data.json +409 -0
- lf_releng_project_reporting-0.1.0/tests/fixtures/minimal_production_data.json +25146 -0
- lf_releng_project_reporting-0.1.0/tests/fixtures/repositories.py +642 -0
- lf_releng_project_reporting-0.1.0/tests/integration/README.md +494 -0
- lf_releng_project_reporting-0.1.0/tests/integration/__init__.py +12 -0
- lf_releng_project_reporting-0.1.0/tests/integration/conftest.py +64 -0
- lf_releng_project_reporting-0.1.0/tests/integration/fixtures.py +486 -0
- lf_releng_project_reporting-0.1.0/tests/integration/test_api_integration.py +478 -0
- lf_releng_project_reporting-0.1.0/tests/integration/test_cli_integration.py +519 -0
- lf_releng_project_reporting-0.1.0/tests/integration/test_data_pipeline.py +558 -0
- lf_releng_project_reporting-0.1.0/tests/integration/test_g2g_opendaylight.py +304 -0
- lf_releng_project_reporting-0.1.0/tests/integration/test_gerrit_url_validation.py +228 -0
- lf_releng_project_reporting-0.1.0/tests/integration/test_html_rendering.py +327 -0
- lf_releng_project_reporting-0.1.0/tests/integration/test_info_yaml_end_to_end.py +703 -0
- lf_releng_project_reporting-0.1.0/tests/integration/test_info_yaml_reporting_integration.py +728 -0
- lf_releng_project_reporting-0.1.0/tests/integration/test_info_yaml_template_integration.py +499 -0
- lf_releng_project_reporting-0.1.0/tests/integration/test_phase13_integration.py +820 -0
- lf_releng_project_reporting-0.1.0/tests/integration/test_render_context_integration.py +507 -0
- lf_releng_project_reporting-0.1.0/tests/integration/test_report_generation.py +545 -0
- lf_releng_project_reporting-0.1.0/tests/integration/test_theme_integration.py +408 -0
- lf_releng_project_reporting-0.1.0/tests/integration/test_workflows.py +402 -0
- lf_releng_project_reporting-0.1.0/tests/mocks/api_mocks.py +518 -0
- lf_releng_project_reporting-0.1.0/tests/performance_tests/README.md +442 -0
- lf_releng_project_reporting-0.1.0/tests/performance_tests/__init__.py +31 -0
- lf_releng_project_reporting-0.1.0/tests/performance_tests/benchmark_phase7_8.py +373 -0
- lf_releng_project_reporting-0.1.0/tests/performance_tests/conftest.py +267 -0
- lf_releng_project_reporting-0.1.0/tests/performance_tests/test_benchmarks.py +542 -0
- lf_releng_project_reporting-0.1.0/tests/performance_tests/test_info_yaml_performance.py +678 -0
- lf_releng_project_reporting-0.1.0/tests/performance_tests/test_thresholds.py +400 -0
- lf_releng_project_reporting-0.1.0/tests/property/README.md +553 -0
- lf_releng_project_reporting-0.1.0/tests/property/__init__.py +20 -0
- lf_releng_project_reporting-0.1.0/tests/property/test_aggregations.py +440 -0
- lf_releng_project_reporting-0.1.0/tests/property/test_time_windows.py +443 -0
- lf_releng_project_reporting-0.1.0/tests/property/test_transformations.py +555 -0
- lf_releng_project_reporting-0.1.0/tests/regression/README.md +518 -0
- lf_releng_project_reporting-0.1.0/tests/regression/__snapshots__/test_json_snapshots.ambr +470 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_author_list_snapshot/author_list +40 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_author_metrics_basic_snapshot/author_basic +31 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_author_metrics_empty_name_snapshot/author_empty_name +11 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_author_metrics_minimal_snapshot/author_minimal +11 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_author_metrics_unicode_snapshot/author_unicode +13 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_empty_collections_snapshot/empty_collections +11 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_field_order_stability_snapshot/field_order_stable +17 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_long_repository_path_snapshot/long_path +17 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_multiple_time_windows_snapshot/multiple_windows +17 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_negative_net_lines_snapshot/negative_net_lines +7 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_repository_list_snapshot/repo_list +36 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_repository_metrics_active_snapshot/repo_active +44 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_repository_metrics_empty_snapshot/repo_empty +17 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_repository_metrics_inactive_snapshot/repo_inactive +41 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_repository_metrics_with_errors_snapshot/repo_with_errors +21 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_special_characters_in_names_snapshot/special_characters +11 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_time_window_name_not_in_dict_snapshot/window_name_not_in_dict +5 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_time_window_stats_to_dict_snapshot/time_window_stats +7 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_time_window_stats_zero_contributors_snapshot/stats_zero_contributors +6 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_time_window_to_dict_snapshot/time_window +5 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_very_large_numbers_snapshot/very_large_numbers +7 -0
- lf_releng_project_reporting-0.1.0/tests/regression/snapshots/test_json_snapshots/test_zero_everything_snapshot/zero_everything +6 -0
- lf_releng_project_reporting-0.1.0/tests/regression/test_baseline_json_schema.py +437 -0
- lf_releng_project_reporting-0.1.0/tests/regression/test_json_snapshots.py +514 -0
- lf_releng_project_reporting-0.1.0/tests/regression/test_known_issues.py +687 -0
- lf_releng_project_reporting-0.1.0/tests/regression/update_baseline_digest.py +238 -0
- lf_releng_project_reporting-0.1.0/tests/test_api_statistics_integration.py +543 -0
- lf_releng_project_reporting-0.1.0/tests/test_cli/test_error_context.py +720 -0
- lf_releng_project_reporting-0.1.0/tests/test_cli/test_features.py +663 -0
- lf_releng_project_reporting-0.1.0/tests/test_cli/test_metrics.py +586 -0
- lf_releng_project_reporting-0.1.0/tests/test_cli/test_wizard.py +567 -0
- lf_releng_project_reporting-0.1.0/tests/test_cli.py +654 -0
- lf_releng_project_reporting-0.1.0/tests/test_cli_progress.py +470 -0
- lf_releng_project_reporting-0.1.0/tests/test_cli_validation.py +488 -0
- lf_releng_project_reporting-0.1.0/tests/test_config_validation.py +649 -0
- lf_releng_project_reporting-0.1.0/tests/test_datatables_integration.py +91 -0
- lf_releng_project_reporting-0.1.0/tests/test_domain_models.py +823 -0
- lf_releng_project_reporting-0.1.0/tests/test_enhanced_errors.py +676 -0
- lf_releng_project_reporting-0.1.0/tests/test_error_handling.py +562 -0
- lf_releng_project_reporting-0.1.0/tests/test_errors.py +555 -0
- lf_releng_project_reporting-0.1.0/tests/test_git_optimizer.py +588 -0
- lf_releng_project_reporting-0.1.0/tests/test_github_token_env.py +220 -0
- lf_releng_project_reporting-0.1.0/tests/test_isolation.py +408 -0
- lf_releng_project_reporting-0.1.0/tests/test_jenkins_allocation_context.py +519 -0
- lf_releng_project_reporting-0.1.0/tests/test_parallel.py +591 -0
- lf_releng_project_reporting-0.1.0/tests/test_performance.py +660 -0
- lf_releng_project_reporting-0.1.0/tests/test_performance_batch.py +806 -0
- lf_releng_project_reporting-0.1.0/tests/test_performance_cache.py +768 -0
- lf_releng_project_reporting-0.1.0/tests/test_performance_memory.py +759 -0
- lf_releng_project_reporting-0.1.0/tests/test_performance_reporter.py +673 -0
- lf_releng_project_reporting-0.1.0/tests/test_rendering.py +486 -0
- lf_releng_project_reporting-0.1.0/tests/test_retry_decorator.py +362 -0
- lf_releng_project_reporting-0.1.0/tests/test_structured_logging.py +536 -0
- lf_releng_project_reporting-0.1.0/tests/test_utils.py +753 -0
- lf_releng_project_reporting-0.1.0/tests/test_utils.py.bak2 +761 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_api_envelope.py +481 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_base_client.py +510 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_concurrency_adaptive_pool.py +491 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_concurrency_error_handler.py +611 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_concurrency_hybrid_executor.py +514 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_concurrency_jenkins_allocation.py +829 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_config_merging.py +423 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_domain_author_metrics.py +421 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_domain_organization_metrics.py +416 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_domain_repository_metrics.py +649 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_domain_time_window.py +487 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_domain_workflow_status.py +433 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_formatting.py +220 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_g2g_feature.py +829 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_gerrit_api.py +782 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_gerrit_api_extended.py +709 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_github_api.py +518 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_github_api_extended.py +707 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_github_org.py +384 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_jenkins_api.py +829 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_job_attribution.py +595 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_project_type_detection.py +482 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_rendering_context.py +1066 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_rendering_formatters.py +650 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_rendering_info_yaml_renderer.py +588 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_rendering_modern_renderer.py +298 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_rendering_renderer.py +795 -0
- lf_releng_project_reporting-0.1.0/tests/unit/test_zip_bundle.py +479 -0
- lf_releng_project_reporting-0.1.0/tests/utils/assertions.py +547 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# SPDX-FileCopyrightText: 2025 The Linux Foundation
|
|
3
|
+
|
|
4
|
+
testing/projects.json
|
|
5
|
+
|
|
6
|
+
# Auto-generated version file
|
|
7
|
+
src/lf_releng_project_reporting/_version.py
|
|
8
|
+
|
|
9
|
+
testing/ONAP
|
|
10
|
+
testing/reports
|
|
11
|
+
testing/*.log
|
|
12
|
+
testing/*.tmp
|
|
13
|
+
testing/*-production-report.html
|
|
14
|
+
testing/*-testing-report.html
|
|
15
|
+
testing/onap-report.html
|
|
16
|
+
testing/odl-report.html
|
|
17
|
+
|
|
18
|
+
# Gerrit server directories (server-specific naming)
|
|
19
|
+
gerrit.*/
|
|
20
|
+
gerrit-repos*/
|
|
21
|
+
reports/
|
|
22
|
+
test-repos/sample-repo
|
|
23
|
+
|
|
24
|
+
# Temporary and binary files
|
|
25
|
+
*~
|
|
26
|
+
*.py[cod]
|
|
27
|
+
*.so
|
|
28
|
+
*.cfg
|
|
29
|
+
!.isort.cfg
|
|
30
|
+
!setup.cfg
|
|
31
|
+
*.orig
|
|
32
|
+
*.log
|
|
33
|
+
*.pot
|
|
34
|
+
__pycache__/*
|
|
35
|
+
.cache/*
|
|
36
|
+
.*.swp
|
|
37
|
+
*/.ipynb_checkpoints/*
|
|
38
|
+
.DS_Store
|
|
39
|
+
|
|
40
|
+
# Project files
|
|
41
|
+
.ropeproject
|
|
42
|
+
.project
|
|
43
|
+
.pydevproject
|
|
44
|
+
.settings
|
|
45
|
+
.idea
|
|
46
|
+
.vscode
|
|
47
|
+
tags
|
|
48
|
+
|
|
49
|
+
# Package files
|
|
50
|
+
*.egg
|
|
51
|
+
*.eggs/
|
|
52
|
+
.installed.cfg
|
|
53
|
+
*.egg-info
|
|
54
|
+
|
|
55
|
+
# Unittest and coverage
|
|
56
|
+
htmlcov/*
|
|
57
|
+
.coverage
|
|
58
|
+
.coverage.*
|
|
59
|
+
.tox
|
|
60
|
+
junit*.xml
|
|
61
|
+
coverage.xml
|
|
62
|
+
.pytest_cache/
|
|
63
|
+
|
|
64
|
+
# Build and docs folder/files
|
|
65
|
+
build/*
|
|
66
|
+
dist/*
|
|
67
|
+
sdist/*
|
|
68
|
+
docs/api/*
|
|
69
|
+
docs/_rst/*
|
|
70
|
+
docs/_build/*
|
|
71
|
+
cover/*
|
|
72
|
+
MANIFEST
|
|
73
|
+
|
|
74
|
+
# Per-project virtualenvs
|
|
75
|
+
.venv*/
|
|
76
|
+
.conda*/
|
|
77
|
+
|
|
78
|
+
# Node
|
|
79
|
+
node_modules/*
|
|
80
|
+
|
|
81
|
+
# Development artifacts (Phase 7 & 8 cleanup)
|
|
82
|
+
.mypy_cache/
|
|
83
|
+
.hypothesis/
|
|
84
|
+
.benchmarks/
|
|
85
|
+
test_artifacts/
|
|
86
|
+
*.pyc
|
|
87
|
+
*.pyo
|
|
88
|
+
|
|
89
|
+
# Test outputs
|
|
90
|
+
baseline_test_output.txt
|
|
91
|
+
parallel_test_output.txt
|
|
92
|
+
test_*.html
|
|
93
|
+
|
|
94
|
+
# Temporary cleanup scripts
|
|
95
|
+
cleanup_*.sh
|
|
96
|
+
organize_*.sh
|
|
97
|
+
|
|
98
|
+
# UV package manager
|
|
99
|
+
.uv/
|
|
100
|
+
uv.lock
|
|
101
|
+
*.egg-info/
|
|
102
|
+
dist/
|
|
103
|
+
build/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
LICENSES/Apache-2.0.txt
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: lf-releng-project-reporting
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Comprehensive multi-repository analysis tool for Linux Foundation projects
|
|
5
|
+
Project-URL: Homepage, https://github.com/lfreleng-actions/project-reporting-tool
|
|
6
|
+
Project-URL: Repository, https://github.com/lfreleng-actions/project-reporting-tool
|
|
7
|
+
Project-URL: Issues, https://github.com/lfreleng-actions/project-reporting-tool/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/lfreleng-actions/project-reporting-tool/blob/main/CHANGELOG.md
|
|
9
|
+
Author-email: The Linux Foundation <mwatkins@linuxfoundation.org>
|
|
10
|
+
Maintainer-email: The Linux Foundation <mwatkins@linuxfoundation.org>
|
|
11
|
+
License: Apache-2.0
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Keywords: analysis,ci-cd,committers,gerrit,git,github,github-actions,jenkins,linux-foundation,metrics,projects,reporting,repository
|
|
14
|
+
Classifier: Development Status :: 4 - Beta
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
24
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
25
|
+
Classifier: Topic :: Software Development :: Version Control :: Git
|
|
26
|
+
Classifier: Typing :: Typed
|
|
27
|
+
Requires-Python: >=3.10.2
|
|
28
|
+
Requires-Dist: httpx>=0.28.1
|
|
29
|
+
Requires-Dist: jinja2>=3.1.6
|
|
30
|
+
Requires-Dist: jsonschema>=4.25.1
|
|
31
|
+
Requires-Dist: psutil>=7.1.3
|
|
32
|
+
Requires-Dist: pyyaml>=6.0.3
|
|
33
|
+
Requires-Dist: rich>=14.2.0
|
|
34
|
+
Requires-Dist: typer>=0.20.0
|
|
35
|
+
Provides-Extra: dev
|
|
36
|
+
Requires-Dist: hypothesis>=6.148.2; extra == 'dev'
|
|
37
|
+
Requires-Dist: mypy>=1.18.2; extra == 'dev'
|
|
38
|
+
Requires-Dist: pre-commit>=4.4.0; extra == 'dev'
|
|
39
|
+
Requires-Dist: pytest-asyncio>=1.3.0; extra == 'dev'
|
|
40
|
+
Requires-Dist: pytest-benchmark>=5.2.3; extra == 'dev'
|
|
41
|
+
Requires-Dist: pytest-cov>=7.0.0; extra == 'dev'
|
|
42
|
+
Requires-Dist: pytest-rerunfailures>=16.1; extra == 'dev'
|
|
43
|
+
Requires-Dist: pytest-timeout>=2.4.0; extra == 'dev'
|
|
44
|
+
Requires-Dist: pytest-xdist>=3.8.0; extra == 'dev'
|
|
45
|
+
Requires-Dist: pytest>=9.0.1; extra == 'dev'
|
|
46
|
+
Requires-Dist: syrupy>=5.0.0; extra == 'dev'
|
|
47
|
+
Requires-Dist: types-pyyaml>=6.0.12.20250915; extra == 'dev'
|
|
48
|
+
Description-Content-Type: text/markdown
|
|
49
|
+
|
|
50
|
+
<!--
|
|
51
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
52
|
+
# SPDX-FileCopyrightText: 2025 The Linux Foundation
|
|
53
|
+
-->
|
|
54
|
+
|
|
55
|
+
# 📊 Linux Foundation Project Reporting System
|
|
56
|
+
|
|
57
|
+
> Comprehensive multi-repository analysis tool for Linux Foundation projects
|
|
58
|
+
|
|
59
|
+
Generate detailed reports on Gerrit projects, contributor activity, Jenkins
|
|
60
|
+
jobs, GitHub CI/CD workflows, and development practices across repositories.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 🗒️ Published Reports
|
|
65
|
+
|
|
66
|
+
<https://lfreleng-actions.github.io/project-reporting-tool/>
|
|
67
|
+
|
|
68
|
+
## ⚡ Quick Start
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Install
|
|
72
|
+
pip install .
|
|
73
|
+
|
|
74
|
+
# Generate your first report
|
|
75
|
+
lf-releng-project-reporting generate \
|
|
76
|
+
--project my-project \
|
|
77
|
+
--repos-path ./repos
|
|
78
|
+
```text
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 🚀 Key Features
|
|
83
|
+
|
|
84
|
+
- **📈 Git Analytics** - Commit activity, lines of code, contributor metrics across configurable time windows
|
|
85
|
+
- **📋 INFO.yaml Reporting** - Project metadata, committer activity, and lifecycle state tracking from info-master
|
|
86
|
+
- **🔍 Feature Detection** - Automatic detection of CI/CD, documentation, dependency management, security tools
|
|
87
|
+
- **👥 Contributor Intelligence** - Author and organization analysis with domain mapping
|
|
88
|
+
- **🌐 API Integration** - GitHub, Gerrit, and Jenkins API support
|
|
89
|
+
- **🎯 CI-Management Integration** - Authoritative Jenkins job allocation using JJB definitions (99%+ accuracy)
|
|
90
|
+
- **📊 Interactive Reports** - JSON (data), Markdown (readable), HTML (interactive), ZIP (bundled)
|
|
91
|
+
- **⚡ High Performance** - Parallel processing with caching support
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 📚 Documentation
|
|
96
|
+
|
|
97
|
+
### 🎯 Getting Started
|
|
98
|
+
|
|
99
|
+
- **[Getting Started Guide](docs/GETTING_STARTED.md)** - Complete installation and setup walkthrough
|
|
100
|
+
- **[Commands Reference](docs/COMMANDS.md)** - Full command-line reference with quick reference
|
|
101
|
+
- **[FAQ](docs/FAQ.md)** - Frequently asked questions
|
|
102
|
+
- **[Usage Examples](docs/USAGE_EXAMPLES.md)** - Real-world scenarios and patterns
|
|
103
|
+
|
|
104
|
+
### ⚙️ Setup & Configuration
|
|
105
|
+
|
|
106
|
+
- **[Configuration Guide](docs/CONFIGURATION.md)** - All configuration options (GitHub API, INFO.yaml, performance)
|
|
107
|
+
- **[Configuration Merging](docs/CONFIGURATION_MERGING.md)** - How project configs inherit and override defaults
|
|
108
|
+
- **[Deployment Guide](docs/DEPLOYMENT.md)** - Production deployment and operations
|
|
109
|
+
- **[CI/CD Integration](docs/CI_CD_INTEGRATION.md)** - GitHub Actions, GitLab CI, and automation
|
|
110
|
+
|
|
111
|
+
### 🔧 Advanced Usage
|
|
112
|
+
|
|
113
|
+
- **[Performance Guide](docs/PERFORMANCE.md)** - Optimization, caching, and scaling
|
|
114
|
+
- **[Feature Discovery](docs/FEATURE_DISCOVERY_GUIDE.md)** - Understanding automatic feature detection
|
|
115
|
+
- **[INFO.yaml Reporting](docs/INFO_YAML_REPORTING.md)** - Project metadata and committer activity tracking
|
|
116
|
+
- **[Troubleshooting](docs/TROUBLESHOOTING.md)** - Problem solving and debugging
|
|
117
|
+
|
|
118
|
+
### 👨💻 Development
|
|
119
|
+
|
|
120
|
+
- **[Developer Guide](docs/DEVELOPER_GUIDE.md)** - Architecture, API reference, and contributing
|
|
121
|
+
- **[Template Development](docs/TEMPLATE_DEVELOPMENT.md)** - Customizing Jinja2 templates and creating new output formats
|
|
122
|
+
- **[Testing Guide](docs/TESTING.md)** - Test suite documentation
|
|
123
|
+
- **[Migration Guide](docs/MIGRATION_GUIDE.md)** - Production migration from legacy system
|
|
124
|
+
|
|
125
|
+
### 🔍 Development Tools
|
|
126
|
+
|
|
127
|
+
- **Template Audit Script** - `python scripts/audit_templates.py` - Comprehensive audit of all Jinja2 templates to verify field accesses match context builders, preventing runtime errors
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 💻 Installation
|
|
132
|
+
|
|
133
|
+
### Using UV (Recommended)
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Install UV
|
|
137
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
138
|
+
|
|
139
|
+
# Install dependencies
|
|
140
|
+
uv sync
|
|
141
|
+
|
|
142
|
+
# Run the tool
|
|
143
|
+
uv run lf-releng-project-reporting generate --project my-project --repos-path ./repos
|
|
144
|
+
```text
|
|
145
|
+
|
|
146
|
+
### Using pip
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# Install from source
|
|
150
|
+
pip install .
|
|
151
|
+
|
|
152
|
+
# Run the tool
|
|
153
|
+
# Note: repos-path should match the directory created by gerrit-clone-action
|
|
154
|
+
# which defaults to the Gerrit server hostname (e.g., ./gerrit.o-ran-sc.org)
|
|
155
|
+
lf-releng-project-reporting generate --project O-RAN-SC --repos-path ./gerrit.o-ran-sc.org
|
|
156
|
+
```text
|
|
157
|
+
|
|
158
|
+
**→ [Detailed Setup Instructions](SETUP.md)**
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## 🎯 Common Use Cases
|
|
163
|
+
|
|
164
|
+
| Use Case | Command |
|
|
165
|
+
| --------------------------- | ----------------------------------------------------------------------------------------------------------- |
|
|
166
|
+
| **Basic report (O-RAN-SC)** | `lf-releng-project-reporting generate --project O-RAN-SC --repos-path ./gerrit.o-ran-sc.org` |
|
|
167
|
+
| **Basic report (ONAP)** | `lf-releng-project-reporting generate --project ONAP --repos-path ./gerrit.onap.org` |
|
|
168
|
+
| **With caching** | `lf-releng-project-reporting generate --project O-RAN-SC --repos-path ./gerrit.o-ran-sc.org --cache --workers 8` |
|
|
169
|
+
| **Check config** | `lf-releng-project-reporting generate --project O-RAN-SC --repos-path ./gerrit.o-ran-sc.org --dry-run` |
|
|
170
|
+
| **Get help** | `lf-releng-project-reporting --help` |
|
|
171
|
+
|
|
172
|
+
> **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).
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## 📊 Output Formats
|
|
177
|
+
|
|
178
|
+
```text
|
|
179
|
+
reports/
|
|
180
|
+
<PROJECT>/
|
|
181
|
+
├── report_raw.json # Complete dataset (canonical)
|
|
182
|
+
├── report.md # Markdown report (readable)
|
|
183
|
+
├── report.html # Interactive HTML (sortable tables)
|
|
184
|
+
├── config_resolved.json # Applied configuration
|
|
185
|
+
└── <PROJECT>_report_bundle.zip # Complete bundle
|
|
186
|
+
```text
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## 🔌 CI/CD Integration
|
|
191
|
+
|
|
192
|
+
### GitHub Actions
|
|
193
|
+
|
|
194
|
+
```yaml
|
|
195
|
+
- name: Generate Report
|
|
196
|
+
run: |
|
|
197
|
+
uv run lf-releng-project-reporting generate \
|
|
198
|
+
--project "${{ matrix.project }}" \
|
|
199
|
+
--repos-path "./${{ matrix.server }}" \
|
|
200
|
+
--cache \
|
|
201
|
+
--quiet
|
|
202
|
+
env:
|
|
203
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
204
|
+
```text
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## 🔧 Requirements
|
|
209
|
+
|
|
210
|
+
- **Python**: 3.10+ (supports 3.10, 3.11, 3.12, 3.13)
|
|
211
|
+
- **Dependencies**: PyYAML, httpx, Jinja2, typer, rich
|
|
212
|
+
- **Optional**: GitHub token for API features (required for workflow status colors)
|
|
213
|
+
|
|
214
|
+
### GitHub Token Requirements
|
|
215
|
+
|
|
216
|
+
For full workflow status reporting (colored status indicators), you need a GitHub Personal Access Token (Classic) with these permissions:
|
|
217
|
+
|
|
218
|
+
**Required Scopes:**
|
|
219
|
+
|
|
220
|
+
- ☑ `repo` - Full repository access (or `public_repo` for public repositories)
|
|
221
|
+
- ☑ `actions:read` - Read GitHub Actions workflow runs and status
|
|
222
|
+
|
|
223
|
+
**Note:** Fine-grained tokens are not supported as they cannot span organizations.
|
|
224
|
+
|
|
225
|
+
**Setup:**
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
# Set environment variable
|
|
229
|
+
export GITHUB_TOKEN=ghp_your_token_here
|
|
230
|
+
# OR for CI/production:
|
|
231
|
+
export CLASSIC_READ_ONLY_PAT_TOKEN=ghp_your_token_here
|
|
232
|
+
|
|
233
|
+
# Then run the tool
|
|
234
|
+
lf-releng-project-reporting generate --project my-project --repos-path ./repos
|
|
235
|
+
```text
|
|
236
|
+
|
|
237
|
+
**Create token:** <https://github.com/settings/tokens>
|
|
238
|
+
|
|
239
|
+
**Without a token:** The tool detects workflows but shows them as grey (unknown status) instead of colored status indicators.
|
|
240
|
+
|
|
241
|
+
**See also:** [Configuration Guide](docs/CONFIGURATION.md#github-api-integration) for detailed token setup
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
### Jenkins Authentication (Optional)
|
|
245
|
+
|
|
246
|
+
Some Jenkins servers require authentication to view job information. If you encounter a "returned 0 jobs" error, you need to provide Jenkins credentials.
|
|
247
|
+
|
|
248
|
+
**Setup:**
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
# Generate API token in Jenkins: User → Configure → API Token → Add new Token
|
|
252
|
+
export JENKINS_USER="your-username"
|
|
253
|
+
export JENKINS_API_TOKEN="your-api-token"
|
|
254
|
+
|
|
255
|
+
# Then run the tool
|
|
256
|
+
lf-releng-project-reporting generate --project my-project --repos-path ./repos
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
**Create token:** Log into your Jenkins instance → Your Username → Configure → API Token
|
|
260
|
+
|
|
261
|
+
**Without credentials:** The tool will fail with an error if Jenkins requires authentication.
|
|
262
|
+
|
|
263
|
+
**See also:** [Troubleshooting Guide](docs/TROUBLESHOOTING.md#jenkins-authentication) for detailed setup
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## 📖 Key Documentation Files
|
|
268
|
+
|
|
269
|
+
| Topic | Document |
|
|
270
|
+
| ------------------- | ------------------------------------------------------ |
|
|
271
|
+
| **Getting Started** | [docs/GETTING_STARTED.md](docs/GETTING_STARTED.md) |
|
|
272
|
+
| **Commands** | [docs/COMMANDS.md](docs/COMMANDS.md) |
|
|
273
|
+
| **FAQ** | [docs/FAQ.md](docs/FAQ.md) |
|
|
274
|
+
| **Configuration** | [docs/CONFIGURATION.md](docs/CONFIGURATION.md) |
|
|
275
|
+
| **Usage Examples** | [docs/USAGE_EXAMPLES.md](docs/USAGE_EXAMPLES.md) |
|
|
276
|
+
| **Performance** | [docs/PERFORMANCE.md](docs/PERFORMANCE.md) |
|
|
277
|
+
| **Troubleshooting** | [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) |
|
|
278
|
+
| **CI/CD Setup** | [docs/CI_CD_INTEGRATION.md](docs/CI_CD_INTEGRATION.md) |
|
|
279
|
+
| **Developer Guide** | [docs/DEVELOPER_GUIDE.md](docs/DEVELOPER_GUIDE.md) |
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## 💡 Quick Tips
|
|
284
|
+
|
|
285
|
+
- 🎯 **First time?** Start with [Getting Started Guide](docs/GETTING_STARTED.md)
|
|
286
|
+
- ⚡ **Slow?** Add `--cache --workers 8` for parallel processing
|
|
287
|
+
- 🐛 **Issues?** Check [Troubleshooting Guide](docs/TROUBLESHOOTING.md)
|
|
288
|
+
- ❓ **Questions?** See [FAQ](docs/FAQ.md)
|
|
289
|
+
- 📖 **Need help?** Run `lf-releng-project-reporting --help`
|
|
290
|
+
- 🔍 **Developing templates?** Run `python scripts/audit_templates.py` to verify all field accesses
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## 🛠️ Development Scripts
|
|
295
|
+
|
|
296
|
+
### Template Audit Script
|
|
297
|
+
|
|
298
|
+
```bash
|
|
299
|
+
python scripts/audit_templates.py
|
|
300
|
+
```text
|
|
301
|
+
|
|
302
|
+
This script performs a comprehensive audit of all Jinja2 templates to:
|
|
303
|
+
|
|
304
|
+
- Extract all field accesses from templates (e.g., `repo.field`, `org.field`)
|
|
305
|
+
- Analyze context builders to see what fields they provide
|
|
306
|
+
- Identify mismatches that could cause "Undefined variable" errors at runtime
|
|
307
|
+
|
|
308
|
+
**When to use:**
|
|
309
|
+
|
|
310
|
+
- Before committing template changes
|
|
311
|
+
- After modifying context builders
|
|
312
|
+
- When debugging template rendering errors
|
|
313
|
+
- During code review to verify template correctness
|
|
314
|
+
|
|
315
|
+
**Output:**
|
|
316
|
+
|
|
317
|
+
- ✅ **Green checkmarks** - All required fields present
|
|
318
|
+
- ⚠️ **Warnings** - Extra fields exist (safe, unused)
|
|
319
|
+
- ❌ **Red errors** - Missing fields that will cause runtime failures
|
|
320
|
+
|
|
321
|
+
**Example output:**
|
|
322
|
+
|
|
323
|
+
```text
|
|
324
|
+
================================================================================
|
|
325
|
+
TEMPLATE FIELD ACCESS AUDIT
|
|
326
|
+
================================================================================
|
|
327
|
+
|
|
328
|
+
📄 html/sections/summary.html.j2
|
|
329
|
+
summary:
|
|
330
|
+
- active_count
|
|
331
|
+
- current_count
|
|
332
|
+
- repositories_analyzed
|
|
333
|
+
|
|
334
|
+
✅ No critical issues found!
|
|
335
|
+
Extra fields are safe - they're unused.
|
|
336
|
+
```text
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## 🤝 Support
|
|
341
|
+
|
|
342
|
+
- **Documentation**: [Complete Index](docs/INDEX.md)
|
|
343
|
+
- **Issues**: [GitHub Issues](https://github.com/lfreleng-actions/project-reporting-tool/issues)
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## 📜 License
|
|
348
|
+
|
|
349
|
+
Apache-2.0 License - Copyright 2025 The Linux Foundation
|
|
350
|
+
|
|
351
|
+
---
|