# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ # ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ # ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ # ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ # ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ # ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ # ┃ 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-charts,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-charts/dist packages/viewer-datagrid/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.13" 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 - name: Verify wheel is PyPI-compatible (PEP 783) shell: bash run: | python -m pip install --quiet --upgrade twine "packaging>=24.2" shopt -s nullglob wheels=(rust/target/wheels/*.whl) if [ ${#wheels[@]} -eq 0 ]; then echo "::error::no emscripten wheel was produced"; exit 1 fi for w in "${wheels[@]}"; do echo "checking $w" case "$w" in *pyemscripten_2025_0_wasm32.whl) ;; *) echo "::error::$w is not tagged pyemscripten_2025_0_wasm32"; exit 1 ;; esac done python -m twine check rust/target/wheels/*.whl - 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.13" 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 --fetch-snapshots env: PACKAGE: "jupyterlab" PSP_SNAPSHOT_REPO: ${{ vars.PSP_SNAPSHOT_REPO }} PSP_SNAPSHOT_TOKEN: ${{ secrets.PSP_SNAPSHOT_TOKEN }} PSP_SNAPSHOT_REF: ${{ github.head_ref || github.ref_name }} # 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 id: run_tests run: pnpm run test -- --fetch-snapshots env: PACKAGE: "server,client,viewer,viewer-datagrid,viewer-charts,workspace,react" PSP_SNAPSHOT_REPO: ${{ vars.PSP_SNAPSHOT_REPO }} PSP_SNAPSHOT_TOKEN: ${{ secrets.PSP_SNAPSHOT_TOKEN }} PSP_SNAPSHOT_REF: ${{ github.head_ref || github.ref_name }} # PSP_USE_CCACHE: 1 - name: Upload Test Failures if: ${{ failure() && steps.run_tests.outcome == 'failure' }} uses: actions/upload-artifact@v4 with: name: perspective-js-test-results path: tools/test/dist/results if-no-files-found: ignore overwrite: true # ,--,--' . .-,--. . . # `- | ,-. ,-. |- '|__/ . . |- |-. ,-. ,-. # , | |-' `-. | ,| | | | | | | | | | # `-' `-' `-' `' `' `-| `' ' ' `-' ' ' # /| # `-' 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 <&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.13 - 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-charts - 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 }}