diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 9d5de5265c..c0e81fa548 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -7,6 +7,14 @@ on: branches: - "*" workflow_dispatch: + target: + description: "How much of the test suite to run" + type: choice + options: + - default + - full + - downstream + schedule: - cron: "0 14 * * SUN" @@ -38,17 +46,19 @@ jobs: steps: - uses: holoviz-dev/holoviz_tasks/pre-commit@v0.1a19 - changes: - name: Check for code changes + setup: + name: Setup workflow runs-on: ubuntu-latest permissions: pull-requests: read outputs: - code: ${{ steps.filter.outputs.code }} + code_change: ${{ steps.filter.outputs.code }} + matrix: ${{ env.MATRIX }} steps: - uses: actions/checkout@v3 if: github.event_name != 'pull_request' - - uses: dorny/paths-filter@v2.11.1 + - name: Check for code changes + uses: dorny/paths-filter@v2.11.1 id: filter with: filters: | @@ -58,26 +68,48 @@ jobs: - 'setup.py' - 'pyproject.toml' - '.github/workflows/test.yaml' + - name: Set test matrix with 'default' option + if: github.event_name != 'workflow_dispatch' || (github.event_name == 'workflow_dispatch' && github.event.inputs.target == '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: github.event_name == 'workflow_dispatch' && github.event.inputs.target == '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: github.event_name == 'workflow_dispatch' && github.event.inputs.target == 'downstream' + run: | + MATRIX=$(jq -nsc '{ + "os": ["ubuntu-latest"], + "python-version": ["3.10"] + }') + echo "MATRIX=$MATRIX" >> $GITHUB_ENV unit_test_suite: name: Unit tests on Python ${{ matrix.python-version }}, ${{ matrix.os }} - needs: [pre_commit, changes] + needs: [pre_commit, setup] runs-on: ${{ matrix.os }} strategy: fail-fast: false - matrix: - os: ["ubuntu-latest", "macos-latest", "windows-latest"] - python-version: ["3.9", "3.11"] - include: - - os: "ubuntu-latest" - python-version: "3.10" + matrix: ${{ fromJson(needs.setup.outputs.matrix) }} timeout-minutes: 120 env: DESC: "Python ${{ matrix.python-version }}, ${{ matrix.os }} unit tests" PYTHON_VERSION: ${{ matrix.python-version }} steps: - uses: holoviz-dev/holoviz_tasks/install@v0.1a19 - if: needs.changes.outputs.code == 'true' + if: needs.setup.outputs.code_change == 'true' with: name: unit_test_suite python-version: ${{ matrix.python-version }} @@ -88,29 +120,29 @@ jobs: conda-update: true id: install - name: bokeh sampledata - if: needs.changes.outputs.code == 'true' + if: needs.setup.outputs.code_change == 'true' run: | conda activate test-environment bokeh sampledata - name: doit test_unit - if: needs.changes.outputs.code == 'true' + if: needs.setup.outputs.code_change == 'true' run: | conda activate test-environment doit test_unit - name: test examples - if: needs.changes.outputs.code == 'true' + if: needs.setup.outputs.code_change == 'true' run: | conda activate test-environment doit test_examples - name: codecov - if: needs.changes.outputs.code == 'true' + if: needs.setup.outputs.code_change == 'true' run: | conda activate test-environment codecov ui_test_suite: name: UI tests on Python ${{ matrix.python-version }}, ${{ matrix.os }} - needs: [pre_commit, changes] + needs: [pre_commit, setup] runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -127,7 +159,7 @@ jobs: PYCTDEV_SELF_CHANNEL: "pyviz/label/dev" steps: - uses: holoviz-dev/holoviz_tasks/install@v0.1a19 - if: needs.changes.outputs.code == 'true' + if: needs.setup.outputs.code_change == 'true' with: name: ui_test_suite python-version: ${{ matrix.python-version }} @@ -137,12 +169,12 @@ jobs: playwright: true id: install - name: doit test_ui - if: needs.changes.outputs.code == 'true' + if: needs.setup.outputs.code_change == 'true' run: | conda activate test-environment doit test_ui - name: Upload coverage to Codecov - if: needs.changes.outputs.code == 'true' + if: needs.setup.outputs.code_change == 'true' uses: codecov/codecov-action@v3 with: files: ./coverage.xml @@ -151,7 +183,7 @@ jobs: core_test_suite: name: Core tests on Python ${{ matrix.python-version }}, ${{ matrix.os }} - needs: [pre_commit, changes] + needs: [pre_commit, setup] runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -165,7 +197,7 @@ jobs: steps: # Add back when this works on Python 3.12 # - uses: holoviz-dev/holoviz_tasks/install@v0.1a19 - # if: needs.changes.outputs.code == 'true' + # if: needs.setup.outputs.code_change == 'true' # with: # name: core_test_suite # python-version: ${{ matrix.python-version }} @@ -176,32 +208,32 @@ jobs: # conda-update: true # id: install - uses: actions/checkout@v3 - if: needs.changes.outputs.code == 'true' + if: needs.setup.outputs.code_change == 'true' with: fetch-depth: "100" - name: Fetch unshallow - if: needs.changes.outputs.code == 'true' + if: needs.setup.outputs.code_change == 'true' run: git fetch --prune --tags --unshallow -f - uses: actions/setup-python@v4 - if: needs.changes.outputs.code == 'true' + if: needs.setup.outputs.code_change == 'true' with: python-version: 3.12 - name: install - if: needs.changes.outputs.code == 'true' + if: needs.setup.outputs.code_change == 'true' run: | python -m pip install -ve '.[tests_core, tests_ci]' - name: bokeh sampledata - if: needs.changes.outputs.code == 'true' + if: needs.setup.outputs.code_change == 'true' run: | # conda activate test-environment bokeh sampledata - name: Check packages latest version - if: needs.changes.outputs.code == 'true' + if: needs.setup.outputs.code_change == 'true' run: | # conda activate test-environment python scripts/check_latest_packages.py - name: doit test_unit - if: needs.changes.outputs.code == 'true' + if: needs.setup.outputs.code_change == 'true' run: | # conda activate test-environment pytest holoviews