From 4bf3510052fd0aadebd94d00819e44563cbff270 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Mon, 17 Nov 2025 09:35:48 -0500 Subject: [PATCH] feat(upgrade): ability to show additional message on upgrade (#31170) --- cli/tools/upgrade.rs | 45 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/cli/tools/upgrade.rs b/cli/tools/upgrade.rs index bc3711cf1e..5bab5b9151 100644 --- a/cli/tools/upgrade.rs +++ b/cli/tools/upgrade.rs @@ -529,6 +529,12 @@ pub async fn upgrade( return Ok(()); }; + let banner_handle = spawn_banner_task( + &selected_version_to_upgrade.version_or_hash, + selected_version_to_upgrade.release_channel, + http_client_provider.get_or_create()?, + ); + let download_url = get_download_url( &selected_version_to_upgrade.version_or_hash, requested_version.release_channel(), @@ -605,6 +611,10 @@ pub async fn upgrade( .await; } + if let Ok(Some(text)) = banner_handle.await { + log::info!("\n{}\n", text); + } + drop(temp_dir); // delete the temp dir Ok(()) } @@ -881,6 +891,41 @@ fn get_download_url( }) } +fn spawn_banner_task( + version: &str, + release_channel: ReleaseChannel, + client: HttpClient, +) -> deno_core::unsync::JoinHandle> { + let banner_url = get_banner_url(version, release_channel); + deno_core::unsync::spawn(async move { + let banner_url = banner_url?; + tokio::select! { + result = client.download_text(banner_url) => { + result.ok() + } + _ = tokio::time::sleep(Duration::from_secs(5)) => { + None + } + } + }) +} + +fn get_banner_url( + version: &str, + release_channel: ReleaseChannel, +) -> Option { + let download_url = match release_channel { + ReleaseChannel::Stable => { + format!("{}/v{}/banner.txt", DL_RELEASE_URL, version) + } + ReleaseChannel::Rc | ReleaseChannel::Lts | ReleaseChannel::Canary => { + return None; + } + }; + + Url::parse(&download_url).ok() +} + async fn download_package( client: &HttpClient, download_url: Url,