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
5.1 KiB
5.1 KiB
OpenCode Installer Tests
This directory contains test scripts for validating the OpenCode installer functionality and compatibility.
Available Tests
1. Compatibility Test (test-compatibility.sh)
Tests the installer's compatibility across different platforms and bash versions.
Run locally:
bash scripts/tests/test-compatibility.sh
Run remotely:
curl -fsSL https://raw.githubusercontent.com/darrenhinde/opencode-agents/main/scripts/tests/test-compatibility.sh | bash
What it tests:
- ✅ Bash version (3.2+ required)
- ✅ Required dependencies (curl, jq)
- ✅ Script syntax validation
- ✅ Help command functionality
- ✅ List command functionality
- ✅ Profile argument parsing (with and without dashes)
- ✅ Array operations
- ✅ Parameter expansion
- ✅ Temp directory operations
- ✅ File operations
- ✅ Network connectivity
Expected output:
╔════════════════════════════════════════════════════════════════╗
║ OpenCode Installer Compatibility Test ║
╚════════════════════════════════════════════════════════════════╝
System Information:
Platform: macOS
Bash Version: 3.2.57(1)-release
Shell: /bin/bash
[12 tests run...]
╔════════════════════════════════════════════════════════════════╗
║ All Tests Passed! ✓ ║
╚════════════════════════════════════════════════════════════════╝
2. Collision Detection Test (test-collision-detection.sh)
Tests the installer's file collision detection and handling strategies.
Run locally:
bash scripts/tests/test-collision-detection.sh
What it tests:
- ✅ Detection of existing files
- ✅ Skip existing strategy
- ✅ Overwrite strategy
- ✅ Backup & overwrite strategy
- ✅ Collision reporting
- ✅ File grouping by type
Note: This test creates temporary files and directories for testing collision scenarios.
Running All Tests
# From repository root
for test in scripts/tests/test-*.sh; do
echo "Running $test..."
bash "$test"
echo ""
done
Test Requirements
All tests require:
- Bash 3.2 or higher
- curl (for network tests)
- jq (for JSON parsing tests)
- Internet connection (for remote fetch tests)
Adding New Tests
When adding new test scripts:
- Naming convention:
test-<feature>.sh - Make executable:
chmod +x scripts/tests/test-<feature>.sh - Add shebang:
#!/usr/bin/env bash - Use colors: Follow existing color scheme (GREEN, RED, YELLOW)
- Exit codes: Exit 0 on success, 1 on failure
- Documentation: Update this README
Example test structure:
#!/usr/bin/env bash
set -e
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'
echo "Testing feature X..."
# Test 1
if [[ condition ]]; then
echo -e "${GREEN}✓${NC} Test 1 passed"
else
echo -e "${RED}✗${NC} Test 1 failed"
exit 1
fi
echo "All tests passed!"
CI/CD Integration
These tests can be integrated into CI/CD pipelines:
GitHub Actions example:
name: Test Installer
on: [push, pull_request]
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: |
if [[ "$OSTYPE" == "darwin"* ]]; then
brew install jq
else
sudo apt-get install -y jq
fi
- name: Run compatibility tests
run: bash scripts/tests/test-compatibility.sh
Troubleshooting Tests
Test fails with "command not found"
Install missing dependencies:
# macOS
brew install curl jq
# Ubuntu/Debian
sudo apt-get install curl jq
# Fedora/RHEL
sudo dnf install curl jq
Network tests fail
Check internet connectivity:
curl -I https://github.com
Permission errors
Make sure scripts are executable:
chmod +x scripts/tests/*.sh
Test Coverage
Current test coverage:
- ✅ Platform compatibility (macOS, Linux, Windows)
- ✅ Bash version compatibility (3.2+)
- ✅ Argument parsing
- ✅ File collision handling
- ✅ Network operations
- ✅ File system operations
Future test additions:
- Profile installation end-to-end
- Component dependency resolution
- Registry validation
- Error handling scenarios
- Rollback functionality
Contributing
When contributing tests:
- Ensure tests are idempotent (can run multiple times)
- Clean up temporary files/directories
- Provide clear success/failure messages
- Test on multiple platforms if possible
- Update this README with new test documentation