50 lines
1.6 KiB
Bash
Executable File
50 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
GORI_AGENT_ROOT="${GORI_AGENT_ROOT:-$HOME/.gori-agent}"
|
|
BIN_DIR="$GORI_AGENT_ROOT/bin"
|
|
INSTANCES_DIR="$GORI_AGENT_ROOT/instances"
|
|
PROFILE_FILE="${GORI_AGENT_PROFILE:-$HOME/.bashrc}"
|
|
|
|
umask 077
|
|
mkdir -p "$BIN_DIR" "$INSTANCES_DIR"
|
|
chmod 700 "$GORI_AGENT_ROOT" "$BIN_DIR" "$INSTANCES_DIR"
|
|
|
|
cat >"$BIN_DIR/gori-agent" <<EOF
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
export GORI_AGENT_ROOT="\${GORI_AGENT_ROOT:-$GORI_AGENT_ROOT}"
|
|
exec "$PROJECT_ROOT/gori-agent.sh" "\$@"
|
|
EOF
|
|
chmod 700 "$BIN_DIR/gori-agent"
|
|
|
|
PATH_BLOCK_START="# >>> gori-agent >>>"
|
|
PATH_BLOCK_END="# <<< gori-agent <<<"
|
|
if [[ -w "$PROFILE_FILE" ]]; then
|
|
PROFILE_TEMP="$(mktemp "${PROFILE_FILE}.gori-agent.XXXXXX")"
|
|
if ! awk -v start="$PATH_BLOCK_START" -v end="$PATH_BLOCK_END" '
|
|
$0 == start { if (skipping) exit 2; skipping = 1; next }
|
|
$0 == end { if (!skipping) exit 2; skipping = 0; next }
|
|
!skipping { print }
|
|
END { if (skipping) exit 2 }
|
|
' "$PROFILE_FILE" >"$PROFILE_TEMP"; then
|
|
rm -f "$PROFILE_TEMP"
|
|
echo "Malformed gori-agent block in $PROFILE_FILE" >&2
|
|
exit 1
|
|
fi
|
|
{
|
|
echo "$PATH_BLOCK_START"
|
|
echo "export GORI_AGENT_ROOT=\"$GORI_AGENT_ROOT\""
|
|
echo "export PATH=\"$BIN_DIR:\$PATH\""
|
|
echo "$PATH_BLOCK_END"
|
|
} >>"$PROFILE_TEMP"
|
|
chmod --reference="$PROFILE_FILE" "$PROFILE_TEMP"
|
|
mv "$PROFILE_TEMP" "$PROFILE_FILE"
|
|
fi
|
|
|
|
echo "Installed gori-agent to $BIN_DIR/gori-agent"
|
|
echo "Project root: $PROJECT_ROOT"
|
|
echo "Instances root: $INSTANCES_DIR"
|
|
echo "Run 'source $PROFILE_FILE' or open a new terminal, then use: gori-agent list"
|