mirror of
https://github.com/perspective-dev/perspective.git
synced 2026-03-27 18:31:12 +00:00
1058 lines
37 KiB
YAML
1058 lines
37 KiB
YAML
# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
|
# ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
|
|
# ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
|
|
# ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
|
|
# ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
|
|
# ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
|
|
# ┃ Copyright (c) 2017, the Perspective Authors. ┃
|
|
# ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
|
|
# ┃ This file is part of the Perspective library, distributed under the terms ┃
|
|
# ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
|
|
# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
|
|
|
name: Build Status
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
tags:
|
|
- v*
|
|
paths-ignore:
|
|
- AUTHORS
|
|
- CHANGELOG.md
|
|
- CONTRIBUTING.md
|
|
- LICENSE
|
|
- README.md
|
|
- binder/
|
|
- docs/
|
|
- examples/
|
|
- rust/perspective-python/README.md
|
|
pull_request:
|
|
branches:
|
|
- master
|
|
workflow_dispatch:
|
|
inputs:
|
|
ci-full:
|
|
description: "Run Full CI"
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
ci-skip-cache:
|
|
description: "Omit Cache from CI run"
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
ci-skip-python:
|
|
description: "Skip Python components of CI"
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
ci-include-windows:
|
|
description: "Include Windows (Python) components of CI"
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
# , . . .-,--.
|
|
# ) . ,-. |- ,-. ,-. ,-| ' | \ ,-. ,-. ,-.
|
|
# / | | | | ,-| | | | | , | / | | | `-.
|
|
# `--' ' ' ' `' `-^ ' ' `-^ `-^--' `-' `-' `-'
|
|
#
|
|
lint_and_docs:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-22.04
|
|
python-version:
|
|
- 3.11
|
|
node-version: [22.x]
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Config
|
|
id: config-step
|
|
uses: ./.github/actions/config
|
|
|
|
- name: Initialize Build
|
|
id: init-step
|
|
uses: ./.github/actions/install-deps
|
|
with:
|
|
skip_cache: ${{ steps.config-step.outputs.SKIP_CACHE }}
|
|
|
|
- name: Metadata Build
|
|
run: pnpm run build --ci
|
|
env:
|
|
PACKAGE: "metadata"
|
|
|
|
- name: Lint
|
|
run: pnpm run lint --nightly
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: perspective-metadata
|
|
path: |
|
|
rust/perspective-server/cpp/
|
|
rust/perspective-server/cmake/
|
|
rust/perspective-client/src/
|
|
rust/perspective-client/docs/
|
|
rust/perspective-js/src/ts/
|
|
rust/perspective-viewer/src/ts/
|
|
rust/perspective-python/LICENSE_THIRDPARTY_cargo.yml
|
|
|
|
# ,-,---. . . ,-_/ .---. .
|
|
# '|___/ . . . | ,-| ' | ,-. . , ,-. \___ ,-. ,-. . ,-. |-
|
|
# ,| \ | | | | | | | ,-| | / ,-| \ | | | | | |
|
|
# `-^---' `-^ ' `' `-^ | `-^ `' `-^ `---' `-' ' ' |-' `'
|
|
# /` | |
|
|
# `--' '
|
|
build_js:
|
|
runs-on: ${{ matrix.os }}
|
|
needs: [lint_and_docs]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-22.04
|
|
python-version:
|
|
- 3.11
|
|
node-version: [22.x]
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Config
|
|
id: config-step
|
|
uses: ./.github/actions/config
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-metadata
|
|
path: rust/
|
|
|
|
- name: Initialize Build
|
|
id: init-step
|
|
uses: ./.github/actions/install-deps
|
|
with:
|
|
clean: "true"
|
|
python: "false"
|
|
playwright: "true"
|
|
skip_cache: ${{ steps.config-step.outputs.SKIP_CACHE }}
|
|
|
|
- name: WebAssembly Build
|
|
run: pnpm run build --ci
|
|
env:
|
|
PACKAGE: "server,client,viewer,viewer-datagrid,viewer-d3fc,viewer-openlayers,workspace,react"
|
|
# PSP_USE_CCACHE: 1
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: perspective-js-dist
|
|
path: |
|
|
rust/perspective-js/dist
|
|
rust/perspective-js/src
|
|
rust/perspective-server/dist
|
|
rust/perspective-viewer/dist
|
|
rust/perspective-viewer/src
|
|
packages/viewer-d3fc/dist
|
|
packages/viewer-datagrid/dist
|
|
packages/viewer-openlayers/dist
|
|
packages/workspace/dist
|
|
packages/react/dist
|
|
|
|
# ,-,---. . . .-,--. . .
|
|
# '|___/ . . . | ,-| '|__/ . . |- |-. ,-. ,-.
|
|
# ,| \ | | | | | | ,| | | | | | | | | |
|
|
# `-^---' `-^ ' `' `-^ `' `-| `' ' ' `-' ' '
|
|
# /|
|
|
# `-'
|
|
build_python:
|
|
runs-on: ${{ matrix.os }}
|
|
needs: [lint_and_docs]
|
|
container: ${{ matrix.container }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-22.04
|
|
- ubuntu-22.04-arm
|
|
- macos-14
|
|
- windows-2025
|
|
arch:
|
|
- aarch64
|
|
- x86_64
|
|
python-version:
|
|
- 3.11
|
|
node-version: [22.x]
|
|
include:
|
|
- os: ubuntu-22.04
|
|
arch: x86_64
|
|
python-version: 3.11
|
|
container: quay.io/pypa/manylinux_2_28_x86_64
|
|
- os: ubuntu-22.04-arm
|
|
arch: aarch64
|
|
python-version: 3.11
|
|
container: quay.io/pypa/manylinux_2_28_aarch64
|
|
is-release:
|
|
- ${{ startsWith(github.ref, 'refs/tags/v') || github.ref_name == 'master' || github.event.inputs.ci-full }}
|
|
exclude:
|
|
- os: windows-2025
|
|
arch: aarch64
|
|
- os: macos-14
|
|
is-release: false
|
|
- os: macos-14
|
|
arch: x86_64
|
|
- os: windows-2025
|
|
is-release: false
|
|
- os: ubuntu-22.04
|
|
arch: aarch64
|
|
- os: ubuntu-22.04-arm
|
|
arch: x86_64
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Config
|
|
id: config-step
|
|
uses: ./.github/actions/config
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-metadata
|
|
path: rust/
|
|
|
|
- name: Initialize Build
|
|
id: init-step
|
|
uses: ./.github/actions/install-deps
|
|
with:
|
|
javascript: "false"
|
|
arch: ${{ matrix.arch }}
|
|
manylinux: ${{ matrix.container && 'true' || 'false' }}
|
|
skip_cache: ${{ steps.config-step.outputs.SKIP_CACHE }}
|
|
|
|
- name: Run df -h
|
|
if: ${{ runner.os == 'Linux' }}
|
|
run: df -h
|
|
|
|
- name: Python Build
|
|
run: pnpm run build
|
|
if: ${{ runner.os != 'Windows' }}
|
|
env:
|
|
PACKAGE: "python"
|
|
PSP_ARCH: ${{ matrix.arch }}
|
|
PSP_ROOT_DIR: ${{ github.workspace }}
|
|
PSP_BUILD_WHEEL: 1
|
|
|
|
- name: Python Build (Windows)
|
|
run: |
|
|
New-Item -ItemType Directory -Path $env:CARGO_TARGET_DIR -Force
|
|
pnpm run build
|
|
if: ${{ runner.os == 'Windows' }}
|
|
env:
|
|
CARGO_TARGET_DIR: D:\psp-rust
|
|
PSP_CPP_BUILD_DIR: D:\psp-build
|
|
PSP_ROOT_DIR: ${{ github.workspace }}
|
|
PACKAGE: "python"
|
|
PSP_ARCH: ${{ matrix.arch }}
|
|
PSP_BUILD_WHEEL: 1
|
|
|
|
- name: Run df -h
|
|
if: ${{ runner.os == 'Linux' }}
|
|
run: df -h
|
|
|
|
# Windows sucks lol
|
|
- uses: actions/upload-artifact@v4
|
|
if: ${{ runner.os == 'Windows' }}
|
|
with:
|
|
name: perspective-python-dist-${{ matrix.arch}}-${{ matrix.os }}-${{ matrix.python-version }}
|
|
path: D:\psp-rust\wheels\*.whl
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
# if: ${{ runner.os != 'Windows' }}
|
|
with:
|
|
name: perspective-python-dist-${{ matrix.arch}}-${{ matrix.os }}-${{ matrix.python-version }}
|
|
path: rust/target/wheels/*.whl
|
|
|
|
# ,-,---. . . . ,--,--' .
|
|
# '|___/ . . . | ,-| ,-. ,-. ,-| `- | ,-. ,-. |-
|
|
# ,| \ | | | | | | ,-| | | | | , | |-' `-. |
|
|
# `-^---' `-^ ' `' `-^ `-^ ' ' `-^ `-' `-' `-' `'
|
|
#
|
|
# .-,--. .
|
|
# `|__/ . . ,-. |-
|
|
# )| \ | | `-. |
|
|
# `' ` `-^ `-' `'
|
|
#
|
|
build_and_test_rust:
|
|
runs-on: ${{ matrix.os }}
|
|
needs: [lint_and_docs]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-22.04
|
|
- windows-2025
|
|
arch:
|
|
- x86_64
|
|
node-version: [22.x]
|
|
is-release:
|
|
- ${{ startsWith(github.ref, 'refs/tags/v') || github.ref_name == 'master' || github.event.inputs.ci-full }}
|
|
exclude:
|
|
- os: windows-2025
|
|
is-release: false
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Config
|
|
id: config-step
|
|
uses: ./.github/actions/config
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-metadata
|
|
path: rust/
|
|
|
|
- name: Initialize Build
|
|
id: init-step
|
|
uses: ./.github/actions/install-deps
|
|
with:
|
|
javascript: "false"
|
|
arch: ${{ matrix.arch }}
|
|
manylinux: "false"
|
|
skip_cache: ${{ steps.config-step.outputs.SKIP_CACHE }}
|
|
|
|
- name: Rust Build
|
|
run: pnpm run build
|
|
if: ${{ !contains(matrix.os, 'windows') }}
|
|
env:
|
|
PACKAGE: "rust"
|
|
PSP_ROOT_DIR: ${{ github.workspace }}
|
|
|
|
- name: Rust Build (Windows)
|
|
run: |
|
|
New-Item -ItemType Directory -Path $env:CARGO_TARGET_DIR -Force
|
|
pnpm run build
|
|
if: ${{ contains(matrix.os, 'windows') }}
|
|
env:
|
|
CARGO_TARGET_DIR: D:\psp-rust
|
|
PSP_ROOT_DIR: ${{ github.workspace }}
|
|
PACKAGE: "rust"
|
|
|
|
- name: Rust Test
|
|
if: ${{ !contains(matrix.os, 'windows') }}
|
|
run: pnpm run test
|
|
env:
|
|
PACKAGE: "rust"
|
|
PSP_ROOT_DIR: ${{ github.workspace }}
|
|
|
|
- name: Rust Test (Windows)
|
|
run: |
|
|
New-Item -ItemType Directory -Path $env:CARGO_TARGET_DIR -Force
|
|
pnpm run test
|
|
if: ${{ contains(matrix.os, 'windows') }}
|
|
env:
|
|
CARGO_TARGET_DIR: D:\psp-rust
|
|
PSP_ROOT_DIR: ${{ github.workspace }}
|
|
PACKAGE: "rust"
|
|
|
|
- name: Package
|
|
if: ${{ !contains(matrix.os, 'windows') && steps.config-step.outputs.FULL_RUN }}
|
|
run: cargo package --no-verify --allow-dirty -p perspective -p perspective-viewer -p perspective-js -p perspective-client -p perspective-server -p perspective-python
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
if: ${{ !contains(matrix.os, 'windows') && steps.config-step.outputs.FULL_RUN }}
|
|
with:
|
|
name: perspective-rust
|
|
path: rust/target/package/*.crate
|
|
|
|
# ,-,---. . . .-,--. . .
|
|
# '|___/ . . . | ,-| '|__/ . . ,-. ,-| . ,-| ,-.
|
|
# ,| \ | | | | | | .| | | | | | | | | | |-'
|
|
# `-^---' `-' ' `' `-' `' `-| `-' `-' ' `-' `-'
|
|
# /|
|
|
# `-'
|
|
build_emscripten_wheel:
|
|
runs-on: ${{ matrix.os }}
|
|
needs: [lint_and_docs]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-22.04
|
|
arch:
|
|
- x86_64
|
|
python-version:
|
|
- 3.11
|
|
node-version: [22.x]
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Config
|
|
id: config-step
|
|
uses: ./.github/actions/config
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-metadata
|
|
path: rust/
|
|
|
|
- name: Initialize Build
|
|
id: init-step
|
|
uses: ./.github/actions/install-deps
|
|
with:
|
|
javascript: "false"
|
|
arch: ${{ matrix.arch }}
|
|
manylinux: "false"
|
|
skip_cache: ${{ steps.config-step.outputs.SKIP_CACHE }}
|
|
|
|
- name: Python Build Pyodide
|
|
run: pnpm install && pnpm run build
|
|
env:
|
|
PSP_PYODIDE: 1
|
|
PACKAGE: "python"
|
|
CI: 1
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: perspective-python-dist-wasm32-emscripten-${{ matrix.python-version }}
|
|
path: rust/target/wheels/*.whl
|
|
|
|
# ~*~ Test pyodide ~*~
|
|
test_emscripten_wheel:
|
|
runs-on: ${{ matrix.os }}
|
|
needs: [build_emscripten_wheel]
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-22.04
|
|
arch:
|
|
- x86_64
|
|
python-version:
|
|
- 3.11
|
|
node-version: [22.x]
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Config
|
|
id: config-step
|
|
uses: ./.github/actions/config
|
|
|
|
- name: Initialize Build
|
|
uses: ./.github/actions/install-deps
|
|
with:
|
|
javascript: "false"
|
|
arch: ${{ matrix.arch }}
|
|
manylinux: "false"
|
|
skip_cache: ${{ steps.config-step.outputs.SKIP_CACHE }}
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-python-dist-wasm32-emscripten-${{ matrix.python-version }}
|
|
path: rust/target/wheels/
|
|
|
|
- name: Install Python Pyodide dependencies
|
|
shell: bash
|
|
run: python -m pip install -r rust/perspective-python/requirements-pyodide.txt
|
|
|
|
- name: Install Pyodide distribution
|
|
shell: bash
|
|
run: pnpm run install_pyodide
|
|
|
|
- name: Install Python Playwright browsers
|
|
shell: bash
|
|
run: python -m playwright install
|
|
|
|
- name: "Test Pyodide"
|
|
run: pnpm run test
|
|
env:
|
|
PSP_PYODIDE: 1
|
|
PACKAGE: "python"
|
|
CI: 1
|
|
# ,-,---. . . . ,--,--' .
|
|
# '|___/ . . . | ,-| ,-. ,-. ,-| `- | ,-. ,-. |-
|
|
# ,| \ | | | | | | ,-| | | | | , | |-' `-. |
|
|
# `-^---' `-^ ' `' `-^ `-^ ' ' `-^ `-' `-' `-' `'
|
|
#
|
|
# ,-_/ . . .
|
|
# ' | . . ,-. . . |- ,-. ,-. | ,-. |-.
|
|
# | | | | | | | | |-' | | ,-| | |
|
|
# | `-^ |-' `-| `' `-' ' `' `-^ ^-'
|
|
# /` | | /|
|
|
# `--' ' `-'
|
|
#
|
|
build_and_test_jupyterlab:
|
|
needs: [build_js, build_python]
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-22.04
|
|
- macos-14
|
|
- windows-2025
|
|
arch:
|
|
- aarch64
|
|
- x86_64
|
|
python-version:
|
|
- 3.11
|
|
node-version: [22.x]
|
|
is-release:
|
|
- ${{ startsWith(github.ref, 'refs/tags/v') || github.ref_name == 'master' || github.event.inputs.ci-full }}
|
|
exclude:
|
|
- os: windows-2025
|
|
arch: aarch64
|
|
- os: ubuntu-22.04
|
|
arch: aarch64
|
|
- os: macos-14
|
|
is-release: false
|
|
- os: macos-14
|
|
arch: x86_64
|
|
- os: windows-2025
|
|
is-release: false
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Config
|
|
id: config-step
|
|
uses: ./.github/actions/config
|
|
|
|
- name: Initialize Build
|
|
id: init-step
|
|
uses: ./.github/actions/install-deps
|
|
with:
|
|
rust: "false"
|
|
playwright: "true"
|
|
cpp: "false"
|
|
skip_cache: ${{ steps.config-step.outputs.SKIP_CACHE }}
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-js-dist
|
|
path: .
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-metadata
|
|
path: rust/
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-python-dist-${{ matrix.arch }}-${{ matrix.os }}-${{ matrix.python-version }}
|
|
path: .
|
|
|
|
- name: Build extension
|
|
run: pnpm run build
|
|
env:
|
|
PACKAGE: "jupyterlab"
|
|
|
|
- run: node tools/scripts/repack_wheel.mjs
|
|
|
|
- name: Python Build sdist
|
|
run: pnpm run build
|
|
env:
|
|
PACKAGE: "python"
|
|
if: ${{ runner.os == 'Linux' }}
|
|
# PSP_USE_CCACHE: 1
|
|
# PSP_ARCH: ${{ matrix.arch }}
|
|
PSP_BUILD_SDIST: 1
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: perspective-python-dist-${{ matrix.arch}}-${{ matrix.os }}-${{ matrix.python-version }}
|
|
path: "*.whl"
|
|
overwrite: true
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
if: ${{ runner.os == 'Linux' }}
|
|
with:
|
|
name: perspective-python-sdist
|
|
path: rust/target/wheels/*.tar.gz
|
|
|
|
- uses: ./.github/actions/install-wheel
|
|
if: ${{ runner.os == 'Linux' }}
|
|
|
|
- name: Run Jupyter Tests
|
|
if: ${{ runner.os == 'Linux' }}
|
|
run: pnpm run test
|
|
env:
|
|
PACKAGE: "jupyterlab"
|
|
# PSP_USE_CCACHE: 1
|
|
|
|
- name: Run Jupyter Integration Tests
|
|
if: ${{ false }}
|
|
# if: ${{ runner.os == 'Linux' }}
|
|
run: |
|
|
jupyter lab --generate-config
|
|
pnpm run test --jupyter
|
|
env:
|
|
PACKAGE: "jupyterlab"
|
|
# PSP_USE_CCACHE: 1
|
|
|
|
# ,--,--' . ,-_/ .---. .
|
|
# `- | ,-. ,-. |- ' | ,-. . , ,-. \___ ,-. ,-. . ,-. |-
|
|
# , | |-' `-. | | ,-| | / ,-| \ | | | | | |
|
|
# `-' `-' `-' `' | `-^ `' `-^ `---' `-' ' ' |-' `'
|
|
# /` | |
|
|
# `--' '
|
|
test_js:
|
|
needs: [build_js]
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-22.04
|
|
python-version:
|
|
- 3.11
|
|
node-version: [22.x]
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Config
|
|
id: config-step
|
|
uses: ./.github/actions/config
|
|
|
|
- name: Initialize Build
|
|
uses: ./.github/actions/install-deps
|
|
with:
|
|
python: "false"
|
|
rust: "false"
|
|
cpp: "false"
|
|
playwright: "true"
|
|
skip_cache: ${{ steps.config-step.outputs.SKIP_CACHE }}
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-js-dist
|
|
path: .
|
|
|
|
- name: Run Tests
|
|
run: pnpm run test
|
|
env:
|
|
PACKAGE: "server,client,viewer,viewer-datagrid,viewer-d3fc,viewer-openlayers,workspace,react"
|
|
# PSP_USE_CCACHE: 1
|
|
|
|
# ,--,--' . .-,--. . .
|
|
# `- | ,-. ,-. |- '|__/ . . |- |-. ,-. ,-.
|
|
# , | |-' `-. | ,| | | | | | | | | |
|
|
# `-' `-' `-' `' `' `-| `' ' ' `-' ' '
|
|
# /|
|
|
# `-'
|
|
test_python:
|
|
needs: [build_python]
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-22.04
|
|
- ubuntu-22.04-arm
|
|
- macos-14
|
|
- windows-2025
|
|
arch:
|
|
- x86_64
|
|
- aarch64
|
|
python-version:
|
|
- 3.11
|
|
# - 3.11
|
|
node-version: [22.x]
|
|
is-release:
|
|
- ${{ startsWith(github.ref, 'refs/tags/v') || github.ref_name == 'master' || github.event.inputs.ci-full }}
|
|
exclude:
|
|
- os: macos-14
|
|
is-release: false
|
|
- os: macos-14
|
|
is-release: false
|
|
- os: windows-2025
|
|
is-release: false
|
|
- os: macos-14
|
|
arch: aarch64
|
|
- os: macos-14
|
|
arch: x86_64
|
|
- os: windows-2025
|
|
arch: aarch64
|
|
- os: ubuntu-22.04
|
|
arch: aarch64
|
|
- os: ubuntu-22.04-arm
|
|
arch: x86_64
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Config
|
|
id: config-step
|
|
uses: ./.github/actions/config
|
|
|
|
- name: Initialize Build
|
|
uses: ./.github/actions/install-deps
|
|
with:
|
|
rust: "false"
|
|
cpp: "false"
|
|
skip_cache: ${{ steps.config-step.outputs.SKIP_CACHE }}
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-python-dist-${{ matrix.arch }}-${{ matrix.os }}-${{ matrix.python-version }}
|
|
|
|
- uses: ./.github/actions/install-wheel
|
|
|
|
- name: Run Tests
|
|
run: pnpm run test
|
|
env:
|
|
PACKAGE: "python"
|
|
# PSP_USE_CCACHE: 1
|
|
|
|
test_python_sdist:
|
|
if: startsWith(github.ref, 'refs/tags/v') || github.ref_name == 'master' || github.event.inputs.ci-full
|
|
needs: [build_and_test_jupyterlab, build_and_test_rust]
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os:
|
|
- ubuntu-22.04
|
|
arch:
|
|
- x86_64
|
|
python-version:
|
|
- 3.11
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Config
|
|
id: config-step
|
|
uses: ./.github/actions/config
|
|
|
|
- name: Initialize Build
|
|
uses: ./.github/actions/install-deps
|
|
with:
|
|
rust: "true"
|
|
cpp: "true"
|
|
python: "true"
|
|
javascript: "false"
|
|
skip_cache: ${{ steps.config-step.outputs.SKIP_CACHE }}
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-rust
|
|
path: crates/
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-python-sdist
|
|
|
|
# The sdist depends on perspective-{client,server} crates published to
|
|
# crates.io. Patch the build to instead use .crate artifacts built
|
|
# previously in the workflow
|
|
- name: Set up path overrides for perspective .crate contents
|
|
shell: bash
|
|
run: |
|
|
(cd crates && tar xvf perspective-client-*.crate && tar xvf perspective-server-*.crate)
|
|
CLIENT_CRATE_ROOT=$(ls -d "$PWD"/crates/perspective-client-*/ | head -n 1)
|
|
SERVER_CRATE_ROOT=$(ls -d "$PWD"/crates/perspective-server-*/ | head -n 1)
|
|
|
|
mkdir -p $HOME/.cargo
|
|
cat > $HOME/.cargo/config.toml <<EOF
|
|
[patch.crates-io]
|
|
perspective-client = { path = "$CLIENT_CRATE_ROOT" }
|
|
perspective-server = { path = "$SERVER_CRATE_ROOT" }
|
|
EOF
|
|
|
|
- name: Install perspective-python sdist
|
|
shell: bash
|
|
run: python -m pip install -vv ./perspective*.tar.gz
|
|
|
|
- name: Verify licenses are installed
|
|
shell: bash
|
|
run: |
|
|
pip show -f perspective-python | tee wheel_installed_files.txt
|
|
# Maturin got this wrong: the packages should be in .dist-info/licenses/
|
|
# Newer versions of Maturin will fix it, so search for either location.
|
|
# https://github.com/PyO3/maturin/pull/862 https://github.com/PyO3/maturin/pull/2181
|
|
grep -E '.dist-info/(licenses|license|license_files)/LICENSE.md' wheel_installed_files.txt
|
|
grep -E '.dist-info/(licenses|license|license_files)/LICENSE_THIRDPARTY_cargo.yml' wheel_installed_files.txt
|
|
|
|
- name: Verify labextension
|
|
shell: bash
|
|
run: |
|
|
jupyter labextension list --debug
|
|
jupyter labextension list 2>&1 | grep '@perspective-dev/jupyterlab'
|
|
|
|
- name: Run import test
|
|
run: python -c 'import perspective'
|
|
|
|
- name: Run pytests
|
|
run: pytest -v --pyargs 'perspective.tests' --timeout=300
|
|
|
|
# ,-,---. . .
|
|
# '|___/ ,-. ,-. ,-. |-. ,-,-. ,-. ,-. | ,
|
|
# ,| \ |-' | | | | | | | | ,-| | |<
|
|
# `-^---' `-' ' ' `-' ' ' ' ' ' `-^ ' ' `
|
|
#
|
|
# .-,--. . .
|
|
# '|__/ . . |- |-. ,-. ,-.
|
|
# ,| | | | | | | | | |
|
|
# `' `-| `' ' ' `-' ' '
|
|
# /|
|
|
# `-'
|
|
benchmark_python:
|
|
needs: [build_python, build_js]
|
|
if: startsWith(github.ref, 'refs/tags/v') || github.ref_name == 'master' || github.event.inputs.ci-full
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu-22.04]
|
|
python-version: [3.11]
|
|
node-version: [22.x]
|
|
arch: [x86_64]
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Config
|
|
id: config-step
|
|
uses: ./.github/actions/config
|
|
|
|
- name: Initialize Build
|
|
uses: ./.github/actions/install-deps
|
|
with:
|
|
rust: "false"
|
|
cpp: "false"
|
|
skip_cache: ${{ steps.config-step.outputs.SKIP_CACHE }}
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-js-dist
|
|
path: .
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-python-dist-${{ matrix.arch }}-${{ matrix.os }}-${{ matrix.python-version }}
|
|
|
|
- uses: ./.github/actions/install-wheel
|
|
with:
|
|
inplace: "false"
|
|
|
|
- name: Benchmarks
|
|
run: pnpm run bench
|
|
env:
|
|
PACKAGE: "python"
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: perspective-python-benchmarks
|
|
path: tools/bench/dist/benchmark-python.arrow
|
|
|
|
# ,-,---. . .
|
|
# '|___/ ,-. ,-. ,-. |-. ,-,-. ,-. ,-. | ,
|
|
# ,| \ |-' | | | | | | | | ,-| | |<
|
|
# `-^---' `-' ' ' `-' ' ' ' ' ' `-^ ' ' `
|
|
#
|
|
# ,-_/ .---. .
|
|
# ' | ,-. . , ,-. \___ ,-. ,-. . ,-. |-
|
|
# | ,-| | / ,-| \ | | | | | |
|
|
# | `-^ `' `-^ `---' `-' ' ' |-' `'
|
|
# /` | |
|
|
# `--' '
|
|
benchmark_js:
|
|
needs: [build_js]
|
|
if: startsWith(github.ref, 'refs/tags/v') || github.ref_name == 'master' || github.event.inputs.ci-full
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-22.04]
|
|
node-version: [22.x]
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Config
|
|
id: config-step
|
|
uses: ./.github/actions/config
|
|
|
|
- name: Initialize Build
|
|
uses: ./.github/actions/install-deps
|
|
with:
|
|
rust: "false"
|
|
cpp: "false"
|
|
python: "false"
|
|
javascript: "false"
|
|
skip_cache: ${{ steps.config-step.outputs.SKIP_CACHE }}
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-js-dist
|
|
path: .
|
|
|
|
- name: Benchmarks
|
|
run: pnpm run bench
|
|
env:
|
|
PACKAGE: "client"
|
|
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: perspective-js-benchmarks
|
|
path: tools/bench/dist/benchmark-js.arrow
|
|
|
|
# .-,--. . . .
|
|
# '|__/ . . |-. | . ,-. |-.
|
|
# ,| | | | | | | `-. | |
|
|
# `' `-^ ^-' `' ' `-' ' '
|
|
#
|
|
publish:
|
|
needs:
|
|
[
|
|
build_and_test_jupyterlab,
|
|
test_python,
|
|
test_python_sdist,
|
|
test_js,
|
|
benchmark_js,
|
|
benchmark_python,
|
|
build_emscripten_wheel,
|
|
test_emscripten_wheel,
|
|
build_and_test_rust,
|
|
lint_and_docs,
|
|
]
|
|
if: startsWith(github.ref, 'refs/tags/v') || github.ref_name == 'master' || github.event.inputs.ci-full
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-22.04]
|
|
runs-on: ${{ matrix.os }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
|
|
- name: Config
|
|
id: config-step
|
|
uses: ./.github/actions/config
|
|
|
|
- name: Initialize Build
|
|
uses: ./.github/actions/install-deps
|
|
with:
|
|
rust: "false"
|
|
cpp: "false"
|
|
python: "false"
|
|
javascript: "false"
|
|
skip_cache: ${{ steps.config-step.outputs.SKIP_CACHE }}
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-js-dist
|
|
path: .
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-python-dist-aarch64-macos-14-3.11
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-python-dist-aarch64-ubuntu-22.04-arm-3.11
|
|
|
|
# - uses: actions/download-artifact@v4
|
|
# with:
|
|
# name: perspective-python-dist-x86_64-macos-14-3.9
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-python-dist-x86_64-windows-2025-3.11
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-python-dist-x86_64-ubuntu-22.04-3.11
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-python-dist-wasm32-emscripten-3.11
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-python-sdist
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-js-benchmarks
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-python-benchmarks
|
|
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: perspective-rust
|
|
|
|
- run: pnpm pack --pack-destination=../..
|
|
working-directory: ./rust/perspective-js
|
|
|
|
- run: pnpm pack --pack-destination=../..
|
|
working-directory: ./rust/perspective-server
|
|
|
|
- run: pnpm pack --pack-destination=../..
|
|
working-directory: ./rust/perspective-viewer
|
|
|
|
- run: pnpm pack --pack-destination=../..
|
|
working-directory: ./packages/viewer-datagrid
|
|
|
|
- run: pnpm pack --pack-destination=../..
|
|
working-directory: ./packages/viewer-d3fc
|
|
|
|
- run: pnpm pack --pack-destination=../..
|
|
working-directory: ./packages/viewer-openlayers
|
|
|
|
- run: pnpm pack --pack-destination=../..
|
|
working-directory: ./packages/workspace
|
|
|
|
- run: pnpm pack --pack-destination=../..
|
|
working-directory: ./packages/react
|
|
|
|
- run: pnpm pack --pack-destination=../..
|
|
working-directory: ./packages/cli
|
|
|
|
- run: pnpm pack --pack-destination=../..
|
|
working-directory: ./packages/jupyterlab
|
|
|
|
- name: Upload nightly artifacts
|
|
uses: actions/upload-artifact@v4
|
|
if: ${{ steps.config-step.outputs.PUBLISH_RELEASE == 'false' }}
|
|
with:
|
|
name: nightly
|
|
path: |
|
|
*.whl
|
|
*.tar.gz
|
|
*.tgz
|
|
*.arrow
|
|
*.crate
|
|
|
|
- name: Publish assets
|
|
uses: softprops/action-gh-release@v2
|
|
if: ${{ steps.config-step.outputs.PUBLISH_RELEASE == 'true' }}
|
|
with:
|
|
draft: true
|
|
generate_release_notes: true
|
|
files: |
|
|
*.whl
|
|
*.tar.gz
|
|
*.tgz
|
|
*.arrow
|
|
*.crate
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|