diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ea552eaddd..3f03bd5525 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -305,9 +305,6 @@ jobs: exit 1 fi - - name: Generate license file - run: script/generate-licenses - - name: Create and upload Linux .tar.gz bundle run: script/bundle-linux diff --git a/docs/src/development/linux.md b/docs/src/development/linux.md index 1a12a8e05d..7f6bc3ac88 100644 --- a/docs/src/development/linux.md +++ b/docs/src/development/linux.md @@ -40,32 +40,42 @@ docker compose up -d Once you have the dependencies installed, you can build Zed using [Cargo](https://doc.rust-lang.org/cargo/). -For a debug build: +For a debug build of the editor: ``` cargo run ``` -For a release build: - -``` -cargo run --release -``` - -For a release package: - -``` -cargo build --release -``` - -the binary can be found in `target/release` folder. - And to run the tests: ``` cargo test --workspace ``` +In release mode, the primary user interface is the `cli` crate. You can run it in development with: + +``` +cargo run -p cli +``` + +## Installing a development build + +You can install a local build on your machine with: + +``` +./script/install-linux +``` + +This will build zed and the cli in release mode and make them available at `~/.local/bin/zed`, installing .desktop files to `~/.local/share`. + +If you'd like to install things to a different prefix you can use: + +``` +./script/install-linux /usr/ +``` + +In this case the binary will be `/usr/bin/zed` and the `.desktop` file in `/usr/share`. The script should prompt for sudo as required so that the rust build runs as the current user. + ## Wayland & X11 Zed has basic support for both modes. The mode is selected at runtime. If you're on wayland and want to run in X11 mode, you can set `WAYLAND_DISPLAY='' cargo run` to do so. diff --git a/script/bundle-linux b/script/bundle-linux index 67879fea39..25eb97093b 100755 --- a/script/bundle-linux +++ b/script/bundle-linux @@ -95,14 +95,12 @@ mkdir -p "${zed_dir}/share/applications" envsubst < "crates/zed/resources/zed.desktop.in" > "${zed_dir}/share/applications/zed$suffix.desktop" # Licenses +script/generate-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 +if [[ "$channel" == "dev" ]]; then archive="zed-${commit}-${target}.tar.gz" else archive="zed-${target}.tar.gz" diff --git a/script/install-linux b/script/install-linux new file mode 100755 index 0000000000..3e9c0ae4be --- /dev/null +++ b/script/install-linux @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +set -euxo pipefail + +if [[ $# -gt 0 ]]; then + echo " + Usage: ${0##*/} + Builds and installs zed onto your system into ~/.local, making it available as ~/.local/bin/zed. + + Before running this you should ensure you have all the build dependencies installed with `./script/linux`. + " + exit 1 +fi +export ZED_CHANNEL=$( "$temp/zed-linux-$arch.tar.gz" + if [[ -n "${ZED_BUNDLE_PATH:-}" ]]; then + cp "$ZED_BUNDLE_PATH" "$temp/zed-linux-$arch.tar.gz" + else + echo "Downloading Zed" + curl "https://zed.dev/api/releases/$channel/latest/zed-linux-$arch.tar.gz" > "$temp/zed-linux-$arch.tar.gz" + fi suffix="" if [[ $channel != "stable" ]]; then @@ -91,7 +95,7 @@ linux() { desktop_file_path="$HOME/.local/share/applications/${appid}.desktop" cp ~/.local/zed$suffix.app/share/applications/zed$suffix.desktop "${desktop_file_path}" sed -i "s|Icon=zed|Icon=$HOME/.local/zed$suffix.app/share/icons/hicolor/512x512/apps/zed.png|g" "${desktop_file_path}" - sed -i "s|Exec=zed|Exec=$HOME/.local/zed$suffix.app/bin/zed|g" "${desktop_file_path}" + sed -i "s|Exec=zed|Exec=$HOME/.local/zed$suffix.app/libexec/zed-editor|g" "${desktop_file_path}" if which "zed" >/dev/null 2>&1; then echo "Zed has been installed. Run with 'zed'"