Weekly is a comprehensive Python project quality analyzer that helps developers maintain high code quality by automatically detecting issues and suggesting improvements. It analyzes various aspects of your Python projects and generates actionable reports with clear next steps.
- π§ͺ Test Coverage Analysis: Check test coverage and test configuration
- π Documentation Check: Verify README, LICENSE, CHANGELOG, and API docs
- π CI/CD Integration: Detect CI/CD configuration and best practices
- π¦ Dependency Analysis: Identify outdated or vulnerable dependencies
- π οΈ Code Quality: Check for code style, formatting, and common issues
- π Interactive Reports: Generate detailed reports in multiple formats (JSON, Markdown, Text, HTML)
- π Extensible Architecture: Easy to add custom checkers and rules
- π Fast and Lightweight: Minimal dependencies, fast analysis
- π Git Integration: Works seamlessly with Git repositories
- π Multi-Repo Scanning: Scan multiple Git repositories in a directory structure
- π Date-based Filtering: Only analyze repositories with recent changes
- π HTML Reports: Beautiful, interactive HTML reports with drill-down capabilities
- π Security Checks: Identify potential security issues in your code
- π Trend Analysis: Track code quality metrics over time
Weekly can scan multiple Git repositories in a directory structure and generate comprehensive reports for each one, plus a summary report.
It also extracts Recent Changes (commits, files/lines changed, commit type breakdown) and writes a per-repo changelog.md into the report directory.
# Scan all Git repositories in ~/github
weekly scan ~/github
# Only show repositories with changes in the last 7 days (default)
weekly scan ~/github --since "7 days ago"
# Specify a custom output directory
weekly scan ~/github -o ./weekly-reports
# Run with 8 parallel jobs for faster scanning
weekly scan ~/github -j 8
# Generate JSON reports instead of HTML
weekly scan ~/github --format jsonWhen you run weekly scan ... --since "...", the per-repo reports include a Recent Changes section and a changelog.md file in the repository report directory.
- If
git-cliffis available, Weekly uses it to generatechangelog.md. - If
git-cliffis not available, Weekly falls back to an internal summary (commit + diff stats).
Optional installation (recommended) for richer changelog output:
cargo install git-cliffπ Scanning Git repositories in /Users/username/github...
β
Scan complete! Generated reports for 3 repositories.
π Summary report: weekly-reports/summary.html
β
org1/repo1: 5 checks
β style: Passed
β code_quality: Passed
β dependencies: 2 outdated packages found
β docs: Documentation is 85% complete
β tests: 92% test coverage
Usage: weekly scan [OPTIONS] [ROOT_DIR]
Scan multiple Git repositories and generate reports.
ROOT_DIR: Directory containing Git repositories (default: current directory)
Options:
-o, --output PATH Output directory for reports (default: ./weekly-reports)
-s, --since TEXT Only include repositories with changes since this date (e.g., "7 days ago", "2023-01-01")
--recursive / --no-recursive Scan directories recursively (default: True)
-j, --jobs INTEGER Number of parallel jobs (default: 4)
-f, --format [html|json|markdown] Output format (default: html)
--summary-only Only generate a summary report, not individual reports
-v, --verbose Show detailed output
--help Show this message and exit.
from pathlib import Path
from datetime import datetime, timedelta
from weekly import GitScanner
# Create a scanner instance
scanner = GitScanner(
root_dir=Path.home() / "github",
output_dir="weekly-reports",
since=datetime.now() - timedelta(days=7),
recursive=True,
jobs=4
)
# Run the scan
results = scanner.scan_all()
# Process results
for result in results:
print(f"{result.repo.org}/{result.repo.name}:")
for name, check in result.results.items():
status = "β" if check.is_ok else "β"
print(f" {status} {name}: {check.message}")pip install weeklypoetry add weekly# Clone the repository
git clone https://github.com/wronai/weekly.git
cd weekly
# Install with Poetry
poetry install --with dev
# Install pre-commit hooks
pre-commit install
# Activate the virtual environment
poetry shellAnalyze a Python project:
weekly analyze /path/to/your/projectUsage: weekly analyze [OPTIONS] PROJECT_PATH
Analyze a Python project and provide quality insights.
PROJECT_PATH: Path to the project directory (default: current directory)
Options:
-f, --format [text|json|markdown] Output format (default: text)
-o, --output FILE Output file (default: stdout)
--show-suggestions / --no-suggestions
Show improvement suggestions (default: true)
-v, --verbose Show detailed output
--help Show this message and exit.
-
Analyze current directory and show results in the terminal:
weekly analyze . -
Generate a Markdown report:
weekly analyze -f markdown -o report.md /path/to/project
-
Generate a JSON report for programmatic use:
weekly analyze -f json -o report.json /path/to/project
π Weekly Project Analysis Report
================================================================================
Project: example-project
Generated: 2025-06-07 12:34:56
Summary:
--------------------------------------------------------------------------------
β
5 passed
β οΈ 3 warnings
β 1 errors
Detailed Results:
--------------------------------------------------------------------------------
β
Project Structure
Found Python project with proper structure
β
Dependencies
All dependencies are properly specified
β οΈ Test Coverage
Test coverage is below 80% (currently 65%)
Suggestions:
β’ Add more test cases to improve coverage
β’ Consider using pytest-cov for coverage reporting
β Documentation
Missing API documentation
Suggestions:
β’ Add docstrings to all public functions and classes
β’ Consider using Sphinx or MkDocs for API documentation
Recommended Actions:
--------------------------------------------------------------------------------
1. Improve Test Coverage
β’ Add unit tests for untested modules
β’ Add integration tests for critical paths
β’ Set up code coverage reporting in CI
2. Enhance Documentation
β’ Add docstrings to all public APIs
β’ Create API documentation using Sphinx or MkDocs
β’ Add examples to the README
from pathlib import Path
from weekly import analyze_project
from weekly.core.report import Report
# Analyze a project
report = analyze_project(Path("/path/to/your/project"))
# Get report as dictionary
report_data = report.to_dict()
# Get markdown report
markdown = report.to_markdown()
# Print summary
print(f"β
{report.summary['success']} passed")
print(f"β οΈ {report.summary['warnings']} warnings")
print(f"β {report.summary['errors']} errors")
# Get suggestions
for suggestion in report.get_suggestions():
print(f"\n{suggestion['title']}:")
for item in suggestion['suggestions']:
print(f" β’ {item}")
### Most Active Files
- `src/main.py`: 12 changes
- `tests/test_main.py`: 8 changes
- `README.md`: 5 changes
### Languages Used
- `.py`: 15 files
- `.md`: 3 files
- `.json`: 2 files
## π Next Steps
- [ ] Add tests for recent changes
- [ ] Refactor large files: src/utils.py, src/processor.py...
## π Recent Commits
- `a1b2c3d` Fix bug in data processing (2023-05-15)
- `f4e5d6a` Add new feature X (2023-05-14)
- `b3c4d5e` Update documentation (2023-05-13)
- `c6d7e8f` Refactor module Y (2023-05-12)
- `d9e0f1a` Initial commit (2023-05-10)
*[View full history in the JSON file]*-
Clone the repository:
git clone https://github.com/wronai/weekly.git cd weekly -
Install dependencies (recommended):
poetry install --with dev
poetry run pytestThis project uses:
- Black for code formatting
- isort for import sorting
- flake8 for linting
- mypy for type checking
Run all checks:
black .
isort .
flake8
mypy .Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the Apache-2.0 License - see the LICENSE file for details.
- Built with β€οΈ by the WronAI team
- Inspired by various Git analysis tools