diff --git a/.github/workflows/pants.yml b/.github/workflows/pants.yml
index aec8ab4..ead748a 100644
--- a/.github/workflows/pants.yml
+++ b/.github/workflows/pants.yml
@@ -1,7 +1,7 @@
 # Copyright 2023 Pants project contributors.
 # Licensed under the Apache License, Version 2.0 (see LICENSE).
 
-# See https://www.pantsbuild.org/2.21/docs/using-pants/using-pants-in-ci for tips on how to set up your CI with Pants.
+# See https://www.pantsbuild.org/stable/docs/using-pants/using-pants-in-ci for tips on how to set up your CI with Pants.
 
 name: Pants
 
@@ -23,7 +23,7 @@ jobs:
       matrix:
         python-version: [3.9]
     steps:
-    - uses: actions/checkout@v3
+    - uses: actions/checkout@v4
     - uses: actions/setup-python@v4
       with:
         python-version: ${{ matrix.python-version }}
@@ -45,7 +45,7 @@ jobs:
         # Note that named_caches and lmdb_store falls back to partial restore keys which
         # may give a useful partial result that will save time over completely clean state,
         # but will cause the cache entry to grow without bound over time.
-        # See https://www.pantsbuild.org/2.21/docs/using-pants/using-pants-in-ci for tips on how to periodically clean it up.
+        # See https://www.pantsbuild.org/stable/docs/using-pants/using-pants-in-ci for tips on how to periodically clean it up.
         # Alternatively you change gha-cache-key to ignore old caches.
     - name: List all build targets
       run:  |
@@ -57,7 +57,7 @@ jobs:
       run: |
         pants lint ::
     - name: Upload pants log
-      uses: actions/upload-artifact@v3
+      uses: actions/upload-artifact@v4
       with:
         name: pants-log
         path: .pants.d/pants.log
diff --git a/pants.toml b/pants.toml
index b4e6f18..5533019 100644
--- a/pants.toml
+++ b/pants.toml
@@ -1,5 +1,5 @@
 [GLOBAL]
-pants_version = "2.21.0"
+pants_version = "2.23.0"
 
 backend_packages.add = [
   "pants.backend.experimental.javascript",