Skip to main content

A CLI tool that generates self-contained HTML performance reports from local Git repositories.

Project description

Reveille

A CLI tool that generates self-contained HTML performance reports from local Git repositories.

Reveille reads your repository's Git history and produces a single portable .html file containing interactive visualisations of contributor activity, commit trends, code volume, and repository health — with no server, no external API calls, and no configuration beyond the command itself. Open the output in any browser, share it over email, or drop it into a Confluence page without modification.


Contents


Overview

Reveille is designed for developers, engineering managers, and technical leads who need a production-grade, shareable retrospective from any Git repository — without configuring infrastructure or connecting to external services.

What it produces:

  • Contribution heatmaps showing commit activity by day and hour
  • Commit frequency histograms and rolling activity timelines
  • Per-contributor breakdowns covering commits, lines added and removed, and active day counts
  • A structured ranking table assigning each contributor a tier designation based on weighted activity metrics
  • Repository health indicators including bus factor, activity recency, and consistency scores

Design constraints that are non-negotiable:

  • The output is always a single .html file. No directories, no asset folders, no dependencies.
  • The file must open in any modern browser with no internet connection. All JavaScript, CSS, and chart data are embedded inline.
  • No external CDN calls. No iframes. No cookies. No tracking.
  • The output aesthetic is formal and stakeholder-ready. No emojis. No casual language. Typography is clean and readable.

Installation

Reveille requires Python 3.11 or later.

Install from PyPI:

pip install reveille

Install with pipx (recommended for CLI tools):

pipx install reveille

Verify the installation:

reveille --version

Quickstart

Navigate to any Git repository on your machine and run:

cd /path/to/your/repository
reveille generate

Reveille reads the local Git history and writes a report to the current directory. The output file is named reveille-report.html by default. Open it in any browser.

Generate a report for a specific date range:

reveille generate --since 2024-01-01 --until 2024-12-31

Write the output to a specific path:

reveille generate --output /tmp/q4-report.html

Specify the repository path explicitly:

reveille generate --repo /path/to/repository

CLI Reference

reveille generate

Generates the HTML performance report for the target repository.

Flag Short Type Default Description
--repo -r PATH . (current directory) Path to the Git repository root. Must contain a .git directory.
--output -o PATH ./reveille-report.html Path for the generated HTML file. Parent directories must exist.
--since DATE Repository creation date Include only commits on or after this date. Accepts YYYY-MM-DD.
--until DATE Today Include only commits on or before this date. Accepts YYYY-MM-DD.
--branch -b TEXT Default branch Analyse commits reachable from this branch only.
--exclude-author TEXT None Exclude a contributor by name or email. Repeatable.
--min-commits INT 1 Exclude contributors with fewer than this many commits in the analysis window.
--title TEXT Repository name Override the report title displayed in the HTML output.
--no-ranking Flag Off Omit the contributor ranking table from the output.
--config -c PATH None Path to a TOML configuration file. CLI flags take precedence over config file values.

reveille version

Prints the installed version string and exits.

reveille validate

Validates that the target path is a readable Git repository and that the analysis window contains at least one commit. Exits with a non-zero status code if validation fails. Useful for CI integration.

reveille validate --repo /path/to/repository

Output Description

The generated HTML file is structured as a formal report with the following sections.

Repository Summary — Name, remote URL if present, default branch, total commits in the analysis window, unique contributors, date range, and report generation timestamp.

Activity Heatmap — A calendar-style matrix showing commit frequency by day across the analysis window. Modelled on GitHub's contribution graph but scoped to the repository and time range specified.

Commit Timeline — A rolling line chart showing commit volume per week over the analysis window. Highlights periods of high and low activity.

Contributor Summary Table — A ranked table listing each contributor with their commit count, lines added, lines removed, net line delta, active days, most recent commit date, and assigned tier designation.

Per-Contributor Activity Charts — Commit frequency histograms for each contributor showing their distribution of activity across the analysis window.

Repository Health Indicators — Bus factor estimate (minimum number of contributors accounting for 50% of commits), longest inactive streak, activity recency score, and contributor retention across the window.

All charts are rendered with Plotly and are fully interactive — hover states, zoom, pan, and legend toggling are available without any external dependencies.


Contributor Ranking System

Reveille assigns each contributor a tier designation based on a weighted composite of four metrics.

Metric Default Weight
Commit volume 30%
Lines contributed (additions + deletions) 25%
Activity consistency (active days / total days) 25%
Recency (decay-weighted recent activity) 20%

Weights are configurable. See Configuration.

The composite score maps to the following tier designations, applied relative to the contributor population in the analysis window.

Tier Designation Composite Score Percentile
I Private 0 – 20th
II Corporal 21st – 40th
III Sergeant 41st – 60th
IV Lieutenant 61st – 75th
V Captain 76th – 88th
VI Major 89th – 95th
VII Commander 96th – 100th

Tier boundaries and weights are documented defaults and are fully reproducible from the source. Changing the weights changes the scores but not the tier logic. Tiers are always relative to the contributor population within the analysis window, not absolute thresholds.


Configuration

Reveille accepts a TOML configuration file for parameters that are cumbersome to pass on the command line on every invocation.

Create a file named reveille.toml at the repository root or pass the path explicitly with --config.

[report]
title = "Engineering Performance Report — Q4 2024"
output = "./reports/q4-2024.html"
branch = "main"
since = "2024-10-01"
until = "2024-12-31"

[filters]
min_commits = 2
exclude_authors = [
    "dependabot[bot]",
    "github-actions[bot]",
]

[ranking]
enabled = true
weights = { commits = 0.30, lines = 0.25, consistency = 0.25, recency = 0.20 }

CLI flags always take precedence over configuration file values. The configuration file is entirely optional — all values have defaults.


Documentation

A full operational reference is available at docs/USER_GUIDE.md. It covers every CLI flag and its interaction effects, every TOML key with annotated examples, the ranking algorithm in plain language, how to interpret each section of the generated report, and practical patterns for common use cases.


Development Setup

Prerequisites: Python 3.11 or later, git.

git clone git@github.com:varaprasadchilakanti/reveille.git
cd reveille
poetry install

Verify the environment:

poetry run reveille --version
poetry run mypy src/
poetry run ruff check src/

Running Tests

pytest

With coverage report:

pytest --cov=reveille --cov-report=term-missing

Type checking only:

mypy src/

Linting only:

ruff check src/

Contributing

Contributions are welcome. Before opening a pull request, please read the following.

Reporting issues. Use GitHub Issues. Include the output of reveille --version, the operating system, Python version, and a minimal reproduction case. If the issue involves a specific repository, a sanitised git log --oneline covering the relevant range is sufficient — do not include source code.

Proposing changes. Open an issue before starting significant work. This avoids duplication and ensures the direction is aligned before effort is invested.

Submitting pull requests. All pull requests must target the main branch. The CI pipeline runs ruff, mypy, and pytest on every pull request. All three must pass. New public functions require docstrings. New behaviour requires tests. The output contract — single self-contained HTML file, no external calls, formal aesthetic — is non-negotiable and must be preserved in every contribution.

Code style. Ruff handles linting and import ordering. Mypy runs in strict mode. Type annotations are required on every function signature. Early returns are preferred over nested conditionals throughout.

Commit messages. Follow the Conventional Commits specification: feat:, fix:, docs:, refactor:, test:, chore:. Scope is optional but encouraged, e.g. feat(ranking): add recency decay weighting.


Changelog

See CHANGELOG.md for the full release history. Reveille follows Keep a Changelog format and Semantic Versioning 2.0.


Licence

Reveille is released under the MIT Licence.

Project details


Download files

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

Source Distribution

reveille-0.1.1.tar.gz (36.5 kB view details)

Uploaded Source

Built Distribution

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

reveille-0.1.1-py3-none-any.whl (36.0 kB view details)

Uploaded Python 3

File details

Details for the file reveille-0.1.1.tar.gz.

File metadata

  • Download URL: reveille-0.1.1.tar.gz
  • Upload date:
  • Size: 36.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.12.3 Linux/6.8.0-110-generic

File hashes

Hashes for reveille-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c67241d8360fad60d0c6eb020ba1eddf8f5c5a7a5045e78e5e73f218540d6b52
MD5 a0d616c289b1e555b4411987921332e0
BLAKE2b-256 627d297c24f5fe798ebbeeb68b799accf35e956c7e8e5f051d2945e10f29853c

See more details on using hashes here.

File details

Details for the file reveille-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: reveille-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 36.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.12.3 Linux/6.8.0-110-generic

File hashes

Hashes for reveille-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 096597acc1e85b39e9d12f575beeff890a7b48989f33f16f8c7afd791a45ef40
MD5 aa601cbb3de9c75808e3e813a25c0ebc
BLAKE2b-256 6d5f9c25fc663a73d2ae54295a0ae9695735d2438f30eac1225efe7bb4495cc7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page