Skip to content

Commit

Permalink
feat: Make --remote upload and execute a workflow with a workflow-id @…
Browse files Browse the repository at this point in the history
  • Loading branch information
jsfuentes authored Sep 12, 2024
1 parent 2499a8a commit f2f73f2
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 12 deletions.
9 changes: 7 additions & 2 deletions crates/cli/src/commands/apply.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,13 @@ pub(crate) async fn run_apply(

#[cfg(feature = "remote_workflows")]
if args.apply_migration_args.remote {
return crate::workflows::run_remote_workflow(args.apply_migration_args, ranges, flags)
.await;
return crate::workflows::run_remote_workflow(
args.pattern_or_workflow,
args.apply_migration_args,
ranges,
flags,
)
.await;
}

let paths = args.paths.clone();
Expand Down
6 changes: 3 additions & 3 deletions crates/cli/src/commands/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -425,9 +425,9 @@ async fn run_command(_use_tracing: bool) -> Result<()> {
Commands::Workflows(arg) => match arg.workflows_commands {
WorkflowCommands::List(arg) => run_list_workflows(&arg, &app.format_flags).await,
WorkflowCommands::Watch(arg) => run_watch_workflow(&arg, &app.format_flags).await,
WorkflowCommands::Upload(arg) => {
run_upload_workflows(&arg, &app.format_flags).await
}
WorkflowCommands::Upload(arg) => run_upload_workflows(&arg, &app.format_flags)
.await
.map(|_| ()),
},
Commands::Plumbing(arg) => {
run_plumbing(arg, multi, &mut apply_details, app.format_flags).await
Expand Down
21 changes: 14 additions & 7 deletions crates/cli/src/commands/workflows_upload.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use anyhow::{bail, Result};
use clap::Args;
use console::style;
use serde::Serialize;
use std::path::PathBuf;

Expand All @@ -12,13 +13,15 @@ use marzano_messenger::emit::VisibilityLevels;
#[derive(Args, Debug, Serialize)]
pub struct WorkflowsUploadArgs {
#[clap(index = 1)]
workflow_path: String,
pub workflow_path: String,
#[clap(index = 2)]
pub workflow_id: String,
}

pub async fn run_upload_workflows(
_arg: &WorkflowsUploadArgs,
parent: &GlobalFormatFlags,
) -> Result<()> {
) -> Result<String> {
if parent.json || parent.jsonl {
bail!("JSON output not supported for workflows");
}
Expand All @@ -31,7 +34,11 @@ pub async fn run_upload_workflows(
.await?;

let apply_migration_args = ApplyMigrationArgs {
input: Some(format!(r#"{{"workflow": "{}"}}"#, workflow_path.display())),
input: Some(format!(
r#"{{"workflow": "{}", "workflow_id": "{}" }}"#,
workflow_path.display(),
_arg.workflow_id
)),
..Default::default()
};

Expand All @@ -49,10 +56,10 @@ pub async fn run_upload_workflows(
)
.await?;

if let Some(data) = result.data.and_then(|v| v.get("id").cloned()) {
if let Some(data_str) = data.as_str() {
println!("Uploaded Workflow ID: {}", data_str);
return Ok(());
if let Some(data) = result.data.and_then(|v| v.get("download").cloned()) {
if let Some(download_url) = data.as_str() {
log::info!("Download URL: {}\n", style(download_url).bold().blue());
return Ok(download_url.to_string());
}
}

Expand Down
11 changes: 11 additions & 0 deletions crates/cli/src/workflows.rs
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ where

#[cfg(feature = "remote_workflows")]
pub async fn run_remote_workflow(
pattern_or_workflow: String,
args: crate::commands::apply_migration::ApplyMigrationArgs,
ranges: Option<Vec<FileDiff>>,
flags: &crate::flags::GlobalFormatFlags,
Expand All @@ -264,6 +265,8 @@ pub async fn run_remote_workflow(
use marzano_gritmodule::fetcher::ModuleRepo;
use std::time::Duration;

use crate::commands::workflows_upload::{run_upload_workflows, WorkflowsUploadArgs};

let mut updater = Updater::from_current_bin().await?;
let cwd = std::env::current_dir()?;

Expand Down Expand Up @@ -300,8 +303,16 @@ pub async fn run_remote_workflow(
anyhow::bail!("No workflow ID provided");
};

let upload_args = WorkflowsUploadArgs {
workflow_path: pattern_or_workflow,
workflow_id: workflow_id.to_string(),
};
let artifact_download_url = run_upload_workflows(&upload_args, &flags).await?;
input.insert("definition".to_string(), artifact_download_url.into());

let settings =
grit_cloud_client::RemoteWorkflowSettings::new(&workflow_id, &repo, input.into());

let result = grit_cloud_client::run_remote_workflow(settings, &auth).await?;

pb.finish_and_clear();
Expand Down

0 comments on commit f2f73f2

Please sign in to comment.