Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jupyterlab/jupyter-collaboration
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v3.0.0
Choose a base ref
...
head repository: jupyterlab/jupyter-collaboration
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: main
Choose a head ref
Loading
Showing with 5,214 additions and 3,780 deletions.
  1. +2 −2 .github/workflows/check-release.yml
  2. +1 −1 .github/workflows/license-header.yml
  3. +24 −27 .github/workflows/test.yml
  4. +82 −0 .github/workflows/update_galata_references.yaml
  5. +5 −23 .pre-commit-config.yaml
  6. +116 −2 CHANGELOG.md
  7. +2 −7 docs/source/developer/contributing.rst
  8. +1 −1 lerna.json
  9. +3 −2 package.json
  10. +15 −15 packages/collaboration-extension/package.json
  11. +3 −1 packages/collaboration-extension/src/collaboration.ts
  12. +7 −7 packages/collaboration/package.json
  13. +26 −14 packages/collaboration/src/collaboratorspanel.tsx
  14. +1 −0 packages/collaboration/src/index.ts
  15. +201 −0 packages/collaboration/src/users-item.tsx
  16. +1 −0 packages/collaboration/style/base.css
  17. +20 −0 packages/collaboration/style/users-item.css
  18. +4 −4 packages/collaborative-drive/package.json
  19. +7 −17 packages/collaborative-drive/src/tokens.ts
  20. +15 −15 packages/docprovider-extension/package.json
  21. +112 −180 packages/docprovider-extension/src/filebrowser.ts
  22. +31 −0 packages/docprovider-extension/src/forkManager.ts
  23. +6 −6 packages/docprovider-extension/src/index.ts
  24. +11 −11 packages/docprovider/package.json
  25. +5 −1 packages/docprovider/src/TimelineSlider.tsx
  26. +95 −0 packages/docprovider/src/__tests__/forkManager.spec.ts
  27. +12 −6 packages/docprovider/src/component.tsx
  28. +124 −0 packages/docprovider/src/forkManager.ts
  29. +2 −0 packages/docprovider/src/index.ts
  30. +41 −0 packages/docprovider/src/requests.ts
  31. +117 −0 packages/docprovider/src/tokens.ts
  32. +38 −51 packages/docprovider/src/ydrive.ts
  33. +1 −1 projects/jupyter-collaboration-ui/jupyter_collaboration_ui/_version.py
  34. +1 −1 projects/jupyter-collaboration/jupyter_collaboration/_version.py
  35. +3 −3 projects/jupyter-collaboration/pyproject.toml
  36. +1 −1 projects/jupyter-docprovider/jupyter_docprovider/_version.py
  37. +1 −1 projects/jupyter-server-ydoc/jupyter_server_ydoc/_version.py
  38. +10 −0 projects/jupyter-server-ydoc/jupyter_server_ydoc/app.py
  39. +1 −1 projects/jupyter-server-ydoc/jupyter_server_ydoc/events/awareness.yaml
  40. +56 −0 projects/jupyter-server-ydoc/jupyter_server_ydoc/events/fork.yaml
  41. +1 −1 projects/jupyter-server-ydoc/jupyter_server_ydoc/events/session.yaml
  42. +108 −0 projects/jupyter-server-ydoc/jupyter_server_ydoc/handlers.py
  43. +76 −9 projects/jupyter-server-ydoc/jupyter_server_ydoc/pytest_plugin.py
  44. +30 −0 projects/jupyter-server-ydoc/jupyter_server_ydoc/test_utils.py
  45. +2 −0 projects/jupyter-server-ydoc/jupyter_server_ydoc/utils.py
  46. +6 −4 projects/jupyter-server-ydoc/pyproject.toml
  47. +5 −5 pyproject.toml
  48. +40 −0 scripts/dev_install.py
  49. +11 −8 tests/test_documents.py
  50. +157 −15 tests/test_handlers.py
  51. +3 −2 tsconfig.json
  52. +5 −1 typedoc.json
  53. +1 −0 ui-tests/jupyter_server_test_config.py
  54. +4 −2 ui-tests/package.json
  55. +5 −0 ui-tests/playwright.config.js
  56. +33 −0 ui-tests/playwright.timeline.config.js
  57. BIN ui-tests/tests/collaborationpanel.spec.ts-snapshots/collaborationPanelCollapsed-linux.png
  58. BIN ui-tests/tests/collaborationpanel.spec.ts-snapshots/one-client-with-two-documents-linux.png
  59. BIN ui-tests/tests/collaborationpanel.spec.ts-snapshots/three-client-with-document-linux.png
  60. BIN ui-tests/tests/collaborationpanel.spec.ts-snapshots/three-client-without-document-linux.png
  61. +3 −3 ui-tests/tests/data/OutputExamples.ipynb
  62. +5 −5 ui-tests/tests/notebook.spec.ts
  63. BIN ui-tests/tests/notebook.spec.ts-snapshots/initialization-create-notebook-guest-linux.png
  64. BIN ui-tests/tests/notebook.spec.ts-snapshots/initialization-open-notebook-guest-linux.png
  65. BIN ui-tests/tests/notebook.spec.ts-snapshots/initialization-open-notebook-host-linux.png
  66. +73 −0 ui-tests/tests/timeline-slider.spec.ts
  67. +3 −3 ui-tests/tests/user-menu.spec.ts
  68. +1,620 −1,656 ui-tests/yarn.lock
  69. +1,819 −1,665 yarn.lock
4 changes: 2 additions & 2 deletions .github/workflows/check-release.yml
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Base Setup
uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
@@ -24,7 +24,7 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}

- name: Upload Distributions
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: jupyter-releaser-dist-${{ github.run_number }}
path: |
2 changes: 1 addition & 1 deletion .github/workflows/license-header.yml
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}

51 changes: 24 additions & 27 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -27,10 +27,8 @@ jobs:

- 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
pip install "jupyterlab>=4.4.0a2,<5"
jlpm install
- name: Run pre-commit
uses: pre-commit/action@v2.0.0
@@ -55,6 +53,7 @@ jobs:
test-js:
name: Test JavaScript
runs-on: ubuntu-latest
needs: [pre-commit]
steps:
- name: Checkout
uses: actions/checkout@v4
@@ -69,13 +68,7 @@ jobs:

- 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
yarn dev
- name: Run Tests
run: |
@@ -84,13 +77,14 @@ jobs:
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.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
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:
@@ -106,9 +100,8 @@ jobs:

- 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
python -m pip install codecov
yarn dev
- name: List installed packages
run: |
@@ -148,30 +141,29 @@ jobs:
test_minimum_versions:
name: Test Minimum Versions
needs: [pre-commit, test-js, test-py]
needs: [test-js, test-py]
timeout-minutes: 20
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4

- name: Base Setup
uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
with:
python_version: "3.8"
python_version: "3.9"
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
yarn dev
- 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]
needs: [test-js, test-py]
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
@@ -183,8 +175,7 @@ jobs:

- 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
yarn dev
- name: List installed packages
run: |
@@ -197,7 +188,7 @@ jobs:
make_sdist:
name: Make SDist
needs: [pre-commit, test-js, test-py]
needs: [pre-commit]
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
@@ -269,16 +260,21 @@ jobs:

ui_tests:
runs-on: ubuntu-latest
needs: [pre-commit, test-js]
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 .
pip install "jupyterlab>=4.4.0a2" jupyter_collaboration_ui*.tar.gz jupyter_docprovider*.tar.gz jupyter_server_ydoc*.tar.gz
- name: Install playwright
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
@@ -299,9 +295,10 @@ jobs:
working-directory: ui-tests
run: |
jlpm test
TIMELINE_FEATURE=1 jlpm test:timeline
- name: Upload Playwright Test report
if: always()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: jupyter-collaboration-playwright-report
path: |
82 changes: 82 additions & 0 deletions .github/workflows/update_galata_references.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Update Galata References

on:
issue_comment:
types: [created, edited]

permissions:
contents: write
pull-requests: write

defaults:
run:
shell: bash -l {0}

jobs:
update-snapshots:
if: >
(
github.event.comment.author_association == 'OWNER' ||
github.event.comment.author_association == 'COLLABORATOR' ||
github.event.comment.author_association == 'MEMBER'
) && github.event.issue.pull_request && contains(github.event.comment.body, 'please update snapshots')
runs-on: ubuntu-latest
steps:
- name: React to the triggering comment
run: |
gh api repos/${{ github.repository }}/issues/comments/${{ github.event.comment.id }}/reactions --raw-field 'content=+1'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Checkout
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}

- name: Get PR Info
id: pr
env:
PR_NUMBER: ${{ github.event.issue.number }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
COMMENT_AT: ${{ github.event.comment.created_at }}
run: |
pr="$(gh api /repos/${GH_REPO}/pulls/${PR_NUMBER})"
head_sha="$(echo "$pr" | jq -r .head.sha)"
pushed_at="$(echo "$pr" | jq -r .pushed_at)"
if [[ $(date -d "$pushed_at" +%s) -gt $(date -d "$COMMENT_AT" +%s) ]]; then
echo "Updating is not allowed because the PR was pushed to (at $pushed_at) after the triggering comment was issued (at $COMMENT_AT)"
exit 1
fi
echo "head_sha=$head_sha" >> $GITHUB_OUTPUT
- name: Checkout the branch from the PR that triggered the job
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh pr checkout ${{ github.event.issue.number }}

- name: Validate the fetched branch HEAD revision
env:
EXPECTED_SHA: ${{ steps.pr.outputs.head_sha }}
run: |
actual_sha="$(git rev-parse HEAD)"
if [[ "$actual_sha" != "$EXPECTED_SHA" ]]; then
echo "The HEAD of the checked out branch ($actual_sha) differs from the HEAD commit available at the time when trigger comment was submitted ($EXPECTED_SHA)"
exit 1
fi
- name: Base Setup
uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1

- name: Build the extension
run: yarn dev

- uses: jupyterlab/maintainer-tools/.github/actions/update-snapshots@main
with:
npm_client: jlpm
github_token: ${{ secrets.GITHUB_TOKEN }}
start_server_script: 'null'
test_folder: ui-tests
28 changes: 5 additions & 23 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -24,22 +24,12 @@ repos:
- id: check-builtin-literals
- id: trailing-whitespace

- repo: https://github.com/psf/black
rev: 22.12.0
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.8.0
hooks:
- id: black

- repo: https://github.com/PyCQA/isort
rev: 5.12.0
hooks:
- id: isort
files: \.py$

- repo: https://github.com/asottile/pyupgrade
rev: v3.3.1
hooks:
- id: pyupgrade
args: [--py37-plus]
- id: ruff
args: [ --fix ]
- id: ruff-format

- repo: https://github.com/PyCQA/doc8
rev: v1.1.1
@@ -48,14 +38,6 @@ repos:
args: [--max-line-length=200]
stages: [manual]

- repo: https://github.com/pycqa/flake8
rev: 6.0.0
hooks:
- id: flake8
additional_dependencies:
["flake8-bugbear==22.6.22", "flake8-implicit-str-concat==0.2.0"]
stages: [manual]

- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.991
hooks:
Loading