refactor(cli): use temp file to communicate IPC websocket address (#6219)

This commit is contained in:
Lucas Fernandes Nogueira 2023-02-08 18:19:34 -08:00 committed by GitHub
parent 481d9de739
commit 894a8d060c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 68 additions and 19 deletions

View File

@ -0,0 +1,6 @@
---
"cli.rs": patch
"cli.js": patch
---
Use temp file instead of environment variable to pass CLI IPC websocket address to the IDE.

View File

@ -161,7 +161,8 @@ pub fn with_config<T>(
let tauri_config = get_tauri_config(None)?;
let tauri_config_guard = tauri_config.lock().unwrap();
let tauri_config_ = tauri_config_guard.as_ref().unwrap();
let cli_options = cli_options.unwrap_or_else(read_options);
let cli_options =
cli_options.unwrap_or_else(|| read_options(&tauri_config_.tauri.bundle.identifier));
let (app, config, metadata) = get_config(None, tauri_config_, &cli_options);
(app, config, metadata, cli_options)
};

View File

@ -4,7 +4,7 @@ use super::{
};
use crate::{
build::Options as BuildOptions,
helpers::flock,
helpers::{config::get as get_config, flock},
interface::{AppSettings, Interface, Options as InterfaceOptions},
mobile::{write_options, CliOptions},
Result,
@ -139,7 +139,17 @@ fn run_build(
noise_level,
vars: Default::default(),
};
let _handle = write_options(cli_options, &mut env.base)?;
let _handle = write_options(
&get_config(options.config.as_deref())?
.lock()
.unwrap()
.as_ref()
.unwrap()
.tauri
.bundle
.identifier,
cli_options,
)?;
options
.features

View File

@ -4,7 +4,7 @@ use super::{
};
use crate::{
dev::Options as DevOptions,
helpers::flock,
helpers::{config::get as get_config, flock},
interface::{AppSettings, Interface, MobileOptions, Options as InterfaceOptions},
mobile::{write_options, CliOptions, DevChild, DevProcess},
Result,
@ -148,14 +148,23 @@ fn run_dev(
no_watch: options.no_watch,
},
|options| {
let mut env = env.clone();
let cli_options = CliOptions {
features: options.features.clone(),
args: options.args.clone(),
noise_level,
vars: Default::default(),
};
let _handle = write_options(cli_options, &mut env.base)?;
let _handle = write_options(
&get_config(options.config.as_deref())?
.lock()
.unwrap()
.as_ref()
.unwrap()
.tauri
.bundle
.identifier,
cli_options,
)?;
if open {
open_and_wait(config, &env)

View File

@ -149,7 +149,8 @@ fn with_config<T>(
let tauri_config = get_tauri_config(None)?;
let tauri_config_guard = tauri_config.lock().unwrap();
let tauri_config_ = tauri_config_guard.as_ref().unwrap();
let cli_options = cli_options.unwrap_or_else(read_options);
let cli_options =
cli_options.unwrap_or_else(|| read_options(&tauri_config_.tauri.bundle.identifier));
let (app, config, metadata) = get_config(None, tauri_config_, &cli_options);
(app, config, metadata, cli_options)
};

View File

@ -4,7 +4,7 @@ use super::{
};
use crate::{
build::Options as BuildOptions,
helpers::flock,
helpers::{config::get as get_config, flock},
interface::{AppSettings, Interface, Options as InterfaceOptions},
mobile::{write_options, CliOptions},
Result,
@ -122,7 +122,17 @@ fn run_build(
noise_level,
vars: Default::default(),
};
let _handle = write_options(cli_options, env)?;
let _handle = write_options(
&get_config(options.config.as_deref())?
.lock()
.unwrap()
.as_ref()
.unwrap()
.tauri
.bundle
.identifier,
cli_options,
)?;
options
.features

View File

@ -4,7 +4,7 @@ use super::{
};
use crate::{
dev::Options as DevOptions,
helpers::flock,
helpers::{config::get as get_config, flock},
interface::{AppSettings, Interface, MobileOptions, Options as InterfaceOptions},
mobile::{write_options, CliOptions, DevChild, DevProcess},
Result,
@ -156,14 +156,23 @@ fn run_dev(
no_watch: options.no_watch,
},
|options| {
let mut env = env.clone();
let cli_options = CliOptions {
features: options.features.clone(),
args: options.args.clone(),
noise_level,
vars: Default::default(),
};
let _handle = write_options(cli_options, &mut env)?;
let _handle = write_options(
&get_config(options.config.as_deref())?
.lock()
.unwrap()
.as_ref()
.unwrap()
.tauri
.bundle
.identifier,
cli_options,
)?;
if open {
open_and_wait(config, &env)

View File

@ -22,11 +22,10 @@ use shared_child::SharedChild;
use std::{
collections::HashMap,
env::set_var,
env::var,
env::{set_var, temp_dir},
ffi::OsString,
fmt::Write,
fs::{create_dir_all, remove_dir_all},
fs::{create_dir_all, read_to_string, remove_dir_all, write},
net::SocketAddr,
path::PathBuf,
process::ExitStatus,
@ -196,8 +195,8 @@ fn env() -> Result<Env, EnvError> {
/// Writes CLI options to be used later on the Xcode and Android Studio build commands
pub fn write_options(
identifier: &str,
mut options: CliOptions,
env: &mut Env,
) -> crate::Result<(Runtime, ServerHandle)> {
options.vars.extend(env_vars());
@ -215,12 +214,15 @@ pub fn write_options(
});
let (handle, addr) = r?;
env.insert_env_var("TAURI_OPTIONS_SERVER_ADDR".into(), addr.to_string().into());
write(
temp_dir().join(format!("{identifier}-server-addr")),
addr.to_string(),
)?;
Ok((runtime, handle))
}
fn read_options() -> CliOptions {
fn read_options(identifier: &str) -> CliOptions {
let runtime = tokio::runtime::Runtime::new().unwrap();
let options = runtime
.block_on(async move {
@ -228,7 +230,8 @@ fn read_options() -> CliOptions {
.build(
format!(
"ws://{}",
var("TAURI_OPTIONS_SERVER_ADDR").expect("missing addr environment variable")
read_to_string(temp_dir().join(format!("{identifier}-server-addr")))
.expect("missing addr file")
)
.parse()
.unwrap(),