build aarch64 linux wheels #1398
Workflow file for this run
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
| # ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ | |
| # ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ | |
| # ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ | |
| # ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ | |
| # ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ | |
| # ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ | |
| # ┃ 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.9 | |
| node-version: [20.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.9 | |
| node-version: [20.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.runner }} | |
| needs: [lint_and_docs] | |
| container: ${{ matrix.container }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| runner: | |
| - ubuntu-22.04 | |
| - ubuntu-22.04-arm | |
| - macos-14 | |
| - windows-2022 | |
| arch: | |
| - aarch64 | |
| - x86_64 | |
| python-version: | |
| - 3.9 | |
| node-version: [20.x] | |
| include: | |
| - runner: ubuntu-22.04 | |
| arch: x86_64 | |
| python-version: 3.9 | |
| container: pagmo2/manylinux228_x86_64_with_deps | |
| - runner: ubuntu-22.04-arm | |
| arch: aarch64 | |
| python-version: 3.9 | |
| container: pagmo2/manylinux228_aarch64_with_deps | |
| is-release: | |
| - ${{ startsWith(github.ref, 'refs/tags/v') || github.ref_name == 'master' }} | |
| exclude: | |
| - os: windows-2022 | |
| arch: aarch64 | |
| - os: macos-14 | |
| is-release: false | |
| - os: macos-14 | |
| arch: x86_64 | |
| - os: windows-2022 | |
| is-release: false | |
| steps: | |
| - name: Free up disk space | |
| if: ${{ runner.os == 'Linux' }} | |
| run: | | |
| rm -rf /__t/* | |
| - 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: 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 | |
| # Windows sucks lol | |
| - uses: actions/upload-artifact@v4 | |
| if: ${{ runner.os == 'Windows' }} | |
| with: | |
| name: perspective-python-dist-${{ matrix.arch}}-${{ matrix.runner }}-${{ 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.runner }}-${{ 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-2022 | |
| arch: | |
| - x86_64 | |
| node-version: [20.x] | |
| is-release: | |
| - ${{ startsWith(github.ref, 'refs/tags/v') || github.ref_name == 'master' }} | |
| exclude: | |
| - os: windows-2022 | |
| 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.9 | |
| node-version: [20.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.9 | |
| node-version: [20.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-2022 | |
| arch: | |
| - aarch64 | |
| - x86_64 | |
| python-version: | |
| - 3.9 | |
| node-version: [20.x] | |
| is-release: | |
| - ${{ startsWith(github.ref, 'refs/tags/v') || github.ref_name == 'master' }} | |
| exclude: | |
| - os: windows-2022 | |
| arch: aarch64 | |
| - os: ubuntu-22.04 | |
| arch: aarch64 | |
| - os: macos-14 | |
| is-release: false | |
| - os: macos-14 | |
| arch: x86_64 | |
| - os: windows-2022 | |
| 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.9 | |
| node-version: [20.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.runner }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| runner: | |
| - ubuntu-22.04 | |
| - ubuntu-22.04-arm | |
| - macos-14 | |
| - windows-2022 | |
| arch: | |
| - x86_64 | |
| - aarch64 | |
| python-version: | |
| - 3.9 | |
| # - 3.12 | |
| node-version: [20.x] | |
| is-release: | |
| - ${{ startsWith(github.ref, 'refs/tags/v') || github.ref_name == 'master' }} | |
| exclude: | |
| - os: macos-14 | |
| is-release: false | |
| - os: macos-14 | |
| is-release: false | |
| - os: windows-2022 | |
| is-release: false | |
| - os: macos-14 | |
| arch: aarch64 | |
| - os: macos-14 | |
| arch: x86_64 | |
| - os: windows-2022 | |
| arch: aarch64 | |
| - os: ubuntu-22.04 | |
| arch: aarch64 | |
| 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.runner }}-${{ 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' | |
| 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.9 | |
| 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/(license|license_files)/LICENSE.md' wheel_installed_files.txt | |
| grep -E '.dist-info/(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' | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-22.04] | |
| python-version: [3.9] | |
| node-version: [20.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' | |
| strategy: | |
| matrix: | |
| os: [ubuntu-22.04] | |
| node-version: [20.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' | |
| 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.9 | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: perspective-python-dist-aarch64-ubuntu-22.04-3.9 | |
| # - 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-2022-3.9 | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: perspective-python-dist-x86_64-ubuntu-22.04-3.9 | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: perspective-python-dist-wasm32-emscripten-3.9 | |
| - 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 }} |