beet_cli/commands/
run_deploy.rs1use crate::prelude::*;
2use anyhow::Result;
3use beet::prelude::*;
4use clap::Parser;
5use std::process::Command;
6
7#[derive(Debug, Parser)]
9pub struct RunDeploy {
10 #[command(flatten)]
11 pub build: RunBuild,
12 #[arg(long)]
14 pub region: Option<String>,
15 #[arg(long)]
18 pub function_name: Option<String>,
19 #[arg(long)]
21 pub iam_role: Option<String>,
22 #[arg(long)]
24 pub dry_run: bool,
25 #[arg(long)]
28 pub sst: bool,
29}
30
31
32impl RunDeploy {
33 pub fn run(mut self) -> Result<()> {
38 self.build.build_cmd.release = true;
39 self.build.clone().into_group()?.run()?;
40
41 self.lambda_build()?;
42 if !self.dry_run {
43 if self.sst {
44 self.sst_deploy()?;
45 }
46 self.lambda_deploy()?;
47 }
48 Ok(())
49 }
50
51 fn lambda_build(&self) -> Result<()> {
52 let mut cmd = Command::new("cargo");
53 cmd.arg("lambda")
54 .arg("build")
55 .arg("--features")
56 .arg("beet/lambda")
57 .arg("--release");
58 if let Some(pkg) = &self.build.build_cmd.package {
63 cmd.arg("--package").arg(pkg);
64 }
65 println!("🌱 Compiling lambda binary");
66 cmd.spawn()?.wait()?.exit_ok()?;
67 Ok(())
68 }
69 fn sst_deploy(&self) -> Result<()> {
70 Command::new("npx")
71 .arg("sst")
72 .arg("deploy")
73 .arg("--stage")
74 .arg("production")
75 .arg("--config")
76 .arg("infra/sst.config.ts")
77 .spawn()?
78 .wait()?
79 .exit_ok()?
80 .xok()
81 }
82
83 #[allow(unused)]
85 fn lambda_deploy(&self) -> Result<()> {
86 let mut cmd = Command::new("cargo");
87
88 let binary_name = if let Some(bin) = &self.build.build_cmd.bin {
89 Some(bin)
90 } else if let Some(pkg) = &self.build.build_cmd.package {
91 Some(pkg)
92 } else {
93 None
94 };
95
96 cmd.arg("lambda")
97 .arg("deploy")
98 .arg("--enable-function-url")
99 .arg("--include")
100 .arg(&self.build.build_args.html_dir);
101
102 if let Some(bin) = &binary_name {
103 cmd.arg("--binary-name").arg(&bin);
104 }
105
106 if let Some(iam_role) = &self.iam_role {
107 cmd.arg("--iam-role").arg(iam_role);
108 }
109 if let Some(region) = &self.region {
110 cmd.arg("--region").arg(region);
111 };
112
113 if let Some(name) = &self.function_name {
114 cmd.arg(name);
115 }
116
117 cmd.spawn()?.wait()?.exit_ok()?;
118
119 Ok(())
120 }
121}