diff --git a/action.yml b/action.yml
index b8d9032..3386bb8 100644
--- a/action.yml
+++ b/action.yml
@@ -24,22 +24,15 @@ inputs:
 runs:
   using: "composite"
   steps:
-    - run: |
-        if [[ -n '${{ inputs.inputs }}' ]]; then
-          inputs=()
-          for input in ${{ inputs.inputs }}; do
-            inputs+=("--update-input" "$input")
-          done
-          nix flake lock "${inputs[@]}" --commit-lock-file --commit-lockfile-summary "${{ inputs.commit-msg }}"
-        else
-          nix flake update --commit-lock-file --commit-lockfile-summary "${{ inputs.commit-msg }}"
-        fi
+    - run: $GITHUB_ACTION_PATH/update-flake-lock.sh
       shell: bash
       env:
         GIT_AUTHOR_NAME: github-actions[bot]
         GIT_AUTHOR_EMAIL: <github-actions[bot]@users.noreply.github.com>
         GIT_COMMITTER_NAME: github-actions[bot]
         GIT_COMMITTER_EMAIL: <github-actions[bot]@users.noreply.github.com>
+        TARGETS: ${{ inputs.inputs }}
+        COMMIT_MSG: ${{ inputs.commit-msg }}
     - run: |
         content="$(git log --format=%b -n 1)"
         content="${content//'%'/'%25'}"
diff --git a/update-flake-lock.sh b/update-flake-lock.sh
new file mode 100755
index 0000000..c191dfa
--- /dev/null
+++ b/update-flake-lock.sh
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+if [[ -n "$TARGETS" ]]; then
+    inputs=()
+    for input in $TARGETS; do
+        inputs+=("--update-input" "$input")
+    done
+    nix flake lock "${inputs[@]}" --commit-lock-file --commit-lockfile-summary "$COMMIT_MSG"
+else
+    nix flake update --commit-lock-file --commit-lockfile-summary "$COMMIT_MSG"
+fi