ci: Improve GitHub Action modularity (#18861)

Peter Tripp created

- Closes: https://github.com/zed-industries/zed/issues/19351
- Switch to using the official [typos GitHub Action](https://github.com/crate-ci/typos/blob/master/docs/github-action.md)
- Move the typos check into `actions/check_style`
- Move Squawk Postgres migration check out of `actions/check_style` file into ci.yml
- `actions/check_style` can now be run on stateless/linux runners (previous required self-hosted MacOS runner)
- ci.yml: Split old `style` into checks into those that can run statelessly (linux) and everything else into a new `migration` group which benefit from the full git checkout available on the MacOS runners.
- ci.yml: Move `Check unused dependencies` from style to `linux_tests`
- Add `if: github.repository_owner == 'zed-industries'` to all jobs so they won't try and run on GitHub forks.

Change summary

.github/actions/check_style/action.yml  | 11 ++---
.github/workflows/ci.yml                | 47 +++++++++++++++++---------
.github/workflows/deploy_cloudflare.yml |  1 
.github/workflows/docs.yml              |  8 +++-
script/check-spelling                   | 14 --------
5 files changed, 42 insertions(+), 39 deletions(-)

Detailed changes

.github/actions/check_style/action.yml 🔗

@@ -4,12 +4,11 @@ description: "Checks code formatting use cargo fmt"
 runs:
   using: "composite"
   steps:
+    - name: Check for Typos with Typos-CLI
+      uses: crate-ci/typos@v1.24.6
+      with:
+        config: ./typos.toml
+
     - name: cargo fmt
       shell: bash -euxo pipefail {0}
       run: cargo fmt --all -- --check
-
-    - name: Find modified migrations
-      shell: bash -euxo pipefail {0}
-      run: |
-        export SQUAWK_GITHUB_TOKEN=${{ github.token }}
-        . ./script/squawk

.github/workflows/ci.yml 🔗

@@ -26,9 +26,10 @@ env:
   RUST_BACKTRACE: 1
 
 jobs:
-  style:
+  migration_checks:
+    name: Check Postgres and Protobuf migrations, mergability
+    if: github.repository_owner == 'zed-industries'
     timeout-minutes: 60
-    name: Check formatting and spelling
     runs-on:
       - self-hosted
       - test
@@ -37,25 +38,16 @@ jobs:
         uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4
         with:
           clean: false
-          fetch-depth: 0
+          fetch-depth: 0 # fetch full history
 
       - name: Remove untracked files
         run: git clean -df
 
-      - name: Check spelling
-        run: script/check-spelling
-
-      - 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: 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}
@@ -77,6 +69,19 @@ jobs:
           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@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
+
+      - name: Run style checks
+        uses: ./.github/actions/check_style
+
   macos_tests:
     timeout-minutes: 60
     name: (macOS) Run Clippy and tests
@@ -92,6 +97,14 @@ jobs:
       - name: cargo clippy
         run: ./script/clippy
 
+      - name: Check unused dependencies
+        uses: bnjbvr/cargo-machete@main
+
+      - name: Check licenses
+        run: |
+          script/check-licenses
+          script/generate-licenses /tmp/zed_licenses_output
+
       - name: Run tests
         uses: ./.github/actions/run_tests
 

.github/workflows/docs.yml 🔗

@@ -11,6 +11,7 @@ on:
 jobs:
   check_formatting:
     name: "Check formatting"
+    if: github.repository_owner == 'zed-industries'
     runs-on: ubuntu-latest
 
     steps:
@@ -29,5 +30,8 @@ jobs:
             false
           }
 
-      - name: Check spelling
-        run: script/check-spelling docs/
+      - name: Check for Typos with Typos-CLI
+        uses: crate-ci/typos@v1.24.6
+        with:
+          config: ./typos.toml
+          files: ./docs/

script/check-spelling 🔗

@@ -1,14 +0,0 @@
-#!/bin/sh
-
-set -eu
-
-TYPOS_CLI_VERSION=1.24.6
-TARGET_DIR=${1:-""}
-
-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 $TARGET_DIR