# CI Workflow Scripts This directory contains extracted scripts from GitHub Actions CI workflows, organized by workflow type. ## Overview - **Total Scripts**: 41 (27 Bash + 14 PowerShell) - **Documentation**: See `SCRIPT_MAPPING.md` for detailed workflow-to-script mapping - **All Scripts**: Production-ready with proper error handling and documentation ## Directory Structure ```text scripts/ci/ ├── README.md ← This file ├── SCRIPT_MAPPING.md ← Detailed workflow-to-script mapping guide ├── docker/ ← Docker image build and test scripts ├── go/ ← Go bindings scripts ├── java/ ← Java bindings scripts ├── node/ ← Node/TypeScript NAPI scripts ├── python/ ← Python wheel build scripts ├── ruby/ ← Ruby gem build scripts ├── rust/ ← Rust core and CLI scripts ├── csharp/ ← C# bindings scripts └── validate/ ← Validation and linting scripts ``` ## Quick Start ### Running a Script **Bash scripts:** ```bash ./scripts/ci/docker/build-image.sh core ./scripts/ci/python/run-tests.sh true ``` **PowerShell scripts:** ```powershell & ./scripts/ci/go/build-ffi.ps1 & ./scripts/ci/rust/package-cli-windows.ps1 -Target "x86_64-pc-windows-msvc" ``` ### Sourcing Scripts For library path setup scripts: ```bash source ./scripts/lib/library-paths.sh setup_all_library_paths ./scripts/ci/python/run-tests.sh true ``` ## Scripts by Workflow ### Docker (`docker/`) - `free-disk-space.sh` - Clean up CI disk space - `build-image.sh` - Build Docker image variant - `check-image-size.sh` - Validate image size constraints - `save-image.sh` - Save Docker image as tar.gz artifact - `collect-logs.sh` - Collect container logs on failure - `cleanup.sh` - Clean up Docker resources - `summary.sh` - Print test summary ### Go (`go/`) - `build-ffi.sh` - Build FFI library (Unix) - `build-ffi.ps1` - Build FFI library (Windows) - `build-bindings.sh` - Build Go bindings with CGO (Unix) - `build-bindings.ps1` - Build Go bindings with CGO (Windows) - `reorganize-libraries.ps1` - Reorganize FFI libraries for Windows - `run-tests.sh` - Run Go tests with library paths ### Java (`java/`) - `build-java.sh` - Build Java bindings with Maven - `run-tests.sh` - Run Java tests with Maven ### Node/TypeScript (`node/`) - `build-napi.sh` - Build NAPI bindings with artifact collection - `unpack-bindings.sh` - Unpack and install bindings from tarball ### Python (`python/`) - `clean-artifacts.sh` - Clean previous wheel artifacts - `smoke-test-wheel.sh` - Test wheel installation - `install-wheel.sh` - Install platform-specific wheel - `run-tests.sh` - Run tests with optional coverage ### Ruby (`ruby/`) - `install-ruby-deps.sh` - Install bundle dependencies (Unix) - `install-ruby-deps.ps1` - Install bundle dependencies (Windows) - `vendor-kreuzberg-core.py` - Vendor core crate for packaging - `configure-bindgen-windows.ps1` - Configure bindgen headers (Windows) - `configure-tesseract-windows.ps1` - Configure Tesseract (Windows) - `build-gem.sh` - Build Ruby gem - `install-gem.sh` - Install built gem - `compile-extension.sh` - Compile native extension - `run-tests.sh` - Run RSpec tests ### Rust (`rust/`) - `configure-bindgen-windows.ps1` - Configure bindgen headers (Windows) - `run-unit-tests.sh` - Run Rust unit tests - `package-cli-unix.sh` - Package CLI as tar.gz (Unix) - `package-cli-windows.ps1` - Package CLI as zip (Windows) - `test-cli-unix.sh` - Test CLI binary (Unix) - `test-cli-windows.ps1` - Test CLI binary (Windows) ### C# (`csharp/`) - `build-csharp.sh` - Build C# bindings with dotnet - `run-tests.sh` - Run C# tests with dotnet ### Validate (`validate/`) - `run-lint.sh` - Run all linting and validation checks via Task ## Features ### Error Handling - All Bash scripts use `set -euo pipefail` - All PowerShell scripts use `Set-StrictMode` and error action preferences - Proper exit codes and error messages - Usage information for incorrect arguments ### Documentation - Every script has a descriptive header - Purpose and usage clearly stated - Which CI workflow step uses it - Argument documentation ### Platform Support - Windows-specific operations via PowerShell (.ps1) - Unix operations via Bash (.sh) - Cross-platform scripts detect OS and adjust behavior - Library path setup scripts handle Windows/Linux/macOS ### Reusability - `library-paths.sh` (`scripts/lib/`) - Shared by all workflows for native library configuration - `configure-bindgen-windows.ps1` used by Ruby and Rust - Common patterns consolidated into single scripts ## Detailed Documentation For comprehensive workflow-to-script mapping and usage examples, see `SCRIPT_MAPPING.md`. ## Usage in Workflows ### Example: ci-docker.yaml **Before (inline commands):** ```yaml - name: Free up disk space run: | echo "=== Initial disk space ===" df -h / echo "=== Removing unnecessary packages ===" sudo rm -rf /usr/share/dotnet # ... 30+ lines of commands ... ``` **After (using script):** ```yaml - name: Free up disk space run: ./scripts/ci/docker/free-disk-space.sh ``` ### Example: ci-python.yaml **Before (inline commands):** ```yaml - name: Run Python tests run: | cd packages/python if [ "${{ matrix.coverage }}" = "true" ]; then uv run pytest -vv --cov=kreuzberg --cov-report=lcov:coverage.lcov ... else uv run pytest -vv --reruns 1 --reruns-delay 1 fi ``` **After (using script):** ```yaml - name: Run Python tests run: ./scripts/ci/python/run-tests.sh ${{ matrix.coverage }} ``` ## Testing Scripts Locally You can test scripts locally before running in CI: ```bash # Test Docker scripts ./scripts/ci/docker/free-disk-space.sh # Test Python scripts ./scripts/ci/python/clean-artifacts.sh ./scripts/ci/python/run-tests.sh false # Test Rust scripts ./scripts/ci/rust/run-unit-tests.sh ``` ## Shell Compatibility - **Bash scripts**: Compatible with bash 3.2+ (macOS) and bash 4.0+ (Linux) - **PowerShell scripts**: Compatible with PowerShell 5.1+ (Windows) and PowerShell Core 7+ (cross-platform) ## Contributing When adding new CI steps or modifying existing ones: 1. Extract the inline script into a separate file in the appropriate directory 2. Add proper error handling (`set -euo pipefail` for bash) 3. Include descriptive header comments 4. Update `SCRIPT_MAPPING.md` with the new mapping 5. Test the script locally before committing ## Maintenance Scripts should be reviewed and updated when: - Updating CI workflow logic - Changing build tools or versions - Improving error handling - Adding new platform support See each script's header for detailed documentation on its purpose and usage.