Add Linux build CI (#7581)

Mikayla Maki created

Release Notes:

- N/A

Change summary

.github/actions/check_style/action.yml     |  9 ----
.github/workflows/ci.yml                   | 45 +++++++++++++++++++++--
.github/workflows/deploy_collab.yml        |  4 ++
.github/workflows/release_nightly.yml      |  3 +
crates/gpui/src/platform/linux/platform.rs | 16 --------
script/clippy                              |  7 +++
script/linux                               | 18 ---------
7 files changed, 55 insertions(+), 47 deletions(-)

Detailed changes

.github/actions/check_style/action.yml 🔗

@@ -8,15 +8,6 @@ runs:
           shell: bash -euxo pipefail {0}
           run: cargo fmt --all -- --check
 
-        - name: cargo clippy
-          shell: bash -euxo pipefail {0}
-          # clippy.toml is not currently supporting specifying allowed lints
-          # so specify those here, and disable the rest until Zed's workspace
-          # will have more fixes & suppression for the standard lint set
-          run: |
-              cargo clippy --release --workspace --all-features --all-targets -- -A clippy::all -D clippy::dbg_macro -D clippy::todo
-              cargo clippy -p gpui
-
         - name: Find modified migrations
           shell: bash -euxo pipefail {0}
           run: |

.github/workflows/ci.yml 🔗

@@ -23,7 +23,7 @@ env:
 
 jobs:
     style:
-        name: Check formatting, Clippy lints, and spelling
+        name: Check formatting and spelling
         runs-on:
             - self-hosted
             - test
@@ -59,8 +59,8 @@ jobs:
                   input: "crates/rpc/proto/"
                   against: "https://github.com/${GITHUB_REPOSITORY}.git#branch=main,subdir=crates/rpc/proto/"
 
-    tests:
-        name: Run tests
+    macos_tests:
+        name: (macOS) Run Clippy and tests
         runs-on:
             - self-hosted
             - test
@@ -71,6 +71,10 @@ jobs:
                   clean: false
                   submodules: "recursive"
 
+            - name: cargo clippy
+              shell: bash -euxo pipefail {0}
+              run: script/clippy
+
             - name: Run tests
               uses: ./.github/actions/run_tests
 
@@ -80,13 +84,46 @@ jobs:
             - name: Build other binaries
               run: cargo build --workspace --bins --all-features
 
+    # todo!(linux): Actually run the tests
+    linux_tests:
+        name: (Linux) Run Clippy and tests
+        runs-on: ubuntu-latest
+        steps:
+          - name: Checkout repo
+            uses: actions/checkout@v4
+            with:
+              clean: false
+              submodules: "recursive"
+
+          - name: Restore from cache
+            uses: actions/cache@v3
+            with:
+                path: |
+                  ~/.cargo/bin/
+                  ~/.cargo/registry/index/
+                  ~/.cargo/registry/cache/
+                  ~/.cargo/git/db/
+                  target/
+                key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
+                restore-keys: ${{ runner.os }}-cargo-
+
+          - name: configure linux
+            shell: bash -euxo pipefail {0}
+            run: script/linux
+
+          - name: cargo clippy
+            shell: bash -euxo pipefail {0}
+            run: script/clippy
+
+          - name: Build Zed
+            run: cargo build -p zed
     bundle:
         name: Bundle app
         runs-on:
             - self-hosted
             - bundle
         if: ${{ startsWith(github.ref, 'refs/tags/v') || contains(github.event.pull_request.labels.*.name, 'run-build-dmg') }}
-        needs: tests
+        needs: [macos_tests, linux_tests]
         env:
             MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }}
             MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}

.github/workflows/deploy_collab.yml 🔗

@@ -27,6 +27,10 @@ jobs:
       - name: Run style checks
         uses: ./.github/actions/check_style
 
+      - name: Run clippy
+        shell: bash -euxo pipefail {0}
+        run: script/clippy
+
   tests:
     name: Run tests
     runs-on:

.github/workflows/release_nightly.yml 🔗

@@ -31,6 +31,9 @@ jobs:
             - name: Run style checks
               uses: ./.github/actions/check_style
 
+            - name: Run clippy
+              shell: bash -euxo pipefail {0}
+              run: script/clippy
     tests:
         name: Run tests
         if: github.repository_owner == 'zed-industries'

crates/gpui/src/platform/linux/platform.rs 🔗

@@ -231,22 +231,6 @@ impl Platform for LinuxPlatform {
         Box::new(LinuxWindow(window_ptr))
     }
 
-    fn set_display_link_output_callback(
-        &self,
-        display_id: DisplayId,
-        callback: Box<dyn FnMut() + Send>,
-    ) {
-        log::warn!("unimplemented: set_display_link_output_callback");
-    }
-
-    fn start_display_link(&self, display_id: DisplayId) {
-        unimplemented!()
-    }
-
-    fn stop_display_link(&self, display_id: DisplayId) {
-        unimplemented!()
-    }
-
     fn open_url(&self, url: &str) {
         unimplemented!()
     }

script/clippy 🔗

@@ -0,0 +1,7 @@
+#!/bin/bash
+
+# clippy.toml is not currently supporting specifying allowed lints
+# so specify those here, and disable the rest until Zed's workspace
+# will have more fixes & suppression for the standard lint set
+cargo clippy --release --workspace --all-features --all-targets -- -A clippy::all -D clippy::dbg_macro -D clippy::todo
+cargo clippy -p gpui

script/linux 🔗

@@ -1,25 +1,7 @@
 #!/usr/bin/bash -e
 
-# if not on Linux, do nothing
-[[ $(uname) == "Linux" ]] || exit 0
-
-# Copy assets to the user's home directory if they don't exist
-mkdir -p "$HOME/.config/zed"
-
-mkdir -p "$HOME/.config/zed/plugins"
-
-mkdir -p "$HOME/.config/zed/themes"
-cp -ruL ./assets/themes/*/*.json "$HOME/.config/zed/themes"
-
-test -f "$HOME/.config/zed/settings.json" ||
-  cp -uL ./assets/settings/initial_user_settings.json "$HOME/.config/zed/settings.json"
-
-test -f "$HOME/.config/zed/keymap.json" ||
-  cp -uL ./assets/keymaps/default.json "$HOME/.config/zed/keymap.json"
-
 # if sudo is not installed, define an empty alias
 maysudo=$(command -v sudo || true)
-export maysudo
 
 # Ubuntu, Debian, etc.
 # https://packages.ubuntu.com/