ci: Enable namespace caching for Linux workers

Piotr Osiewicz created

Change summary

.github/workflows/run_tests.yml                | 46 +++++++++++++++++--
tooling/xtask/src/tasks/workflows/run_tests.rs | 11 +++
tooling/xtask/src/tasks/workflows/steps.rs     | 14 ++++-
3 files changed, 60 insertions(+), 11 deletions(-)

Detailed changes

.github/workflows/run_tests.yml 🔗

@@ -62,6 +62,12 @@ jobs:
     if: github.repository_owner == 'zed-industries'
     runs-on: namespace-profile-4x8-ubuntu-2204
     steps:
+    - name: steps::cache_rust_dependencies_namespace
+      uses: namespacelabs/rust-cache@nscloud-cache-action
+      with:
+        path:
+        - /home/runner/.cargo/bin/cargo-nextest
+        - /home/runner/.cargo/bin/cargo-about
     - name: steps::checkout_repo
       uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
       with:
@@ -145,6 +151,12 @@ jobs:
     - name: steps::install_mold
       run: ./script/install-mold
       shell: bash -euxo pipefail {0}
+    - name: steps::cache_rust_dependencies_namespace
+      uses: namespacelabs/rust-cache@nscloud-cache-action
+      with:
+        path:
+        - /home/runner/.cargo/bin/cargo-nextest
+        - /home/runner/.cargo/bin/cargo-about
     - name: steps::setup_node
       uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
       with:
@@ -214,10 +226,12 @@ jobs:
       uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
       with:
         clean: false
-    - name: steps::cache_rust_dependencies
-      uses: swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6
+    - name: steps::cache_rust_dependencies_namespace
+      uses: namespacelabs/rust-cache@nscloud-cache-action
       with:
-        save-if: ${{ github.ref == 'refs/heads/main' }}
+        path:
+        - /home/runner/.cargo/bin/cargo-nextest
+        - /home/runner/.cargo/bin/cargo-about
     - name: steps::setup_linux
       run: ./script/linux
       shell: bash -euxo pipefail {0}
@@ -261,6 +275,12 @@ jobs:
     - name: steps::install_mold
       run: ./script/install-mold
       shell: bash -euxo pipefail {0}
+    - name: steps::cache_rust_dependencies_namespace
+      uses: namespacelabs/rust-cache@nscloud-cache-action
+      with:
+        path:
+        - /home/runner/.cargo/bin/cargo-nextest
+        - /home/runner/.cargo/bin/cargo-about
     - name: cargo build -p collab
       run: cargo build -p collab
       shell: bash -euxo pipefail {0}
@@ -317,6 +337,12 @@ jobs:
       uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
       with:
         clean: false
+    - name: steps::cache_rust_dependencies_namespace
+      uses: namespacelabs/rust-cache@nscloud-cache-action
+      with:
+        path:
+        - /home/runner/.cargo/bin/cargo-nextest
+        - /home/runner/.cargo/bin/cargo-about
     - name: run_tests::check_dependencies::install_cargo_machete
       uses: clechasseur/rs-cargo@8435b10f6e71c2e3d4d3b7573003a8ce4bfc6386
       with:
@@ -350,10 +376,12 @@ jobs:
         mkdir -p ./../.cargo
         cp ./.cargo/ci-config.toml ./../.cargo/config.toml
       shell: bash -euxo pipefail {0}
-    - name: steps::cache_rust_dependencies
-      uses: swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6
+    - name: steps::cache_rust_dependencies_namespace
+      uses: namespacelabs/rust-cache@nscloud-cache-action
       with:
-        save-if: ${{ github.ref == 'refs/heads/main' }}
+        path:
+        - /home/runner/.cargo/bin/cargo-nextest
+        - /home/runner/.cargo/bin/cargo-about
     - name: run_tests::check_docs::lychee_link_check
       uses: lycheeverse/lychee-action@82202e5e9c2f4ef1a55a3d02563e1cb6041e5332
       with:
@@ -392,6 +420,12 @@ jobs:
       uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
       with:
         clean: false
+    - name: steps::cache_rust_dependencies_namespace
+      uses: namespacelabs/rust-cache@nscloud-cache-action
+      with:
+        path:
+        - /home/runner/.cargo/bin/cargo-nextest
+        - /home/runner/.cargo/bin/cargo-about
     - name: ./script/check-licenses
       run: ./script/check-licenses
       shell: bash -euxo pipefail {0}

tooling/xtask/src/tasks/workflows/run_tests.rs 🔗

@@ -225,6 +225,7 @@ fn check_style() -> NamedJob {
     named::job(
         release_job(&[])
             .runs_on(runners::LINUX_MEDIUM)
+            .add_step(steps::cache_rust_dependencies_namespace())
             .add_step(steps::checkout_repo())
             .add_step(steps::setup_pnpm())
             .add_step(steps::script("./script/prettier"))
@@ -273,6 +274,7 @@ fn check_dependencies() -> NamedJob {
         release_job(&[])
             .runs_on(runners::LINUX_SMALL)
             .add_step(steps::checkout_repo())
+            .add_step(steps::cache_rust_dependencies_namespace())
             .add_step(install_cargo_machete())
             .add_step(run_cargo_machete())
             .add_step(check_cargo_lock())
@@ -287,6 +289,7 @@ fn check_workspace_binaries() -> NamedJob {
             .add_step(steps::checkout_repo())
             .add_step(steps::setup_cargo_config(Platform::Linux))
             .map(steps::install_linux_dependencies)
+            .add_step(steps::cache_rust_dependencies_namespace())
             .add_step(steps::script("cargo build -p collab"))
             .add_step(steps::script("cargo build --workspace --bins --examples"))
             .add_step(steps::cleanup_cargo_config(Platform::Linux)),
@@ -312,6 +315,9 @@ pub(crate) fn run_platform_tests(platform: Platform) -> NamedJob {
                 platform == Platform::Linux,
                 steps::install_linux_dependencies,
             )
+            .when(platform == Platform::Linux, |this| {
+                this.add_step(steps::cache_rust_dependencies_namespace())
+            })
             .add_step(steps::setup_node())
             .add_step(steps::clippy(platform))
             .add_step(steps::cargo_install_nextest(platform))
@@ -371,7 +377,7 @@ fn doctests() -> NamedJob {
         release_job(&[])
             .runs_on(runners::LINUX_DEFAULT)
             .add_step(steps::checkout_repo())
-            .add_step(steps::cache_rust_dependencies())
+            .add_step(steps::cache_rust_dependencies_namespace())
             .map(steps::install_linux_dependencies)
             .add_step(steps::setup_cargo_config(Platform::Linux))
             .add_step(run_doctests())
@@ -384,6 +390,7 @@ fn check_licenses() -> NamedJob {
         Job::default()
             .runs_on(runners::LINUX_SMALL)
             .add_step(steps::checkout_repo())
+            .add_step(steps::cache_rust_dependencies_namespace())
             .add_step(steps::script("./script/check-licenses"))
             .add_step(steps::script("./script/generate-licenses")),
     )
@@ -423,7 +430,7 @@ fn check_docs() -> NamedJob {
             .add_step(steps::checkout_repo())
             .add_step(steps::setup_cargo_config(Platform::Linux))
             // todo(ci): un-inline build_docs/action.yml here
-            .add_step(steps::cache_rust_dependencies())
+            .add_step(steps::cache_rust_dependencies_namespace())
             .add_step(
                 lychee_link_check("./docs/src/**/*"), // check markdown links
             )

tooling/xtask/src/tasks/workflows/steps.rs 🔗

@@ -112,13 +112,21 @@ pub(crate) fn clippy(platform: Platform) -> Step<Run> {
     }
 }
 
-pub(crate) fn cache_rust_dependencies() -> Step<Use> {
+pub(crate) fn cache_rust_dependencies_namespace() -> Step<Use> {
     named::uses(
-        "swatinem",
+        "namespacelabs",
         "rust-cache",
-        "9d47c6ad4b02e050fd481d890b2ea34778fd09d6", // v2
+        "nscloud-cache-action", // v2
     )
     .with(("save-if", "${{ github.ref == 'refs/heads/main' }}"))
+    .with(("cache", "rust"))
+    .with((
+        "path",
+        [
+            "/home/runner/.cargo/bin/cargo-nextest",
+            "/home/runner/.cargo/bin/cargo-about",
+        ],
+    ))
 }
 
 fn setup_linux() -> Step<Run> {