Skip to main content

stackless_cloud/
ensure.rs

1//! Stripe project + environment ensure shared by cloud substrates.
2//!
3//! Providers keep the once-per-process mutex and fault mapping; this is only
4//! the identical project/env/spend-cap body (Vercel Hobby/Pro stays local).
5
6use std::path::Path;
7
8use stackless_core::def::StackDef;
9use stackless_stripe_projects::ProjectsError;
10use stackless_stripe_projects::project;
11use stackless_stripe_projects::stripe::{CommandRunner, StripeProjects};
12
13/// Anchor the Stripe project, activate `instance`, and optionally set a spend cap.
14pub async fn project_and_env<R: CommandRunner>(
15    stripe: &StripeProjects<R>,
16    def: &StackDef,
17    definition_dir: &Path,
18    instance: &str,
19    spend_cap: Option<(u32, &str)>,
20) -> Result<(), ProjectsError> {
21    project::ensure_project(stripe, def, definition_dir).await?;
22    project::ensure_environment(stripe, instance).await?;
23    if let Some((usd, provider)) = spend_cap {
24        project::set_spend_cap(stripe, usd, provider).await?;
25    }
26    Ok(())
27}