Skip to content

Update CI (#396)

Update CI (#396) #2095

Workflow file for this run

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"
jlpm install
- name: Run pre-commit
uses: pre-commit/[email protected]
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
needs: [pre-commit]
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: |
yarn dev
- name: Run Tests
run: |
set -eux
jlpm run test
test-py:
name: Test Python
needs: [pre-commit]
runs-on: ${{ matrix.os }}
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python-version: ["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 codecov
yarn dev
- 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: [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.9"
dependency_type: minimum
- name: Install the Python dependencies
run: |
yarn dev
- name: Run the unit tests
run: |
pytest -vv -W default || pytest -vv -W default --lf
test_prereleases:
name: Test Prereleases
needs: [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: |
yarn dev
- 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]
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: [make_sdist]
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: Download sdist
uses: actions/download-artifact@v4
with:
name: "sdist"
- name: Install dependencies
run: |
pip install jupyterlab jupyter_collaboration_ui*.tar.gz jupyter_docprovider*.tar.gz jupyter_server_ydoc*.tar.gz
- 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