c740f84336
* Use unstable explorer client * Clean up stale testruns & logging - log gw identity key - better agent testrun logging - log responses - change response code for agents * Better logging on agent * Testrun stores gw identity key instead of gw pk * Agent 0.1.3 * Agent 0.1.4 * Sqlx offline query data + clippy * Compatible with directory v2 * Point to internal deps + rebase + v0.1.5 * self described field not null * Fix build.rs typo
46 lines
1.6 KiB
Rust
46 lines
1.6 KiB
Rust
use anyhow::{anyhow, Result};
|
|
use sqlx::{Connection, SqliteConnection};
|
|
use std::fs::Permissions;
|
|
use std::os::unix::fs::PermissionsExt;
|
|
use tokio::{fs::File, io::AsyncWriteExt};
|
|
|
|
const SQLITE_DB_FILENAME: &str = "nym-node-status-api.sqlite";
|
|
|
|
/// If you need to re-run migrations or reset the db, just run
|
|
/// cargo clean -p nym-node-status-api
|
|
#[tokio::main(flavor = "current_thread")]
|
|
async fn main() -> Result<()> {
|
|
let out_dir = read_env_var("OUT_DIR")?;
|
|
let database_path = format!("{}/{}?mode=rwc", out_dir, SQLITE_DB_FILENAME);
|
|
|
|
write_db_path_to_file(&out_dir, SQLITE_DB_FILENAME).await?;
|
|
let mut conn = SqliteConnection::connect(&database_path).await?;
|
|
sqlx::migrate!("./migrations").run(&mut conn).await?;
|
|
|
|
#[cfg(target_family = "unix")]
|
|
println!("cargo::rustc-env=DATABASE_URL=sqlite://{}", &database_path);
|
|
|
|
#[cfg(target_family = "windows")]
|
|
// for some strange reason we need to add a leading `/` to the windows path even though it's
|
|
// not a valid windows path... but hey, it works...
|
|
println!("cargo::rustc-env=DATABASE_URL=sqlite:///{}", &database_path);
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn read_env_var(var: &str) -> Result<String> {
|
|
std::env::var(var).map_err(|_| anyhow!("You need to set {} env var", var))
|
|
}
|
|
|
|
/// use `./enter_db.sh` to inspect DB
|
|
async fn write_db_path_to_file(out_dir: &str, db_filename: &str) -> anyhow::Result<()> {
|
|
let mut file = File::create("enter_db.sh").await?;
|
|
let _ = file.write(b"#!/bin/bash\n").await?;
|
|
file.write_all(format!("sqlite3 {}/{}", out_dir, db_filename).as_bytes())
|
|
.await?;
|
|
|
|
file.set_permissions(Permissions::from_mode(0o755))
|
|
.await
|
|
.map_err(From::from)
|
|
}
|