diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml
index 41cf544..bf691d6 100644
--- a/.github/workflows/format.yml
+++ b/.github/workflows/format.yml
@@ -14,7 +14,6 @@ jobs:
     runs-on: ubuntu-latest
     steps:
     - uses: actions/checkout@v4
-    - uses: actions/setup-python@v4
     - name: Install clang-format
       run: sudo apt-get install clang-format
-    - uses: pre-commit/action@v3.0.0
+    - uses: pre-commit/action@v3.0.1
diff --git a/.github/workflows/industrial_ci_action.yml b/.github/workflows/industrial_ci_action.yml
index 6a808fb..f1198ca 100644
--- a/.github/workflows/industrial_ci_action.yml
+++ b/.github/workflows/industrial_ci_action.yml
@@ -20,17 +20,18 @@ jobs:
     steps:
       - uses: actions/checkout@v4
       - name: cache ccache
-        uses: pat-s/always-upload-cache@v3
+        uses: actions/cache@v4
         with:
+          save-always: true
           path: ${{ env.CCACHE_DIR }}
           key: ccache-${{ env.CACHE_PREFIX }}-${{ github.sha }}
           restore-keys: |
             ccache-${{ env.CACHE_PREFIX }}
       - name: industrial_ci
-        uses: 'ros-industrial/industrial_ci@master'
+        uses: ros-industrial/industrial_ci@master
         env: ${{ matrix.env }}
       - name: upload test artifacts (on failure)
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         if: failure()
         with:
           name: test-results
diff --git a/.github/workflows/prerelease.yaml b/.github/workflows/prerelease.yaml
index b16c602..c61c820 100644
--- a/.github/workflows/prerelease.yaml
+++ b/.github/workflows/prerelease.yaml
@@ -5,24 +5,27 @@ name: pre-release
 
 on:
   workflow_dispatch:
-  push:
+    inputs:
+      ROS_DISTRO:
+        type: string
+        required: true
+        description: 'ROS distribution codename:'
+        default: noetic
+
+permissions:
+  contents: read # to fetch code (actions/checkout)
 
 jobs:
   default:
-    strategy:
-      fail-fast: false
-      matrix:
-        distro: [noetic]
-
     env:
       # https://github.com/ros-industrial/industrial_ci/issues/666
       BUILDER: catkin_make_isolated
-      ROS_DISTRO: ${{ matrix.distro }}
+      ROS_DISTRO: ${{ inputs.ROS_DISTRO }}
       PRERELEASE: true
       BASEDIR: ${{ github.workspace }}/.work
 
     if: github.event_name == 'workflow_disptach' # only allow manual triggering
-    name: "${{ matrix.distro }}"
+    name: "${{ inputs.ROS_DISTRO }}"
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v4
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 09254d9..34ae3ac 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -15,7 +15,7 @@
 repos:
   # Standard hooks
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v4.4.0
+    rev: v4.6.0
     hooks:
       - id: check-added-large-files
       - id: check-case-conflict