wpstarter/o-dusk-updater
Symfony Console tool to update Laravel Dusk ChromeDriver binaries outside Laravel. Download latest or specified Chrome/Chromium/ChromeDriver versions, detect installed Chrome and driver versions, and optionally auto-update when outdated.
Run the updater for the first time with:
composer require --dev wpstarter/dusk-updater
./vendor/bin/dusk-updater detect
This checks your current Chrome/ChromeDriver versions and suggests updates if needed. For immediate updates:
./vendor/bin/dusk-updater update
First Use Case: Add to your CI pipeline (e.g., GitHub Actions) as a pre-test step to ensure ChromeDriver compatibility:
- name: Update ChromeDriver
run: vendor/bin/dusk-updater update 114
Key Files to Review:
vendor/bin/dusk-updater (CLI entry point)composer.json (dev-dependencies section)Workflow:
# GitHub Actions example
- name: Sync ChromeDriver
run: vendor/bin/dusk-updater update ${{ env.CHROMEDRIVER_VERSION }}
- name: Run Dusk Tests
run: php artisan dusk
RUN composer require --dev wpstarter/dusk-updater && \
vendor/bin/dusk-updater update 114
Best Practices:
update 114) to avoid surprises.- name: Cache ChromeDriver
uses: actions/cache@v3
with:
path: vendor/bin/chromedriver*
key: chromedriver-${{ hashFiles('composer.lock') }}
Multi-Environment Handling: Use environment variables to specify versions:
# .env
CHROMEDRIVER_VERSION=114
Then invoke:
./vendor/bin/dusk-updater update $CHROMEDRIVER_VERSION
Custom Chrome Paths (Linux/macOS):
./vendor/bin/dusk-updater detect --chrome-dir=/usr/bin/google-chrome-stable
Dockerfile Example:
FROM laravel/dusk:latest
# Install updater and update ChromeDriver
RUN composer require --dev wpstarter/dusk-updater && \
vendor/bin/dusk-updater update 114
# Ensure permissions
RUN chmod +x vendor/bin/chromedriver*
Docker Compose:
services:
dusk:
build: .
volumes:
- ./vendor/bin:/usr/local/bin/vendor
environment:
- CHROMEDRIVER_VERSION=114
Composer Scripts (for convenience):
{
"scripts": {
"dusk:update": "dusk-updater update",
"dusk:detect": "dusk-updater detect --auto-update"
}
}
Run with:
composer dusk:update
Pre-commit Hook (to validate versions):
#!/bin/sh
./vendor/bin/dusk-updater detect --auto-update || exit 1
Since this package uses Symfony Console, it works outside Laravel:
# Install globally (optional)
composer global require wpstarter/dusk-updater
# Use in any PHP project
./vendor/bin/dusk-updater update 114
Permission Denied:
Permission denied when running dusk-updater.vendor/bin/ is writable:
chmod -R 755 vendor/bin/
USER root before running the updater in Dockerfile.Version Mismatch:
SessionNotCreatedException or unknown error: Chrome version must be >= X.update 114 for Chrome 114.x).detect to validate compatibility:
./vendor/bin/dusk-updater detect --auto-update
Stale ChromeDriver Processes:
Another ChromeDriver server seems to be running.pkill chromedriver
./vendor/bin/dusk-updater update
Network Issues:
cURL error 28.--cache to store releases locally:
./vendor/bin/dusk-updater update --cache /tmp/chromedriver-cache
export HTTP_PROXY=http://proxy.example.com:8080
./vendor/bin/dusk-updater update
Windows Path Issues:
Failed to download ChromeDriver on Windows.vendor/bin/ is in PATH:
& .\vendor\bin\dusk-updater update 114
Verbose Mode:
./vendor/bin/dusk-updater update --verbose
Dry Run:
./vendor/bin/dusk-updater detect --dry-run
Manual Download:
curl -LO https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip
unzip chromedriver_linux64.zip -d vendor/bin/
chmod +x vendor/bin/chromedriver
Cache Directory:
~/.cache/dusk-updater (Linux/macOS) or %USERPROFILE%\.cache\dusk-updater (Windows).--cache:
./vendor/bin/dusk-updater update --cache /custom/path
Chrome Detection:
google-chrome, google-chrome-stable, chromium, or chromium-browser.--chrome-dir (Linux/macOS only).Version Parsing:
update 114 (downloads latest 114.x).update 114.0.5735.90.update 114.0 may fail).Custom ChromeDriver Sources:
src/ChromeDriverUpdater.php to extend getDownloadUrl().Post-Update Hooks:
./vendor/bin/dusk-updater update && ./post-update-hook.sh
Integration with Other Tools:
GitHub Actions Action:
# .github/actions/update-chromedriver/action.yml
uses: your-repo/update-chromedriver@v1
with:
version: ${{ inputs.version }}
Version Pinning in CI:
jobs:
test:
strategy:
matrix:
chromedriver: [114, 115]
steps:
- run: vendor/bin/dusk-updater update ${{ matrix.chromedriver }}
Automated Rollback:
cp vendor/bin/chromedriver vendor/bin/chromedriver.bak
./vendor/bin/dusk-updater update
Monitoring:
./vendor/bin/dusk-updater update >> /var/log/chromedriver-updates.log
Offline Mode:
--cache:
./vendor/bin/dusk-updater update --cache /offline-cache
How can I help you explore Laravel packages today?