From e1e1607f220fcb323a7114404bd880ec3f1187b7 Mon Sep 17 00:00:00 2001 From: YdrMaster Date: Thu, 25 Apr 2024 18:02:47 +0800 Subject: [PATCH] =?UTF-8?q?feat(xtask):=20=E6=B7=BB=E5=8A=A0=20deploy=20?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=B0=86=E5=8F=AF=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=8B=B7=E8=B4=9D=E5=88=B0=E6=8C=87=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: YdrMaster --- .cargo/config.toml | 1 + .gitignore | 1 + xtask/src/deploy.rs | 40 ++++++++++++++++++++++++++++++++++++++++ xtask/src/main.rs | 5 +++++ xtask/src/service.rs | 2 +- 5 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 xtask/src/deploy.rs diff --git a/.cargo/config.toml b/.cargo/config.toml index 7d6fd0cc..3d4e1c61 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,6 +1,7 @@ [alias] xtask = "run --package xtask --release --" debug = "run --package xtask --" +deploy = "xtask deploy" generate = "xtask generate" chat = "xtask chat" cast = "xtask cast" diff --git a/.gitignore b/.gitignore index 0d3264ef..f5f7ed00 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ !/.github/* /target +/deploy diff --git a/xtask/src/deploy.rs b/xtask/src/deploy.rs new file mode 100644 index 00000000..595727ed --- /dev/null +++ b/xtask/src/deploy.rs @@ -0,0 +1,40 @@ +use std::{ + env, fs, + path::{Path, PathBuf}, + process::Command, + str::from_utf8, +}; + +#[derive(Args, Default)] +pub struct DeployArgs { + #[clap(long, short)] + target: Option, +} + +impl DeployArgs { + pub fn deploy(self) { + let output = Command::new(env!("CARGO")) + .arg("locate-project") + .arg("--workspace") + .arg("--message-format=plain") + .output() + .unwrap() + .stdout; + let workspace = Path::new(from_utf8(&output).unwrap().trim()) + .parent() + .unwrap(); + + let exe = env::current_exe().unwrap(); + let target = self + .target + .unwrap_or_else(|| workspace.join("deploy")) + .join(exe.file_name().unwrap()); + println!("Deploy"); + println!(" from: {}", exe.display()); + println!(" to: {}", target.display()); + + fs::create_dir_all(target.parent().unwrap()).unwrap(); + fs::remove_file(&target).unwrap(); + fs::copy(exe, target).unwrap(); + } +} diff --git a/xtask/src/main.rs b/xtask/src/main.rs index c0c43117..a0db5a0e 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -1,9 +1,11 @@ mod cast; mod chat; +mod deploy; mod service; use causal_lm::SampleArgs; use clap::Parser; +use deploy::DeployArgs; use service::ServiceArgs; use std::{ffi::c_int, future::Future}; @@ -13,6 +15,7 @@ extern crate clap; fn main() { use Commands::*; match Cli::parse().command { + Deploy(deploy) => deploy.deploy(), Cast(cast) => cast.invode(), // Generate(args) => block_on(args.inference.generate(&args.prompt)), Chat(chat) => block_on(chat.chat()), @@ -45,6 +48,8 @@ struct Cli { #[derive(Subcommand)] enum Commands { + /// Deploy binary + Deploy(DeployArgs), /// Cast model Cast(cast::CastArgs), // /// Generate following text diff --git a/xtask/src/service.rs b/xtask/src/service.rs index b03c6683..02d292c0 100644 --- a/xtask/src/service.rs +++ b/xtask/src/service.rs @@ -3,7 +3,7 @@ use service::Service; use web_api::start_infer_service; #[derive(Args, Default)] -pub(crate) struct ServiceArgs { +pub struct ServiceArgs { #[clap(flatten)] pub inference: InferenceArgs, /// Port to bind the service to