Monitors GitHub repositories for new releases and tracks version updates automatically.
- Tracks multiple GitHub repositories for new releases
- Discovers release assets (binaries, archives, distribution directories)
- Supports custom download URLs
- Multiple output formats (table, JSON, markdown)
- Automatic README timestamp updates
- Persistent version tracking
- Python 3.7+
- GitHub Personal Access Token (optional, increases API rate limits)
pip install -r requirements.txtCreate a .env file:
GITHUB_REPOSITORY=owner/repoGITHUB_REPOSITORY: Your repository in formatowner/repo
Define repositories to track:
repositories:
- name: owner/repo-name
- name: owner/another-repo
custom_url: https://example.com/download/{version}
dist_path: buildFields:
name(required): GitHub repository inowner/repoformatcustom_url(optional): Custom download URL with{version}placeholderdist_path(optional): Directory path to check for assets (default:dist)
Automatically maintained file storing last known versions. Do not edit manually.
python scripts/check_releases.py# Table format (default) - prints to console
python scripts/check_releases.py --format table
# JSON format - saves to output.json
python scripts/check_releases.py --format json
# Markdown format - saves to output.md
python scripts/check_releases.py --format markdownTable Format:
+------------------+---------+--------+----------+
| Package | Version | Latest | Assets |
+------------------+---------+--------+----------+
| owner/repo | v1.0.0 | v1.1.0 | 3 found |
+------------------+---------+--------+----------+Markdown Format:
Includes a summary table at the top showing all packages with their current/latest versions and asset counts, followed by detailed sections for each package containing:
- Downloadable assets with links
- Full release notes
JSON Format:
Structured JSON output with all release information including package names, versions, assets, and release notes.
- Reads repository list from
dependencies.yml - Fetches latest release from GitHub API for each repository
- Compares with tracked versions in
tracked_versions.json - Discovers release assets (official assets, custom URLs, or dist directories)
- Updates tracked versions if new releases found
- Updates README timestamp when changes detected
- Outputs results in specified format
The tool discovers assets in three ways:
- Official GitHub release assets - binaries, archives attached to releases
- Custom URLs - if
custom_urlis configured in dependencies.yml - Distribution directories - checks for
dist_pathdirectory in the release tag
- GitHubClient: GitHub API interactions (releases, file checks)
- ConfigLoader: Loads repository configuration from YAML
- AssetDiscoverer: Finds downloadable assets for releases
- ReleaseTracker: Manages version tracking state
- ReleaseManager: Orchestrates check and update process
- Formatters: Output results (Table, JSON, Markdown)
- Interface-based design with abstract base classes (IGitHubClient, IOutputFormatter)
- Dependency injection for testability
- Single Responsibility Principle
name: Check Dependencies
on:
schedule:
- cron: '0 0 * * *' # Daily at midnight
workflow_dispatch:
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.x'
- run: pip install -r requirements.txt
- run: python scripts/check_releases.py --format markdown
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_REPOSITORY: ${{ github.repository }}
- name: Commit changes
run: |
git config user.name github-actions
git config user.email github-actions@github.com
git add tracked_versions.json README.md output.md
git commit -m "Update tracked versions" || exit 0
git push- Without token: 60 requests/hour
- With token: 5000 requests/hour
- Solution: Add
GITHUB_TOKENto.env
Repository may not have any releases. Verify the repository has published releases on GitHub.
If no assets are found:
- Check if the release has attached assets
- Configure
custom_urlfor custom download links - Configure
dist_pathif assets are in a specific directory
Last check ran on: 2025-12-29 01:27:55