mirror of
https://github.com/zed-industries/zed.git
synced 2024-11-08 07:35:01 +03:00
f7115be3d1
ping #6687 This is the third iteration of this PR ([v2 here](https://github.com/zed-industries/zed/pull/11949)) and uses a different approach to the first two (the process wrapper lib was a maintainability nightmare). While the first two attempted to spawn the necessary processes using flatpak-spawn and host-spawn from the app inside the sandbox, this version first spawns the cli binary which then restart's itself *outside* of the sandbox using flatpak-spawn. The restarted cli process than can call the bundled app binary normally, with no need for flatpak-spawn because it is already outside of the sandbox. This is done instead of keeping the cli in the sandbox because ipc becomes very difficult and broken when trying to do it across the sandbox. Gnome software (example using nightly channel and release notes generated using the script): <img src="https://github.com/zed-industries/zed/assets/81528246/6391d217-0f44-4638-9569-88c46e5fc4ba" width="600"/> TODO in this PR: - [x] Bundle libs. - [x] Cleanup release note converter. Future work: - [ ] Auto-update dialog - [ ] Flatpak auto-update (complete 'Auto-update dialog' first) - [ ] Experimental [bundle](https://docs.flatpak.org/en/latest/single-file-bundles.html) releases for feedback (?). *(?) = Maybe / Request for feedback* Release Notes: - N/A --------- Co-authored-by: Marshall Bowers <elliott.codes@gmail.com> Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>
115 lines
3.1 KiB
Bash
Executable File
115 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euxo pipefail
|
|
|
|
# Function for displaying help info
|
|
help_info() {
|
|
echo "
|
|
Usage: ${0##*/} [options]
|
|
Build a release .tar.gz for Linux.
|
|
|
|
Options:
|
|
-h Display this help and exit.
|
|
"
|
|
}
|
|
|
|
while getopts 'h' flag
|
|
do
|
|
case "${flag}" in
|
|
h)
|
|
help_info
|
|
exit 0
|
|
;;
|
|
esac
|
|
done
|
|
|
|
export ZED_BUNDLE=true
|
|
|
|
channel=$(<crates/zed/RELEASE_CHANNEL)
|
|
|
|
version="$(script/get-crate-version zed)"
|
|
# Set RELEASE_VERSION so it's compiled into GPUI and it knows about the version.
|
|
export RELEASE_VERSION="${version}"
|
|
|
|
commit=$(git rev-parse HEAD | cut -c 1-7)
|
|
|
|
version_info=$(rustc --version --verbose)
|
|
host_line=$(echo "$version_info" | grep host)
|
|
target_triple=${host_line#*: }
|
|
|
|
# Build binary in release mode
|
|
export RUSTFLAGS="-C link-args=-Wl,--disable-new-dtags,-rpath,\$ORIGIN/../lib"
|
|
cargo build --release --target "${target_triple}" --package zed --package cli
|
|
|
|
# Strip the binary of all debug symbols
|
|
# Later, we probably want to do something like this: https://github.com/GabrielMajeri/separate-symbols
|
|
strip "target/${target_triple}/release/Zed"
|
|
strip "target/${target_triple}/release/cli"
|
|
|
|
suffix=""
|
|
if [ "$channel" != "stable" ]; then
|
|
suffix="-$channel"
|
|
fi
|
|
|
|
# Move everything that should end up in the final package
|
|
# into a temp directory.
|
|
temp_dir=$(mktemp -d)
|
|
zed_dir="${temp_dir}/zed$suffix.app"
|
|
|
|
# Binary
|
|
mkdir -p "${zed_dir}/bin"
|
|
cp "target/${target_triple}/release/Zed" "${zed_dir}/bin/zed"
|
|
cp "target/${target_triple}/release/cli" "${zed_dir}/bin/cli"
|
|
|
|
# Libs
|
|
find_libs() {
|
|
ldd target/${target_triple}/release/Zed |\
|
|
cut -d' ' -f3 |\
|
|
grep -v '\<\(libstdc++.so\|libc.so\|libgcc_s.so\|libm.so\|libpthread.so\|libdl.so\)'
|
|
}
|
|
|
|
mkdir -p "${zed_dir}/lib"
|
|
rm -rf "${zed_dir}/lib/*"
|
|
cp $(find_libs) "${zed_dir}/lib"
|
|
|
|
# Icons
|
|
mkdir -p "${zed_dir}/share/icons/hicolor/512x512/apps"
|
|
cp "crates/zed/resources/app-icon$suffix.png" "${zed_dir}/share/icons/hicolor/512x512/apps/zed.png"
|
|
mkdir -p "${zed_dir}/share/icons/hicolor/1024x1024/apps"
|
|
cp "crates/zed/resources/app-icon$suffix@2x.png" "${zed_dir}/share/icons/hicolor/1024x1024/apps/zed.png"
|
|
|
|
# .desktop
|
|
export DO_STARTUP_NOTIFY="true"
|
|
export APP_ICON="zed"
|
|
if [[ "$channel" == "preview" ]]; then
|
|
export APP_NAME="Zed Preview"
|
|
elif [[ "$channel" == "nightly" ]]; then
|
|
export APP_NAME="Zed Nightly"
|
|
elif [[ "$channel" == "dev" ]]; then
|
|
export APP_NAME="Zed Devel"
|
|
else
|
|
export APP_NAME="Zed"
|
|
fi
|
|
|
|
mkdir -p "${zed_dir}/share/applications"
|
|
envsubst < "crates/zed/resources/zed.desktop.in" > "${zed_dir}/share/applications/zed$suffix.desktop"
|
|
|
|
# Licenses
|
|
cp "assets/licenses.md" "${zed_dir}/licenses.md"
|
|
|
|
# Create archive out of everything that's in the temp directory
|
|
target="linux-$(uname -m)"
|
|
|
|
if [[ "$channel" == "nightly" ]]; then
|
|
archive="zed-${target}.tar.gz"
|
|
elif [[ "$channel" == "dev" ]]; then
|
|
archive="zed-${commit}-${target}.tar.gz"
|
|
else
|
|
archive="zed-${target}.tar.gz"
|
|
fi
|
|
|
|
rm -rf "${archive}"
|
|
remove_match="zed(-[a-zA-Z0-9]+)?-linux-$(uname -m)\.tar\.gz"
|
|
ls target/release | grep -E ${remove_match} | xargs -d "\n" -I {} rm -f target/release/{} || true
|
|
tar -czvf target/release/$archive -C ${temp_dir} "zed$suffix.app"
|