Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci: Use BuildJet Ubuntu 20.04 runners for better glibc compatibility #18442

Merged
merged 17 commits into from
Sep 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ jobs:
timeout-minutes: 60
name: Create a Linux bundle
runs-on:
- buildjet-16vcpu-ubuntu-2204
- buildjet-16vcpu-ubuntu-2004
if: ${{ startsWith(github.ref, 'refs/tags/v') || contains(github.event.pull_request.labels.*.name, 'run-bundling') }}
needs: [linux_tests]
env:
Expand All @@ -284,7 +284,7 @@ jobs:
clean: false

- name: Install Linux dependencies
run: ./script/linux
run: ./script/linux && ./script/install-mold 2.34.0

- name: Determine version and release channel
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release_nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ jobs:
name: Create a Linux *.tar.gz bundle for x86
if: github.repository_owner == 'zed-industries'
runs-on:
- buildjet-16vcpu-ubuntu-2204
- buildjet-16vcpu-ubuntu-2004
needs: tests
env:
DIGITALOCEAN_SPACES_ACCESS_KEY: ${{ secrets.DIGITALOCEAN_SPACES_ACCESS_KEY }}
Expand All @@ -117,7 +117,7 @@ jobs:
run: echo "$HOME/.cargo/bin" >> $GITHUB_PATH

- name: Install Linux dependencies
run: ./script/linux
run: ./script/linux && ./script/install-mold 2.34.0

- name: Limit target directory size
run: script/clear-target-dir-if-larger-than 100
Expand Down
6 changes: 3 additions & 3 deletions docs/src/linux.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,16 @@ The Zed installed by the script works best on systems that:

- have a Vulkan compatible GPU available (for example Linux on an M-series macBook)
- have a system-wide glibc (NixOS and Alpine do not by default)
- x86_64 (Intel/AMD): glibc version >= 2.35 (Ubuntu 22 and newer)
- x86_64 (Intel/AMD): glibc version >= 2.29 (Ubuntu 20 and newer)
- aarch64 (ARM): glibc version >= 2.35 (Ubuntu 22 and newer)

Both Nix and Alpine have third-party Zed packages available (though they are currently a few weeks out of date). If you'd like to use our builds they do work if you install a glibc compatibility layer. On NixOS you can try [nix-ld](https://github.com/Mic92/nix-ld), and on Alpine [gcompat](https://wiki.alpinelinux.org/wiki/Running_glibc_programs).

You will need to build from source for:

- architectures other than 64-bit Intel or 64-bit ARM (for example a 32-bit or RISC-V machine)
- Amazon Linux
- Rocky Linux 9.3
- Redhat Enterprise Linux 8.x, Rocky Linux 8, AlmaLinux 8, Amazon Linux 2 on all architectures
- Redhat Enterprise Linux 9.x, Rocky Linux 9.3, AlmaLinux 8, Amazon Linux 2023 on aarch64 (x86_x64 OK)

## Other ways to install Zed on Linux

Expand Down
37 changes: 37 additions & 0 deletions script/install-mold
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#!/usr/bin/env bash

# Install `mold` official binaries from GitHub Releases.
#
# Adapted from the official rui314/setup-mold@v1 action to:
# * use environment variables instead of action inputs
# * remove make-default support
# * use curl instead of wget
# * support doas for sudo
# * support redhat systems
# See: https://github.com/rui314/setup-mold/blob/main/action.yml

set -euo pipefail

MOLD_VERSION="${MOLD_VERSION:-${1:-}}"
if [ "$(uname -s)" != "Linux" ]; then
echo "Error: This script is intended for Linux systems only."
exit 1
elif [ -z "$MOLD_VERSION" ]; then
echo "Usage: $0 2.34.0"
exit 1
elif [ -e /usr/local/bin/mold ]; then
echo "Warning: existing mold found at /usr/local/bin/mold. Skipping installation."
exit 0
fi

if [ "$(whoami)" = root ]; then SUDO=; else SUDO="$(command -v sudo || command -v doas || true)"; fi

MOLD_REPO="${MOLD_REPO:-https://github.com/rui314/mold}"
MOLD_URL="${MOLD_URL:-$MOLD_REPO}/releases/download/v$MOLD_VERSION/mold-$MOLD_VERSION-$(uname -m)-linux.tar.gz"

echo "Downloading from $MOLD_URL"
curl --location --show-error --output - --retry 3 --retry-delay 5 "$MOLD_URL" \
| $SUDO tar -C /usr/local --strip-components=1 --no-overwrite-dir -xzf -

# Note this binary depends on the system libatomic.so.1 which is usually
# provided as a dependency of gcc so it should be available on most systems.
14 changes: 12 additions & 2 deletions script/linux
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,29 @@ if [[ -n $apt ]]; then
libwayland-dev
libxkbcommon-x11-dev
libssl-dev
libstdc++-12-dev
libzstd-dev
libvulkan1
libgit2-dev
make
cmake
clang
mold
jq
gettext-base
elfutils
libsqlite3-dev
)
# Ubuntu 20.04 / Debian Bullseye (including CI for release)
if grep -q "bullseye" /etc/debian_version; then
deps+=(
libstdc++-10-dev
)
else
deps+=(
libstdc++-12-dev
mold
)
fi

$maysudo "$apt" update
$maysudo "$apt" install -y "${deps[@]}"
exit 0
Expand Down
Loading