Crate self_update [−] [src]
self_update
provides updaters for updating rust executables in-place from various release
distribution backends.
self_update = "0.3"
Usage
Update (replace) the current executable with the latest release downloaded
from https://api.github.com/repos/jaemk/self_update/releases/latest
#[macro_use] extern crate self_update; fn update() -> Result<(), Box<::std::error::Error>> { let target = self_update::get_target()?; let status = self_update::backends::github::UpdateLatest::configure()? .repo_owner("jaemk") .repo_name("self_update") .target(&target) .bin_name("self_update_example") .show_download_progress(true) .current_version(cargo_crate_version!()) .build()? .update()?; println!("Update status: `v{}`!", status.version()); Ok(()) }
Run the above example to see self_update
in action: cargo run --example github
Separate utilities are also exposed:
extern crate self_update; fn update() -> Result<(), Box<::std::error::Error>> { let target = self_update::get_target()?; let releases = self_update::backends::github::ReleaseList::configure() .repo_owner("jaemk") .repo_name("self_update") .with_target(&target) .build()? .fetch()?; println!("found releases:"); println!("{:#?}\n", releases); // get the first available release let asset = releases[0] .asset_for(&target).unwrap(); let tmp_dir = self_update::TempDir::new_in(::std::env::current_dir()?, "self_update")?; let tmp_tarball_path = tmp_dir.path().join(&asset.name); let tmp_tarball = ::std::fs::File::open(&tmp_tarball_path)?; self_update::Download::from_url(&asset.download_url) .download_to(&tmp_tarball)?; self_update::Extract::from_source(&tmp_tarball_path) .archive(self_update::ArchiveKind::Tar) .encoding(self_update::EncodingKind::Gz) .extract_into(&tmp_dir.path())?; let tmp_file = tmp_dir.path().join("replacement_tmp"); let bin_name = "self_update_bin"; let bin_path = tmp_dir.path().join(bin_name); self_update::Move::from_source(&bin_path) .replace_using_temp(&tmp_file) .to_dest(&::std::env::current_exe()?)?; Ok(()) }
Modules
backends |
Collection of modules supporting various release distribution backends |
errors |
Error type, conversions, and macros |
macros |
Macros
cargo_crate_version |
Allows you to pull the version from your Cargo.toml at compile time as
|
Structs
Download |
Download things into files |
Extract |
Extract contents of an encoded archive (e.g. tar.gz) file to a specified directory |
Move |
Moves a file from the given path to the specified destination. |
TempDir |
A directory in the filesystem that is automatically deleted when it goes out of scope. |
Enums
ArchiveKind |
Supported archive formats |
EncodingKind |
Supported encoding formats |
Status |
Status returned after updating |
Functions
get_target |
Try to determine the current target triple. |
should_update |
Check if the latest version tag is greater than the current |