PHP ETL (Extract–Transform–Load) with a REST API and web UI. Three projects:
| Project | Role |
|---|---|
| source-watcher-core | ETL engine (extractors, transformers, loaders) |
| source-watcher-api | REST API (auth, DB, endpoints) |
| source-watcher-board | Web UI (login, transformations canvas) |
Use docker run so you don't depend on Docker Compose networks (avoids iptables issues on some hosts).
Do this once, and again after any change to Dockerfile.dev:
sudo docker compose -f docker-compose.dev.yml buildIf Compose fails, build the image directly:
sudo docker build -f Dockerfile.dev -t source-watcher-dev:latest .Core:
sudo docker run --rm -v "$(pwd)":/app -w /app/source-watcher-core composer:2 sh -c "composer install --no-interaction --ignore-platform-reqs"API:
sudo docker run --rm -v "$(pwd)":/app -w /app/source-watcher-api composer:2 sh -c "composer install --no-interaction --ignore-platform-reqs"Core:
sudo docker run --rm -v "$(pwd)":/app -w /app/source-watcher-core composer:2 sh -c "composer update --no-interaction --ignore-platform-reqs"API:
sudo docker run --rm -v "$(pwd)":/app -w /app/source-watcher-api composer:2 sh -c "composer update --no-interaction --ignore-platform-reqs"Run after installing dependencies (step 2).
Core:
sudo docker run --rm -v "$(pwd)":/app -w /app/source-watcher-core composer:2 sh -c "./vendor/bin/phpunit"API:
sudo docker run --rm -v "$(pwd)":/app -w /app/source-watcher-api composer:2 sh -c "./vendor/bin/phpunit"Requires the dev image (step 1). Run after installing dependencies (step 2).
Core:
sudo docker run --rm -v "$(pwd)":/app -w /app/source-watcher-core source-watcher-dev:latest sh -c "./vendor/bin/phpunit --coverage-text"- Text: summary is printed in the terminal.
- HTML: open
source-watcher-core/phpunit-report/coverage-html/index.htmlin a browser for a line-by-line report.
API:
sudo docker run --rm -v "$(pwd)":/app -w /app/source-watcher-api source-watcher-dev:latest sh -c "./vendor/bin/phpunit --coverage-text"Optional: After building source-watcher-dev:latest, you can use it instead of composer:2 for the commands above and drop --ignore-platform-reqs.
Runnable ETL pipelines live under source-watcher-core/samples/. See source-watcher-core/samples/README.md for how to run each sample (Docker commands).