From a422345224f218914e3a375f769a21b39ce49bce Mon Sep 17 00:00:00 2001 From: Michael Sloan Date: Tue, 17 Jun 2025 14:39:35 -0600 Subject: [PATCH] Add `(flatpak)` and `(snap)` suffixes to Zed version in system info (#32903) Release Notes: - N/A --- crates/feedback/src/system_specs.rs | 25 ++++++++++++++- crates/zed/resources/snap/snapcraft.yaml.in | 2 ++ script/bundle-linux | 35 ++++++++++++++++----- script/flatpak/bundle-flatpak | 2 +- 4 files changed, 54 insertions(+), 10 deletions(-) diff --git a/crates/feedback/src/system_specs.rs b/crates/feedback/src/system_specs.rs index b87c67a7e3..a76855b20c 100644 --- a/crates/feedback/src/system_specs.rs +++ b/crates/feedback/src/system_specs.rs @@ -15,6 +15,7 @@ pub struct SystemSpecs { memory: u64, architecture: &'static str, commit_sha: Option, + bundle_type: Option, gpu_specs: Option, } @@ -34,6 +35,7 @@ impl SystemSpecs { } _ => None, }; + let bundle_type = bundle_type(); let gpu_specs = window.gpu_specs().map(|specs| { format!( @@ -47,6 +49,7 @@ impl SystemSpecs { SystemSpecs { app_version, release_channel: release_channel.display_name(), + bundle_type, os_name, os_version, memory, @@ -73,6 +76,7 @@ impl SystemSpecs { ReleaseChannel::Dev | ReleaseChannel::Nightly => app_commit_sha.map(|sha| sha.full()), _ => None, }; + let bundle_type = bundle_type(); Self { app_version: app_version.to_string(), @@ -82,6 +86,7 @@ impl SystemSpecs { memory, architecture, commit_sha, + bundle_type, gpu_specs: try_determine_available_gpus(), } } @@ -91,12 +96,17 @@ impl Display for SystemSpecs { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let os_information = format!("OS: {} {}", self.os_name, self.os_version); let app_version_information = format!( - "Zed: v{} ({}) {}", + "Zed: v{} ({}) {}{}", self.app_version, match &self.commit_sha { Some(commit_sha) => format!("{} {}", self.release_channel, commit_sha), None => self.release_channel.to_string(), }, + if let Some(bundle_type) = &self.bundle_type { + format!("({bundle_type})") + } else { + "".to_string() + }, if cfg!(debug_assertions) { "(Taylor's Version)" } else { @@ -147,3 +157,16 @@ fn try_determine_available_gpus() -> Option { return None; } } + +/// Returns value of `ZED_BUNDLE_TYPE` set at compiletime or else at runtime. +/// +/// The compiletime value is used by flatpak since it doesn't seem to have a way to provide a +/// runtime environment variable. +/// +/// The runtime value is used by snap since the Zed snaps use release binaries directly, and so +/// cannot have this baked in. +fn bundle_type() -> Option { + option_env!("ZED_BUNDLE_TYPE") + .map(|bundle_type| bundle_type.to_string()) + .or_else(|| env::var("ZED_BUNDLE_TYPE").ok()) +} diff --git a/crates/zed/resources/snap/snapcraft.yaml.in b/crates/zed/resources/snap/snapcraft.yaml.in index 5a685d51b6..4c94a9fd03 100644 --- a/crates/zed/resources/snap/snapcraft.yaml.in +++ b/crates/zed/resources/snap/snapcraft.yaml.in @@ -55,3 +55,5 @@ apps: zed: command: usr/bin/zed common-id: dev.zed.Zed + environment: + ZED_BUNDLE_TYPE: snap diff --git a/script/bundle-linux b/script/bundle-linux index 9d0c5f83a1..c52312015b 100755 --- a/script/bundle-linux +++ b/script/bundle-linux @@ -10,17 +10,36 @@ Usage: ${0##*/} [options] Build a release .tar.gz for Linux. Options: - -h Display this help and exit. + -h, --help Display this help and exit. + --flatpak Set ZED_BUNDLE_TYPE=flatpak so that this can be included in system info " } -while getopts 'h' flag -do - case "${flag}" in - h) - help_info - exit 0 - ;; +# Parse all arguments manually +while [[ $# -gt 0 ]]; do + case $1 in + -h|--help) + help_info + exit 0 + ;; + --flatpak) + export ZED_BUNDLE_TYPE=flatpak + shift + ;; + --) + shift + break + ;; + -*) + echo "Unknown option: $1" >&2 + help_info + exit 1 + ;; + *) + echo "Error: Unexpected argument: $1" >&2 + help_info + exit 1 + ;; esac done diff --git a/script/flatpak/bundle-flatpak b/script/flatpak/bundle-flatpak index 28a4538040..c9196ed4b8 100755 --- a/script/flatpak/bundle-flatpak +++ b/script/flatpak/bundle-flatpak @@ -4,7 +4,7 @@ set -euo pipefail cd "$(dirname "$0")/../.." shopt -s extglob -script/bundle-linux +script/bundle-linux --flatpak archive_match="zed(-[a-zA-Z0-9]+)?-linux-$(uname -m)\.tar\.gz" archive=$(ls "target/release" | grep -E ${archive_match}) channel=$(