Skip to content

Update build.yml

Update build.yml #478

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 19 * * SUN"
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash -el {0}
env:
DISPLAY: ":99.0"
PYTHONIOENCODING: "utf-8"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jobs:
pre_commit:
name: Run pre-commit
needs: [setup]
runs-on: "ubuntu-latest"
steps:
- uses: holoviz-dev/holoviz_tasks/pre-commit@v0
- uses: pre-commit/action@v3.0.1
if: needs.setup.outputs.img_change == 'true'
with:
extra_args: -a --hook-stage manual oxipng || true --
- uses: stefanzweifel/git-auto-commit-action@v4
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
permissions:
pull-requests: read
outputs:
code_change: ${{ steps.filter.outputs.code }}
doc_change: ${{ steps.filter.outputs.doc }}
img_change: ${{ steps.filter.outputs.img }}
matrix: ${{ env.MATRIX }}
steps:
- uses: actions/checkout@v4
if: github.event_name != 'pull_request'
- 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"],
"environment": ["test-39", "test-312"]
}')
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-39", "test-310", "test-311", "test-312"]
}')
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@pixi
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) }}
timeout-minutes: 90
steps:
- uses: holoviz-dev/holoviz_tasks/pixi_install@pixi
with:
environments: ${{ matrix.environment }}
opengl: true
- name: Test unit
run: |
pixi run -e ${{ matrix.environment }} test-unit $COV
- name: Test subprocess
if: contains(matrix.os, 'ubuntu')
run: |
pixi run -e ${{ matrix.environment }} test-subprocess $COV
- name: Test docs
run: |
pixi run -e ${{ matrix.environment }} test-docs $COV
- name: Test Examples
run: |
pixi run -e ${{ matrix.environment }} test-example
- uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}