diff --git a/mise.toml b/mise.toml index 038ef3b..22ddba3 100644 --- a/mise.toml +++ b/mise.toml @@ -17,3 +17,6 @@ electron-build = { run = "go build -buildvcs=false -o fetch . && make -C third_p electron-build-mac = { run = "go build -buildvcs=false -o fetch . && make -C third_party/akaiutil && cd electron && npx electron-builder --mac --dir" } docker-up = "docker compose up --build" docker-build = "docker build -t akai-fetch ." +check-toolchain = "bash scripts/check-toolchain.sh" +check-docker-toolchain = "bash scripts/check-docker-toolchain.sh" +check-all = { run = "bash scripts/check-toolchain.sh && echo '' && bash scripts/check-docker-toolchain.sh" } diff --git a/scripts/check-docker-toolchain.sh b/scripts/check-docker-toolchain.sh new file mode 100755 index 0000000..8a63335 --- /dev/null +++ b/scripts/check-docker-toolchain.sh @@ -0,0 +1,115 @@ +#!/usr/bin/env bash +# Check Docker toolchain: docker, docker compose, colima (macOS). +# Usage: ./scripts/check-docker-toolchain.sh +set -euo pipefail + +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +ok() { echo -e " ${GREEN}✓${NC} $1"; } +warn() { echo -e " ${YELLOW}!${NC} $1"; } +fail() { echo -e " ${RED}✗${NC} $1"; } + +IS_MAC=false +[[ "$(uname)" == "Darwin" ]] && IS_MAC=true + +echo "=== Docker Toolchain Check ===" +echo "" + +# ─── Docker ──────────────────────────────────────────────────────────── +echo "Docker:" +if command -v docker &>/dev/null; then + docker_ver=$(docker --version 2>/dev/null) + ok "docker found: $docker_ver" + + # Check if docker daemon is running + if docker info &>/dev/null; then + ok "docker daemon is running" + else + fail "docker daemon is not running" + if $IS_MAC && command -v colima &>/dev/null; then + echo " Try: colima start" + elif $IS_MAC; then + echo " Start Docker Desktop or install colima: brew install colima" + else + echo " Try: sudo systemctl start docker" + fi + fi +else + fail "docker not found" + if command -v brew &>/dev/null; then + echo " Install: brew install --cask docker (Docker Desktop) or brew install docker" + else + echo " Install: https://docs.docker.com/engine/install/" + fi +fi + +echo "" + +# ─── Docker Compose ──────────────────────────────────────────────────── +echo "Docker Compose:" +if docker compose version &>/dev/null 2>&1; then + compose_ver=$(docker compose version 2>/dev/null | head -1) + ok "docker compose plugin found: $compose_ver" +elif command -v docker-compose &>/dev/null; then + compose_ver=$(docker-compose --version 2>/dev/null) + ok "docker-compose found: $compose_ver" +else + fail "docker compose not found" + if command -v brew &>/dev/null; then + echo " Install: brew install docker-compose (legacy) or ensure Docker Desktop includes the plugin" + else + echo " Install: https://docs.docker.com/compose/install/" + fi +fi + +echo "" + +# ─── Colima (macOS only) ─────────────────────────────────────────────── +if $IS_MAC; then + echo "Colima (macOS):" + if command -v colima &>/dev/null; then + colima_ver=$(colima version 2>/dev/null) + ok "colima found: $colima_ver" + + # Check if colima is running + if colima status 2>/dev/null | grep -q "Running"; then + ok "colima is running" + else + warn "colima is not running" + echo " Start: colima start" + fi + + # Check if docker context is set to colima + if docker context inspect 2>/dev/null | grep -q "colima"; then + ok "docker context is set to colima" + else + warn "docker context may not be set to colima" + echo " Switch: docker context use colima" + fi + else + warn "colima not found (alternative to Docker Desktop for macOS)" + if command -v brew &>/dev/null; then + echo " Install: brew install colima" + fi + echo " Note: Not required if using Docker Desktop" + fi + echo "" +fi + +# ─── Docker Buildx ───────────────────────────────────────────────────── +echo "Docker Buildx:" +if docker buildx version &>/dev/null 2>&1; then + buildx_ver=$(docker buildx version 2>/dev/null) + ok "docker buildx found: $buildx_ver" +else + warn "docker buildx not found (needed for multi-platform builds)" + if command -v brew &>/dev/null; then + echo " Install: brew install docker-buildx" + fi +fi + +echo "" +echo "=== Docker toolchain check complete ===" diff --git a/scripts/check-toolchain.sh b/scripts/check-toolchain.sh new file mode 100755 index 0000000..8e62e14 --- /dev/null +++ b/scripts/check-toolchain.sh @@ -0,0 +1,114 @@ +#!/usr/bin/env bash +# Check core toolchain: gcc, homebrew, mise, go, node. +# Usage: ./scripts/check-toolchain.sh +set -euo pipefail + +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +ok() { echo -e " ${GREEN}✓${NC} $1"; } +warn() { echo -e " ${YELLOW}!${NC} $1"; } +fail() { echo -e " ${RED}✗${NC} $1"; } + +echo "=== Core Toolchain Check ===" +echo "" + +# ─── GCC / C Compiler ────────────────────────────────────────────────── +echo "C Compiler:" +if command -v gcc &>/dev/null; then + gcc_ver=$(gcc --version 2>/dev/null | head -1) + ok "gcc found: $gcc_ver" +elif command -v cc &>/dev/null; then + cc_ver=$(cc --version 2>/dev/null | head -1) + ok "cc found: $cc_ver" +elif command -v clang &>/dev/null; then + clang_ver=$(clang --version 2>/dev/null | head -1) + ok "clang found: $clang_ver" +else + fail "No C compiler found" + echo " Install: brew install gcc (macOS) or sudo apt install build-essential (Linux)" + exit 1 +fi + +# Verify gcc can compile (catches broken Xcode toolchain on macOS) +tmp_src=$(mktemp /tmp/toolchain_test.XXXXXX.c) +tmp_bin=$(mktemp /tmp/toolchain_test.XXXXXX) +trap 'rm -f "$tmp_src" "$tmp_bin"' EXIT +cat > "$tmp_src" << 'EOF' +int main(void) { return 0; } +EOF + +if cc "$tmp_src" -o "$tmp_bin" 2>/dev/null || gcc "$tmp_src" -o "$tmp_bin" 2>/dev/null; then + ok "gcc can compile test program" + rm -f "$tmp_bin" +else + fail "gcc cannot compile — toolchain may be broken" + echo " Fix: xcode-select --install (macOS) or reinstall gcc" + exit 1 +fi + +echo "" + +# ─── Homebrew ────────────────────────────────────────────────────────── +echo "Homebrew:" +if command -v brew &>/dev/null; then + brew_path=$(which brew) + ok "brew found at $brew_path" +else + warn "brew not found" + if [[ "$(uname)" == "Darwin" ]]; then + echo " Install: /bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"" + fi +fi + +echo "" + +# ─── Mise ────────────────────────────────────────────────────────────── +echo "Mise:" +if command -v mise &>/dev/null; then + mise_ver=$(mise --version 2>/dev/null) + ok "mise found: $mise_ver" +else + warn "mise not found" + if command -v brew &>/dev/null; then + echo " Install: brew install mise" + else + echo " Install: curl https://mise.run | sh" + fi +fi + +echo "" + +# ─── Go ──────────────────────────────────────────────────────────────── +echo "Go:" +if command -v go &>/dev/null; then + go_ver=$(go version 2>/dev/null) + ok "go found: $go_ver" +else + fail "go not found" + if command -v mise &>/dev/null; then + echo " Install: mise install go" + else + echo " Install: brew install go (macOS) or use mise" + fi + exit 1 +fi + +echo "" + +# ─── Node ────────────────────────────────────────────────────────────── +echo "Node:" +if command -v node &>/dev/null; then + node_ver=$(node --version 2>/dev/null) + ok "node found: $node_ver" +else + warn "node not found (required only for Electron)" + if command -v mise &>/dev/null; then + echo " Install: mise install node" + fi +fi + +echo "" +echo "=== Core toolchain check complete ==="