update env vars to match other repos, make dry (#4321)
* update env vars to match other repos, make dry Signed-off-by: Jess Frazelle <github@jessfraz.com> * bump Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
4
src/wasm-lib/Cargo.lock
generated
4
src/wasm-lib/Cargo.lock
generated
@ -1542,7 +1542,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kcl-lib"
|
name = "kcl-lib"
|
||||||
version = "0.2.22"
|
version = "0.2.23"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"approx 0.5.1",
|
"approx 0.5.1",
|
||||||
@ -1617,7 +1617,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kcl-test-server"
|
name = "kcl-test-server"
|
||||||
version = "0.1.14"
|
version = "0.1.15"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"hyper 0.14.30",
|
"hyper 0.14.30",
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "kcl-test-server"
|
name = "kcl-test-server"
|
||||||
description = "A test server for KCL"
|
description = "A test server for KCL"
|
||||||
version = "0.1.14"
|
version = "0.1.15"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ pub struct ServerArgs {
|
|||||||
/// Where to find the engine.
|
/// Where to find the engine.
|
||||||
/// If none, uses the prod engine.
|
/// If none, uses the prod engine.
|
||||||
/// This is useful for testing a local engine instance.
|
/// This is useful for testing a local engine instance.
|
||||||
/// Overridden by the $LOCAL_ENGINE_ADDR environment variable.
|
/// Overridden by the $ZOO_HOST environment variable.
|
||||||
pub engine_address: Option<String>,
|
pub engine_address: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,8 +44,8 @@ impl ServerArgs {
|
|||||||
num_engine_conns: pargs.opt_value_from_str("--num-engine-conns")?.unwrap_or(1),
|
num_engine_conns: pargs.opt_value_from_str("--num-engine-conns")?.unwrap_or(1),
|
||||||
engine_address: pargs.opt_value_from_str("--engine-address")?,
|
engine_address: pargs.opt_value_from_str("--engine-address")?,
|
||||||
};
|
};
|
||||||
if let Ok(addr) = std::env::var("LOCAL_ENGINE_ADDR") {
|
if let Ok(addr) = std::env::var("ZOO_HOST") {
|
||||||
println!("Overriding engine address via $LOCAL_ENGINE_ADDR");
|
println!("Overriding engine address via $ZOO_HOST");
|
||||||
args.engine_address = Some(addr);
|
args.engine_address = Some(addr);
|
||||||
}
|
}
|
||||||
println!("Config is {args:?}");
|
println!("Config is {args:?}");
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "kcl-lib"
|
name = "kcl-lib"
|
||||||
description = "KittyCAD Language implementation and tools"
|
description = "KittyCAD Language implementation and tools"
|
||||||
version = "0.2.22"
|
version = "0.2.23"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://github.com/KittyCAD/modeling-app"
|
repository = "https://github.com/KittyCAD/modeling-app"
|
||||||
|
@ -1980,9 +1980,73 @@ impl From<crate::settings::types::ModelingSettings> for ExecutorSettings {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a new zoo api client.
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
pub fn new_zoo_client(token: Option<String>, engine_addr: Option<String>) -> Result<kittycad::Client> {
|
||||||
|
let user_agent = concat!(env!("CARGO_PKG_NAME"), ".rs/", env!("CARGO_PKG_VERSION"),);
|
||||||
|
let http_client = reqwest::Client::builder()
|
||||||
|
.user_agent(user_agent)
|
||||||
|
// For file conversions we need this to be long.
|
||||||
|
.timeout(std::time::Duration::from_secs(600))
|
||||||
|
.connect_timeout(std::time::Duration::from_secs(60));
|
||||||
|
let ws_client = reqwest::Client::builder()
|
||||||
|
.user_agent(user_agent)
|
||||||
|
// For file conversions we need this to be long.
|
||||||
|
.timeout(std::time::Duration::from_secs(600))
|
||||||
|
.connect_timeout(std::time::Duration::from_secs(60))
|
||||||
|
.connection_verbose(true)
|
||||||
|
.tcp_keepalive(std::time::Duration::from_secs(600))
|
||||||
|
.http1_only();
|
||||||
|
|
||||||
|
let zoo_token_env = std::env::var("ZOO_API_TOKEN");
|
||||||
|
|
||||||
|
let token = if let Some(token) = token {
|
||||||
|
token
|
||||||
|
} else if let Ok(token) = std::env::var("KITTYCAD_API_TOKEN") {
|
||||||
|
if let Ok(zoo_token) = zoo_token_env {
|
||||||
|
if zoo_token != token {
|
||||||
|
return Err(anyhow::anyhow!(
|
||||||
|
"Both environment variables KITTYCAD_API_TOKEN=`{}` and ZOO_API_TOKEN=`{}` are set. Use only one.",
|
||||||
|
token,
|
||||||
|
zoo_token
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
token
|
||||||
|
} else if let Ok(token) = zoo_token_env {
|
||||||
|
token
|
||||||
|
} else {
|
||||||
|
return Err(anyhow::anyhow!(
|
||||||
|
"No API token found in environment variables. Use KITTYCAD_API_TOKEN or ZOO_API_TOKEN"
|
||||||
|
));
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create the client.
|
||||||
|
let mut client = kittycad::Client::new_from_reqwest(token, http_client, ws_client);
|
||||||
|
// Set an engine address if it's set.
|
||||||
|
let kittycad_host_env = std::env::var("KITTYCAD_HOST");
|
||||||
|
if let Some(addr) = engine_addr {
|
||||||
|
client.set_base_url(addr);
|
||||||
|
} else if let Ok(addr) = std::env::var("ZOO_HOST") {
|
||||||
|
if let Ok(kittycad_host) = kittycad_host_env {
|
||||||
|
if kittycad_host != addr {
|
||||||
|
return Err(anyhow::anyhow!(
|
||||||
|
"Both environment variables KITTYCAD_HOST=`{}` and ZOO_HOST=`{}` are set. Use only one.",
|
||||||
|
kittycad_host,
|
||||||
|
addr
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
client.set_base_url(addr);
|
||||||
|
} else if let Ok(addr) = kittycad_host_env {
|
||||||
|
client.set_base_url(addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(client)
|
||||||
|
}
|
||||||
|
|
||||||
impl ExecutorContext {
|
impl ExecutorContext {
|
||||||
/// Create a new default executor context.
|
/// Create a new default executor context.
|
||||||
/// Also returns the response HTTP headers from the server.
|
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
pub async fn new(client: &kittycad::Client, settings: ExecutorSettings) -> Result<Self> {
|
pub async fn new(client: &kittycad::Client, settings: ExecutorSettings) -> Result<Self> {
|
||||||
let (ws, _headers) = client
|
let (ws, _headers) = client
|
||||||
@ -2027,6 +2091,35 @@ impl ExecutorContext {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a new default executor context.
|
||||||
|
/// With a kittycad client.
|
||||||
|
/// This allows for passing in `ZOO_API_TOKEN` and `ZOO_HOST` as environment
|
||||||
|
/// variables.
|
||||||
|
/// But also allows for passing in a token and engine address directly.
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
pub async fn new_with_client(
|
||||||
|
settings: ExecutorSettings,
|
||||||
|
token: Option<String>,
|
||||||
|
engine_addr: Option<String>,
|
||||||
|
) -> Result<Self> {
|
||||||
|
// Create the client.
|
||||||
|
let client = new_zoo_client(token, engine_addr)?;
|
||||||
|
|
||||||
|
let ctx = Self::new(&client, settings).await?;
|
||||||
|
Ok(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a new default executor context.
|
||||||
|
/// With the default kittycad client.
|
||||||
|
/// This allows for passing in `ZOO_API_TOKEN` and `ZOO_HOST` as environment
|
||||||
|
/// variables.
|
||||||
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
|
pub async fn new_with_default_client(settings: ExecutorSettings) -> Result<Self> {
|
||||||
|
// Create the client.
|
||||||
|
let ctx = Self::new_with_client(settings, None, None).await?;
|
||||||
|
Ok(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn is_mock(&self) -> bool {
|
pub fn is_mock(&self) -> bool {
|
||||||
self.context_type == ContextType::Mock || self.context_type == ContextType::MockCustomForwarded
|
self.context_type == ContextType::Mock || self.context_type == ContextType::MockCustomForwarded
|
||||||
}
|
}
|
||||||
@ -2034,35 +2127,7 @@ impl ExecutorContext {
|
|||||||
/// For executing unit tests.
|
/// For executing unit tests.
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
pub async fn new_for_unit_test(units: UnitLength, engine_addr: Option<String>) -> Result<Self> {
|
pub async fn new_for_unit_test(units: UnitLength, engine_addr: Option<String>) -> Result<Self> {
|
||||||
let user_agent = concat!(env!("CARGO_PKG_NAME"), ".rs/", env!("CARGO_PKG_VERSION"));
|
let ctx = ExecutorContext::new_with_client(
|
||||||
let http_client = reqwest::Client::builder()
|
|
||||||
.user_agent(user_agent)
|
|
||||||
// For file conversions we need this to be long.
|
|
||||||
.timeout(std::time::Duration::from_secs(600))
|
|
||||||
.connect_timeout(std::time::Duration::from_secs(60));
|
|
||||||
let ws_client = reqwest::Client::builder()
|
|
||||||
.user_agent(user_agent)
|
|
||||||
// For file conversions we need this to be long.
|
|
||||||
.timeout(std::time::Duration::from_secs(600))
|
|
||||||
.connect_timeout(std::time::Duration::from_secs(60))
|
|
||||||
.connection_verbose(true)
|
|
||||||
.tcp_keepalive(std::time::Duration::from_secs(600))
|
|
||||||
.http1_only();
|
|
||||||
|
|
||||||
let token = std::env::var("KITTYCAD_API_TOKEN").expect("KITTYCAD_API_TOKEN not set");
|
|
||||||
|
|
||||||
// Create the client.
|
|
||||||
let mut client = kittycad::Client::new_from_reqwest(token, http_client, ws_client);
|
|
||||||
// Set a local engine address if it's set.
|
|
||||||
if let Ok(addr) = std::env::var("LOCAL_ENGINE_ADDR") {
|
|
||||||
client.set_base_url(addr);
|
|
||||||
}
|
|
||||||
if let Some(addr) = engine_addr {
|
|
||||||
client.set_base_url(addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
let ctx = ExecutorContext::new(
|
|
||||||
&client,
|
|
||||||
ExecutorSettings {
|
ExecutorSettings {
|
||||||
units,
|
units,
|
||||||
highlight_edges: true,
|
highlight_edges: true,
|
||||||
@ -2070,6 +2135,8 @@ impl ExecutorContext {
|
|||||||
show_grid: false,
|
show_grid: false,
|
||||||
replay: None,
|
replay: None,
|
||||||
},
|
},
|
||||||
|
None,
|
||||||
|
engine_addr,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(ctx)
|
Ok(ctx)
|
||||||
|
@ -3,41 +3,13 @@ use std::sync::{Arc, RwLock};
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use tower_lsp::LanguageServer;
|
use tower_lsp::LanguageServer;
|
||||||
|
|
||||||
fn new_zoo_client() -> kittycad::Client {
|
|
||||||
let user_agent = concat!(env!("CARGO_PKG_NAME"), ".rs/", env!("CARGO_PKG_VERSION"),);
|
|
||||||
let http_client = reqwest::Client::builder()
|
|
||||||
.user_agent(user_agent)
|
|
||||||
// For file conversions we need this to be long.
|
|
||||||
.timeout(std::time::Duration::from_secs(600))
|
|
||||||
.connect_timeout(std::time::Duration::from_secs(60));
|
|
||||||
let ws_client = reqwest::Client::builder()
|
|
||||||
.user_agent(user_agent)
|
|
||||||
// For file conversions we need this to be long.
|
|
||||||
.timeout(std::time::Duration::from_secs(600))
|
|
||||||
.connect_timeout(std::time::Duration::from_secs(60))
|
|
||||||
.connection_verbose(true)
|
|
||||||
.tcp_keepalive(std::time::Duration::from_secs(600))
|
|
||||||
.http1_only();
|
|
||||||
|
|
||||||
let token = std::env::var("KITTYCAD_API_TOKEN").expect("KITTYCAD_API_TOKEN not set");
|
|
||||||
|
|
||||||
// Create the client.
|
|
||||||
let mut client = kittycad::Client::new_from_reqwest(token, http_client, ws_client);
|
|
||||||
// Set a local engine address if it's set.
|
|
||||||
if let Ok(addr) = std::env::var("LOCAL_ENGINE_ADDR") {
|
|
||||||
client.set_base_url(addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
client
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a fake kcl lsp server for testing.
|
// Create a fake kcl lsp server for testing.
|
||||||
pub async fn kcl_lsp_server(execute: bool) -> Result<crate::lsp::kcl::Backend> {
|
pub async fn kcl_lsp_server(execute: bool) -> Result<crate::lsp::kcl::Backend> {
|
||||||
let stdlib = crate::std::StdLib::new();
|
let stdlib = crate::std::StdLib::new();
|
||||||
let stdlib_completions = crate::lsp::kcl::get_completions_from_stdlib(&stdlib)?;
|
let stdlib_completions = crate::lsp::kcl::get_completions_from_stdlib(&stdlib)?;
|
||||||
let stdlib_signatures = crate::lsp::kcl::get_signatures_from_stdlib(&stdlib)?;
|
let stdlib_signatures = crate::lsp::kcl::get_signatures_from_stdlib(&stdlib)?;
|
||||||
|
|
||||||
let zoo_client = new_zoo_client();
|
let zoo_client = crate::executor::new_zoo_client(None, None)?;
|
||||||
|
|
||||||
let executor_ctx = if execute {
|
let executor_ctx = if execute {
|
||||||
Some(crate::executor::ExecutorContext::new(&zoo_client, Default::default()).await?)
|
Some(crate::executor::ExecutorContext::new(&zoo_client, Default::default()).await?)
|
||||||
|
@ -43,38 +43,7 @@ async fn do_execute_and_snapshot(ctx: &ExecutorContext, code: &str) -> anyhow::R
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn new_context(units: UnitLength, with_auth: bool) -> anyhow::Result<ExecutorContext> {
|
async fn new_context(units: UnitLength, with_auth: bool) -> anyhow::Result<ExecutorContext> {
|
||||||
let user_agent = concat!(env!("CARGO_PKG_NAME"), ".rs/", env!("CARGO_PKG_VERSION"),);
|
let ctx = ExecutorContext::new_with_client(
|
||||||
let http_client = reqwest::Client::builder()
|
|
||||||
.user_agent(user_agent)
|
|
||||||
// For file conversions we need this to be long.
|
|
||||||
.timeout(std::time::Duration::from_secs(600))
|
|
||||||
.connect_timeout(std::time::Duration::from_secs(60));
|
|
||||||
let ws_client = reqwest::Client::builder()
|
|
||||||
.user_agent(user_agent)
|
|
||||||
// For file conversions we need this to be long.
|
|
||||||
.timeout(std::time::Duration::from_secs(600))
|
|
||||||
.connect_timeout(std::time::Duration::from_secs(60))
|
|
||||||
.connection_verbose(true)
|
|
||||||
.tcp_keepalive(std::time::Duration::from_secs(600))
|
|
||||||
.http1_only();
|
|
||||||
|
|
||||||
let token = if with_auth {
|
|
||||||
std::env::var("KITTYCAD_API_TOKEN").expect("KITTYCAD_API_TOKEN not set")
|
|
||||||
} else {
|
|
||||||
"bad_token".to_string()
|
|
||||||
};
|
|
||||||
|
|
||||||
// Create the client.
|
|
||||||
let mut client = kittycad::Client::new_from_reqwest(token, http_client, ws_client);
|
|
||||||
// Set a local engine address if it's set.
|
|
||||||
if let Ok(addr) = std::env::var("LOCAL_ENGINE_ADDR") {
|
|
||||||
if with_auth {
|
|
||||||
client.set_base_url(addr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let ctx = ExecutorContext::new(
|
|
||||||
&client,
|
|
||||||
ExecutorSettings {
|
ExecutorSettings {
|
||||||
units,
|
units,
|
||||||
highlight_edges: true,
|
highlight_edges: true,
|
||||||
@ -82,6 +51,8 @@ async fn new_context(units: UnitLength, with_auth: bool) -> anyhow::Result<Execu
|
|||||||
show_grid: false,
|
show_grid: false,
|
||||||
replay: None,
|
replay: None,
|
||||||
},
|
},
|
||||||
|
if with_auth { None } else { Some("bad_token".to_string()) },
|
||||||
|
None,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
Ok(ctx)
|
Ok(ctx)
|
||||||
|
@ -8,33 +8,10 @@ use pretty_assertions::assert_eq;
|
|||||||
|
|
||||||
/// Setup the engine and parse code for an ast.
|
/// Setup the engine and parse code for an ast.
|
||||||
async fn setup(code: &str, name: &str) -> Result<(ExecutorContext, Program, uuid::Uuid)> {
|
async fn setup(code: &str, name: &str) -> Result<(ExecutorContext, Program, uuid::Uuid)> {
|
||||||
let user_agent = concat!(env!("CARGO_PKG_NAME"), ".rs/", env!("CARGO_PKG_VERSION"),);
|
|
||||||
let http_client = reqwest::Client::builder()
|
|
||||||
.user_agent(user_agent)
|
|
||||||
// For file conversions we need this to be long.
|
|
||||||
.timeout(std::time::Duration::from_secs(600))
|
|
||||||
.connect_timeout(std::time::Duration::from_secs(60));
|
|
||||||
let ws_client = reqwest::Client::builder()
|
|
||||||
.user_agent(user_agent)
|
|
||||||
// For file conversions we need this to be long.
|
|
||||||
.timeout(std::time::Duration::from_secs(600))
|
|
||||||
.connect_timeout(std::time::Duration::from_secs(60))
|
|
||||||
.tcp_keepalive(std::time::Duration::from_secs(600))
|
|
||||||
.http1_only();
|
|
||||||
|
|
||||||
let token = std::env::var("KITTYCAD_API_TOKEN").expect("KITTYCAD_API_TOKEN not set");
|
|
||||||
|
|
||||||
// Create the client.
|
|
||||||
let mut client = kittycad::Client::new_from_reqwest(token, http_client, ws_client);
|
|
||||||
// Set a local engine address if it's set.
|
|
||||||
if let Ok(addr) = std::env::var("LOCAL_ENGINE_ADDR") {
|
|
||||||
client.set_base_url(addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
let tokens = kcl_lib::token::lexer(code)?;
|
let tokens = kcl_lib::token::lexer(code)?;
|
||||||
let parser = kcl_lib::parser::Parser::new(tokens);
|
let parser = kcl_lib::parser::Parser::new(tokens);
|
||||||
let program = parser.ast()?;
|
let program = parser.ast()?;
|
||||||
let ctx = kcl_lib::executor::ExecutorContext::new(&client, Default::default()).await?;
|
let ctx = kcl_lib::executor::ExecutorContext::new_with_default_client(Default::default()).await?;
|
||||||
let exec_state = ctx.run(&program, None, IdGenerator::default(), None).await?;
|
let exec_state = ctx.run(&program, None, IdGenerator::default(), None).await?;
|
||||||
|
|
||||||
// We need to get the sketch ID.
|
// We need to get the sketch ID.
|
||||||
|
Reference in New Issue
Block a user