From 491394f4fd41ddbc9d0b048d8b1073131138abe0 Mon Sep 17 00:00:00 2001 From: "Kit (OpenClaw)" Date: Sat, 14 Mar 2026 03:34:16 -0400 Subject: [PATCH] Add bundler deployment check script for local preflight Fixes #892 --- script/bundler_deployment_check | 39 +++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100755 script/bundler_deployment_check diff --git a/script/bundler_deployment_check b/script/bundler_deployment_check new file mode 100755 index 000000000..3a4a68a83 --- /dev/null +++ b/script/bundler_deployment_check @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +set -o pipefail + +# Change to the root of the repository +REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$REPO_ROOT" || exit 1 + +echo "Checking Gemfile.lock against path gemspecs in frozen mode..." + +# Run bundle install in frozen mode to simulate CI's deployment check +# We redirect stdout/stderr to a variable to parse the error if it fails +if OUTPUT=$(BUNDLE_FROZEN=true bundle install 2>&1); then + echo "✅ Gemfile.lock is up to date." + exit 0 +else + # Check if the error is the specific frozen mode lockfile mismatch + if echo "$OUTPUT" | grep -q "The gemspecs for path gems changed"; then + echo "❌ ERROR: Gemfile.lock is stale relative to path gemspecs." + echo "" + echo "Several PRs have failed CI early due to this mismatch. CI runs in" + echo "frozen/deployment mode, which requires Gemfile.lock to perfectly" + echo "match the dependencies declared in your local path gemspecs." + echo "" + echo "Canonical fix steps:" + echo " 1. Switch to Ruby 3.2.7 (e.g. \`rbenv shell 3.2.7\`)" + echo " 2. Run \`bundle install\` locally to refresh the lockfile" + echo " 3. Commit the updated \`Gemfile.lock\`" + echo "" + echo " $ bundle install" + echo " $ git add Gemfile.lock" + echo " $ git commit -m 'Refresh Gemfile.lock for path gemspec changes'" + echo "" + else + # Print the original error if it failed for another reason + echo "$OUTPUT" + fi + exit 1 +fi