Files
oh-my-pi/scripts/link-omp.sh
T
roboomp db9d9f3f59 fix(setup): harden global omp symlink against bun pm -g bin failure
The root `setup` script used `ln -sfn ... "$(bun pm -g bin)/omp"`. On
fresh hosts where `$HOME/.bun/install/global/package.json` is missing
`bun pm -g bin` aborts with "No package.json was found", the command
substitution expands to empty, and `ln` tries to write `/omp` —
failing with `Permission denied` (or, on a writable filesystem,
silently linking under `/`).

Move the logic into `scripts/link-omp.sh`:

- Capture `bun pm -g bin` and ignore its failure.
- Fall back to `${BUN_INSTALL:-$HOME/.bun}/bin`, matching Bun's own
  install convention.
- `mkdir -p` the target so the link works even when nothing has yet
  populated the global bin dir.

Fixes #3701
2026-06-28 04:27:03 +00:00

32 lines
1.2 KiB
Bash
Executable File

#!/bin/sh
# Install the dev `omp` wrapper into Bun's global bin directory.
#
# Replaces the bun-shebang symlink that `bun --cwd=packages/coding-agent link`
# creates (pointing at `src/cli.ts`) with the safer wrapper at
# `packages/coding-agent/scripts/omp`. See that wrapper's header comment for the
# bunfig.toml-preload bug it works around.
#
# We resolve Bun's global bin path defensively because `bun pm -g bin` aborts
# (`No package.json was found for directory "$HOME/.bun/install/global"`) on
# fresh hosts where the global install has not been initialized. Falling
# through that error would expand `$(bun pm -g bin)/omp` to `/omp` and try to
# write under `/` — see https://github.com/can1357/oh-my-pi/issues/3701.
set -e
repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd -P)
target=$repo_root/packages/coding-agent/scripts/omp
if [ ! -x "$target" ]; then
echo "link-omp: target wrapper not found or not executable: $target" >&2
exit 1
fi
global_bin=$(bun pm -g bin 2>/dev/null || true)
if [ -z "$global_bin" ]; then
global_bin=${BUN_INSTALL:-$HOME/.bun}/bin
fi
mkdir -p "$global_bin"
ln -sfn "$target" "$global_bin/omp"
echo "link-omp: linked $global_bin/omp -> $target"