Add scripts and configuration for building snap package (#25064)

Release Notes:

- N/A

---------

Co-authored-by: Soumyadeep Ghosh <soumyadeepghosh2004@zohomail.in>
This commit is contained in:
Michael Sloan 2025-02-19 10:28:23 -07:00 committed by GitHub
parent 2d1a028de5
commit ea40c1d9b3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 111 additions and 0 deletions

1
.gitignore vendored
View file

@ -26,6 +26,7 @@
/dev.zed.Zed*.json
/plugins/bin
/script/node_modules
/snap
/zed.xcworkspace
DerivedData/
Packages

View file

@ -0,0 +1,58 @@
name: zed
title: Zed
base: core24
version: "$RELEASE_VERSION"
summary: The editor for what's next
description: |
Zed is a modern open-source code editor, built from the ground up in Rust with
a GPU-accelerated renderer. We help you build software faster than ever before.
grade: stable
confinement: classic
compression: lzo
icon: crates/zed/resources/app-icon.png
website: https://zed.dev/
source-code: https://github.com/zed-industries/zed
issues: https://github.com/zed-industries/zed/issues
contact: https://zed.dev/community-links#support-and-feedback
parts:
zed:
plugin: dump
source: "https://github.com/zed-industries/zed/releases/download/v$RELEASE_VERSION/zed-linux-x86_64.tar.gz"
organize:
# These renames seem to not be necessary, but it's tidier.
bin: usr/bin
libexec: usr/libexec
stage-packages:
- libasound2t64
# snapcraft has a lint that this is unused, but without it Zed exits with
# "Missing Vulkan entry points: LibraryLoadFailure" in blade_graphics.
- libvulkan1
# snapcraft has a lint that this is unused, but without it Zed exits with
# "NoWaylandLib" when run with Wayland.
- libwayland-client0
- libxcb1
- libxkbcommon-x11-0
- libxkbcommon0
build-attributes:
- enable-patchelf
prime:
# Omit unneeded files from the tarball
- -lib
- -licenses.md
- -share
# Omit unneeded files from stage-packages
- -etc
- -usr/share/doc
- -usr/share/lintian
- -usr/share/man
apps:
zed:
command: usr/bin/zed
common-id: dev.zed.Zed

27
script/snap-build Executable file
View file

@ -0,0 +1,27 @@
#!/usr/bin/env bash
set -euxo pipefail
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <release_version>"
exit 1
fi
mkdir -p snap/gui
export DO_STARTUP_NOTIFY="true"
export APP_NAME="Zed"
export APP_CLI="zed"
export APP_ICON="\${SNAP}/meta/gui/zed.png"
export APP_ARGS="%U"
envsubst < "crates/zed/resources/zed.desktop.in" > "snap/gui/zed.desktop"
cp "crates/zed/resources/app-icon.png" "snap/gui/zed.png"
RELEASE_VERSION="$1" envsubst < crates/zed/resources/snap/snapcraft.yaml.in > snap/snapcraft.yaml
# Clean seems to be needed to actually check that the snapcraft.yaml
# works. For example, when a `stage-package` is removed, it will
# still remain on rebuild.
snapcraft clean
snapcraft

25
script/snap-try Executable file
View file

@ -0,0 +1,25 @@
#!/usr/bin/env bash
# This script is intended to be run after `snap-build`.
#
# It expects a version to be passed as the first argument, and expects
# the built `.snap` for that version to be in the current directory.
#
# This will uninstall the current `zed` snap, replacing it with a snap
# that directly uses the `snap/unpacked` directory.
set -euxo pipefail
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <release_version>"
exit 1
fi
# Rerun as root
[ "$UID" -eq 0 ] || exec sudo bash -e "$0" "$@"
snap remove zed || true
mkdir -p snap
rm -rf snap/unpacked
unsquashfs -dest snap/unpacked "zed_$1_amd64.snap"
snap try --classic snap/unpacked