Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: use prebuilt grovedbg #318

Merged
merged 4 commits into from
Jul 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
6 changes: 4 additions & 2 deletions grovedb/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ nohash-hasher = { version = "0.2.0", optional = true }
indexmap = { version = "2.2.6"}
intmap = { version = "2.0.0", optional = true }
grovedb-path = { version = "1.0.0-rc.2", path = "../path" }
grovedbg-types = { path = "../grovedbg-types", optional = true }
grovedbg-types = { version = "1.0.0-rc.2", path = "../grovedbg-types", optional = true }
tokio = { version = "1.37.0", features = ["rt-multi-thread", "net"], optional = true }
axum = { version = "0.7.5", features = ["macros"], optional = true }
tower-http = { version = "0.5.2", features = ["fs"], optional = true }
Expand Down 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
6 changes: 5 additions & 1 deletion grovedbg-types/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
[package]
name = "grovedbg-types"
version = "0.1.0"
version = "1.0.0-rc.2"
edition = "2021"
description = "Common type definitions for data exchange over GroveDBG protocol"
authors = ["Evgeny Fomin <[email protected]>"]
license = "MIT"
repository = "https://github.com/dashpay/grovedb"

[dependencies]
serde = { version = "1.0.201", features = ["derive"] }
Loading