:label: keep your client up to date
:see_no_evil: Run in the background
:hourglass: Limit background task
upversion
provides you to notify your clients when new version released and show the latest download link.
sh
$ ./test-tool
==> 🙆♂️ Newer <tool-name> version available: <user-version> (currently running: 0.5.2) | Link: <dynamic-link>
upversion
running as a background process which not affect your tool performance.
1. you can choose when present the newer version
2. you can skip message notification if your proccess finished before upversion
Add this to Cargo.toml:
toml
[dependencies]
upversion = { version = "0.1" }
```rs use anyhow::Result; use upversion::vendors::GitHubVendor; use upversion::CheckVersion;
fn main() -> Result<()> { let github = Box::new(GitHubVendor::new("kaplanelad", "shellfirm")); let timeout = 2; // in seconds let version_context = CheckVersion::new("app-name", github, timeout)?;
// run command execute upversion check in the background and finish immediately.
version_context.run("0.0.1")?;
// sleep here simulator your program
std::thread::sleep(std::time::Duration::from_secs(3));
// at the end of your program, you can call printstd to print to the STDOUT a alert information for a new version which released
version_context.printstd();
Ok(())
} ```
If you manage your program version internally, you allow to serve the new version with your custom logic via rest API, and upversion
will query your endpoint.
```rs
use anyhow::Result;
use upversion::vendors::Api;
use upversion::CheckVersion;
fn main() -> Result<()> { // server json response: { "version": "", "releasedownloads": [] } let api = Box::new(Api::new("http://127.0.0.1:3000")); let timeout = 2; // in seconds let versioncontext = CheckVersion::new("app-name", api, timeout)?;
// run command execute upversion check in the background and finish immediately.
version_context.run("0.0.1")?;
// sleep here simulator your program
std::thread::sleep(std::time::Duration::from_secs(3));
// at the end of your program, you can call printstd to print to the STDOUT a alert information for a new version which released
version_context.printstd();
Ok(())
} ```
You can find more example here, or run via cargo cargo run --example
Customize alert message with your owned template
rs
const CUSTOM_TEMPLATE: &str = r#"==> [CUSTOM_TEMPLATE]:: 🙆♂️ Newer {{ app_name }} version available: {{ new_version }} (currently running: {{ current_version }}) {% if download_link %}| Link: {{ download_link }} {% endif %}"#;
...
version_context.printstd_with_template(CUSTOM_TEMPLATE);
To all Contributors - you make this happen, thanks!
Copyright (c) 2022 @kaplanelad. See LICENSE for further details.