tests #1919
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 16 * * 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=./datashader --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 | |
| outputs: | |
| matrix: ${{ env.MATRIX }} | |
| code_change: ${{ steps.filter.outputs.code }} | |
| 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: | |
| - 'datashader/**' | |
| - '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"] | |
| }') | |
| 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 == '' }} | |
| 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: 120 | |
| env: | |
| ENV: ${{ matrix.environment }} | |
| steps: | |
| - uses: holoviz-dev/holoviz_tasks/pixi-install@ffddda04b2894fea39b407f64d3622d2f19e5a9f # v1 | |
| with: | |
| environments: ${{ matrix.environment }} | |
| - name: Restore cached hypothesis directory | |
| uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 | |
| with: | |
| path: .hypothesis/ | |
| key: cache-hypothesis-${{ github.run_id }}-${{ matrix.environment }}-${{ matrix.os }} | |
| restore-keys: cache-hypothesis- | |
| - name: Test Unit | |
| run: | | |
| pixi run -e "${ENV}" test-unit $COV | |
| - name: Test Unit (without JIT) | |
| run: | | |
| pixi run -e "${ENV}" test-unit-nojit $COV | |
| - name: Test Examples | |
| run: | | |
| pixi run -e "${ENV}" test-example | |
| - uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6 | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| - name: Save hypothesis directory | |
| uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5 | |
| if: always() | |
| with: | |
| path: .hypothesis/ | |
| key: cache-hypothesis-${{ github.run_id }}-${{ matrix.environment }}-${{ matrix.os }} | |
| 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"] | |
| 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 | |
| benchmark_test_suite: | |
| name: benchmark:${{ 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-313"] | |
| timeout-minutes: 120 | |
| env: | |
| ENV: ${{ matrix.environment }} | |
| steps: | |
| - uses: holoviz-dev/holoviz_tasks/pixi-install@ffddda04b2894fea39b407f64d3622d2f19e5a9f # v1 | |
| with: | |
| environments: ${{ matrix.environment }} | |
| - name: Run benchmarks | |
| uses: CodSpeedHQ/action@3194d9a39c4d46684cb44bf7207fc56626aad8fd # v4 | |
| with: | |
| token: ${{ secrets.CODSPEED_TOKEN }} | |
| mode: simulation | |
| run: pixi run -e "${ENV}" test-benchmark | |
| result_test_suite: | |
| name: result:test | |
| needs: [unit_test_suite, core_test_suite, benchmark_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 |