Skip to content

Deprecate kaleido

Deprecate kaleido #603

Workflow file for this run

name: CI
on:
workflow_dispatch:
pull_request:
branches: [ main ]
push:
branches: [ main ]
# Cancel any in-flight jobs for the same PR/branch so there's only one active
# at a time
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
RUST_BACKTRACE: full
jobs:
rustfmt:
name: Rustfmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt
- run: cargo fmt --all -- --check
- run: cd ${{ github.workspace }}/examples && cargo fmt --all -- --check
clippy:
name: Clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Chrome
uses: browser-actions/setup-chrome@v1
with:
chrome-version: 'latest'
install-chromedriver: true
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
targets: wasm32-unknown-unknown
# lint the main library workspace for non-wasm target
- run: cargo clippy --features all -- -D warnings -A deprecated
# lint the non-wasm examples
- run: cd ${{ github.workspace }}/examples && cargo clippy --workspace --exclude "wasm*" --exclude "kaleido" -- -D warnings
# lint the plotly library for wasm target
- run: cargo clippy --package plotly --target wasm32-unknown-unknown -- -D warnings
# lint the wasm examples
- run: cd ${{ github.workspace }}/examples/wasm-yew && cargo clippy --target wasm32-unknown-unknown --all
semver:
name: semver
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check semver
uses: obi1kenobi/cargo-semver-checks-action@v2
with:
package: plotly
feature-group: only-explicit-features
features: kaleido
rust-toolchain: stable
release-type: minor
test:
name: Tests
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Setup Chrome
uses: browser-actions/setup-chrome@v1
with:
chrome-version: 'latest'
install-chromedriver: true
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- run: cargo test --features plotly_ndarray,plotly_image,static_export_default
- if: ${{ matrix.os == 'windows-latest' }}
run: gci -recurse -filter "*example*"
test-static-export:
name: Test Static Export
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
browser: [firefox, chrome]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Setup Firefox
if: matrix.browser == 'firefox'
uses: browser-actions/setup-firefox@v1
with:
firefox-version: 'latest'
- name: Setup Chrome
if: matrix.browser == 'chrome'
uses: browser-actions/setup-chrome@v1
with:
chrome-version: 'latest'
install-chromedriver: true
- uses: dtolnay/rust-toolchain@stable
- name: Test plotly and plotly_static
shell: bash
run: |
echo "=== Platform Information ==="
echo "OS: $(uname -a)"
echo "Architecture: $(uname -m)"
echo "Current directory: $(pwd)"
echo "=== Checking for existing processes ==="
ps aux | grep -E "(chromedriver|geckodriver|firefox|chrome)" || echo "No browser processes found"
echo "=== Checking port availability ==="
netstat -an | grep -E ":(4444|4445|4446|4447|4448|4449|4450)" || echo "No WebDriver ports in use"
echo "=== Running tests ==="
if [ "${{ matrix.browser }}" = "firefox" ]; then
echo "Testing with Firefox/geckodriver..."
echo "=== Firefox Environment Check ==="
echo "Firefox version: $(firefox --version 2>/dev/null || echo 'Firefox not found in PATH')"
echo "geckodriver version: $(geckodriver --version 2>/dev/null || echo 'geckodriver not found in PATH')"
echo "Available memory: $(free -h 2>/dev/null || echo 'free command not available')"
echo "Available disk space: $(df -h . 2>/dev/null || echo 'df command not available')"
echo "=== Testing plotly with Firefox ==="
timeout 600 cargo test -p plotly --features static_export_default --lib -- --nocapture
echo "=== Testing plotly_static with Firefox ==="
timeout 600 cargo test -p plotly_static --features geckodriver,webdriver_download -- --nocapture
else
echo "Testing with Chrome/chromedriver..."
echo "=== Chrome Environment Check ==="
echo "Chrome version: $(google-chrome --version 2>/dev/null || echo 'Chrome not found in PATH')"
echo "chromedriver version: $(chromedriver --version 2>/dev/null || echo 'chromedriver not found in PATH')"
timeout 600 cargo test -p plotly --features static_export_chromedriver,static_export_downloader --lib -- --nocapture
timeout 600 cargo test -p plotly_static --features chromedriver,webdriver_download -- --nocapture
fi
echo "=== Cleanup after tests ==="
pkill -f chromedriver || echo "No chromedriver processes to kill"
pkill -f geckodriver || echo "No geckodriver processes to kill"
pkill -f firefox || echo "No firefox processes to kill"
pkill -f chrome || echo "No chrome processes to kill"
test-macos-compatibility:
name: Test macOS Compatibility
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Setup Chrome
uses: browser-actions/setup-chrome@v1
with:
chrome-version: 'latest'
install-chromedriver: true
- uses: dtolnay/rust-toolchain@stable
- name: Test Chrome and chromedriver installation
run: |
echo "=== System Information ==="
echo "macOS version: $(sw_vers)"
echo "Architecture: $(uname -m)"
echo "PATH: $PATH"
echo "Current user: $(whoami)"
echo "Home directory: $HOME"
echo "=== Chrome Installation Check ==="
ls -la "/Applications/Google Chrome.app/Contents/MacOS/" || echo "Chrome not found in Applications"
which google-chrome || echo "Chrome not found in PATH"
google-chrome --version || echo "Chrome version check failed"
echo "=== chromedriver Installation Check ==="
chromedriver --version || echo "chromedriver not found in PATH"
ls -la /usr/local/bin/chromedriver || echo "chromedriver not found in /usr/local/bin"
ls -la /opt/homebrew/bin/chromedriver || echo "chromedriver not found in /opt/homebrew/bin"
echo "=== Environment Variables ==="
echo "WEBDRIVER_PATH: ${WEBDRIVER_PATH:-not set}"
echo "CHROMEDRIVER_PATH: ${CHROMEDRIVER_PATH:-not set}"
echo "CHROME_PATH: ${CHROME_PATH:-not set}"
- name: Run macOS-specific tests
run: |
echo "Running macOS compatibility tests..."
echo "Current directory: $(pwd)"
echo "Rust version: $(rustc --version)"
echo "Cargo version: $(cargo --version)"
# Run tests with verbose output and capture failures
set -x # Enable debug mode
echo "=== Testing Chrome installation ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib macos_tests::macos_tests::test_chrome_installation -- --nocapture || echo "Chrome installation test failed"
echo "=== Testing chromedriver installation ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib macos_tests::macos_tests::test_chromedriver_installation -- --nocapture || echo "chromedriver installation test failed"
echo "=== Testing static exporter creation ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib macos_tests::macos_tests::test_static_exporter_creation_macos -- --nocapture || echo "Static exporter creation test failed"
echo "=== Testing basic PNG export ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib macos_tests::macos_tests::test_basic_png_export_macos -- --nocapture || echo "Basic PNG export test failed"
echo "=== Testing macOS Chrome flags ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib macos_tests::macos_tests::test_macos_chrome_flags -- --nocapture || echo "macOS Chrome flags test failed"
echo "=== Testing user data directory management ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib macos_tests::macos_tests::test_user_data_directory_management -- --nocapture || echo "User data directory management test failed"
echo "=== Testing PDF debugging ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib macos_tests::macos_tests::test_pdf_debugging_macos -- --nocapture || echo "PDF debugging test failed"
echo "=== Testing PDF with alternative flags ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib macos_tests::macos_tests::test_pdf_with_alternative_flags -- --nocapture || echo "PDF alternative flags test failed"
echo "=== Testing html2pdf library availability ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib macos_tests::macos_tests::test_html2pdf_library_loading -- --nocapture || echo "html2pdf library test failed"
- name: Run all plotly_static tests on macOS
run: |
echo "Running all plotly_static tests on macOS..."
echo "Checking for existing chromedriver processes before tests..."
ps aux | grep chromedriver || echo "No chromedriver processes found"
# Run tests with timeout to prevent hanging
timeout 300 cargo test -p plotly_static --features chromedriver,webdriver_download --lib -- --nocapture || echo "Tests timed out or failed"
echo "Checking for chromedriver processes after tests..."
ps aux | grep chromedriver || echo "No chromedriver processes found"
- name: Test plotly with static export on macOS
run: |
echo "Testing plotly with static export on macOS..."
echo "Checking for port conflicts before tests..."
lsof -i :4444 || echo "Port 4444 is free"
lsof -i :4445 || echo "Port 4445 is free"
lsof -i :4446 || echo "Port 4446 is free"
lsof -i :4447 || echo "Port 4447 is free"
cargo test -p plotly --features static_export_chromedriver,static_export_downloader --lib -- --nocapture || echo "plotly static export tests failed"
echo "Cleaning up after tests..."
pkill -f chromedriver || echo "No chromedriver processes to kill"
pkill -f "Google Chrome" || echo "No Chrome processes to kill"
test-windows-compatibility:
name: Test Windows Compatibility
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Setup Chrome
uses: browser-actions/setup-chrome@v1
with:
chrome-version: 'latest'
install-chromedriver: true
- uses: dtolnay/rust-toolchain@stable
- name: Test Chrome and chromedriver installation
shell: cmd
run: |
echo "=== System Information ==="
echo "OS: %OS%"
echo "Architecture: %PROCESSOR_ARCHITECTURE%"
echo "PATH: %PATH%"
echo "Current user: %USERNAME%"
echo "Home directory: %USERPROFILE%"
echo "=== Chrome Installation Check ==="
dir "C:\Program Files\Google\Chrome\Application\chrome.exe" 2>nul || echo "Chrome not found in Program Files"
where google-chrome 2>nul || echo "Chrome not found in PATH"
google-chrome --version 2>nul || echo "Chrome version check failed"
echo "=== chromedriver Installation Check ==="
chromedriver --version 2>nul || echo "chromedriver not found in PATH"
dir "C:\Program Files\Google\Chrome\Application\chromedriver.exe" 2>nul || echo "chromedriver not found in Program Files"
echo "=== Environment Variables ==="
echo "WEBDRIVER_PATH: %WEBDRIVER_PATH%"
echo "CHROMEDRIVER_PATH: %CHROMEDRIVER_PATH%"
echo "CHROME_PATH: %CHROME_PATH%"
- name: Run Windows-specific tests
shell: cmd
run: |
echo "Running Windows compatibility tests..."
echo "Current directory: %CD%"
echo "Rust version: %RUST_VERSION%"
echo "Cargo version: %CARGO_VERSION%"
echo "=== Testing Chrome installation ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib windows_tests::windows_tests::test_chrome_installation -- --nocapture
echo "=== Testing chromedriver installation ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib windows_tests::windows_tests::test_chromedriver_installation -- --nocapture
echo "=== Testing static exporter creation ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib windows_tests::windows_tests::test_static_exporter_creation_windows -- --nocapture
echo "=== Testing basic PNG export ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib windows_tests::windows_tests::test_basic_png_export_windows -- --nocapture
echo "=== Testing Windows Chrome flags ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib windows_tests::windows_tests::test_windows_chrome_flags -- --nocapture
echo "=== Testing user data directory management ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib windows_tests::windows_tests::test_user_data_directory_management -- --nocapture
echo "=== Testing PDF debugging ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib windows_tests::windows_tests::test_pdf_debugging_windows -- --nocapture
echo "=== Testing PDF with alternative flags ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib windows_tests::windows_tests::test_pdf_with_alternative_flags -- --nocapture
- name: Run all plotly_static tests on Windows
shell: cmd
run: |
echo "Running all plotly_static tests on Windows..."
echo "Checking for existing chromedriver processes before tests..."
tasklist /FI "IMAGENAME eq chromedriver.exe" 2>nul || echo "No chromedriver processes found"
echo "=== Running tests ==="
cargo test -p plotly_static --features chromedriver,webdriver_download --lib -- --nocapture
echo "Checking for chromedriver processes after tests..."
tasklist /FI "IMAGENAME eq chromedriver.exe" 2>nul || echo "No chromedriver processes found"
- name: Test plotly with static export on Windows
shell: cmd
run: |
echo "Testing plotly with static export on Windows..."
echo "Checking for port conflicts before tests..."
netstat -an | findstr ":4444" || echo "Port 4444 is free"
netstat -an | findstr ":4445" || echo "Port 4445 is free"
netstat -an | findstr ":4446" || echo "Port 4446 is free"
netstat -an | findstr ":4447" || echo "Port 4447 is free"
echo "=== Running plotly static export tests ==="
cargo test -p plotly --features static_export_chromedriver,static_export_downloader --lib -- --nocapture
echo "Cleaning up after tests..."
taskkill /F /IM chromedriver.exe 2>nul || echo "No chromedriver processes to kill"
taskkill /F /IM chrome.exe 2>nul || echo "No Chrome processes to kill"
code-coverage:
name: Code Coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: llvm-tools-preview
- uses: taiki-e/install-action@cargo-llvm-cov
- uses: codecov/codecov-action@v3
build_examples:
name: Build Examples
strategy:
fail-fast: false
matrix:
example: # missing jupyter
[
3d_charts,
basic_charts,
custom_controls,
customization,
financial_charts,
images,
kaleido,
maps,
ndarray,
scientific_charts,
shapes,
static_export,
subplots,
themes,
]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Firefox (for static_export)
if: matrix.example == 'static_export'
uses: browser-actions/setup-firefox@v1
with:
firefox-version: 'latest'
- uses: dtolnay/rust-toolchain@stable
- run: cd ${{ github.workspace }}/examples/${{ matrix.example }} && cargo build
build_wasm_examples:
name: Build Wasm Examples
strategy:
fail-fast: false
matrix:
example: [basic, callback-example]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- run: cd ${{ github.workspace }}/examples/wasm-yew/${{ matrix.example }} && cargo build --target wasm32-unknown-unknown
build_book:
name: Build Book
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Firefox (for static_export example)
uses: browser-actions/setup-firefox@v1
with:
firefox-version: 'latest'
- uses: dtolnay/rust-toolchain@stable
- run: cargo install mdbook --no-default-features --features search --vers "^0.4" --locked --quiet
- name: Build examples to generate needed html files
run: |
cd ${{ github.workspace }}/examples/basic_charts && cargo run
cd ${{ github.workspace }}/examples/statistical_charts && cargo run
cd ${{ github.workspace }}/examples/scientific_charts && cargo run
cd ${{ github.workspace }}/examples/financial_charts && cargo run
cd ${{ github.workspace }}/examples/3d_charts && cargo run
cd ${{ github.workspace }}/examples/subplots && cargo run
cd ${{ github.workspace }}/examples/shapes && cargo run
cd ${{ github.workspace }}/examples/themes && cargo run
cd ${{ github.workspace }}/examples/static_export && cargo run
- name: Build book
run: mdbook build docs/book