rusty-ferris-club / upversion

notify your clients when new version release and show the latest download link

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build

🏷️ keep your client up to date
πŸ™ˆ Run in the background
βŒ› Limit background task


upversion

upversion provides you to notify your clients when new version released and show the latest download link.

$ ./test-tool
==> πŸ™†β€β™‚οΈ Newer <tool-name> version available: <user-version> (currently running: 0.5.2) | Link: <dynamic-link>

How it works

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

Usage

Add this to Cargo.toml:

[dependencies]
upversion = { version = "0.1" }

Vendor

  • GitHub releases
  • Custom RestAPI

Github Example:

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(())
}

Custom API:

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.

use anyhow::Result;
use upversion::vendors::Api;
use upversion::CheckVersion;

fn main() -> Result<()> {
    // server json response: { "version": "", "release_downloads": [] }
    let api = Box::new(Api::new("http://127.0.0.1:3000"));
    let timeout = 2; // in seconds
    let version_context = 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(())
}

More example

You can find more example here, or run via cargo cargo run --example

Customize Template

Customize alert message with your owned template

    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);

Thanks

To all Contributors - you make this happen, thanks!

Copyright

Copyright (c) 2022 @kaplanelad. See LICENSE for further details.

About

notify your clients when new version release and show the latest download link

License:Apache License 2.0


Languages

Language:Rust 100.0%