diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 17840e62fbb..434afb59255 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -30,7 +30,7 @@ jobs:
     if: github.event_name == 'pull_request' || github.repository != 'discourse/discourse-private-mirror'
     name: ${{ matrix.target }} ${{ matrix.build_type }} # Update fetch-job-id step if changing this
     runs-on: ${{ (github.repository != 'discourse/discourse' && 'ubuntu-22.04-8core') || 'debian-12' }}
-    container: discourse/discourse_test:slim${{ (matrix.build_type == 'frontend' || matrix.build_type == 'system') && '-browsers' || '' }}
+    container: discourse/discourse_test:${{ (github.repository == 'discourse/discourse' && 'release') || format('slim{0}', (matrix.build_type == 'frontend' || matrix.build_type == 'system') && '-browsers' || '') }}
     timeout-minutes: 20
 
     env:
@@ -111,10 +111,15 @@ jobs:
 
       - name: Bundler cache
         uses: actions/cache@v4
+        if: github.repository != 'discourse/discourse'
         with:
           path: vendor/bundle
           key: ${{ runner.os }}-${{ steps.container-envs.outputs.ruby_version }}-${{ steps.container-envs.outputs.debian_release }}-gem-${{ hashFiles('**/Gemfile.lock') }}-cachev2
 
+      - name: Copy gems to vendor/bundle
+        if: github.repository == 'discourse/discourse'
+        run: cp -r /var/www/discourse/vendor/bundle vendor/bundle
+
       - name: Setup gems
         run: |
           gem install bundler --conservative -v $(awk '/BUNDLED WITH/ { getline; gsub(/ /,""); print $0 }' Gemfile.lock)