Crate self_update_danger_no_ssl_verify

Source
Expand description

Build status Build Status crates.io:clin docs

self_update provides updaters for updating rust executables in-place from various release distribution backends.

§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 activate the feature(s) needed by your release files.

§Example

Run the following example to see self_update in action:

cargo run --example github --features "archive-tar archive-zip compression-flate2 compression-zip-deflate".

There’s also an equivalent example for gitlab:

cargo run --example gitlab --features "archive-tar archive-zip compression-flate2 compression-zip-deflate".

which runs something roughly equivalent to:

use self_update_danger_no_ssl_verify::cargo_crate_version;

fn update() -> Result<(), Box<::std::error::Error>> {
    let status = self_update_danger_no_ssl_verify::backends::github::Update::configure()
        .repo_owner("jaemk")
        .repo_name("self_update")
        .bin_name("github")
        .show_download_progress(true)
        .current_version(cargo_crate_version!())
        .build()?
        .update()?;
    println!("Update status: `{}`!", status.version());
    Ok(())
}

Amazon S3, Google GCS, and DigitalOcean Spaces are also supported through the S3 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: [directory/]<asset name>-<semver>-<platform/target>.<extension>. Leading directories will be stripped from the file name allowing the use of subdirectories in the S3 bucket, and any file not matching the format, or not matching the provided prefix string, will be ignored.

use self_update_danger_no_ssl_verify::cargo_crate_version;

fn update() -> Result<(), Box<::std::error::Error>> {
    let status = self_update_danger_no_ssl_verify::backends::s3::Update::configure()
        .bucket_name("self_update_releases")
        .asset_prefix("something/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_danger_no_ssl_verify::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 = tempfile::Builder::new()
            .prefix("self_update")
            .tempdir_in(::std::env::current_dir()?)?;
    let tmp_tarball_path = tmp_dir.path().join(&asset.name);
    let tmp_tarball = ::std::fs::File::open(&tmp_tarball_path)?;

    self_update_danger_no_ssl_verify::Download::from_url(&asset.download_url)
        .set_header(reqwest::header::ACCEPT, "application/octet-stream".parse()?)
        .download_to(&tmp_tarball)?;

    let bin_name = std::path::PathBuf::from("self_update_bin");
    self_update_danger_no_ssl_verify::Extract::from_source(&tmp_tarball_path)
        .archive(self_update_danger_no_ssl_verify::ArchiveKind::Tar(Some(self_update_danger_no_ssl_verify::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_danger_no_ssl_verify::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 MAJOR.MINOR.PATCH_PKGVERSION_PRE

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

Constants§

DEFAULT_PROGRESS_CHARS
DEFAULT_PROGRESS_TEMPLATE

Functions§

get_target
Get the current target triple.
should_updateDeprecated
Check if a version tag is greater than the current

Type Aliases§

GetArchiveReaderResult