Skip to content

feat: auto-install all deps in install script#146

Merged
riley0227 merged 18 commits intomainfrom
feat/install-script-auto-deps
Apr 6, 2026
Merged

feat: auto-install all deps in install script#146
riley0227 merged 18 commits intomainfrom
feat/install-script-auto-deps

Conversation

@riley0227
Copy link
Copy Markdown
Contributor

@riley0227 riley0227 commented Apr 5, 2026

Summary

  • Install script now handles everything from scratch -- no manual prereqs needed
  • Auto-installs: curl, Homebrew (macOS), git, Node.js 22, Docker + Docker Compose
  • Handles Docker Desktop first-launch ToS dialog (guides user, waits automatically)
  • Catches Docker Hub rate limit errors with clear docker login instructions
  • Linux: sudo fallback when docker group is not active yet
  • Windows: guided manual Docker Desktop install (only manual step on any platform)
  • Adds requirements.txt documenting every dependency

Test plan

  • Remove Docker Desktop on macOS, run install script from this branch
  • Verify Docker Desktop installs and starts (accept ToS in GUI)
  • Verify backend comes up healthy on localhost:8090
  • Verify ix --version works after install
  • Test on a fresh Linux VM (Docker Engine path)

Generated with Claude Code

- Step 0: auto-install Homebrew (macOS), git (Xcode CLT / apt / dnf)
- Step 2: auto-install Docker (brew/dmg on macOS, get.docker.com on
  Linux). Handles first-launch ToS dialog, daemon startup, sudo
  fallback on Linux, Docker Hub rate limit errors
- Step 3: pull images separately with clear rate limit / auth errors
- Add requirements.txt documenting every dependency

All POSIX-compatible (#!/bin/sh) per #144.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@riley0227 riley0227 force-pushed the feat/install-script-auto-deps branch from dd697d2 to 834f6ce Compare April 5, 2026 22:31
riley0227 and others added 17 commits April 5, 2026 15:44
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds a POSIX-compatible progress bar during brew cask install.
Cleans stale Docker symlinks in /usr/local/bin before installing
to prevent "already a Binary" errors from previous installs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Stop backgrounding brew install — it needs to show progress and
handle sudo prompts. Clean stale symlinks without sudo first,
only escalate if needed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove any existing Docker symlinks/binaries (not just broken ones)
and uninstall any failed previous cask before attempting brew install.
Handles partial installs that leave valid but conflicting symlinks.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use osascript to activate Docker Desktop window so the user
sees the license agreement dialog immediately.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
uname reports x86_64 when running under Rosetta on Apple Silicon,
causing the wrong Docker Desktop (Intel) to be installed. Now uses
sysctl hw.optional.arm64 to detect the real hardware.

Also switches from brew cask to direct DMG download for Docker
Desktop to avoid brew architecture mismatches entirely.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Switch _download from silent curl to --progress-bar so users
see download progress for large files like Docker Desktop DMG.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Docker Desktop only creates /usr/local/bin/docker on first launch,
not during install. Now launches it immediately after copying to
/Applications and waits for the docker CLI to become available.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds ripgrep to Step 0 prerequisites. Installs via brew on macOS,
apt/dnf/apk on Linux. Non-fatal if install fails (just warns).

Also audited all external tool usage in the CLI — the full list is:
git, rg, docker, curl, node. All now installed by the script.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Docker Desktop on macOS can take 2-3 minutes on first launch to
accept license, initialize, and create CLI symlinks. Now waits up
to 3 min for symlinks, falls through to ToS prompt if needed,
never errors while Docker Desktop is still initializing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…eady

One simple flow: install, open, tell user to accept license, wait
up to 6 minutes for docker CLI + daemon to both be ready. No
premature failures.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Docker Desktop fails to start if old processes are still running.
Now kills all Docker-related processes before install and before
first launch.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Wait 90 seconds quietly first. If Docker starts up in that time
(license already accepted), no prompt shown. Only show the license
setup box if Docker hasn't become ready after 90 seconds.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The root cause of all Docker detection failures: command -v docker
does not work in a piped sh subshell (curl | sh) even when the
binary exists at /usr/local/bin/docker. Now uses find_docker()
which checks absolute paths directly. Works on macOS, Linux, Windows.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
If docker binary exists AND docker info succeeds, skip install,
skip launching, skip waiting, skip license prompt. Just prints
'Docker is ready' and moves on. Only enters the install/launch
flow when Docker is actually missing or the daemon isn't running.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@riley0227 riley0227 merged commit 5728519 into main Apr 6, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant