mirror of
https://github.com/zed-industries/zed.git
synced 2024-12-29 12:38:02 +00:00
85f4c96fef
Our GitHub Actions Linux ARM hosted runner was running Ubuntu 20 was EOL'd. This gets builds working on the Ubuntu 22 Linux ARM runner which have spun to replace the EOL'd one. It pushes forward our Glibc requirement for Linux ARM users (was >= 2.29, now >= 2.35; sorry!) but also uses a newer version of clang/llvm (was 10, now 15; yay!).
426 lines
15 KiB
YAML
426 lines
15 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
- "v[0-9]+.[0-9]+.x"
|
|
tags:
|
|
- "v*"
|
|
pull_request:
|
|
branches:
|
|
- "**"
|
|
|
|
concurrency:
|
|
# Allow only one workflow per any non-`main` branch.
|
|
group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.ref_name == 'main' && github.sha || 'anysha' }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
CARGO_INCREMENTAL: 0
|
|
RUST_BACKTRACE: 1
|
|
|
|
jobs:
|
|
style:
|
|
timeout-minutes: 60
|
|
name: Check formatting and spelling
|
|
runs-on:
|
|
- self-hosted
|
|
- test
|
|
steps:
|
|
- name: Checkout repo
|
|
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
|
|
with:
|
|
clean: false
|
|
fetch-depth: 0
|
|
|
|
- name: Remove untracked files
|
|
run: git clean -df
|
|
|
|
- name: Check spelling
|
|
run: |
|
|
if ! cargo install --list | grep "typos-cli v$TYPOS_CLI_VERSION" > /dev/null; then
|
|
echo "Installing typos-cli@$TYPOS_CLI_VERSION..."
|
|
cargo install "typos-cli@$TYPOS_CLI_VERSION"
|
|
else
|
|
echo "typos-cli@$TYPOS_CLI_VERSION is already installed."
|
|
fi
|
|
typos
|
|
env:
|
|
TYPOS_CLI_VERSION: "1.23.3"
|
|
|
|
- name: Run style checks
|
|
uses: ./.github/actions/check_style
|
|
|
|
- name: Check unused dependencies
|
|
uses: bnjbvr/cargo-machete@main
|
|
|
|
- name: Check licenses are present
|
|
run: script/check-licenses
|
|
|
|
- name: Check license generation
|
|
run: script/generate-licenses /tmp/zed_licenses_output
|
|
|
|
- name: Ensure fresh merge
|
|
shell: bash -euxo pipefail {0}
|
|
run: |
|
|
if [ -z "$GITHUB_BASE_REF" ];
|
|
then
|
|
echo "BUF_BASE_BRANCH=$(git merge-base origin/main HEAD)" >> $GITHUB_ENV
|
|
else
|
|
git checkout -B temp
|
|
git merge -q origin/$GITHUB_BASE_REF -m "merge main into temp"
|
|
echo "BUF_BASE_BRANCH=$GITHUB_BASE_REF" >> $GITHUB_ENV
|
|
fi
|
|
|
|
- uses: bufbuild/buf-setup-action@v1
|
|
with:
|
|
version: v1.29.0
|
|
- uses: bufbuild/buf-breaking-action@v1
|
|
with:
|
|
input: "crates/proto/proto/"
|
|
against: "https://github.com/${GITHUB_REPOSITORY}.git#branch=${BUF_BASE_BRANCH},subdir=crates/proto/proto/"
|
|
|
|
macos_tests:
|
|
timeout-minutes: 60
|
|
name: (macOS) Run Clippy and tests
|
|
runs-on:
|
|
- self-hosted
|
|
- test
|
|
steps:
|
|
- name: Checkout repo
|
|
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
|
|
with:
|
|
clean: false
|
|
|
|
- name: cargo clippy
|
|
run: ./script/clippy
|
|
|
|
- name: Run tests
|
|
uses: ./.github/actions/run_tests
|
|
|
|
- name: Build collab
|
|
run: cargo build -p collab
|
|
|
|
- name: Build other binaries and features
|
|
run: cargo build --workspace --bins --all-features; cargo check -p gpui --features "macos-blade"
|
|
|
|
linux_tests:
|
|
timeout-minutes: 60
|
|
name: (Linux) Run Clippy and tests
|
|
runs-on:
|
|
- self-hosted
|
|
- deploy
|
|
steps:
|
|
- name: Add Rust to the PATH
|
|
run: echo "$HOME/.cargo/bin" >> $GITHUB_PATH
|
|
|
|
- name: Checkout repo
|
|
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
|
|
with:
|
|
clean: false
|
|
|
|
- name: cargo clippy
|
|
run: ./script/clippy
|
|
|
|
- name: Run tests
|
|
uses: ./.github/actions/run_tests
|
|
|
|
- name: Build Zed
|
|
run: cargo build -p zed
|
|
|
|
# todo(windows): Actually run the tests
|
|
windows_tests:
|
|
timeout-minutes: 60
|
|
name: (Windows) Run Clippy and tests
|
|
runs-on: hosted-windows-1
|
|
steps:
|
|
- name: Checkout repo
|
|
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
|
|
with:
|
|
clean: false
|
|
|
|
- name: Cache dependencies
|
|
uses: swatinem/rust-cache@23bce251a8cd2ffc3c1075eaa2367cf899916d84 # v2
|
|
with:
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
|
|
- name: cargo clippy
|
|
# Windows can't run shell scripts, so we need to use `cargo xtask`.
|
|
run: cargo xtask clippy
|
|
|
|
- name: Build Zed
|
|
run: cargo build -p zed
|
|
|
|
bundle-mac:
|
|
timeout-minutes: 60
|
|
name: Create a macOS bundle
|
|
runs-on:
|
|
- self-hosted
|
|
- bundle
|
|
if: ${{ startsWith(github.ref, 'refs/tags/v') || contains(github.event.pull_request.labels.*.name, 'run-bundling') }}
|
|
needs: [macos_tests]
|
|
env:
|
|
MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }}
|
|
MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
|
|
APPLE_NOTARIZATION_USERNAME: ${{ secrets.APPLE_NOTARIZATION_USERNAME }}
|
|
APPLE_NOTARIZATION_PASSWORD: ${{ secrets.APPLE_NOTARIZATION_PASSWORD }}
|
|
ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
|
|
ZED_CLOUD_PROVIDER_ADDITIONAL_MODELS_JSON: ${{ secrets.ZED_CLOUD_PROVIDER_ADDITIONAL_MODELS_JSON }}
|
|
DIGITALOCEAN_SPACES_ACCESS_KEY: ${{ secrets.DIGITALOCEAN_SPACES_ACCESS_KEY }}
|
|
DIGITALOCEAN_SPACES_SECRET_KEY: ${{ secrets.DIGITALOCEAN_SPACES_SECRET_KEY }}
|
|
steps:
|
|
- name: Install Node
|
|
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4
|
|
with:
|
|
node-version: "18"
|
|
|
|
- name: Checkout repo
|
|
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
|
|
with:
|
|
# We need to fetch more than one commit so that `script/draft-release-notes`
|
|
# is able to diff between the current and previous tag.
|
|
#
|
|
# 25 was chosen arbitrarily.
|
|
fetch-depth: 25
|
|
clean: false
|
|
|
|
- name: Limit target directory size
|
|
run: script/clear-target-dir-if-larger-than 100
|
|
|
|
- name: Determine version and release channel
|
|
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
|
|
run: |
|
|
set -eu
|
|
|
|
version=$(script/get-crate-version zed)
|
|
channel=$(cat crates/zed/RELEASE_CHANNEL)
|
|
echo "Publishing version: ${version} on release channel ${channel}"
|
|
echo "RELEASE_CHANNEL=${channel}" >> $GITHUB_ENV
|
|
|
|
expected_tag_name=""
|
|
case ${channel} in
|
|
stable)
|
|
expected_tag_name="v${version}";;
|
|
preview)
|
|
expected_tag_name="v${version}-pre";;
|
|
nightly)
|
|
expected_tag_name="v${version}-nightly";;
|
|
*)
|
|
echo "can't publish a release on channel ${channel}"
|
|
exit 1;;
|
|
esac
|
|
if [[ $GITHUB_REF_NAME != $expected_tag_name ]]; then
|
|
echo "invalid release tag ${GITHUB_REF_NAME}. expected ${expected_tag_name}"
|
|
exit 1
|
|
fi
|
|
mkdir -p target/
|
|
# Ignore any errors that occur while drafting release notes to not fail the build.
|
|
script/draft-release-notes "$version" "$channel" > target/release-notes.md || true
|
|
|
|
- name: Generate license file
|
|
run: script/generate-licenses
|
|
|
|
- name: Create macOS app bundle
|
|
run: script/bundle-mac
|
|
|
|
- name: Rename single-architecture binaries
|
|
if: ${{ github.ref == 'refs/heads/main' }} || contains(github.event.pull_request.labels.*.name, 'run-bundling') }}
|
|
run: |
|
|
mv target/aarch64-apple-darwin/release/Zed.dmg target/aarch64-apple-darwin/release/Zed-aarch64.dmg
|
|
mv target/x86_64-apple-darwin/release/Zed.dmg target/x86_64-apple-darwin/release/Zed-x86_64.dmg
|
|
|
|
- name: Upload app bundle (universal) to workflow run if main branch or specific label
|
|
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4
|
|
if: ${{ github.ref == 'refs/heads/main' }} || contains(github.event.pull_request.labels.*.name, 'run-bundling') }}
|
|
with:
|
|
name: Zed_${{ github.event.pull_request.head.sha || github.sha }}.dmg
|
|
path: target/release/Zed.dmg
|
|
- name: Upload app bundle (aarch64) to workflow run if main branch or specific label
|
|
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4
|
|
if: ${{ github.ref == 'refs/heads/main' }} || contains(github.event.pull_request.labels.*.name, 'run-bundling') }}
|
|
with:
|
|
name: Zed_${{ github.event.pull_request.head.sha || github.sha }}-aarch64.dmg
|
|
path: target/aarch64-apple-darwin/release/Zed-aarch64.dmg
|
|
|
|
- name: Upload app bundle (x86_64) to workflow run if main branch or specific label
|
|
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4
|
|
if: ${{ github.ref == 'refs/heads/main' }} || contains(github.event.pull_request.labels.*.name, 'run-bundling') }}
|
|
with:
|
|
name: Zed_${{ github.event.pull_request.head.sha || github.sha }}-x86_64.dmg
|
|
path: target/x86_64-apple-darwin/release/Zed-x86_64.dmg
|
|
|
|
- uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # v1
|
|
name: Upload app bundle to release
|
|
if: ${{ env.RELEASE_CHANNEL == 'preview' || env.RELEASE_CHANNEL == 'stable' }}
|
|
with:
|
|
draft: true
|
|
prerelease: ${{ env.RELEASE_CHANNEL == 'preview' }}
|
|
files: |
|
|
target/zed-remote-server-macos-x86_64.gz
|
|
target/zed-remote-server-macos-aarch64.gz
|
|
target/aarch64-apple-darwin/release/Zed-aarch64.dmg
|
|
target/x86_64-apple-darwin/release/Zed-x86_64.dmg
|
|
target/release/Zed.dmg
|
|
body_path: target/release-notes.md
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
bundle-linux:
|
|
timeout-minutes: 60
|
|
name: Create a Linux bundle
|
|
runs-on:
|
|
- self-hosted
|
|
- deploy
|
|
if: ${{ startsWith(github.ref, 'refs/tags/v') || contains(github.event.pull_request.labels.*.name, 'run-bundling') }}
|
|
needs: [linux_tests]
|
|
env:
|
|
ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
|
|
ZED_CLOUD_PROVIDER_ADDITIONAL_MODELS_JSON: ${{ secrets.ZED_CLOUD_PROVIDER_ADDITIONAL_MODELS_JSON }}
|
|
steps:
|
|
- name: Add Rust to the PATH
|
|
run: echo "$HOME/.cargo/bin" >> $GITHUB_PATH
|
|
|
|
- name: Checkout repo
|
|
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
|
|
with:
|
|
clean: false
|
|
|
|
- name: Limit target directory size
|
|
run: script/clear-target-dir-if-larger-than 100
|
|
|
|
- name: Determine version and release channel
|
|
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
|
|
run: |
|
|
set -eu
|
|
|
|
version=$(script/get-crate-version zed)
|
|
channel=$(cat crates/zed/RELEASE_CHANNEL)
|
|
echo "Publishing version: ${version} on release channel ${channel}"
|
|
echo "RELEASE_CHANNEL=${channel}" >> $GITHUB_ENV
|
|
|
|
expected_tag_name=""
|
|
case ${channel} in
|
|
stable)
|
|
expected_tag_name="v${version}";;
|
|
preview)
|
|
expected_tag_name="v${version}-pre";;
|
|
nightly)
|
|
expected_tag_name="v${version}-nightly";;
|
|
*)
|
|
echo "can't publish a release on channel ${channel}"
|
|
exit 1;;
|
|
esac
|
|
if [[ $GITHUB_REF_NAME != $expected_tag_name ]]; then
|
|
echo "invalid release tag ${GITHUB_REF_NAME}. expected ${expected_tag_name}"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Create Linux .tar.gz bundle
|
|
run: script/bundle-linux
|
|
|
|
- name: Upload Linux bundle to workflow run if main branch or specific label
|
|
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4
|
|
if: ${{ github.ref == 'refs/heads/main' }} || contains(github.event.pull_request.labels.*.name, 'run-bundling') }}
|
|
with:
|
|
name: zed-${{ github.event.pull_request.head.sha || github.sha }}-x86_64-unknown-linux-gnu.tar.gz
|
|
path: target/release/zed-*.tar.gz
|
|
|
|
- name: Upload app bundle to release
|
|
uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # v1
|
|
with:
|
|
draft: true
|
|
prerelease: ${{ env.RELEASE_CHANNEL == 'preview' }}
|
|
files: |
|
|
target/zed-remote-server-linux-x86_64.gz
|
|
target/release/zed-linux-x86_64.tar.gz
|
|
body: ""
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
bundle-linux-aarch64: # this runs on ubuntu22.04
|
|
timeout-minutes: 60
|
|
name: Create arm64 Linux bundle
|
|
runs-on:
|
|
- hosted-linux-arm-1
|
|
if: ${{ startsWith(github.ref, 'refs/tags/v') || contains(github.event.pull_request.labels.*.name, 'run-bundling') }}
|
|
needs: [linux_tests]
|
|
env:
|
|
ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
|
|
ZED_CLOUD_PROVIDER_ADDITIONAL_MODELS_JSON: ${{ secrets.ZED_CLOUD_PROVIDER_ADDITIONAL_MODELS_JSON }}
|
|
steps:
|
|
- name: Checkout repo
|
|
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
|
|
with:
|
|
clean: false
|
|
- name: "Setup jq"
|
|
uses: dcarbone/install-jq-action@8867ddb4788346d7c22b72ea2e2ffe4d514c7bcb # v2
|
|
|
|
- name: Set up Clang
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y llvm-15 clang-15 build-essential cmake pkg-config libasound2-dev libfontconfig-dev libwayland-dev libxkbcommon-x11-dev libssl-dev libsqlite3-dev libzstd-dev libvulkan1 libgit2-dev
|
|
echo "/usr/lib/llvm-15/bin" >> $GITHUB_PATH
|
|
|
|
- uses: rui314/setup-mold@0bf4f07ef9048ec62a45f9dbf2f098afa49695f0 # v1
|
|
with:
|
|
mold-version: 2.32.0
|
|
|
|
- name: rustup
|
|
run: |
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
|
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
|
|
|
|
- name: Limit target directory size
|
|
run: script/clear-target-dir-if-larger-than 100
|
|
|
|
- name: Determine version and release channel
|
|
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
|
|
run: |
|
|
set -eu
|
|
|
|
version=$(script/get-crate-version zed)
|
|
channel=$(cat crates/zed/RELEASE_CHANNEL)
|
|
echo "Publishing version: ${version} on release channel ${channel}"
|
|
echo "RELEASE_CHANNEL=${channel}" >> $GITHUB_ENV
|
|
|
|
expected_tag_name=""
|
|
case ${channel} in
|
|
stable)
|
|
expected_tag_name="v${version}";;
|
|
preview)
|
|
expected_tag_name="v${version}-pre";;
|
|
nightly)
|
|
expected_tag_name="v${version}-nightly";;
|
|
*)
|
|
echo "can't publish a release on channel ${channel}"
|
|
exit 1;;
|
|
esac
|
|
if [[ $GITHUB_REF_NAME != $expected_tag_name ]]; then
|
|
echo "invalid release tag ${GITHUB_REF_NAME}. expected ${expected_tag_name}"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Create and upload Linux .tar.gz bundle
|
|
run: script/bundle-linux
|
|
|
|
- name: Upload Linux bundle to workflow run if main branch or specific label
|
|
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4
|
|
if: ${{ github.ref == 'refs/heads/main' }} || contains(github.event.pull_request.labels.*.name, 'run-bundling') }}
|
|
with:
|
|
name: zed-${{ github.event.pull_request.head.sha || github.sha }}-aarch64-unknown-linux-gnu.tar.gz
|
|
path: target/release/zed-*.tar.gz
|
|
|
|
- name: Upload app bundle to release
|
|
uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # v1
|
|
if: ${{ env.RELEASE_CHANNEL == 'preview' || env.RELEASE_CHANNEL == 'stable' }}
|
|
with:
|
|
draft: true
|
|
prerelease: ${{ env.RELEASE_CHANNEL == 'preview' }}
|
|
files: |
|
|
target/zed-remote-server-linux-aarch64.gz
|
|
target/release/zed-linux-aarch64.tar.gz
|
|
body: ""
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|