Skip to content

Add intermediate Todo App tutorial #9554

Add intermediate Todo App tutorial

Add intermediate Todo App tutorial #9554

Workflow file for this run

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