diff --git a/api/src/message.rs b/api/src/message.rs index 4084518c..0d5c8849 100644 --- a/api/src/message.rs +++ b/api/src/message.rs @@ -11,6 +11,8 @@ pub struct CreateBundleUploadRequest { pub client_version: String, #[serde(rename = "remoteUrls")] pub remote_urls: Vec, + #[serde(rename = "externalId")] + pub external_id: Option, } #[derive(Debug, Serialize, Clone, Deserialize)] diff --git a/cli-tests/src/upload.rs b/cli-tests/src/upload.rs index f0964fb3..e7aa417b 100644 --- a/cli-tests/src/upload.rs +++ b/cli-tests/src/upload.rs @@ -51,6 +51,7 @@ async fn upload_bundle() { let assert = command_builder .command() + .env("GITHUB_EXTERNAL_ID", "test-external-id-123") .assert() // should fail due to quarantine and succeed without quarantining .failure(); @@ -94,6 +95,7 @@ async fn upload_bundle() { .starts_with("trunk-analytics-cli cargo=")); assert!(upload_request.client_version.contains(" git=")); assert!(upload_request.client_version.contains(" rustc=")); + assert!(upload_request.external_id.is_some()); let tar_extract_directory = assert_matches!(requests_iter.next().unwrap(), RequestPayload::S3Upload(d) => d); diff --git a/cli/src/context.rs b/cli/src/context.rs index d46b4d4f..4aebbeb6 100644 --- a/cli/src/context.rs +++ b/cli/src/context.rs @@ -706,12 +706,14 @@ pub async fn gather_upload_id_context( if dry_run { return Err(anyhow::anyhow!("Dry run mode enabled, unable to upload")); } + let external_id = meta.base_props.envs.get("GITHUB_EXTERNAL_ID").cloned(); let upload = api_client .create_bundle_upload(&api::message::CreateBundleUploadRequest { repo: meta.base_props.repo.repo.clone(), org_url_slug: meta.base_props.org.clone(), client_version: format!("trunk-analytics-cli {}", meta.base_props.cli_version), remote_urls: vec![meta.base_props.repo.repo_url.clone()], + external_id, }) .await?; meta.base_props.bundle_upload_id.clone_from(&upload.id);