Deprecate kaleido #625
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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] | |
os: [ubuntu-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 --workspace --features plotly_ndarray,plotly_image,static_export_default --exclude plotly_kaleido | |
- if: ${{ matrix.os == 'windows-latest' }} | |
run: gci -recurse -filter "*example*" | |
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 Chrome (for static_export) | |
if: matrix.example == 'static_export' | |
uses: browser-actions/setup-chrome@v1 | |
with: | |
chrome-version: 'latest' | |
install-chromedriver: true | |
- 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 | |
test_static_export_chrome: | |
name: Test Static Export with Chrome (Windows) | |
runs-on: windows-latest | |
timeout-minutes: 30 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Chrome and chromedriver | |
id: setup-chrome | |
uses: browser-actions/setup-chrome@v1 | |
with: | |
chrome-version: 'latest' | |
install-chromedriver: true | |
- uses: dtolnay/rust-toolchain@stable | |
- name: Cache cargo registry | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-cargo-registry- | |
- name: Debug - Show setup-chrome outputs | |
run: | | |
Write-Host "=== Setup Chrome Action Outputs ===" | |
Write-Host "chrome-version: ${{ steps.setup-chrome.outputs.chrome-version }}" | |
Write-Host "chrome-path: ${{ steps.setup-chrome.outputs.chrome-path }}" | |
Write-Host "chromedriver-version: ${{ steps.setup-chrome.outputs.chromedriver-version }}" | |
Write-Host "chromedriver-path: ${{ steps.setup-chrome.outputs.chromedriver-path }}" | |
Write-Host "================================" | |
- name: Debug - System information | |
run: | | |
Write-Host "=== System Information ===" | |
Write-Host "OS Version: $(Get-ComputerInfo | Select-Object -ExpandProperty WindowsProductName)" | |
Write-Host "Architecture: $(Get-ComputerInfo | Select-Object -ExpandProperty OsArchitecture)" | |
Write-Host "Available memory: $((Get-CimInstance Win32_OperatingSystem).FreePhysicalMemory / 1MB) MB" | |
Write-Host "==========================" | |
- name: Debug - Check Chrome and chromedriver installation | |
run: | | |
Write-Host "=== Chrome and Chromedriver Check ===" | |
# Check if Chrome is in PATH | |
try { | |
$chromeVersion = & chrome.exe --version 2>$null | |
Write-Host "Chrome in PATH: $chromeVersion" | |
} catch { | |
Write-Host "Chrome not found in PATH" | |
} | |
# Check if chromedriver is in PATH | |
try { | |
$chromedriverVersion = & chromedriver.exe --version 2>$null | |
Write-Host "Chromedriver in PATH: $chromedriverVersion" | |
} catch { | |
Write-Host "Chromedriver not found in PATH" | |
} | |
# Check specific paths from action outputs | |
$chromePath = "${{ steps.setup-chrome.outputs.chrome-path }}" | |
$chromedriverPath = "${{ steps.setup-chrome.outputs.chromedriver-path }}" | |
Write-Host "Chrome path from action: $chromePath" | |
Write-Host "Chromedriver path from action: $chromedriverPath" | |
if (Test-Path $chromePath) { | |
Write-Host "Chrome file exists: $(Get-Item $chromePath | Select-Object -ExpandProperty FullName)" | |
Write-Host "Chrome file size: $((Get-Item $chromePath).Length) bytes" | |
} else { | |
Write-Host "Chrome file does not exist at specified path" | |
} | |
if (Test-Path $chromedriverPath) { | |
Write-Host "Chromedriver file exists: $(Get-Item $chromedriverPath | Select-Object -ExpandProperty FullName)" | |
Write-Host "Chromedriver file size: $((Get-Item $chromedriverPath).Length) bytes" | |
# Test if chromedriver is executable | |
try { | |
$testResult = & $chromedriverPath --version 2>&1 | |
Write-Host "Chromedriver executable test: $testResult" | |
} catch { | |
Write-Host "Chromedriver executable test failed: $_" | |
} | |
} else { | |
Write-Host "Chromedriver file does not exist at specified path" | |
} | |
# Try to find chromedriver in common locations | |
Write-Host "=== Searching for chromedriver in common locations ===" | |
$commonPaths = @( | |
"C:\Program Files\Google\Chrome\Application\chromedriver.exe", | |
"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe", | |
"$env:USERPROFILE\AppData\Local\Google\Chrome\Application\chromedriver.exe", | |
"$env:PROGRAMFILES\Google\Chrome\Application\chromedriver.exe", | |
"$env:PROGRAMFILES(X86)\Google\Chrome\Application\chromedriver.exe" | |
) | |
foreach ($path in $commonPaths) { | |
if (Test-Path $path) { | |
Write-Host "Found chromedriver at: $path" | |
try { | |
$version = & $path --version 2>&1 | |
Write-Host " Version: $version" | |
} catch { | |
Write-Host " Version check failed: $_" | |
} | |
} | |
} | |
Write-Host "================================" | |
- name: Debug - Check Rust toolchain and dependencies | |
run: | | |
Write-Host "=== Rust Toolchain Check ===" | |
rustc --version | |
cargo --version | |
Write-Host "Current directory: $(Get-Location)" | |
Write-Host "Workspace contents:" | |
Get-ChildItem -Name | Sort-Object | |
Write-Host "==========================" | |
- name: Debug - Check plotly_static package | |
run: | | |
Write-Host "=== Plotly Static Package Check ===" | |
cd plotly_static | |
Write-Host "Package contents:" | |
Get-ChildItem -Name | Sort-Object | |
Write-Host "Cargo.toml contents:" | |
Get-Content Cargo.toml | |
Write-Host "================================" | |
- name: Debug - Test chromedriver functionality | |
run: | | |
Write-Host "=== Testing Chromedriver Functionality ===" | |
# Test if chromedriver is in PATH and working | |
try { | |
$chromedriverVersion = & chromedriver.exe --version 2>&1 | |
Write-Host "Chromedriver in PATH: $chromedriverVersion" | |
# Try to start chromedriver in background | |
Write-Host "Testing chromedriver startup..." | |
$process = Start-Process -FilePath "chromedriver.exe" -ArgumentList "--port=4444" -PassThru -WindowStyle Hidden | |
Start-Sleep -Seconds 3 | |
# Check if it's running | |
$isRunning = Get-Process -Name "chromedriver" -ErrorAction SilentlyContinue | |
if ($isRunning) { | |
Write-Host "Chromedriver started successfully, PID: $($process.Id)" | |
# Test WebDriver status endpoint | |
try { | |
$response = Invoke-WebRequest -Uri "http://localhost:4444/status" -TimeoutSec 5 | |
Write-Host "WebDriver status response: $($response.StatusCode)" | |
Write-Host "Response content: $($response.Content)" | |
} catch { | |
Write-Host "WebDriver status check failed: $_" | |
} | |
# Stop the process | |
Stop-Process -Id $process.Id -Force | |
Write-Host "Chromedriver stopped" | |
} else { | |
Write-Host "Chromedriver failed to start" | |
} | |
} catch { | |
Write-Host "Chromedriver test failed: $_" | |
} | |
Write-Host "================================" | |
- name: Debug - Test Rust WebDriver spawning | |
run: | | |
Write-Host "=== Testing Rust WebDriver Spawning ===" | |
# Set environment variables - WEBDRIVER_PATH should point to full executable path | |
$env:WEBDRIVER_PATH = "${{ steps.setup-chrome.outputs.chromedriver-path }}" | |
$env:CHROME_PATH = "${{ steps.setup-chrome.outputs.chrome-path }}" | |
$env:RUST_LOG = "debug" | |
$env:RUST_BACKTRACE = "1" | |
Write-Host "Environment variables:" | |
Write-Host "WEBDRIVER_PATH: $env:WEBDRIVER_PATH" | |
Write-Host "CHROME_PATH: $env:CHROME_PATH" | |
# Try to compile and run a simple test | |
Write-Host "Compiling simple WebDriver test..." | |
cd plotly_static | |
# Try to run a simple WebDriver test | |
try { | |
Write-Host "Testing WebDriver creation with cargo test..." | |
cargo test --verbose --package plotly_static --features chromedriver tests::save_png -- --nocapture | |
} catch { | |
Write-Host "Simple WebDriver test failed: $_" | |
} | |
Write-Host "================================" | |
- name: Debug - Pre-update cargo index | |
run: | | |
Write-Host "=== Pre-update Cargo Index Check ===" | |
Write-Host "Current cargo index status:" | |
cargo search --limit 1 plotly 2>&1 | Select-String -Pattern "Updating|Downloading|error" || Write-Host "Index seems up to date" | |
Write-Host "================================" | |
- name: Update cargo index (if needed) | |
run: | | |
Write-Host "=== Updating Cargo Index ===" | |
# Force update the index with a timeout | |
$timeout = 300 # 5 minutes | |
$job = Start-Job -ScriptBlock { | |
cargo update --dry-run | |
} | |
try { | |
Wait-Job $job -Timeout $timeout | |
$result = Receive-Job $job | |
Write-Host "Cargo update result: $result" | |
if ($job.State -eq "Completed") { | |
Write-Host "Cargo index updated successfully" | |
} else { | |
Write-Host "Cargo index update timed out, continuing anyway" | |
Stop-Job $job | |
} | |
} catch { | |
Write-Host "Cargo index update failed: $_" | |
Write-Host "Continuing with test anyway..." | |
} finally { | |
if ($job) { | |
Remove-Job $job -Force -ErrorAction SilentlyContinue | |
} | |
} | |
Write-Host "================================" | |
- name: Pre-compile dependencies | |
run: | | |
Write-Host "=== Pre-compiling Dependencies ===" | |
# Set environment variables - WEBDRIVER_PATH should point to full executable path | |
$env:WEBDRIVER_PATH = "${{ steps.setup-chrome.outputs.chromedriver-path }}" | |
$env:CHROME_PATH = "${{ steps.setup-chrome.outputs.chrome-path }}" | |
$env:RUST_LOG = "debug" | |
$env:RUST_BACKTRACE = "1" | |
Write-Host "Pre-compiling plotly_static with features..." | |
# Note: We don't need webdriver_download feature since chromedriver is already installed | |
cargo check --verbose --package plotly_static --features chromedriver | |
Write-Host "Dependencies pre-compiled successfully" | |
- name: Run PNG export test with Chrome | |
run: | | |
Write-Host "=== Starting PNG Export Test ===" | |
# Try to find chromedriver if action output path doesn't work | |
$chromedriverPath = "${{ steps.setup-chrome.outputs.chromedriver-path }}" | |
if (-not (Test-Path $chromedriverPath)) { | |
Write-Host "Action output chromedriver path not found, searching for alternatives..." | |
# Try common locations | |
$commonPaths = @( | |
"C:\Program Files\Google\Chrome\Application\chromedriver.exe", | |
"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe", | |
"$env:USERPROFILE\AppData\Local\Google\Chrome\Application\chromedriver.exe", | |
"$env:PROGRAMFILES\Google\Chrome\Application\chromedriver.exe", | |
"$env:PROGRAMFILES(X86)\Google\Chrome\Application\chromedriver.exe" | |
) | |
foreach ($path in $commonPaths) { | |
if (Test-Path $path) { | |
Write-Host "Using chromedriver from: $path" | |
$chromedriverPath = $path | |
break | |
} | |
} | |
} | |
# Set environment variables - WEBDRIVER_PATH should point to full executable path | |
$env:WEBDRIVER_PATH = $chromedriverPath | |
$env:CHROME_PATH = "${{ steps.setup-chrome.outputs.chrome-path }}" | |
$env:RUST_LOG = "debug" | |
$env:RUST_BACKTRACE = "1" | |
Write-Host "Environment variables set:" | |
Write-Host "WEBDRIVER_PATH: $env:WEBDRIVER_PATH" | |
Write-Host "CHROME_PATH: $env:CHROME_PATH" | |
Write-Host "RUST_LOG: $env:RUST_LOG" | |
Write-Host "RUST_BACKTRACE: $env:RUST_BACKTRACE" | |
# Verify the paths exist | |
if (-not (Test-Path $env:WEBDRIVER_PATH)) { | |
Write-Error "Chromedriver executable not found at: $env:WEBDRIVER_PATH" | |
Write-Host "Available chromedriver locations:" | |
Get-ChildItem -Path "C:\Program Files\Google\Chrome\Application\" -Name "chromedriver*" -ErrorAction SilentlyContinue | |
Get-ChildItem -Path "C:\Program Files (x86)\Google\Chrome\Application\" -Name "chromedriver*" -ErrorAction SilentlyContinue | |
exit 1 | |
} | |
if (-not (Test-Path $env:CHROME_PATH)) { | |
Write-Error "Chrome not found at: $env:CHROME_PATH" | |
exit 1 | |
} | |
Write-Host "All paths verified, starting cargo test..." | |
# Run the test directly without PowerShell job complexity | |
# Note: We don't need webdriver_download feature since chromedriver is already installed | |
cargo test --verbose --package plotly_static --features chromedriver tests::save_png -- --nocapture | |
Write-Host "=== PNG Export Test Completed ===" | |
build_book: | |
name: Build Book | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Chrome (for static_export) | |
uses: browser-actions/setup-chrome@v1 | |
with: | |
chrome-version: 'latest' | |
install-chromedriver: true | |
- 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 |