Tests #2086
This file contains 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: | |
schedule: | |
- cron: "0 8 * * *" | |
jobs: | |
# Run "pre-commit run --all-files --hook-stage=manual" | |
pre-commit: | |
name: Run pre-commit hook | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.13' | |
- name: Base Setup | |
uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 | |
- name: Install dependencies | |
run: | | |
pip install "jupyterlab>=4.0.0,<5" | |
pip install -e . | |
pip install -e projects/jupyter-collaboration-ui -e projects/jupyter-docprovider -e projects/jupyter-server-ydoc | |
jlpm | |
- name: Run pre-commit | |
uses: pre-commit/action@v2.0.0 | |
with: | |
extra_args: --all-files --hook-stage=manual | |
- name: Help message if pre-commit fail | |
if: ${{ failure() }} | |
run: | | |
echo "You can install pre-commit hooks to automatically run formatting" | |
echo "on each commit with:" | |
echo " pre-commit install" | |
echo "or you can run by hand on staged files with" | |
echo " pre-commit run" | |
echo "or after-the-fact on already committed files with" | |
echo " pre-commit run --all-files --hook-stage=manual" | |
- name: Lint frontend | |
run: | | |
jlpm run lint:check | |
test-js: | |
name: Test JavaScript | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.13' | |
- name: Base Setup | |
uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 | |
- name: Install dependencies | |
run: | | |
pip install "jupyterlab>=4.0.0,<5" | |
pip install -e . | |
pip install -e projects/jupyter-collaboration-ui -e projects/jupyter-docprovider -e projects/jupyter-server-ydoc | |
jupyter labextension develop --overwrite projects/jupyter-collaboration-ui | |
jupyter labextension develop --overwrite projects/jupyter-docprovider | |
jlpm | |
jlpm build | |
- name: Run Tests | |
run: | | |
set -eux | |
jlpm run test | |
test-py: | |
name: Test Python | |
runs-on: ${{ matrix.os }} | |
timeout-minutes: 20 | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] | |
# PyPy is not supported because we use the file_id_manager. See: | |
# https://github.com/jupyter-server/jupyter_server_fileid/issues/44 | |
#include: | |
# - os: ubuntu-latest | |
# python-version: "pypy-3.8" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Base Setup | |
uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 | |
- name: Install the Python dependencies | |
run: | | |
python -m pip install "jupyterlab>=4.0.0,<5" | |
python -m pip install -e ".[test]" codecov | |
python -m pip install -e projects/jupyter-collaboration-ui -e projects/jupyter-docprovider -e projects/jupyter-server-ydoc | |
- name: List installed packages | |
run: | | |
pip freeze | |
pip check | |
pip list | |
- name: Run the tests with Coverage | |
if: ${{ !startsWith(matrix.python-version, 'pypy') && !startsWith(runner.os, 'Windows') }} | |
run: | | |
python -m pytest -vv --cov jupyter_server_ydoc --cov-branch --cov-report term-missing:skip-covered | |
#- name: Run the tests on pypy | |
# if: ${{ startsWith(matrix.python-version, 'pypy') }} | |
# run: | | |
# PyPy is not supported because we use the file_id_manager. See: | |
# https://github.com/jupyter-server/jupyter_server_fileid/issues/44 | |
# python -W ignore::ImportWarning -m pytest -vv | |
- name: Run the tests on Windows | |
if: ${{ startsWith(runner.os, 'Windows') }} | |
run: | | |
python -W ignore::ImportWarning -m pytest -vv --cov jupyter_server_ydoc --cov-branch --cov-report term-missing:skip-covered | |
- uses: jupyterlab/maintainer-tools/.github/actions/upload-coverage@v1 | |
- name: Build the extension | |
if: ${{ !startsWith(matrix.python-version, 'pypy') }} | |
shell: bash | |
run: | | |
set -eux | |
jupyter server extension list | |
jupyter server extension list 2>&1 | grep -ie "jupyter_server_ydoc.*OK" | |
jupyter labextension list | |
jupyter labextension list 2>&1 | grep -ie "@jupyter/collaboration-extension.*OK" | |
python -m jupyterlab.browser_check | |
test_minimum_versions: | |
name: Test Minimum Versions | |
needs: [pre-commit, test-js, test-py] | |
timeout-minutes: 20 | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Base Setup | |
uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 | |
with: | |
python_version: "3.8" | |
dependency_type: minimum | |
- name: Install the Python dependencies | |
run: | | |
pip install -e ".[test]" | |
pip install -e projects/jupyter-collaboration-ui -e projects/jupyter-docprovider -e projects/jupyter-server-ydoc | |
- name: Run the unit tests | |
run: | | |
pytest -vv -W default || pytest -vv -W default --lf | |
test_prereleases: | |
name: Test Prereleases | |
needs: [pre-commit, test-js, test-py] | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Base Setup | |
uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 | |
- name: Install the Python dependencies | |
run: | | |
pip install -e ".[test]" | |
pip install -e projects/jupyter-collaboration-ui -e projects/jupyter-docprovider -e projects/jupyter-server-ydoc | |
- name: List installed packages | |
run: | | |
pip freeze | |
pip check | |
- name: Run the tests | |
run: | | |
pytest -vv -W default || pytest -vv --lf | |
make_sdist: | |
name: Make SDist | |
needs: [pre-commit, test-js, test-py] | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 | |
- name: Build SDist | |
shell: bash | |
run: | | |
pip install build | |
find projects/* -maxdepth 0 -type d | xargs -L 1 python -m build --sdist --outdir dist/ | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: "sdist" | |
path: dist/*.tar.gz | |
test_sdist: | |
runs-on: ubuntu-latest | |
needs: [make_sdist] | |
name: Install from SDist and Test | |
timeout-minutes: 15 | |
steps: | |
- uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 | |
- name: Download sdist | |
uses: actions/download-artifact@v4 | |
- name: Install From SDist | |
shell: bash | |
run: | | |
echo "::group::Install from SDist" | |
set -ex | |
cd sdist | |
mkdir test | |
find *.tar.gz | xargs -L 1 tar -C ./test -zxvf | |
cd test | |
python -m pip install "jupyterlab>=4.0.0,<5" | |
# install each from source, except for `jupyter_collaboration` metapackage | |
find ./* -maxdepth 0 -type d -not -path './jupyter_collaboration-*' | sed 's/$/[test]/' | xargs -L 1 python -m pip install | |
echo "::endgroup::" | |
- name: Run Test | |
shell: bash | |
run: | | |
echo "::group::Run test" | |
set -ex | |
cd sdist/test | |
# for now only `jupyter_server_ydoc` includes python tests | |
cd jupyter_server_ydoc* | |
python -m pytest -vv -raXxs --durations 10 --color=yes | |
cd .. | |
jupyter server extension list | |
jupyter server extension list 2>&1 | grep -ie "jupyter_server_ydoc.*OK" | |
jupyter labextension list | |
jupyter labextension list 2>&1 | grep -ie "@jupyter/collaboration-extension.*OK" | |
python -m jupyterlab.browser_check --no-browser-test | |
echo "::endgroup::" | |
check_links: | |
runs-on: ubuntu-latest | |
timeout-minutes: 15 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 | |
- uses: jupyterlab/maintainer-tools/.github/actions/check-links@v1 | |
with: | |
ignore_links: "../api/*.* ./api/* .*/images/[\\w-]+.png https://docs.github.com/en/.* https://github.com/.* https://mybinder.org/v2/gh/jupyterlab/jupyter_collaboration/.*" | |
ui_tests: | |
runs-on: ubuntu-latest | |
needs: [pre-commit, test-js] | |
timeout-minutes: 30 | |
env: | |
PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/pw-browsers | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 | |
- name: Install dependencies | |
run: | | |
pip install jupyterlab . | |
- name: Install playwright | |
env: | |
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 | |
run: | | |
jlpm install | |
working-directory: ui-tests | |
- name: Set up browser cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
${{ github.workspace }}/pw-browsers | |
key: ${{ runner.os }}-${{ hashFiles('ui-tests/yarn.lock') }} | |
- name: Install browser | |
run: jlpm playwright install chromium | |
working-directory: ui-tests | |
- name: run tests | |
working-directory: ui-tests | |
run: | | |
jlpm test | |
- name: Upload Playwright Test report | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: jupyter-collaboration-playwright-report | |
path: | | |
ui-tests/test-results | |
ui-tests/playwright-report |