From 40242852aafa0f37508f45061c56de4f323a374d Mon Sep 17 00:00:00 2001 From: Cole Helbling Date: Fri, 13 Sep 2024 09:18:08 -0700 Subject: [PATCH] Remove ExecutionEnvironment::Fake and construct ReleaseMetadata and Tarball instead --- src/cli/mod.rs | 2 -- src/main.rs | 38 ++++++++++++++++++++++++++------------ src/push_context.rs | 17 ++++------------- 3 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/cli/mod.rs b/src/cli/mod.rs index a460ca9..a91a2ae 100644 --- a/src/cli/mod.rs +++ b/src/cli/mod.rs @@ -337,8 +337,6 @@ impl FlakeHubPushCli { ExecutionEnvironment::GitHub } else if std::env::var("GITLAB_CI").ok().is_some() { ExecutionEnvironment::GitLab - } else if cli.dest_dir.0.is_some() { - ExecutionEnvironment::Fake } else { ExecutionEnvironment::LocalGitHub } diff --git a/src/main.rs b/src/main.rs index fb51d01..e731ace 100644 --- a/src/main.rs +++ b/src/main.rs @@ -68,30 +68,44 @@ async fn execute() -> Result { let mut cli = cli::FlakeHubPushCli::parse(); cli.instrumentation.setup()?; - let ctx = { PushContext::from_cli_and_env(&mut cli).await? }; - - if let Some(dest_dir) = cli.dest_dir.0 { - std::fs::create_dir_all(&dest_dir)?; + // NOTE(cole-h): If --dest-dir is passed, we're intentionally avoiding doing any actual + // networking (i.e. for FlakeHub and GitHub) + if let Some(dest_dir) = &cli.dest_dir.0 { + let local_git_root = cli.resolve_local_git_root()?; + let local_rev_info = revision_info::RevisionInfo::from_git_root(&local_git_root)?; + let git_ctx = git_context::GitContext { + spdx_expression: cli.spdx_expression.0.clone(), + repo_topics: vec![], + revision_info: local_rev_info, + }; + + let release_version = cli.release_version(&git_ctx)?; + let release_tarball_name = format!("{release_version}.tar.gz"); + let release_json_name = format!("{release_version}.json"); + + let (release_metadata, tarball) = + release_metadata::ReleaseMetadata::new(&cli, &git_ctx, None).await?; + + std::fs::create_dir_all(dest_dir)?; { - let dest_file = dest_dir.join(ctx.release_version.clone() + ".tar.gz"); + let dest_file = dest_dir.join(release_tarball_name); tracing::info!("Writing tarball to {}", dest_file.display()); - std::fs::write(dest_file, ctx.tarball.bytes)?; + std::fs::write(dest_file, tarball.bytes)?; } { - let dest_file = dest_dir.join(ctx.release_version + ".json"); + let dest_file = dest_dir.join(release_json_name); tracing::info!("Writing release metadata to {}", dest_file.display()); - std::fs::write(dest_file, serde_json::to_string(&ctx.metadata)?)?; + std::fs::write(dest_file, serde_json::to_string(&release_metadata)?)?; } return Ok(ExitCode::SUCCESS); } - let fhclient = FlakeHubClient::new( - ctx.flakehub_host, - ctx.auth_token.expect("did not get FlakeHub auth token"), - )?; + let ctx = PushContext::from_cli_and_env(&mut cli).await?; + + let fhclient = FlakeHubClient::new(ctx.flakehub_host, ctx.auth_token)?; // "upload.rs" - stage the release let stage_result = fhclient diff --git a/src/push_context.rs b/src/push_context.rs index 9931be2..18515c1 100644 --- a/src/push_context.rs +++ b/src/push_context.rs @@ -11,12 +11,11 @@ pub enum ExecutionEnvironment { GitHub, GitLab, LocalGitHub, - Fake, } pub(crate) struct PushContext { pub(crate) flakehub_host: url::Url, - pub(crate) auth_token: Option, + pub(crate) auth_token: String, // url components pub(crate) upload_name: String, // {org}/{project} @@ -93,7 +92,7 @@ impl PushContext { .await .wrap_err("Getting upload bearer token from GitHub")?; - (Some(token), git_ctx) + (token, git_ctx) } (ExecutionEnvironment::GitLab, None) => { // GITLAB CI @@ -103,7 +102,7 @@ impl PushContext { let git_ctx = GitContext::from_cli_and_gitlab(cli, local_rev_info).await?; - (Some(token), git_ctx) + (token, git_ctx) } (ExecutionEnvironment::LocalGitHub, Some(u)) => { // LOCAL, DEV (aka emulating GITHUB) @@ -132,15 +131,7 @@ impl PushContext { github_graphql_data_result, ) .await?; - (Some(token), git_ctx) - } - (ExecutionEnvironment::Fake, _) => { - let git_ctx = GitContext { - spdx_expression: cli.spdx_expression.0.clone(), - repo_topics: vec![], - revision_info: local_rev_info, - }; - (None, git_ctx) + (token, git_ctx) } (_, Some(_)) => { // we're in (GitHub|GitLab) and jwt_issuer_uri was specified, invalid