[−][src]Crate self_update
self_update
provides updaters for updating rust executables in-place from various release
distribution backends.
self_update = "0.13"
Usage
Update (replace) the current executable with the latest release downloaded
from https://api.github.com/repos/jaemk/self_update/releases/latest
.
Note, the trust
project provides a nice setup for
producing release-builds via CI (travis/appveyor).
Features
The following cargo features are available (but disabled by default):
archive-tar
: Support for tar archive format;archive-zip
: Support for zip archive format;compression-flate2
: Support for gzip compression;compression-zip-deflate
: Support for zip's deflate compression format;compression-zip-bzip2
: Support for zip's bzip2 compression format;rustls
: Use pure rust TLS implementation for network requests. This feature does not support 32bit macOS;
Please active the feature(s) needed by your release files.
Example
use self_update::cargo_crate_version; fn update() -> Result<(), Box<::std::error::Error>> { let status = self_update::backends::github::Update::configure() .repo_owner("jaemk") .repo_name("self_update") .bin_name("self_update_example") .show_download_progress(true) .current_version(cargo_crate_version!()) .build()? .update()?; println!("Update status: `{}`!", status.version()); Ok(()) }
Run the above example to see self_update
in action: cargo run --example github --features "archive-tar compression-flate2"
Amazon S3 is also supported as the backend to check for new releases. Provided a bucket_name
and asset_prefix
string, self_update
will look up all matching files using the following format
as a convention for the filenames: <asset name>-<semver>-<platform/target>.<extension>
.
Any file not matching the format, or not matching the provided prefix string, will be ignored.
use self_update::cargo_crate_version; fn update() -> Result<(), Box<::std::error::Error>> { let status = self_update::backends::s3::Update::configure() .bucket_name("self_update_releases") .asset_prefix("self_update") .region("eu-west-2") .bin_name("self_update_example") .show_download_progress(true) .current_version(cargo_crate_version!()) .build()? .update()?; println!("S3 Update status: `{}`!", status.version()); Ok(()) }
Separate utilities are also exposed (NOTE: the following example requires the archive-tar
feature,
see the features section above):
fn update() -> Result<(), Box<::std::error::Error>> { let releases = self_update::backends::github::ReleaseList::configure() .repo_owner("jaemk") .repo_name("self_update") .build()? .fetch()?; println!("found releases:"); println!("{:#?}\n", releases); // get the first available release let asset = releases[0] .asset_for(&self_update::get_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)?; let bin_name = std::path::PathBuf::from("self_update_bin"); self_update::Extract::from_source(&tmp_tarball_path) .archive(self_update::ArchiveKind::Tar(Some(self_update::Compression::Gz))) .extract_file(&tmp_dir.path(), &bin_name)?; let tmp_file = tmp_dir.path().join("replacement_tmp"); 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 |
update | |
version | Semver version checks |
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 |
Compression | |
Status | Status returned after updating |
Functions
get_target | Get the current target triple. |
should_update | Deprecated Check if a version tag is greater than the current |
Type Definitions
GetArchiveReaderResult |