Add intermediate Todo App tutorial #9554
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.1a19 | |
- uses: pre-commit/action@v3.0.0 | |
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@v3 | |
if: github.event_name != 'pull_request' | |
- name: Check for code changes | |
uses: dorny/paths-filter@v2.11.1 | |
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.1a19 | |
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 env_capture | |
run: | | |
conda activate test-environment | |
doit env_capture | |
- 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.1a19 | |
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: doit develop_install | |
run: | | |
conda activate test-environment | |
pip install --pre ipywidgets_bokeh | |
- 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 | |
pip install jupyterlite-core jupyterlite-pyodide-kernel | |
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 env_capture | |
run: | | |
conda activate test-environment | |
doit env_capture | |
- name: Check if auth should run | |
if: '!github.event.pull_request.head.repo.fork' | |
run: | | |
echo "PANEL_TEST_AUTH=1" >> $GITHUB_ENV | |
- 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 |