Skip to content

tests

tests #5264

Workflow file for this run

name: tests
on:
push:
branches:
- main
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 14 * * SUN"
permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash -e {0}
env:
DISPLAY: ":99.0"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COV: "--cov=./holoviews --cov-report=xml"
jobs:
pre_commit:
name: pre-commit
runs-on: "ubuntu-latest"
steps:
- uses: holoviz-dev/holoviz_tasks/pre-commit@ab994f6a87c4fdb1363925d26c85a5bab2144f28 # v1.0.0
setup:
name: Setup workflow
runs-on: ubuntu-latest
permissions:
pull-requests: read
outputs:
code_change: ${{ steps.filter.outputs.code }}
matrix: ${{ env.MATRIX }}
matrix_option: ${{ env.MATRIX_OPTION }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
if: github.event_name != 'pull_request'
with:
persist-credentials: false
- name: Check for code changes
uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
id: filter
with:
filters: |
code:
- 'holoviews/**'
- 'examples/**'
- 'pixi.toml'
- 'pyproject.toml'
- '.github/workflows/test.yaml'
- name: Set matrix option
env:
GITHUB_EVENT_INPUTS_TARGET: ${{ github.event.inputs.target }}
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"],
"environment": ["test-310", "test-314"],
"include": [
# Can be removed when tsdownsample support 3.14
{"environment": "test-313", "os": "ubuntu-latest"}
]
}')
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"],
"environment": ["test-310", "test-311", "test-312", "test-313", "test-314"]
}')
echo "MATRIX=$MATRIX" >> $GITHUB_ENV
- name: Set test matrix with 'downstream' option
if: env.MATRIX_OPTION == 'downstream'
run: |
MATRIX=$(jq -nsc '{
"os": ["ubuntu-latest"],
"environment": ["test-310"]
}')
echo "MATRIX=$MATRIX" >> $GITHUB_ENV
pixi_lock:
name: Pixi lock
runs-on: ubuntu-latest
steps:
- uses: holoviz-dev/holoviz_tasks/pixi-lock@ab994f6a87c4fdb1363925d26c85a5bab2144f28 # v1.0.0
with:
cache: ${{ github.event.inputs.cache == 'true' || github.event.inputs.cache == '' }}
unit_test_suite:
name: unit:${{ matrix.environment }}:${{ matrix.os }}
needs: [pre_commit, setup, pixi_lock]
runs-on: ${{ matrix.os }}
if: needs.setup.outputs.code_change == 'true'
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.matrix) }}
env:
ENV: ${{ matrix.environment }}
timeout-minutes: 120
steps:
- uses: holoviz-dev/holoviz_tasks/pixi-install@ab994f6a87c4fdb1363925d26c85a5bab2144f28 # v1.0.0
with:
environments: ${{ matrix.environment }}
- name: Check packages latest version
run: |
pixi run -e "${ENV}" check-latest-packages bokeh panel param datashader
- name: Test Unit
run: |
pixi run -e "${ENV}" test-unit $COV
- name: Test Examples
run: |
pixi run -e "${ENV}" test-example
- uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0
with:
token: ${{ secrets.CODECOV_TOKEN }}
ui_test_suite:
name: ui:${{ matrix.environment }}:${{ matrix.os }}
needs: [pre_commit, setup, pixi_lock]
runs-on: ${{ matrix.os }}
if: needs.setup.outputs.code_change == 'true'
strategy:
fail-fast: false
matrix:
os: ["ubuntu-latest"]
environment: ["test-ui"]
timeout-minutes: 60
env:
PANEL_LOG_LEVEL: info
ENV: ${{ matrix.environment }}
steps:
- uses: holoviz-dev/holoviz_tasks/pixi-install@ab994f6a87c4fdb1363925d26c85a5bab2144f28 # v1.0.0
with:
environments: ${{ matrix.environment }}
- name: Test UI
run: |
# Create a .uicoveragerc file to set the concurrency library to greenlet
# https://github.com/microsoft/playwright-python/issues/313
echo "[run]\nconcurrency = greenlet" > .uicoveragerc
FAIL="--screenshot only-on-failure --full-page-screenshot --output ui_screenshots --tracing retain-on-failure"
pixi run -e "${ENV}" test-ui $COV --cov-config=.uicoveragerc $FAIL
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: always()
with:
name: ui_screenshots_${{ runner.os }}
path: ./ui_screenshots
if-no-files-found: ignore
- uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0
with:
token: ${{ secrets.CODECOV_TOKEN }}
core_test_suite:
name: core:${{ matrix.environment }}:${{ matrix.os }}
needs: [pre_commit, setup, pixi_lock]
runs-on: ${{ matrix.os }}
if: needs.setup.outputs.code_change == 'true'
strategy:
fail-fast: false
matrix:
os: ["ubuntu-latest"]
environment: ["test-core"]
env:
ENV: ${{ matrix.environment }}
timeout-minutes: 120
steps:
- uses: holoviz-dev/holoviz_tasks/pixi-install@ab994f6a87c4fdb1363925d26c85a5bab2144f28 # v1.0.0
with:
environments: ${{ matrix.environment }}
- name: Check packages latest version
run: |
pixi run -e "${ENV}" check-latest-packages pandas bokeh panel param numpy
- name: Test Unit
run: |
pixi run -e "${ENV}" test-unit
type_suite:
name: type:${{ matrix.environment }}:${{ matrix.os }}
needs: [pre_commit, setup, pixi_lock]
runs-on: ${{ matrix.os }}
if: needs.setup.outputs.code_change == 'true'
strategy:
fail-fast: false
matrix:
os: ["ubuntu-latest"]
environment: ["type"]
env:
ENV: ${{ matrix.environment }}
timeout-minutes: 5
steps:
- uses: holoviz-dev/holoviz_tasks/pixi-install@ab994f6a87c4fdb1363925d26c85a5bab2144f28 # v1.0.0
with:
environments: ${{ matrix.environment }}
- name: Type TY
run: |
pixi run -e "${ENV}" type-ty
result_test_suite:
name: result:test
needs: [unit_test_suite, ui_test_suite, core_test_suite, type_suite]
if: always()
runs-on: ubuntu-latest
steps:
- name: check for failures
if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')
run: echo job failed && exit 1