Skip to content

Commit

Permalink
feat: use prebuilt grovedbg (#318)
Browse files Browse the repository at this point in the history
* use prebuilt grovedbg
  • Loading branch information
fominok authored Jul 15, 2024
1 parent 7765aa9 commit ab80246
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 31 deletions.
4 changes: 0 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -237,10 +237,6 @@ From here we can build:
There is a work in progress implementation of a debugger layer for GroveDB. To use this library with
these capabilities enabled one needs to set a dependency with `grovedbg` feature.

At build time this requires two environment dependencies:
1. `wasm32-unknown-unknown` Rust toolchain;
2. [trunk](https://trunkrs.dev/) utility.

Then, to launch visualizer tool to observe the database structure inside of your browser on a port,
let's say 10000, the following snippet should do:

Expand Down
4 changes: 3 additions & 1 deletion grovedb/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,6 @@ grovedbg = [
]

[build-dependencies]
zip-extensions = "0.6.2"
hex-literal = "0.4.1"
reqwest = { version = "0.12.5", features = ["blocking"] }
sha2 = "0.10.8"
49 changes: 23 additions & 26 deletions grovedb/build.rs
Original file line number Diff line number Diff line change
@@ -1,36 +1,33 @@
#[cfg(feature = "grovedbg")]
fn main() {
use std::{
env,
path::PathBuf,
process::{Command, ExitStatus, Output},
};
use std::{env, fs::File, io::Cursor, path::PathBuf};

use hex_literal::hex;
use sha2::{digest::FixedOutput, Digest, Sha256};

const GROVEDBG_SHA256: [u8; 32] =
hex!("206d865949e7f12b843c342cea3b172d4c78d4eb754b80d272164d59f62a2276");
const GROVEDBG_VERSION: &str = "v1.0.0-rc.3";

let out_dir = PathBuf::from(&env::var_os("OUT_DIR").unwrap());
let grovedbg_zip_path = out_dir.join("grovedbg.zip");

if !grovedbg_zip_path.exists() {
let response = reqwest::blocking::get(format!("https://github.com/dashpay/grovedbg/releases/download/{GROVEDBG_VERSION}/grovedbg-{GROVEDBG_VERSION}.zip"))
.expect("can't download GroveDBG artifact");

let Output {
status,
stdout,
stderr,
} = Command::new("trunk")
.arg("build")
.arg("--release")
.arg("--dist")
.arg(&out_dir)
.arg("grovedbg/index.html")
.output()
.expect("cannot start trunk process");

if !status.success() {
let stdout_msg = String::from_utf8_lossy(&stdout);
let stderr_msg = String::from_utf8_lossy(&stderr);
let bindgen_version = env::var_os("TRUNK_TOOLS_WASM_BINDGEN").unwrap_or_default();
panic!("Error running `trunk build --release`\nbindgen version:{bindgen_version:?}\n{stdout_msg}\n{stderr_msg}");
let mut grovedbg_zip = File::create(&grovedbg_zip_path).unwrap();
let mut content = Cursor::new(response.bytes().unwrap());
std::io::copy(&mut content, &mut grovedbg_zip).unwrap();
}

let zip_file = out_dir.join("grovedbg.zip");
zip_extensions::write::zip_create_from_directory(&zip_file, &out_dir)
.expect("can't create a grovedbg zip archive");
let mut grovedbg_zip = File::open(&grovedbg_zip_path).unwrap();

let mut sha256 = Sha256::new();
std::io::copy(&mut grovedbg_zip, &mut sha256).unwrap();
let hash = sha256.finalize_fixed();

assert_eq!(hash.as_slice(), GROVEDBG_SHA256);
}

#[cfg(not(feature = "grovedbg"))]
Expand Down

0 comments on commit ab80246

Please sign in to comment.