version-check
A lightweight, opt-in version checking library for Mozilla CLI tools.
Features
- Opt-in only: Only checks when
MOZTOOLS_UPDATE_CHECK=1is set - Non-blocking: Runs in background thread, never delays program startup
- Cached: Checks at most once per 24 hours per tool
- Shared cache: All tools share
~/.mozbuild/tool-versions.json - Silent failures: Network errors don't affect program operation
- Thread-safe: Safe for concurrent access
Usage
Add to your Cargo.toml:
[]
= { = "../foxtail/version-check" }
In your main.rs:
How It Works
- At program startup, if
MOZTOOLS_UPDATE_CHECK=1is set, spawn a background thread - The thread checks the cache file (
~/.mozbuild/tool-versions.json) - If the cache is recent (< 24 hours), use cached data
- Otherwise, query crates.io API:
https://crates.io/api/v1/crates/<name> - Update the cache with the latest version info
- At program exit, print a warning if a newer version is available
Warning Format
When a newer version is available, users see:
Note: A newer version of socorro-cli is available (0.2.0 > 0.1.0)
Run: cargo binstall socorro-cli
Cache Format
The cache file at ~/.mozbuild/tool-versions.json contains:
Testing
To enable version checking:
To disable (default):
Configuration
- Cache location:
~/.mozbuild/tool-versions.json - Cache validity: 24 hours
- Network timeout: 5 seconds
- User-Agent:
{tool-name}/version-check
Implementation Details
- Uses
reqwestwith blocking client for HTTP requests - Uses
serde_jsonfor cache file serialization - Thread-safe via
Arc<Mutex<Option<String>>> - Silently fails on any error (network, I/O, parsing)
- Never blocks program execution