This document guides a contributor through creating a release of JupyterLab.
Review CONTRIBUTING.md
. Make sure all the tools needed to generate the
built JavaScript files are properly installed.
We publish the npm packages, a Python source package, and a Python universal binary wheel. We also publish a conda package on conda-forge (see below). See the Python docs on package uploading for twine setup instructions and for why twine is the recommended method.
For convenience, here are commands for getting a completely clean repo. This makes sure that we don't have any extra tags or commits in our repo (especially since we will push our tags later in the process), and that we are on the master branch.
cd release
conda remove --all -y -n jlabrelease
rm -rf jupyterlab
conda create -c conda-forge -y -n jlabrelease notebook nodejs twine
conda activate jlabrelease
git clone git@github.com:jupyterlab/jupyterlab.git
cd jupyterlab
pip install -ve .
The command below ensures the latest dependencies and built files,
then prompts you to select package versions. When one package has an
effective major release, the packages that depend on it should also get a
major release, to prevent consumers that are using the ^
semver
requirement from getting a conflict. Note that we publish the
JavaScript packages using the next
tag until we are ready for the
final release.
jlpm run prerelease
jupyterlab/_version.py
with an rc
versionjlpm run build:update
rm -rf dist
python setup.py sdist
python setup.py bdist_wheel --universal
twine upload dist/*
rc
in a clean environmentnpm access public @jupyterlab/<name>
to make it public.style/
in the files:
of a package (it will fail on the jupyter lab build
command because
webpack cannot find the referenced styles to import.jupyterlab/_version.py
with a final versionjlpm run publish
jupyterlab/_version.py
with a dev
versionjlpm integrity
to update the dev_mode
versiongit clone git@github.com:jupyterlab/jupyterlab_xkcd.git
If the updates are simple, it may be enough to check out a new branch based on the current base branch, then rebase from the root commit, editing the root commit and other commits that involve installing packages to update to the new versions:
git checkout -b 0.xx # whatever the new version is
git rebase -i --root
"Edit" the commits that involve installing packages, so you can update the package.json. Then skip down to the step below about creating tags. If the edits are more substantial than just updating package versions, then do the next steps instead.
git checkout --orphan name-of-branch
git rm -rf .
git clean -dfx
cookiecutter path-to-local-extension-cookiecutter-ts
# Fill in the values from the previous branch package.json initial commit
cp -r jupyterlab_xkcd/ .
rm -rf jupyterlab_xkcd
0.28-
with 0.29-
.0.28-01-show-a-panel
README
file from the previous branch, as well as the package.json
fields up to
license
.If you make a mistake and need to start over, clear the tags using the following pattern:
git tag | grep 0.xx | xargs git tag -d
shasum -a 256 dist/*.tar.gz
recipe/meta.yaml
with the new version and md5 and reset the build number to 0./packages/package-folder-name
:jlpm run patch:release package-folder-name
_version.py
package.json
file in dev_mode
with the new JupyterLab version in the jupyterlab
metadata section.Each time we release JupyterLab, we should update the version of JupyterLab used in binder and repo2docker. Here is an example PR that updates the relevant files:
https://github.com/jupyter/repo2docker/pull/169/files
This needs to be done in both the conda and pip buildpacks in both the frozen and non-frozen version of the files.