feat: add toolchain check scripts and mise tasks
- scripts/check-toolchain.sh: checks gcc, homebrew, mise, go, node - scripts/check-docker-toolchain.sh: checks docker, compose, colima (macOS), buildx - mise tasks: check-toolchain, check-docker-toolchain, check-all
This commit is contained in:
@@ -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" }
|
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-up = "docker compose up --build"
|
||||||
docker-build = "docker build -t akai-fetch ."
|
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" }
|
||||||
|
|||||||
Executable
+115
@@ -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 ==="
|
||||||
Executable
+114
@@ -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 ==="
|
||||||
Reference in New Issue
Block a user