Skip to content

tests

tests #460

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 9 * * 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=./colorcet --cov-report=xml"
jobs:
pre_commit:
name: Run pre-commit
runs-on: "ubuntu-latest"
steps:
- uses: holoviz-dev/holoviz_tasks/pre-commit@ffddda04b2894fea39b407f64d3622d2f19e5a9f # v1
setup:
name: Setup workflow
runs-on: ubuntu-latest
permissions:
pull-requests: read
outputs:
code_change: ${{ steps.filter.outputs.code }}
matrix: ${{ env.MATRIX }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
if: github.event_name != 'pull_request'
with:
persist-credentials: false
- name: Check for code changes
uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4
id: filter
with:
filters: |
code:
- 'colorcet/**'
- '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"],
}')
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@ffddda04b2894fea39b407f64d3622d2f19e5a9f # v1
with:
cache: ${{ github.event.inputs.cache == 'true' || github.event.inputs.cache == '' }}
type_test_suite:
name: Type Check
needs: [pre_commit, setup, pixi_lock]
runs-on: ubuntu-latest
if: needs.setup.outputs.code_change == 'true'
steps:
- uses: holoviz-dev/holoviz_tasks/pixi-install@ffddda04b2894fea39b407f64d3622d2f19e5a9f # v1
with:
environments: test-314
- name: Run mypy - Python 3.10
run: pixi run type-mypy --python-version=3.10
- name: Run mypy - Python 3.14
run: pixi run type-mypy --python-version=3.14
- name: Run TY
run: pixi run type-ty
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) }}
timeout-minutes: 60
env:
ENV: ${{ matrix.environment }}
steps:
- uses: holoviz-dev/holoviz_tasks/pixi-install@ffddda04b2894fea39b407f64d3622d2f19e5a9f # v1
with:
environments: ${{ matrix.environment }}
- name: Test Unit
run: |
pixi run -e "${ENV}" test-unit $COV
- name: Test Examples
# Ignore for test-314 for now
if: ${{ matrix.environment != 'test-314' }}
run: |
pixi run -e "${ENV}" test-example
- uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6
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: 60
steps:
- uses: holoviz-dev/holoviz_tasks/pixi-install@ffddda04b2894fea39b407f64d3622d2f19e5a9f # v1
with:
environments: ${{ matrix.environment }}
- name: Test Unit
run: |
pixi run -e "${ENV}" test-unit
result_test_suite:
name: result:test
needs: [unit_test_suite, core_test_suite, type_test_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