diff --git a/.github/workflows/jpeg.yml b/.github/workflows/jpeg.yml
--- a/.github/workflows/jpeg.yml
+++ b/.github/workflows/jpeg.yml
@@ -21,7 +21,7 @@ jobs:
     name: JPEG lint, tests, WASM
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@v7
         with:
           persist-credentials: false
       - uses: dtolnay/rust-toolchain@b725eda525362e7cf34af9a7243cac1e3f01a7ec # stable
diff --git a/.github/workflows/keymap.yml b/.github/workflows/keymap.yml
--- a/.github/workflows/keymap.yml
+++ b/.github/workflows/keymap.yml
@@ -27,7 +27,7 @@ jobs:
         with:
           persist-credentials: false
       - name: Checkout test fonts
-        uses: actions/checkout@v4
+        uses: actions/checkout@v7
         with:
           repository: storytold/craft-fonts
           ref: b076417b5880bd4154bd22f00695b1d28c6bea83
@@ -65,7 +65,7 @@ jobs:
         with:
           persist-credentials: false
       - name: Checkout test fonts
-        uses: actions/checkout@v4
+        uses: actions/checkout@v7
         with:
           repository: storytold/craft-fonts
           ref: b076417b5880bd4154bd22f00695b1d28c6bea83
diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml
--- a/.github/workflows/update.yml
+++ b/.github/workflows/update.yml
@@ -21,7 +21,7 @@ jobs:
         os: ${{ github.event_name == 'workflow_dispatch' && fromJSON('["ubuntu-latest","windows-latest","macos-latest"]') || fromJSON('["ubuntu-latest","windows-latest"]') }}
     runs-on: ${{ matrix.os }}
     steps:
-      - uses: actions/checkout@v4
+      - uses: actions/checkout@v7
         with:
           # The token isn't needed after checkout; cargo runs build scripts and proc macros from
           # dependencies, so don't leave it in .git/config for that third-party code to read.
