26 lines
1.0 KiB
Bash
Executable File
26 lines
1.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# Installs gems, but only when Gemfile.lock has changed: it remembers the last
|
|
# version it installed, so an unchanged lockfile is a near-instant no-op.
|
|
#
|
|
# Both the gems (via BUNDLE_PATH, set in the Dockerfile) and the marker below
|
|
# live in /code/.safeclaude/cache — on the host, so they persist between runs
|
|
# and stay out of git. Ruby is already on PATH from the Dockerfile, so there's
|
|
# no version manager to initialize here.
|
|
set -euo pipefail
|
|
|
|
[ -f /code/Gemfile ] || exit 0
|
|
|
|
CACHE=/code/.safeclaude/cache
|
|
mkdir -p "$CACHE"
|
|
LOCK=/code/Gemfile.lock
|
|
MARKER="$CACHE/gemfile.sha"
|
|
CUR="$( [ -f "$LOCK" ] && sha256sum "$LOCK" | cut -d' ' -f1 || echo no-lock )"
|
|
|
|
if [ "$(cat "$MARKER" 2>/dev/null || true)" != "$CUR" ]; then
|
|
echo "[bundle] installing gems..."
|
|
# The token below (for a private gem source) comes from .safeclaude/.env — see
|
|
# .env.example. It's fine to leave unset if your project doesn't need it.
|
|
( cd /code && BUNDLE_GEMS__GRAPHQL__PRO="${BUNDLE_GEMS__GRAPHQL__PRO:-}" bundle install )
|
|
echo "$CUR" > "$MARKER"
|
|
fi
|