Skip to content

tests

tests #4

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 17 * * 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=./lumen --cov-report=xml"
jobs:
pre_commit:
name: Run pre-commit
needs: [setup]
runs-on: "ubuntu-latest"
permissions:
contents: write
steps:
- uses: holoviz-dev/holoviz_tasks/pre-commit@ffddda04b2894fea39b407f64d3622d2f19e5a9f # v1
- uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1
if: needs.setup.outputs.img_change == 'true'
with:
extra_args: -a --hook-stage manual oxipng || true --
- name: Set git credentials
if: needs.setup.outputs.img_change == 'true'
run: git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git
- uses: stefanzweifel/git-auto-commit-action@04702edda442b2e678b25b537cec683a1493fcb9 # v7
if: needs.setup.outputs.img_change == 'true'
with:
commit_message: "Optimize PNG images (lossless)"
file_pattern: "*.png"
setup:
name: Setup workflow
runs-on: ubuntu-latest
outputs:
img_change: ${{ steps.filter.outputs.img }}
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: |
img:
- '**/*.png'
- 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-312", "test-313"]
}')
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-312", "test-313"]
}')
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-312"]
}')
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 == '' }}
unit_test_suite:
name: unit:${{ matrix.environment }}:${{ matrix.os }}
needs: [pre_commit, setup, pixi_lock]
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.matrix) }}
timeout-minutes: 120
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
- 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 }}
strategy:
fail-fast: false
matrix:
os: ["ubuntu-latest"]
environment: ["test-core"]
timeout-minutes: 120
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
result_test_suite:
name: result:test
needs: [unit_test_suite, core_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