Critical fixes: - Fix argument mismatch (accept 'core' and '--core' formats) - Fix bash 3.2 compatibility (replace mapfile with while-read loops) - Fix process substitution issues (use temp files) - Add platform detection (macOS/Linux/Windows) - Add bash version check (3.2+ required) - Add conditional color support for Windows terminals Enhancements: - Platform-specific dependency installation instructions - Improved help text with usage examples - Better error messages for unsupported platforms Testing: - Add comprehensive compatibility test suite (12 tests) - Add collision detection tests - Organize tests in scripts/tests/ directory - All tests pass on macOS (bash 3.2.57) Documentation: - Add Windows installation instructions to README - Add platform compatibility guide - Add COMPATIBILITY.md quick reference - Update all test script references Tested on: - macOS 13+ (bash 3.2.57) ✓ - Linux (bash 4.0+) ✓ - Windows Git Bash (bash 4.4+) ✓ Closes issues with curl installation failing on macOS and Windows
179 lines
5 KiB
Bash
Executable file
179 lines
5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
#############################################################################
|
|
# Compatibility Test Script
|
|
# Tests the installer across different bash versions and platforms
|
|
#############################################################################
|
|
|
|
set -e
|
|
|
|
echo "╔════════════════════════════════════════════════════════════════╗"
|
|
echo "║ OpenCode Installer Compatibility Test ║"
|
|
echo "╚════════════════════════════════════════════════════════════════╝"
|
|
echo ""
|
|
|
|
# Colors
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
pass() {
|
|
echo -e "${GREEN}✓${NC} $1"
|
|
}
|
|
|
|
fail() {
|
|
echo -e "${RED}✗${NC} $1"
|
|
exit 1
|
|
}
|
|
|
|
warn() {
|
|
echo -e "${YELLOW}⚠${NC} $1"
|
|
}
|
|
|
|
echo "System Information:"
|
|
echo " Platform: $(uname -s)"
|
|
echo " Bash Version: $BASH_VERSION"
|
|
echo " Shell: $SHELL"
|
|
echo ""
|
|
|
|
# Test 1: Bash version check
|
|
echo "Test 1: Bash Version Compatibility"
|
|
bash_major="${BASH_VERSION%%.*}"
|
|
if [ "$bash_major" -ge 3 ]; then
|
|
pass "Bash version $BASH_VERSION is compatible (3.2+ required)"
|
|
else
|
|
fail "Bash version $BASH_VERSION is too old (3.2+ required)"
|
|
fi
|
|
|
|
# Test 2: Required commands
|
|
echo ""
|
|
echo "Test 2: Required Dependencies"
|
|
for cmd in curl jq; do
|
|
if command -v "$cmd" &> /dev/null; then
|
|
pass "$cmd is installed"
|
|
else
|
|
fail "$cmd is not installed"
|
|
fi
|
|
done
|
|
|
|
# Test 3: Script syntax check
|
|
echo ""
|
|
echo "Test 3: Script Syntax Check"
|
|
if bash -n install.sh 2>/dev/null; then
|
|
pass "Script syntax is valid"
|
|
else
|
|
fail "Script has syntax errors"
|
|
fi
|
|
|
|
# Test 4: Help command
|
|
echo ""
|
|
echo "Test 4: Help Command"
|
|
if bash install.sh help 2>&1 | grep -q "Usage:"; then
|
|
pass "Help command works"
|
|
else
|
|
fail "Help command failed"
|
|
fi
|
|
|
|
# Test 5: List command
|
|
echo ""
|
|
echo "Test 5: List Command"
|
|
if bash install.sh list 2>&1 | grep -q "Available Components"; then
|
|
pass "List command works"
|
|
else
|
|
fail "List command failed"
|
|
fi
|
|
|
|
# Test 6: Profile argument parsing
|
|
echo ""
|
|
echo "Test 6: Profile Argument Parsing"
|
|
for profile in core developer full advanced; do
|
|
if echo "n" | bash install.sh "$profile" 2>&1 | grep -q "Profile:"; then
|
|
pass "Profile '$profile' argument works"
|
|
else
|
|
fail "Profile '$profile' argument failed"
|
|
fi
|
|
done
|
|
|
|
# Test 7: Profile with dashes
|
|
echo ""
|
|
echo "Test 7: Profile Arguments with Dashes"
|
|
for profile in --core --developer --full --advanced; do
|
|
if echo "n" | bash install.sh "$profile" 2>&1 | grep -q "Profile:"; then
|
|
pass "Profile '$profile' argument works"
|
|
else
|
|
fail "Profile '$profile' argument failed"
|
|
fi
|
|
done
|
|
|
|
# Test 8: Array operations
|
|
echo ""
|
|
echo "Test 8: Array Operations"
|
|
test_array=()
|
|
test_array+=("item1")
|
|
test_array+=("item2")
|
|
if [ ${#test_array[@]} -eq 2 ]; then
|
|
pass "Array operations work"
|
|
else
|
|
fail "Array operations failed"
|
|
fi
|
|
|
|
# Test 9: Parameter expansion
|
|
echo ""
|
|
echo "Test 9: Parameter Expansion"
|
|
test_string="type:id"
|
|
type="${test_string%%:*}"
|
|
id="${test_string##*:}"
|
|
if [ "$type" = "type" ] && [ "$id" = "id" ]; then
|
|
pass "Parameter expansion works"
|
|
else
|
|
fail "Parameter expansion failed"
|
|
fi
|
|
|
|
# Test 10: Temp directory creation
|
|
echo ""
|
|
echo "Test 10: Temp Directory Operations"
|
|
test_temp="/tmp/opencode-test-$$"
|
|
mkdir -p "$test_temp"
|
|
if [ -d "$test_temp" ]; then
|
|
pass "Temp directory creation works"
|
|
rm -rf "$test_temp"
|
|
else
|
|
fail "Temp directory creation failed"
|
|
fi
|
|
|
|
# Test 11: File operations
|
|
echo ""
|
|
echo "Test 11: File Operations"
|
|
test_file="/tmp/opencode-test-$$.txt"
|
|
echo "test" > "$test_file"
|
|
if [ -f "$test_file" ]; then
|
|
content=$(cat "$test_file")
|
|
if [ "$content" = "test" ]; then
|
|
pass "File operations work"
|
|
rm -f "$test_file"
|
|
else
|
|
fail "File read failed"
|
|
fi
|
|
else
|
|
fail "File write failed"
|
|
fi
|
|
|
|
# Test 12: Network connectivity
|
|
echo ""
|
|
echo "Test 12: Network Connectivity"
|
|
if curl -fsSL --max-time 5 https://raw.githubusercontent.com/darrenhinde/opencode-agents/main/README.md > /dev/null 2>&1; then
|
|
pass "Network connectivity to GitHub works"
|
|
else
|
|
warn "Network connectivity test failed (may be offline)"
|
|
fi
|
|
|
|
echo ""
|
|
echo "╔════════════════════════════════════════════════════════════════╗"
|
|
echo "║ All Tests Passed! ✓ ║"
|
|
echo "╚════════════════════════════════════════════════════════════════╝"
|
|
echo ""
|
|
echo "Your system is compatible with the OpenCode installer."
|
|
echo "You can safely run:"
|
|
echo " curl -fsSL https://raw.githubusercontent.com/darrenhinde/opencode-agents/main/install.sh | bash"
|
|
echo ""
|