Fix and improve Plotly event handling #10051
Workflow file for this run
This file contains 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: tests | |
on: | |
push: | |
branches: | |
- main | |
- branch-1.0 | |
pull_request: | |
branches: | |
- '*' | |
workflow_dispatch: | |
inputs: | |
target: | |
description: "How much of the test suite to run" | |
type: choice | |
default: default | |
options: | |
- default | |
- full | |
- downstream | |
cache: | |
description: "Use cache" | |
type: boolean | |
default: true | |
schedule: | |
- cron: '0 19 * * SUN' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
pre_commit: | |
name: Run pre-commit | |
runs-on: 'ubuntu-latest' | |
steps: | |
- uses: holoviz-dev/holoviz_tasks/pre-commit@v0 | |
- uses: pre-commit/action@v3.0.1 | |
with: | |
extra_args: -a --hook-stage manual oxipng || true -- | |
- uses: stefanzweifel/git-auto-commit-action@v4 | |
with: | |
commit_message: "Optimize PNG images (lossless)" | |
file_pattern: "*.png" | |
setup: | |
name: Setup workflow | |
runs-on: ubuntu-latest | |
permissions: | |
pull-requests: read | |
outputs: | |
code_change: ${{ steps.filter.outputs.code }} | |
doc_change: ${{ steps.filter.outputs.doc }} | |
matrix: ${{ env.MATRIX }} | |
steps: | |
- uses: actions/checkout@v4 | |
if: github.event_name != 'pull_request' | |
- name: Check for code changes | |
uses: dorny/paths-filter@v3 | |
id: filter | |
with: | |
filters: | | |
code: | |
- 'panel/**' | |
- 'examples/**' | |
- 'setup.py' | |
- 'pyproject.toml' | |
- 'tox.ini' | |
- '.github/workflows/test.yaml' | |
doc: | |
- 'doc/getting_started/**' | |
- 'doc/how_to/**' | |
- 'scripts/**' | |
- 'lite/**' | |
- name: Set matrix option | |
run: | | |
if [[ '${{ github.event_name }}' == 'workflow_dispatch' ]]; then | |
OPTION=${{ github.event.inputs.target }} | |
elif [[ '${{ github.event_name }}' == 'schedule' ]]; then | |
OPTION="full" | |
elif [[ '${{ github.event_name }}' == 'push' && '${{ github.ref_type }}' == 'tag' ]]; then | |
OPTION="full" | |
else | |
OPTION="default" | |
fi | |
echo "MATRIX_OPTION=$OPTION" >> $GITHUB_ENV | |
- name: Set test matrix with 'default' option | |
if: env.MATRIX_OPTION == 'default' | |
run: | | |
MATRIX=$(jq -nsc '{ | |
"os": ["ubuntu-latest", "macos-latest", "windows-latest"], | |
"python-version": ["3.9", "3.11"], | |
"include": [ | |
{"os": "ubuntu-latest", "python-version": "3.10"} | |
] | |
}') | |
echo "MATRIX=$MATRIX" >> $GITHUB_ENV | |
- name: Set test matrix with 'full' option | |
if: env.MATRIX_OPTION == 'full' | |
run: | | |
MATRIX=$(jq -nsc '{ | |
"os": ["ubuntu-latest", "macos-latest", "windows-latest"], | |
"python-version": ["3.9", "3.10", "3.11"] | |
}') | |
echo "MATRIX=$MATRIX" >> $GITHUB_ENV | |
- name: Set test matrix with 'downstream' option | |
if: env.MATRIX_OPTION == 'downstream' | |
run: | | |
MATRIX=$(jq -nsc '{ | |
"os": ["ubuntu-latest"], | |
"python-version": ["3.11"] | |
}') | |
echo "MATRIX=$MATRIX" >> $GITHUB_ENV | |
unit_test_suite: | |
name: Unit tests on ${{ matrix.os }} with Python ${{ matrix.python-version }} | |
needs: [pre_commit, setup] | |
runs-on: ${{ matrix.os }} | |
if: needs.setup.outputs.code_change == 'true' | |
strategy: | |
fail-fast: false | |
matrix: ${{ fromJson(needs.setup.outputs.matrix) }} | |
timeout-minutes: 90 | |
defaults: | |
run: | |
shell: bash -l {0} | |
env: | |
DESC: "Python ${{ matrix.python-version }} tests" | |
PYTHON_VERSION: ${{ matrix.python-version }} | |
SETUPTOOLS_ENABLE_FEATURES: "legacy-editable" | |
DISPLAY: ":99.0" | |
PYTHONIOENCODING: "utf-8" | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# Without this env var `doit env_create ...` uses by default | |
# the `pyviz` channel, except that we don't want to configure | |
# it as one of the sources. | |
PYCTDEV_SELF_CHANNEL: "pyviz/label/dev" | |
OMP_NUM_THREADS: 1 | |
steps: | |
- uses: holoviz-dev/holoviz_tasks/install@v0 | |
with: | |
name: unit_test_suite | |
python-version: ${{ matrix.python-version }} | |
channels: pyviz/label/dev,numba,bokeh/label/dev,conda-forge,nodefaults | |
conda-update: true | |
nodejs: true | |
envs: -o examples -o recommended -o tests -o build | |
cache: ${{ github.event.inputs.cache || github.event.inputs.cache == '' }} | |
opengl: true | |
id: install | |
- name: doit develop_install | |
run: | | |
conda activate test-environment | |
pip install pyecharts | |
panel build panel | |
- name: override-vtk-osmesa | |
if: contains(matrix.os, 'ubuntu') | |
run: | | |
conda activate test-environment | |
conda install -c conda-forge vtk=9.2.6=osmesa* vtk-base=9.2.6=osmesa* vtk-io-ffmpeg=9.2.6=osmesa* --no-deps | |
- name: bokeh_sampledata | |
run: | | |
conda activate test-environment | |
bokeh sampledata | |
- name: doit test_unit | |
run: | | |
conda activate test-environment | |
doit test_unit | |
- name: doit test_unit-subprocess | |
if: contains(matrix.os, 'ubuntu') | |
run: | | |
conda activate test-environment | |
doit test_subprocess | |
- name: test examples | |
run: | | |
conda activate test-environment | |
doit test_examples | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v3 | |
with: | |
files: ./coverage.xml | |
flags: unitexamples-tests | |
fail_ci_if_error: false # optional (default = false) | |
ui_test_suite: | |
name: UI tests on ${{ matrix.os }} with Python 3.9 | |
needs: [pre_commit, setup] | |
runs-on: ${{ matrix.os }} | |
if: needs.setup.outputs.code_change == 'true' || needs.setup.outputs.doc_change == 'true' | |
strategy: | |
fail-fast: false | |
matrix: | |
os: ['ubuntu-latest', 'macos-latest', 'windows-latest'] | |
timeout-minutes: 120 | |
defaults: | |
run: | |
shell: bash -el {0} | |
env: | |
DESC: "Python ${{ matrix.python-version }} tests" | |
PYTHONIOENCODING: "utf-8" | |
PANEL_LOG_LEVEL: info | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
SETUPTOOLS_ENABLE_FEATURES: "legacy-editable" | |
OAUTH_COOKIE_SECRET: ${{ secrets.OAUTH_COOKIE_SECRET }} | |
OAUTH_ENCRYPTION_KEY: ${{ secrets.OAUTH_ENCRYPTION_KEY }} | |
AUTH0_PORT: "5701" | |
AUTH0_OAUTH_KEY: ${{ secrets.AUTH0_OAUTH_KEY }} | |
AUTH0_OAUTH_SECRET: ${{ secrets.AUTH0_OAUTH_SECRET }} | |
AUTH0_OAUTH_EXTRA_PARAMS: ${{ secrets.AUTH0_OAUTH_EXTRA_PARAMS }} | |
AUTH0_OAUTH_USER: ${{ secrets.AUTH0_OAUTH_USER }} | |
AUTH0_OAUTH_PASSWORD: ${{ secrets.AUTH0_OAUTH_PASSWORD }} | |
AZURE_PORT: "5702" | |
AZURE_OAUTH_KEY: ${{ secrets.AZURE_OAUTH_KEY }} | |
AZURE_OAUTH_SECRET: ${{ secrets.AZURE_OAUTH_SECRET }} | |
AZURE_OAUTH_USER: ${{ secrets.AZURE_OAUTH_USER }} | |
AZURE_OAUTH_PASSWORD: ${{ secrets.AZURE_OAUTH_PASSWORD }} | |
OKTA_PORT: "5703" | |
OKTA_OAUTH_KEY: ${{ secrets.OKTA_OAUTH_KEY }} | |
OKTA_OAUTH_SECRET: ${{ secrets.OKTA_OAUTH_SECRET }} | |
OKTA_OAUTH_EXTRA_PARAMS: ${{ secrets.OKTA_OAUTH_EXTRA_PARAMS }} | |
OKTA_OAUTH_USER: ${{ secrets.OKTA_OAUTH_USER }} | |
OKTA_OAUTH_PASSWORD: ${{ secrets.OKTA_OAUTH_PASSWORD }} | |
# Without this env var `doit env_create ...` uses by default | |
# the `pyviz` channel, except that we don't want to configure | |
# it as one of the sources. | |
PYCTDEV_SELF_CHANNEL: "pyviz/label/dev" | |
steps: | |
- uses: holoviz-dev/holoviz_tasks/install@v0 | |
with: | |
name: ui_test_suite | |
python-version: 3.9 | |
channels: pyviz/label/dev,bokeh/label/dev,conda-forge,nodefaults | |
envs: "-o recommended -o tests -o build" | |
cache: ${{ github.event.inputs.cache || github.event.inputs.cache == '' }} | |
nodejs: true | |
playwright: true | |
id: install | |
- name: launch jupyter | |
run: | | |
conda activate test-environment | |
jupyter server extension enable panel.io.jupyter_server_extension --sys-prefix | |
(jupyter lab --config panel/tests/ui/jupyter_server_test_config.py --port 8887 > /tmp/jupyterlab_server.log 2>&1) & | |
- name: build jupyterlite | |
run: | | |
conda activate test-environment | |
python -m pip install -r ./lite/requirements.txt | |
python ./scripts/build_pyodide_wheels.py lite/pypi | |
python ./scripts/panelite/generate_panelite_content.py | |
jupyter lite build --lite-dir lite --output-dir lite/dist | |
- name: Wait for JupyterLab | |
uses: ifaxity/wait-on-action@v1.1.0 | |
with: | |
resource: http-get://localhost:8887/lab | |
timeout: 180000 | |
- name: doit test_ui | |
run: | | |
conda activate test-environment | |
doit test_ui | |
- uses: actions/upload-artifact@v3 | |
if: always() | |
with: | |
name: ui_screenshots | |
path: ./ui_screenshots | |
if-no-files-found: ignore | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v3 | |
with: | |
files: ./coverage.xml | |
flags: ui-tests | |
fail_ci_if_error: false # optional (default = false) | |
core_test_suite: | |
name: Core tests on Python ${{ matrix.python-version }}, ${{ matrix.os }} | |
needs: [pre_commit, setup] | |
runs-on: ${{ matrix.os }} | |
if: needs.setup.outputs.code_change == 'true' | |
strategy: | |
fail-fast: false | |
matrix: | |
os: ['ubuntu-latest'] | |
python-version: ['3.12'] | |
timeout-minutes: 120 | |
defaults: | |
run: | |
shell: bash -el {0} | |
env: | |
DESC: "Python ${{ matrix.python-version }}, ${{ matrix.os }} core tests" | |
PYTHON_VERSION: ${{ matrix.python-version }} | |
SETUPTOOLS_ENABLE_FEATURES: "legacy-editable" | |
steps: | |
# - uses: holoviz-dev/holoviz_tasks/install@v0.1a19 | |
# with: | |
# name: core_test_suite | |
# python-version: ${{ matrix.python-version }} | |
# # channel-priority: strict | |
# channels: pyviz/label/dev,conda-forge,nodefaults | |
# envs: "-o tests_core -o tests_ci" | |
# cache: ${{ github.event.inputs.cache || github.event.inputs.cache == '' }} | |
# conda-update: true | |
# id: install | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: "100" | |
- name: Fetch unshallow | |
run: git fetch --prune --tags --unshallow -f | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18.x | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: "3.12" | |
- run: | | |
python -m pip install -ve '.[tests_core, recommended]' | |
- name: bokeh sampledata | |
run: | | |
# conda activate test-environment | |
bokeh sampledata | |
- name: doit test_unit | |
run: | | |
# conda activate test-environment | |
pytest panel -n logical --dist loadgroup |