A web-based release notes viewer that generates beautiful, interactive release notes from Git commit history. Features include commit-by-commit view, release-by-release aggregation, and a visual timeline with filtering capabilities.
- π Dual View Modes: View commits individually or aggregated by release tags
- π·οΈ Virtual "Incoming" Release: Automatically groups unreleased commits
- π¨ Interactive Timeline: Visual representation of commits with zoom capabilities
- π Smart Filtering: Filter by commit type (features, fixes, docs, chores)
- π Statistics Dashboard: Summary cards showing commit counts by category
- π Auto-classification: Automatically categorizes commits using conventional commit standards
- π GitHub Integration: Direct links to commits and repository
- π± Responsive Design: Works seamlessly on desktop and mobile devices
- π Markdown Export: Generate formatted markdown release notes alongside JSON output
- ποΈ Timeline Visualization: Optional ASCII timeline with date grouping and commit types in markdown output
Web Release Notes is a comprehensive solution for generating and displaying release notes from Git repositories. It consists of:
- Python Script (
release_notes.py): Extracts commit history and generates JSON data - Web Interface (
release_notes.html,release_notes.js,release_notes.css): Interactive viewer with multiple view modes - Node.js Server (
server.js): Local development server with live reload - Build Pipeline (
local.sh): Automated linting, minification, and validation
The tool automatically classifies commits into categories (features, bug fixes, documentation, chores), supports release tagging, and creates a virtual "Incoming" release for commits not yet tagged.
- Python 3.7+ with pip
- Node.js 14+ with npm
- Git repository
-
Clone or download this repository:
git clone <your-repo-url> cd WebReleaseNotes
-
Install Python dependencies:
pip install -e . -
Install Node.js dependencies:
npm install stylelint-config-standard
-
Generate release notes data:
python release_notes.py --num_commits 50 --output release_notes.json
Options:
--num_commits N: Number of commits to include (default: 10)--output FILE: Output JSON file path (default: release_notes.json)--markdown FILE: Optional markdown file path (e.g., RELEASE_NOTES.md)--md_timeline: Include timeline visualization in markdown output (default: False)--md_latest_release_only: Generate markdown only for the latest tagged release (ignores Incoming and older releases). If no tags are found, output remains unchanged.--repo_path PATH: Path to the repository (default: current directory)--branch BRANCH: Branch to analyze (default: main)
Start the development server to test the web interface:
npm run dev
# or
node server.jsVisit http://localhost:3000 in your browser.
The development server includes Content Security Policy (CSP) headers to enhance security. If you encounter issues loading resources, ensure your browser supports CSP and that no extensions are interfering. Validate that the CSP headers are correctly set by checking the browser's developer console for any CSP-related errors.
Run the complete validation pipeline:
./local.shThis script performs:
- JavaScript linting with ESLint
- HTML validation with HTMLHint
- CSS validation with Stylelint
- Minification of HTML, CSS, and JavaScript
- Post-minification validation
- JSON generation with sample data
Output files are created in the out/ directory.
-
Generate production files:
./local.sh
-
Copy output files from
out/directory to your GitHub Pages branch or deployment folder:cp out/release_notes.html index.html cp out/release_notes.css release_notes.css cp out/release_notes.js release_notes.js cp out/release_notes.json release_notes.json
-
Commit and push to GitHub Pages:
git add index.html release_notes.* git commit -m "Update release notes" git push origin gh-pages
For any static web server (Apache, Nginx, etc.):
-
Build production files:
./local.sh
-
Copy files from
out/directory to your web server's document root:cp out/* /var/www/html/release-notes/ -
Configure release notes generation:
python release_notes.py --num_commits 50 --output release_notes.json --markdown RELEASE_NOTES.md
For CI/CD pipelines, add these steps to your workflow:
# Example GitHub Actions workflow
- name: π Get latest code
uses: actions/checkout@v6
with:
# NOTICE : You must use this option to get all tags for release detection
fetch-depth: 0
- name: Generate Release Notes
run: |
python release_notes.py --num_commits 50 --output release_notes.json --markdown RELEASE_NOTES.md
# You may need to set up Node.js environment here and run directly minifiyer or
# use directly the compressed version
# (Section simplifyed for brevity)
- name: Build and Validate
run: |
chmod +x local.sh
./local.sh
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./out- By Commit: Shows all commits in chronological order with expandable details
- By Release: Groups commits by release tags, with a special "Incoming" virtual release for unreleased commits
- Click on summary cards to filter by commit type (features, fixes, docs, etc.)
- Click on timeline dots to jump to specific commits
- Use the release dropdown to view specific releases
The tool automatically detects Git tags starting with v or V (e.g., v1.0.0, V2.1.3) and groups commits accordingly. Commits before the first tag are grouped into an "Incoming" virtual release.
When using the --markdown option, the script generates a formatted markdown file:
-
With Release Tags: Structures the markdown by releases (matching the HTML "By Release" view)
- Each release section shows commit count, date range, and category summary
- Commits are grouped by type within each release
- Includes an overall summary at the end
- Optional Timeline: Use
--md_timelineto include an ASCII visual timeline with date grouping, commit types (with emojis), and statistics for each release - Latest Release Only: Use
--md_latest_release_onlyto generate markdown for only the most recent tagged release, ignoring "Incoming" commits and older releases (useful for focused release announcements)
-
Without Release Tags: Lists commits chronologically by date (matching the HTML "By Commit" view)
- Each commit shows type badge, message, author, and date
- Includes statistics and breakdown by type at the end
- Optional Timeline: Use
--md_timelineto include an ASCII visual timeline showing all commits grouped by date
The timeline visualization features:
- π Date grouping with chronological ordering (latest first)
- β¨ Emoji indicators for commit types (features, fixes, docs, etc.)
- π³ Tree-style ASCII structure using box-drawing characters
- π Statistics summary (insertions, deletions, files changed)
Example usage:
# Generate both JSON and markdown
python release_notes.py --markdown RELEASE_NOTES.md --num_commits 50
# Generate markdown with timeline visualization
python release_notes.py --markdown RELEASE_NOTES.md --md_timeline --num_commits 50
# Generate only latest release with timeline
python release_notes.py --markdown RELEASE_NOTES.md --md_timeline --md_latest_release_only --num_commits 50
# Analyze a different repository
python release_notes.py --repo_path ../my-project --markdown RELEASE_NOTES.md
# Use a specific branch
python release_notes.py --branch develop --markdown RELEASE_NOTES.mdWebReleaseNotes/
βββ release_notes.py # Python script for generating commit data
βββ release_notes.html # Main HTML interface
βββ release_notes.js # JavaScript application logic
βββ release_notes.css # Styling and responsive design
βββ release_notes.json # Generated commit data (gitignored)
βββ server.js # Development server
βββ local.sh # Build and validation script
βββ package.json # Node.js dependencies
βββ eslint.config.js # ESLint configuration
βββ out/ # Production build output (gitignored)
See LICENSE file for details.
Contributions are welcome! Please ensure all code passes validation, before submitting changes.