load mini-dashboard assets

This commit is contained in:
Marin Postma 2021-04-20 15:20:09 +02:00
parent ea5517bc8c
commit bb79695e44
No known key found for this signature in database
GPG key ID: D5241F0C0C865F30
3 changed files with 210 additions and 7 deletions

View file

@ -10,7 +10,13 @@ name = "meilisearch"
path = "src/main.rs"
[build-dependencies]
anyhow = "*"
cargo_toml = "0.9.0"
hex = "0.4.3"
reqwest = { version = "0.11.3", features = ["blocking", "rustls-tls"], default-features = false}
sha-1 = "0.9.4"
vergen = "3.1.0"
zip = "0.5.12"
[dependencies]
actix-cors = "0.6.0-beta.1"
@ -96,3 +102,7 @@ default = ["sentry"]
[target.'cfg(target_os = "linux")'.dependencies]
jemallocator = "0.3.2"
[package.metadata.mini-dashboard]
assets-url = "https://github.com/meilisearch/mini-dashboard/releases/download/v0.1.0/build.zip"
sha1 = "abb7bd8765b9fab38675958bc9d06088589c712c"

View file

@ -1,6 +1,14 @@
use std::env;
use std::fs::create_dir_all;
use std::io::Cursor;
use std::path::PathBuf;
use anyhow::Context;
use sha1::{Sha1, Digest};
use reqwest::blocking::get;
use vergen::{generate_cargo_keys, ConstantsFlags};
use cargo_toml::Manifest;
fn main() {
// Setup the flags, toggling off the 'SEMVER_FROM_CARGO_PKG' flag
@ -11,6 +19,40 @@ fn main() {
generate_cargo_keys(ConstantsFlags::all()).expect("Unable to generate the cargo keys!");
if let Ok(_) = env::var("CARGO_FEATURE_MINI_DASHBOARD") {
todo!()
setup_mini_dashboard().expect("Could not load mini-dashboard assets");
}
}
fn setup_mini_dashboard() -> anyhow::Result<()> {
let cargo_manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
let cargo_toml = cargo_manifest_dir.join("Cargo.toml");
let manifest = Manifest::from_path(cargo_toml).unwrap();
let meta = &manifest
.package
.as_ref()
.context("package not specified in Cargo.toml")?
.metadata
.as_ref()
.context("no metadata specified in Cargo.toml")?
["mini-dashboard"];
let url = meta["assets-url"].as_str().unwrap();
let dashboard_assets_bytes = get(url)?
.bytes()?;
let mut hasher = Sha1::new();
hasher.update(&dashboard_assets_bytes);
let sha1_dashboard = hex::encode(hasher.finalize());
assert_eq!(meta["sha1"].as_str().unwrap(), sha1_dashboard);
let dashboard_dir = cargo_manifest_dir.join("mini-dashboard");
create_dir_all(&dashboard_dir)?;
let cursor = Cursor::new(&dashboard_assets_bytes);
let mut zip = zip::read::ZipArchive::new(cursor)?;
zip.extract(&dashboard_dir)?;
Ok(())
}