[pull] main from zed-industries:main #2127
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
- main | |
- "v[0-9]+.[0-9]+.x" | |
tags: | |
- "v*" | |
pull_request: | |
branches: | |
- "**" | |
merge_group: | |
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 | |
RUSTFLAGS: "-D warnings" | |
jobs: | |
check_docs_only: | |
runs-on: ubuntu-latest | |
outputs: | |
docs_only: ${{ steps.check_changes.outputs.docs_only }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Check for non-docs changes | |
id: check_changes | |
run: | | |
if git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | grep -qvE '^docs/'; then | |
echo "docs_only=false" >> $GITHUB_OUTPUT | |
else | |
echo "docs_only=true" >> $GITHUB_OUTPUT | |
fi | |
migration_checks: | |
name: Check Postgres and Protobuf migrations, mergability | |
if: github.repository_owner == 'zed-industries' | |
timeout-minutes: 60 | |
runs-on: | |
- self-hosted | |
- test | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | |
with: | |
clean: false | |
fetch-depth: 0 # fetch full history | |
- name: Remove untracked files | |
run: git clean -df | |
- name: Find modified migrations | |
shell: bash -euxo pipefail {0} | |
run: | | |
export SQUAWK_GITHUB_TOKEN=${{ github.token }} | |
. ./script/squawk | |
- 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/" | |
style: | |
timeout-minutes: 60 | |
name: Check formatting and spelling | |
if: github.repository_owner == 'zed-industries' | |
runs-on: | |
- buildjet-8vcpu-ubuntu-2204 | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | |
# To support writing comments that they will certainly be revisited. | |
- name: Check for todo! and FIXME comments | |
run: script/check-todos | |
- name: Run style checks | |
uses: ./.github/actions/check_style | |
- name: Check for typos | |
uses: crate-ci/typos@8e6a4285bcbde632c5d79900a7779746e8b7ea3f # v1.24.6 | |
with: | |
config: ./typos.toml | |
macos_tests: | |
timeout-minutes: 60 | |
name: (macOS) Run Clippy and tests | |
if: github.repository_owner == 'zed-industries' | |
runs-on: | |
- self-hosted | |
- test | |
needs: check_docs_only | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | |
with: | |
clean: false | |
- name: cargo clippy | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
run: ./script/clippy | |
- name: Check unused dependencies | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
uses: bnjbvr/cargo-machete@main | |
- name: Check licenses | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
run: | | |
script/check-licenses | |
script/generate-licenses /tmp/zed_licenses_output | |
- name: Check for new vulnerable dependencies | |
if: github.event_name == 'pull_request' && needs.check_docs_only.outputs.docs_only == 'false' | |
uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4 | |
with: | |
license-check: false | |
- name: Run tests | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
uses: ./.github/actions/run_tests | |
- name: Build collab | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
run: cargo build -p collab | |
- name: Build other binaries and features | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
run: | | |
cargo build --workspace --bins --all-features | |
cargo check -p gpui --features "macos-blade" | |
cargo check -p workspace | |
cargo build -p remote_server | |
script/check-rust-livekit-macos | |
linux_tests: | |
timeout-minutes: 60 | |
name: (Linux) Run Clippy and tests | |
if: github.repository_owner == 'zed-industries' | |
runs-on: | |
- buildjet-16vcpu-ubuntu-2204 | |
needs: check_docs_only | |
steps: | |
- name: Add Rust to the PATH | |
run: echo "$HOME/.cargo/bin" >> $GITHUB_PATH | |
- name: Checkout repo | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | |
with: | |
clean: false | |
- name: Cache dependencies | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
uses: swatinem/rust-cache@82a92a6e8fbeee089604da2575dc567ae9ddeaab # v2 | |
with: | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
cache-provider: "buildjet" | |
- name: Install Linux dependencies | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
run: ./script/linux | |
- name: cargo clippy | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
run: ./script/clippy | |
- name: Run tests | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
uses: ./.github/actions/run_tests | |
- name: Build other binaries and features | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
run: | | |
cargo build -p zed | |
cargo check -p workspace | |
build_remote_server: | |
timeout-minutes: 60 | |
name: (Linux) Build Remote Server | |
if: github.repository_owner == 'zed-industries' | |
runs-on: | |
- buildjet-16vcpu-ubuntu-2204 | |
needs: check_docs_only | |
steps: | |
- name: Add Rust to the PATH | |
run: echo "$HOME/.cargo/bin" >> $GITHUB_PATH | |
- name: Checkout repo | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | |
with: | |
clean: false | |
- name: Cache dependencies | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
uses: swatinem/rust-cache@82a92a6e8fbeee089604da2575dc567ae9ddeaab # v2 | |
with: | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
cache-provider: "buildjet" | |
- name: Install Clang & Mold | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
run: ./script/remote-server && ./script/install-mold 2.34.0 | |
- name: Build Remote Server | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
run: cargo build -p remote_server | |
# todo(windows): Actually run the tests | |
windows_tests: | |
timeout-minutes: 60 | |
name: (Windows) Run Clippy and tests | |
if: github.repository_owner == 'zed-industries' | |
runs-on: hosted-windows-1 | |
needs: check_docs_only | |
steps: | |
# more info here:- https://github.com/rust-lang/cargo/issues/13020 | |
- name: Enable longer pathnames for git | |
run: git config --system core.longpaths true | |
- name: Checkout repo | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | |
with: | |
clean: false | |
- name: Cache dependencies | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
uses: swatinem/rust-cache@82a92a6e8fbeee089604da2575dc567ae9ddeaab # v2 | |
with: | |
save-if: ${{ github.ref == 'refs/heads/main' }} | |
cache-provider: "github" | |
- name: cargo clippy | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
# Windows can't run shell scripts, so we need to use `cargo xtask`. | |
run: cargo xtask clippy | |
- name: Build Zed | |
if: needs.check_docs_only.outputs.docs_only == 'false' | |
run: cargo build | |
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@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4 | |
with: | |
node-version: "18" | |
- name: Checkout repo | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 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 | |
ref: ${{ github.ref }} | |
- 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: | | |
# This exports RELEASE_CHANNEL into env (GITHUB_ENV) | |
script/determine-release-channel | |
- name: Draft release notes | |
if: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
run: | | |
mkdir -p target/ | |
# Ignore any errors that occur while drafting release notes to not fail the build. | |
script/draft-release-notes "$RELEASE_VERSION" "$RELEASE_CHANNEL" > target/release-notes.md || true | |
script/create-draft-release target/release-notes.md | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Generate license file | |
run: script/generate-licenses | |
- name: Create macOS app bundle | |
run: script/bundle-mac | |
- name: Rename 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 (aarch64) to workflow run if main branch or specific label | |
uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # 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@6f51ac03b9356f520e9adb1b1b7802705f340c2b # 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 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
bundle-linux: | |
timeout-minutes: 60 | |
name: Create a Linux bundle | |
runs-on: | |
- buildjet-16vcpu-ubuntu-2004 | |
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | |
with: | |
clean: false | |
- name: Install Linux dependencies | |
run: ./script/linux && ./script/install-mold 2.34.0 | |
- name: Determine version and release channel | |
if: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
run: | | |
# This exports RELEASE_CHANNEL into env (GITHUB_ENV) | |
script/determine-release-channel | |
- 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@6f51ac03b9356f520e9adb1b1b7802705f340c2b # 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 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
bundle-linux-aarch64: # this runs on ubuntu22.04 | |
timeout-minutes: 60 | |
name: Create arm64 Linux bundle | |
runs-on: | |
- buildjet-16vcpu-ubuntu-2204-arm | |
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 | |
with: | |
clean: false | |
- name: Install Linux dependencies | |
run: ./script/linux | |
- name: Determine version and release channel | |
if: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
run: | | |
# This exports RELEASE_CHANNEL into env (GITHUB_ENV) | |
script/determine-release-channel | |
- 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@6f51ac03b9356f520e9adb1b1b7802705f340c2b # 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 | |
with: | |
draft: true | |
prerelease: ${{ env.RELEASE_CHANNEL == 'preview' }} | |
files: | | |
target/zed-remote-server-linux-aarch64.gz | |
target/release/zed-linux-aarch64.tar.gz | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
auto-release-preview: | |
name: Auto release preview | |
if: ${{ startsWith(github.ref, 'refs/tags/v') && endsWith(github.ref, '-pre') && !endsWith(github.ref, '.0-pre') }} | |
needs: [bundle-mac, bundle-linux, bundle-linux-aarch64] | |
runs-on: | |
- self-hosted | |
- bundle | |
steps: | |
- name: gh release | |
run: gh release edit $GITHUB_REF_NAME --draft=false | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |