137 lines
3.5 KiB
Bash
Executable File
137 lines
3.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../../.." && pwd)}"
|
|
|
|
source "$REPO_ROOT/scripts/lib/retry.sh"
|
|
|
|
echo "::group::Installing Linux dependencies"
|
|
|
|
echo "Updating package index..."
|
|
if ! retry_with_backoff sudo apt-get update; then
|
|
echo "::warning::apt-get update failed after retries, continuing anyway..."
|
|
fi
|
|
|
|
packages=(
|
|
tesseract-ocr
|
|
tesseract-ocr-eng
|
|
tesseract-ocr-tur
|
|
tesseract-ocr-deu
|
|
fonts-liberation
|
|
fonts-dejavu-core
|
|
fonts-noto-core
|
|
libssl-dev
|
|
pkg-config
|
|
build-essential
|
|
cmake
|
|
libmagic-dev
|
|
libuv1-dev
|
|
php-cli
|
|
php-dev
|
|
)
|
|
|
|
echo "Installing dependencies..."
|
|
if retry_with_backoff_timeout 900 sudo apt-get install -y "${packages[@]}"; then
|
|
echo "✓ All packages installed successfully"
|
|
else
|
|
exit_code=$?
|
|
if [ $exit_code -eq 124 ]; then
|
|
echo "::error::Package installation timed out after 15 minutes"
|
|
else
|
|
echo "::warning::Some packages failed to install, attempting individual installs..."
|
|
for pkg in tesseract-ocr libssl-dev pkg-config cmake; do
|
|
echo "Installing $pkg..."
|
|
if retry_with_backoff_timeout 300 sudo apt-get install -y "$pkg" 2>&1; then
|
|
echo " ✓ $pkg installed"
|
|
else
|
|
echo " ⚠ Failed to install $pkg"
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
|
|
echo "::endgroup::"
|
|
|
|
echo "::group::Verifying Linux installations"
|
|
|
|
echo "CMake:"
|
|
if command -v cmake >/dev/null 2>&1; then
|
|
cmake --version | head -1
|
|
echo "✓ CMake available"
|
|
# Export CMAKE environment variable for immediate availability in build scripts
|
|
CMAKE_FULL_PATH="$(command -v cmake)"
|
|
if [[ -n "$GITHUB_ENV" ]]; then
|
|
echo "CMAKE=$CMAKE_FULL_PATH" >>"$GITHUB_ENV"
|
|
echo "✓ Set CMAKE=$CMAKE_FULL_PATH in GITHUB_ENV"
|
|
fi
|
|
# Also add cmake binary directory to GITHUB_PATH for subsequent steps
|
|
CMAKE_BIN="$(dirname "$CMAKE_FULL_PATH")"
|
|
if [[ -n "$GITHUB_PATH" && -d "$CMAKE_BIN" ]]; then
|
|
echo "$CMAKE_BIN" >>"$GITHUB_PATH"
|
|
echo "✓ Added cmake directory to GITHUB_PATH: $CMAKE_BIN"
|
|
fi
|
|
else
|
|
echo "::error::CMake not found after installation"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Tesseract:"
|
|
if command -v tesseract >/dev/null 2>&1; then
|
|
if tesseract --version 2>/dev/null | head -1; then
|
|
echo "✓ Tesseract CLI available"
|
|
else
|
|
echo "::warning::Tesseract CLI present but failed to run"
|
|
fi
|
|
else
|
|
echo "::warning::Tesseract CLI not found; continuing (OCR will rely on bundled Tesseract)"
|
|
fi
|
|
|
|
echo ""
|
|
echo "Available Tesseract languages:"
|
|
if command -v tesseract >/dev/null 2>&1; then
|
|
tesseract --list-langs | head -10 || true
|
|
else
|
|
echo "(tesseract CLI not available)"
|
|
fi
|
|
|
|
echo ""
|
|
echo "PHP:"
|
|
if command -v php >/dev/null 2>&1; then
|
|
php --version | head -1
|
|
echo "✓ PHP available"
|
|
else
|
|
echo "::error::PHP not found after installation"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "Checking Tesseract data path..."
|
|
|
|
tessdata_found=0
|
|
for tessdata_path in "/usr/share/tesseract-ocr/5/tessdata" "/usr/share/tesseract-ocr/tessdata"; do
|
|
if [ -d "$tessdata_path" ]; then
|
|
echo "Found tessdata at: $tessdata_path"
|
|
|
|
echo "Required language files:"
|
|
for lang in eng tur deu; do
|
|
if [ -f "$tessdata_path/${lang}.traineddata" ]; then
|
|
size=$(stat -c%s "$tessdata_path/${lang}.traineddata" 2>/dev/null || echo "unknown")
|
|
echo " ✓ ${lang}.traineddata ($size bytes)"
|
|
else
|
|
echo " ⚠ ${lang}.traineddata (missing)"
|
|
fi
|
|
done
|
|
tessdata_found=1
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ $tessdata_found -eq 0 ]; then
|
|
echo "::error::Tessdata directory not found in standard locations"
|
|
exit 1
|
|
fi
|
|
|
|
echo "::endgroup::"
|