fix: resolve remaining markdown lint errors #3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Tests | |
| on: [push, pull_request] | |
| jobs: | |
| test: | |
| name: Test on ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest, macos-latest] | |
| fail-fast: false | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Set up test environment | |
| run: | | |
| # Create a mock set-me-up directory structure for testing | |
| mkdir -p "$HOME/set-me-up/dotfiles/utilities" | |
| - name: Create mock utilities.sh | |
| run: | | |
| # Create a mock utilities.sh with common functions for testing | |
| cat > "$HOME/set-me-up/dotfiles/utilities/utilities.sh" << 'EOF' | |
| #!/bin/bash | |
| # Mock utility functions for testing | |
| # OS Detection | |
| is_macos() { [[ "$OSTYPE" == "darwin"* ]]; } | |
| is_debian() { [[ -f /etc/debian_version ]]; } | |
| is_arch_linux() { [[ -f /etc/arch-release ]]; } | |
| is_ubuntu() { [[ "$(lsb_release -si 2>/dev/null)" == "Ubuntu" ]]; } | |
| # Output functions | |
| action() { echo "[ACTION] $1"; } | |
| success() { echo "[SUCCESS] $1"; } | |
| error() { echo "[ERROR] $1" >&2; } | |
| warning() { echo "[WARNING] $1"; } | |
| # Utility functions | |
| cmd_exists() { command -v "$1" &>/dev/null; } | |
| ask_for_sudo() { echo "[SUDO] Requesting sudo access (mock)"; } | |
| # Package management (mock) | |
| brew_install() { echo "[BREW] Would install: $1"; } | |
| brew_update() { echo "[BREW] Would update"; } | |
| brew_upgrade() { echo "[BREW] Would upgrade"; } | |
| brew_cleanup() { echo "[BREW] Would cleanup"; } | |
| apt_install() { echo "[APT] Would install: $1"; } | |
| apt_install_from_file() { echo "[APT] Would install from file: $1"; } | |
| install_ports_from_file() { echo "[PORTS] Would install from file: $1"; } | |
| install_pkg_from_URL() { echo "[PKG] Would install from URL: $1"; } | |
| initialize_brew() { echo "[BREW] Would initialize"; } | |
| # Additional mocks | |
| is_macports_installed() { false; } | |
| macports_update() { echo "[PORTS] Would update"; } | |
| EOF | |
| chmod +x "$HOME/set-me-up/dotfiles/utilities/utilities.sh" | |
| - name: Verify utilities.sh mock | |
| run: | | |
| if [ -f "$HOME/set-me-up/dotfiles/utilities/utilities.sh" ]; then | |
| echo "✓ Mock utilities.sh created successfully" | |
| cat "$HOME/set-me-up/dotfiles/utilities/utilities.sh" | |
| else | |
| echo "✗ Failed to create mock utilities.sh" | |
| exit 1 | |
| fi | |
| - name: Test bash syntax for all scripts | |
| run: | | |
| echo "Testing bash syntax..." | |
| find . -type f \( -name "*.sh" -o -name "*.bash" \) -not -path "*/.*" | while read -r file; do | |
| echo "Checking syntax: $file" | |
| if bash -n "$file"; then | |
| echo "✓ Valid syntax: $file" | |
| else | |
| echo "✗ Syntax error in: $file" | |
| exit 1 | |
| fi | |
| done | |
| - name: Test script sourcing | |
| run: | | |
| echo "Testing script can source utilities..." | |
| # Find the main module script | |
| SCRIPT=$(find . -maxdepth 1 -name "*.sh" -not -name "install.sh" -type f | head -n 1) | |
| if [ -n "$SCRIPT" ]; then | |
| echo "Found script: $SCRIPT" | |
| # Test that script can be sourced (but not executed) | |
| bash -n "$SCRIPT" && echo "✓ Script syntax valid" || exit 1 | |
| else | |
| echo "⚠️ No main script found to test" | |
| fi | |
| - name: Test module execution (dry-run) | |
| run: | | |
| echo "Testing module execution..." | |
| SCRIPT=$(find . -maxdepth 1 -name "*.sh" -not -name "install.sh" -type f | head -n 1) | |
| if [ -n "$SCRIPT" ]; then | |
| echo "Testing: $SCRIPT" | |
| # Run the script (will use mock utilities) | |
| # Note: This will execute the script but with mocked functions | |
| # In a real module, you might want to add a --dry-run flag | |
| if bash "$SCRIPT" 2>&1 | tee test_output.log; then | |
| echo "✓ Script executed without errors" | |
| else | |
| EXIT_CODE=$? | |
| echo "Script execution details:" | |
| cat test_output.log | |
| # Some scripts may intentionally exit with non-zero for missing dependencies | |
| # Check if it's a legitimate error | |
| if grep -qi "error\|failed" test_output.log && ! grep -qi "mock" test_output.log; then | |
| echo "✗ Script execution failed" | |
| exit $EXIT_CODE | |
| else | |
| echo "⚠️ Script exited with code $EXIT_CODE (may be expected in test environment)" | |
| fi | |
| fi | |
| else | |
| echo "⚠️ No main script found to test" | |
| fi | |
| - name: Verify shellcheck compliance | |
| run: | | |
| # This step verifies shellcheck was already run in lint workflow | |
| echo "ShellCheck validation is handled by the lint workflow" | |
| echo "✓ See lint.yml for ShellCheck configuration" | |
| - name: Check for required file structure | |
| run: | | |
| echo "Checking module structure..." | |
| # Check for essential files | |
| [ -f ".github/LICENSE" ] && echo "✓ LICENSE found" || echo "⚠️ LICENSE not found" | |
| [ -f ".github/README.md" ] && echo "✓ README.md found" || echo "⚠️ README.md not found" | |
| [ -f ".gitignore" ] && echo "✓ .gitignore found" || echo "⚠️ .gitignore not found" | |
| # Check for at least one .sh script | |
| if find . -maxdepth 1 -name "*.sh" -type f | grep -q .; then | |
| echo "✓ Shell script(s) found" | |
| else | |
| echo "⚠️ No shell scripts found" | |
| fi | |
| - name: Test OS detection | |
| run: | | |
| echo "Testing OS detection..." | |
| source "$HOME/set-me-up/dotfiles/utilities/utilities.sh" | |
| if is_macos; then | |
| echo "✓ Detected macOS" | |
| elif is_debian; then | |
| echo "✓ Detected Debian-based Linux" | |
| elif is_arch_linux; then | |
| echo "✓ Detected Arch Linux" | |
| else | |
| echo "✓ Running on: $OSTYPE" | |
| fi | |
| - name: Generate test report | |
| if: always() | |
| run: | | |
| echo "## Test Report" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "- **OS**: ${{ matrix.os }}" >> $GITHUB_STEP_SUMMARY | |
| echo "- **Shell**: $(bash --version | head -n 1)" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| SCRIPT_COUNT=$(find . -maxdepth 1 -name "*.sh" -type f | wc -l | tr -d ' ') | |
| echo "- **Scripts tested**: $SCRIPT_COUNT" >> $GITHUB_STEP_SUMMARY | |
| if [ -f test_output.log ]; then | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Execution Output" >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| head -n 20 test_output.log >> $GITHUB_STEP_SUMMARY | |
| echo '```' >> $GITHUB_STEP_SUMMARY | |
| fi |