Added
- `extension` submodule ([48](https://github.com/jupyter/jupyter_server/pull/48))
- ExtensionApp - configurable JupyterApp-subclass for server extensions
- Most useful for Jupyter frontends, like Notebook, JupyterLab, nteract, voila etc.
- Launch with entrypoints
- Configure from file or CLI
- Add custom templates, static assets, handlers, etc.
- Static assets are served behind a `/static/<extension_name>` endpoint.
- Run server extensions in "standalone mode" ([70](https://github.com/jupyter/jupyter_server/pull/70) and [#76](https://github.com/jupyter/jupyter_server/pull/76))
- ExtensionHandler - tornado handlers for extensions.
- Finds static assets at `/static/<extension_name>`
Changed
- `jupyter serverextension <command>` entrypoint has been changed to `jupyter server extension <command>`.
- `toggle_jupyter_server` and `validate_jupyter_server` function no longer take a Logger object as an argument.
- Changed testing framework from nosetests to pytest ([152](https://github.com/jupyter/jupyter_server/pull/152))
- Depend on pytest-tornasync extension for handling tornado/asyncio eventloop
- Depend on pytest-console-scripts for testing CLI entrypoints
- Added Github actions as a testing framework along side Travis and Azure ([146](https://github.com/jupyter/jupyter_server/pull/146))
Removed
- Removed the option to update `root_dir` trait in FileContentsManager and MappingKernelManager in ServerApp ([135](https://github.com/jupyter/jupyter_server/pull/135))
Fixed
- Synced Jupyter Server with Notebook PRs in batches (ended on 2019-09-27)
- [Batch 1](https://github.com/jupyter/jupyter_server/pull/95)
- [Batch 2](https://github.com/jupyter/jupyter_server/pull/97)
- [Batch 3](https://github.com/jupyter/jupyter_server/pull/98)
- [Batch 4](https://github.com/jupyter/jupyter_server/pull/99)
- [Batch 5](https://github.com/jupyter/jupyter_server/pull/103)
- [Batch 6](https://github.com/jupyter/jupyter_server/pull/104)
- [Batch 7](https://github.com/jupyter/jupyter_server/pull/105)
- [Batch 8](https://github.com/jupyter/jupyter_server/pull/106)
Security
- Added a "secure_write to function for cookie/token saves ([77](https://github.com/jupyter/jupyter_server/pull/77))
Making a Jupyter Server Release
Using `jupyter_releaser`
The recommended way to make a release is to use [`jupyter_releaser`](https://jupyter-releaser.readthedocs.io/en/latest/get_started/making_release_from_repo.html).
Note that we must use manual versions since Jupyter Releaser does not
yet support "next" or "patch" when dev versions are used.
Manual Release
To create a manual release, perform the following steps:
Set up
bash
pip install hatch twine build
git pull origin $(git branch --show-current)
git clean -dffx
Update the version and apply the tag
bash
echo "Enter new version"
read new_version
hatch version ${new_version}
git tag -a ${new_version} -m "Release ${new_version}"
Build the artifacts
bash
rm -rf dist
python -m build .
Update the version back to dev
bash
echo "Enter dev version"
read dev_version
hatch version ${dev_version}
git push origin $(git branch --show-current)
Publish the artifacts to pypi
bash
twine check dist/*
twine upload dist/*