diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 1f8c468475470c..ecea4d398cf4e8 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -107,12 +107,13 @@ jobs:
           key: ${{ github.job }}-${{ runner.os }}-${{ env.IMAGE_VERSION }}-${{ needs.check_source.outputs.config_hash }}-${{ env.pythonLocation }}
       - name: Install Dependencies
         run: sudo ./.github/workflows/posix-deps-apt.sh
-      - name: Add ccache to PATH
-        run: echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
-      - name: Configure ccache action
-        uses: hendrikmuhs/ccache-action@v1.2
-        with:
-          save: false
+      - name: Start sccache-cache
+        uses: mozilla-actions/sccache-action@v0.0.6
+      - name: Configure CC and CXX env vars
+        run: |
+          echo "CC=sccache gcc" >> "$GITHUB_ENV"
+          echo "CXX=sccache gcc" >> "$GITHUB_ENV"
+          echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV"
       - name: Configure CPython
         run: |
           # Build Python with the libpython dynamic library
@@ -284,13 +285,13 @@ jobs:
     - name: Install OpenSSL
       if: steps.cache-openssl.outputs.cache-hit != 'true'
       run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --openssl "$OPENSSL_VER" --system Linux
-    - name: Add ccache to PATH
+    - name: Start sccache-cache
+      uses: mozilla-actions/sccache-action@v0.0.6
+    - name: Configure CC and CXX env vars
       run: |
-        echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
-    - name: Configure ccache action
-      uses: hendrikmuhs/ccache-action@v1.2
-      with:
-        save: false
+        echo "CC=sccache gcc" >> "$GITHUB_ENV"
+        echo "CXX=sccache gcc" >> "$GITHUB_ENV"
+        echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV"
     - name: Configure CPython
       run: ./configure CFLAGS="-fdiagnostics-format=json" --config-cache --enable-slower-safety --with-pydebug --with-openssl="$OPENSSL_DIR"
     - name: Build CPython
@@ -337,13 +338,13 @@ jobs:
     - name: Install OpenSSL
       if: steps.cache-openssl.outputs.cache-hit != 'true'
       run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --openssl "$OPENSSL_VER" --system Linux
-    - name: Add ccache to PATH
+    - name: Start sccache-cache
+      uses: mozilla-actions/sccache-action@v0.0.6
+    - name: Configure CC and CXX env vars
       run: |
-        echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
-    - name: Configure ccache action
-      uses: hendrikmuhs/ccache-action@v1.2
-      with:
-        save: false
+        echo "CC=sccache gcc" >> "$GITHUB_ENV"
+        echo "CXX=sccache gcc" >> "$GITHUB_ENV"
+        echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV"
     - name: Setup directory envs for out-of-tree builds
       run: |
         echo "CPYTHON_RO_SRCDIR=$(realpath -m "${GITHUB_WORKSPACE}"/../cpython-ro-srcdir)" >> "$GITHUB_ENV"
@@ -466,14 +467,13 @@ jobs:
     - name: Install OpenSSL
       if: steps.cache-openssl.outputs.cache-hit != 'true'
       run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --openssl "$OPENSSL_VER" --system Linux
-    - name: Add ccache to PATH
+    - name: Start sccache-cache
+      uses: mozilla-actions/sccache-action@v0.0.6
+    - name: Configure CC and CXX env vars
       run: |
-        echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
-    - name: Configure ccache action
-      uses: hendrikmuhs/ccache-action@v1.2
-      with:
-        save: ${{ github.event_name == 'push' }}
-        max-size: "200M"
+        echo "CC=sccache gcc" >> "$GITHUB_ENV"
+        echo "CXX=sccache gcc" >> "$GITHUB_ENV"
+        echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV"
     - name: Configure CPython
       run: ./configure --config-cache --with-address-sanitizer --without-pymalloc
     - name: Build CPython
diff --git a/.github/workflows/reusable-macos.yml b/.github/workflows/reusable-macos.yml
index 4c3dd10194f8cb..e3b1a24b1bb085 100644
--- a/.github/workflows/reusable-macos.yml
+++ b/.github/workflows/reusable-macos.yml
@@ -41,6 +41,13 @@ jobs:
         brew install pkg-config openssl@3.0 xz gdbm tcl-tk@8 make
         # Because alternate versions are not symlinked into place by default:
         brew link tcl-tk@8
+    - name: Start sccache-cache
+      uses: mozilla-actions/sccache-action@v0.0.6
+    - name: Configure CC and CXX env vars
+      run: |
+        echo "CC=sccache clang" >> "$GITHUB_ENV"
+        echo "CXX=sccache clang" >> "$GITHUB_ENV"
+        echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV"
     - name: Configure CPython
       run: |
         GDBM_CFLAGS="-I$(brew --prefix gdbm)/include" \
diff --git a/.github/workflows/reusable-tsan.yml b/.github/workflows/reusable-tsan.yml
index 7a4d81f0bdcad1..cfb6cbb8866120 100644
--- a/.github/workflows/reusable-tsan.yml
+++ b/.github/workflows/reusable-tsan.yml
@@ -45,19 +45,14 @@ jobs:
         sudo update-alternatives --set clang++ /usr/bin/clang++-17
         # Reduce ASLR to avoid TSAN crashing
         sudo sysctl -w vm.mmap_rnd_bits=28
+    - name: Start sccache-cache
+      uses: mozilla-actions/sccache-action@v0.0.6
     - name: TSAN Option Setup
       run: |
         echo "TSAN_OPTIONS=log_path=${GITHUB_WORKSPACE}/tsan_log suppressions=${GITHUB_WORKSPACE}/${{ inputs.suppressions_path }} handle_segv=0" >> "$GITHUB_ENV"
-        echo "CC=clang" >> "$GITHUB_ENV"
-        echo "CXX=clang++" >> "$GITHUB_ENV"
-    - name: Add ccache to PATH
-      run: |
-        echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
-    - name: Configure ccache action
-      uses: hendrikmuhs/ccache-action@v1.2
-      with:
-        save: ${{ github.event_name == 'push' }}
-        max-size: "200M"
+        echo "CC=sccache clang" >> "$GITHUB_ENV"
+        echo "CXX=sccache clang++" >> "$GITHUB_ENV"
+        echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV"
     - name: Configure CPython
       run: ${{ inputs.options }}
     - name: Build CPython
diff --git a/.github/workflows/reusable-ubuntu.yml b/.github/workflows/reusable-ubuntu.yml
index 642354f8b4f61b..f1e2b780111bb8 100644
--- a/.github/workflows/reusable-ubuntu.yml
+++ b/.github/workflows/reusable-ubuntu.yml
@@ -32,6 +32,13 @@ jobs:
       run: echo "::add-matcher::.github/problem-matchers/gcc.json"
     - name: Install dependencies
       run: sudo ./.github/workflows/posix-deps-apt.sh
+    - name: Start sccache-cache
+      uses: mozilla-actions/sccache-action@v0.0.6
+    - name: Configure CC and CXX env vars
+      run: |
+        echo "CC=sccache gcc" >> "$GITHUB_ENV"
+        echo "CXX=sccache gcc" >> "$GITHUB_ENV"
+        echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV"
     - name: Configure OpenSSL env vars
       run: |
         echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> "$GITHUB_ENV"
@@ -46,14 +53,6 @@ jobs:
     - name: Install OpenSSL
       if: steps.cache-openssl.outputs.cache-hit != 'true'
       run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --openssl "$OPENSSL_VER" --system Linux
-    - name: Add ccache to PATH
-      run: |
-        echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
-    - name: Configure ccache action
-      uses: hendrikmuhs/ccache-action@v1.2
-      with:
-        save: ${{ github.event_name == 'push' }}
-        max-size: "200M"
     - name: Setup directory envs for out-of-tree builds
       run: |
         echo "CPYTHON_RO_SRCDIR=$(realpath -m "${GITHUB_WORKSPACE}"/../cpython-ro-srcdir)" >> "$GITHUB_ENV"
diff --git a/.github/workflows/reusable-wasi.yml b/.github/workflows/reusable-wasi.yml
index 3f96c888e2dd30..4d6dd21742c981 100644
--- a/.github/workflows/reusable-wasi.yml
+++ b/.github/workflows/reusable-wasi.yml
@@ -18,6 +18,7 @@ jobs:
       WASI_SDK_PATH: /opt/wasi-sdk
       CROSS_BUILD_PYTHON: cross-build/build
       CROSS_BUILD_WASI: cross-build/wasm32-wasip1
+      SCCACHE_GHA_ENABLED: "true"
     steps:
     - uses: actions/checkout@v4
     # No problem resolver registered as one doesn't currently exist for Clang.
@@ -37,13 +38,8 @@ jobs:
         mkdir ${{ env.WASI_SDK_PATH }} && \
         curl -s -S --location https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${{ env.WASI_SDK_VERSION }}/wasi-sdk-${{ env.WASI_SDK_VERSION }}.0-x86_64-linux.tar.gz | \
         tar --strip-components 1 --directory ${{ env.WASI_SDK_PATH }} --extract --gunzip
-    - name: "Configure ccache action"
-      uses: hendrikmuhs/ccache-action@v1.2
-      with:
-        save: ${{ github.event_name == 'push' }}
-        max-size: "200M"
-    - name: "Add ccache to PATH"
-      run: echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
+    - name: Start sccache-cache
+      uses: mozilla-actions/sccache-action@v0.0.6
     - name: "Install Python"
       uses: actions/setup-python@v5
       with:
diff --git a/Tools/wasm/wasi.py b/Tools/wasm/wasi.py
index ac36d55587a38f..5b39b4037ff17e 100644
--- a/Tools/wasm/wasi.py
+++ b/Tools/wasm/wasi.py
@@ -176,10 +176,16 @@ def wasi_sdk_env(context):
     for env_var, binary_name in list(env.items()):
         env[env_var] = os.fsdecode(wasi_sdk_path / "bin" / binary_name)
 
+    compiler_env_names = ("CC", "CPP", "CXX")
     if wasi_sdk_path != pathlib.Path("/opt/wasi-sdk"):
-        for compiler in ["CC", "CPP", "CXX"]:
+        for compiler in compiler_env_names:
             env[compiler] += f" --sysroot={sysroot}"
 
+    # sccache used in CI via .github/workflows/reusable-wasi.yaml
+    if subprocess.call(("sccache", "--version"), stderr=subprocess.DEVNULL) == 0:
+        for compiler in compiler_env_names:
+            env[compiler] = 'sccache ' + env[compiler]
+
     env["PKG_CONFIG_PATH"] = ""
     env["PKG_CONFIG_LIBDIR"] = os.pathsep.join(
                                 map(os.fsdecode,