AkurAI Build
Menu

Public repository / 0908278601908726896075f810fec7409e85d203

AkurAI-EC2 / install.sh

Latest change d7eb6622a4697643ecf906b39e64b71c72e8a69b - fix: harden v2 manifest install and parsing by Claude Code

#!/usr/bin/env bash
set -euo pipefail

usage() {
  cat <<'EOF'
usage: ./install.sh [--symlink|--copy] [--dry-run]

Install bin/akurai-ec2 to ~/.local/bin/akurai-ec2.

  --symlink  install a symlink (default)
  --copy     install a standalone copy
  --dry-run  print the actions without changing anything
EOF
}

die() {
  printf 'install.sh: %s\n' "$*" >&2
  exit 1
}

run() {
  if [ "$dry_run" -eq 1 ]; then
    printf '+'
    printf ' %q' "$@"
    printf '\n'
  else
    "$@"
  fi
}

mode="symlink"
dry_run=0

while [ $# -gt 0 ]; do
  case "$1" in
    --symlink)
      mode="symlink"
      ;;
    --copy)
      mode="copy"
      ;;
    --dry-run)
      dry_run=1
      ;;
    -h|--help)
      usage
      exit 0
      ;;
    *)
      die "unknown argument: $1"
      ;;
  esac
  shift
done

script_dir="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
src="$script_dir/bin/akurai-ec2"
helper_src="$script_dir/libexec/akurai-ec2-manifest.py"
target="${AKURAI_EC2_INSTALL_TARGET:-$HOME/.local/bin/akurai-ec2}"
target_dir="$(dirname -- "$target")"
helper_target_dir="$(dirname -- "$target_dir")/libexec"
helper_target="$helper_target_dir/akurai-ec2-manifest.py"

[ -f "$src" ] || die "source script not found: $src"
[ "$mode" != "copy" ] || [ -f "$helper_src" ] || die "manifest helper not found: $helper_src"

src_resolved="$(readlink -f -- "$src")"
timestamp="$(date +%Y%m%d%H%M%S)"
backup=""

run mkdir -p -- "$target_dir"
run chmod 755 -- "$src"

if [ "$mode" = "symlink" ] && [ -L "$target" ]; then
  target_resolved="$(readlink -f -- "$target" 2>/dev/null || true)"
  if [ "$target_resolved" = "$src_resolved" ]; then
    printf 'already linked: %s -> %s\n' "$target" "$src"
    exit 0
  fi
fi

if [ "$mode" = "copy" ] && [ -f "$target" ] && [ ! -L "$target" ] && cmp -s -- "$src" "$target" \
  && [ -f "$helper_target" ] && cmp -s -- "$helper_src" "$helper_target"; then
  run chmod 755 -- "$target"
  run chmod 755 -- "$helper_target"
  printf 'already installed: %s\n' "$target"
  exit 0
fi

if [ -e "$target" ] || [ -L "$target" ]; then
  backup="$target.bak.$timestamp"
  run mv -- "$target" "$backup"
  printf 'backed up existing target to %s\n' "$backup"
fi

if [ "$mode" = "copy" ]; then
  run mkdir -p -- "$helper_target_dir"
  run install -m 755 -- "$src" "$target"
  run install -m 755 -- "$helper_src" "$helper_target"
  printf 'installed copy: %s\n' "$target"
  printf 'installed helper: %s\n' "$helper_target"
else
  run ln -s -- "$src" "$target"
  printf 'installed symlink: %s -> %s\n' "$target" "$src"
fi