Files
openwork/apps/opencode-router/install.sh
Omar McAdam 2b91b4d777 refactor: repo folder structure (#1038)
* refactor(repo): move OpenWork apps into apps and ee layout

Rebase the monorepo layout migration onto the latest dev changes so the moved app, desktop, share, and cloud surfaces keep working from their new paths. Carry the latest deeplink, token persistence, build, Vercel, and docs updates forward to avoid stale references and broken deploy tooling.

* chore(repo): drop generated desktop artifacts

Ignore the moved Tauri target and sidecar paths so local cargo checks do not pollute the branch. Remove the accidentally committed outputs from the repo while keeping the layout migration intact.

* fix(release): drop built server cli artifact

Stop tracking the locally built apps/server/cli binary so generated server outputs do not leak into commits. Also update the release workflow to check the published scoped package name for @openwork/server before deciding whether npm publish is needed.

* fix(workspace): add stable CLI bin wrappers

Point the server and router package bins at committed wrapper scripts so workspace installs can create shims before dist outputs exist. Keep the wrappers compatible with built binaries and source checkouts to avoid Vercel install warnings without changing runtime behavior.
2026-03-19 11:41:38 -07:00

156 lines
5.4 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
OPENCODE_ROUTER_REF="${OPENCODE_ROUTER_REF:-dev}"
OPENCODE_ROUTER_REPO="${OPENCODE_ROUTER_REPO:-https://github.com/different-ai/openwork.git}"
OPENCODE_ROUTER_INSTALL_DIR="${OPENCODE_ROUTER_INSTALL_DIR:-$HOME/.openwork/opencode-router/openwork}"
OPENCODE_ROUTER_BIN_DIR="${OPENCODE_ROUTER_BIN_DIR:-$HOME/.local/bin}"
OPENCODE_ROUTER_INSTALL_METHOD="${OPENCODE_ROUTER_INSTALL_METHOD:-npm}"
usage() {
cat <<'EOF'
opencode-router installer
Requires: bun (runtime) and node/npm.
Environment variables:
OPENCODE_ROUTER_INSTALL_DIR Install directory (default: ~/.openwork/opencode-router/openwork)
OPENCODE_ROUTER_REPO Git repo (default: https://github.com/different-ai/openwork.git)
OPENCODE_ROUTER_REF Git ref/branch (default: dev)
OPENCODE_ROUTER_BIN_DIR Bin directory for shims (default: ~/.local/bin)
OPENCODE_ROUTER_INSTALL_METHOD Install method: npm|git (default: npm)
Example:
OPENCODE_ROUTER_INSTALL_DIR=~/opencode-router curl -fsSL https://raw.githubusercontent.com/different-ai/openwork/dev/apps/opencode-router/install.sh | bash
EOF
}
if [[ "${1:-}" == "--help" || "${1:-}" == "-h" ]]; then
usage
exit 0
fi
require_bin() {
if ! command -v "$1" >/dev/null 2>&1; then
echo "Missing $1. Please install it and retry." >&2
exit 1
fi
}
require_bin node
require_bin bun
CUSTOM_SHIM_CREATED=false
if [[ "$OPENCODE_ROUTER_INSTALL_METHOD" == "npm" ]]; then
require_bin npm
echo "Installing opencode-router via npm..."
npm install -g opencode-router
else
require_bin git
if ! command -v pnpm >/dev/null 2>&1; then
if command -v corepack >/dev/null 2>&1; then
corepack enable >/dev/null 2>&1 || true
corepack prepare pnpm@10.27.0 --activate
else
echo "pnpm is required. Install pnpm or enable corepack, then retry." >&2
exit 1
fi
fi
if [[ -d "$OPENCODE_ROUTER_INSTALL_DIR/.git" ]]; then
echo "Updating opencode-router source in $OPENCODE_ROUTER_INSTALL_DIR"
git -C "$OPENCODE_ROUTER_INSTALL_DIR" fetch origin --prune
if git -C "$OPENCODE_ROUTER_INSTALL_DIR" show-ref --verify --quiet "refs/remotes/origin/$OPENCODE_ROUTER_REF"; then
git -C "$OPENCODE_ROUTER_INSTALL_DIR" checkout -B "$OPENCODE_ROUTER_REF" "origin/$OPENCODE_ROUTER_REF"
git -C "$OPENCODE_ROUTER_INSTALL_DIR" pull --ff-only origin "$OPENCODE_ROUTER_REF"
else
git -C "$OPENCODE_ROUTER_INSTALL_DIR" checkout -f
git -C "$OPENCODE_ROUTER_INSTALL_DIR" pull --ff-only
fi
else
echo "Cloning opencode-router source to $OPENCODE_ROUTER_INSTALL_DIR"
mkdir -p "$OPENCODE_ROUTER_INSTALL_DIR"
git clone --depth 1 "$OPENCODE_ROUTER_REPO" "$OPENCODE_ROUTER_INSTALL_DIR"
if git -C "$OPENCODE_ROUTER_INSTALL_DIR" show-ref --verify --quiet "refs/remotes/origin/$OPENCODE_ROUTER_REF"; then
git -C "$OPENCODE_ROUTER_INSTALL_DIR" checkout -B "$OPENCODE_ROUTER_REF" "origin/$OPENCODE_ROUTER_REF"
fi
fi
if [[ ! -d "$OPENCODE_ROUTER_INSTALL_DIR/apps/opencode-router" ]]; then
echo "opencode-router package not found on ref '$OPENCODE_ROUTER_REF'. Trying dev/main..." >&2
git -C "$OPENCODE_ROUTER_INSTALL_DIR" fetch origin --prune
if git -C "$OPENCODE_ROUTER_INSTALL_DIR" show-ref --verify --quiet refs/remotes/origin/dev; then
git -C "$OPENCODE_ROUTER_INSTALL_DIR" checkout -B dev origin/dev
elif git -C "$OPENCODE_ROUTER_INSTALL_DIR" show-ref --verify --quiet refs/remotes/origin/main; then
git -C "$OPENCODE_ROUTER_INSTALL_DIR" checkout -B main origin/main
fi
fi
if [[ ! -d "$OPENCODE_ROUTER_INSTALL_DIR/apps/opencode-router" ]]; then
echo "opencode-router package not found after checkout. Aborting." >&2
exit 1
fi
echo "Installing dependencies..."
pnpm -C "$OPENCODE_ROUTER_INSTALL_DIR" install
echo "Building opencode-router..."
pnpm -C "$OPENCODE_ROUTER_INSTALL_DIR/apps/opencode-router" build
ENV_PATH="$OPENCODE_ROUTER_INSTALL_DIR/apps/opencode-router/.env"
ENV_EXAMPLE="$OPENCODE_ROUTER_INSTALL_DIR/apps/opencode-router/.env.example"
if [[ ! -f "$ENV_PATH" ]]; then
if [[ -f "$ENV_EXAMPLE" ]]; then
cp "$ENV_EXAMPLE" "$ENV_PATH"
echo "Created $ENV_PATH"
else
cat <<EOF > "$ENV_PATH"
OPENCODE_URL=http://127.0.0.1:4096
OPENCODE_DIRECTORY=
TELEGRAM_BOT_TOKEN=
SLACK_BOT_TOKEN=
SLACK_APP_TOKEN=
EOF
echo "Created $ENV_PATH (minimal)"
fi
fi
mkdir -p "$OPENCODE_ROUTER_BIN_DIR"
cat <<EOF > "$OPENCODE_ROUTER_BIN_DIR/opencode-router"
#!/usr/bin/env bash
set -euo pipefail
bun "$OPENCODE_ROUTER_INSTALL_DIR/apps/opencode-router/dist/cli.js" "$@"
EOF
chmod 755 "$OPENCODE_ROUTER_BIN_DIR/opencode-router"
CUSTOM_SHIM_CREATED=true
fi
if [[ "$CUSTOM_SHIM_CREATED" == "true" ]] && ! echo ":$PATH:" | grep -q ":$OPENCODE_ROUTER_BIN_DIR:"; then
shell_name="$(basename "${SHELL:-}" 2>/dev/null || true)"
case "$shell_name" in
fish)
echo "Add to PATH (fish): set -Ux PATH $OPENCODE_ROUTER_BIN_DIR \$PATH"
;;
zsh)
echo "Add to PATH (zsh): echo 'export PATH=\"$OPENCODE_ROUTER_BIN_DIR:\$PATH\"' >> ~/.zshrc"
;;
bash)
echo "Add to PATH (bash): echo 'export PATH=\"$OPENCODE_ROUTER_BIN_DIR:\$PATH\"' >> ~/.bashrc"
;;
*)
echo "Add to PATH: export PATH=\"$OPENCODE_ROUTER_BIN_DIR:\$PATH\""
;;
esac
fi
cat <<EOF
opencode-router installed.
Next steps:
1) Verify install: opencode-router --help
2) Add Telegram identity: opencode-router telegram add <token> --id default
3) Start router: opencode-router start
EOF