Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use hatch backend #6425

Merged
merged 10 commits into from
Jun 13, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .bumpversion.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ current_version = 7, 0, 0, "alpha", 4
commit = False
tag = False
parse = (?P<major>\d+)\,\ (?P<minor>\d+)\,\ (?P<patch>\d+)\,\ \"(?P<release>\S+)\"\,\ (?P<build>\d+)
serialize =
serialize =
{major}, {minor}, {patch}, "{release}", {build}

[bumpversion:part:release]
optional_value = final
values =
values =
alpha
beta
candidate
Expand Down
12 changes: 12 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[flake8]
ignore = E501, W503, E402
builtins = c, get_config
exclude =
.cache,
.github,
docs,
enable-extensions = G
extend-ignore =
G001, G002, G004, G200, G201, G202,
# black adds spaces around ':'
E203,
4 changes: 3 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ jobs:

test:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v2
Expand All @@ -43,7 +44,7 @@ jobs:

- name: Install the package
run: |
python -m pip install ".[test]"
python -m pip install ".[dev,test]"
jlpm run build:test

- name: Unit tests
Expand All @@ -60,6 +61,7 @@ jobs:
install:
needs: [build]
runs-on: ${{ matrix.os }}
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/buildutils.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ concurrency:
jobs:
versioning:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v2
Expand All @@ -25,7 +26,7 @@ jobs:

- name: Install dependencies
run: |
python -m pip install -U "jupyterlab>=4.0.0a25,<5" jupyter_packaging~=0.10
python -m pip install -U "jupyterlab>=4.0.0a25,<5" hatch
jlpm
jlpm run build

Expand Down Expand Up @@ -80,6 +81,6 @@ jobs:

- name: Install dependencies
run: |
python -m pip install -U "jupyterlab>=4.0.0a25,<5" jupyter_packaging~=0.10 pip
python -m pip install -U "jupyterlab>=4.0.0a25,<5" pip
jlpm
jlpm run build
8 changes: 8 additions & 0 deletions .github/workflows/check-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ concurrency:
jobs:
check_release:
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
matrix:
group: [check_release, link_check]
Expand All @@ -36,3 +37,10 @@ jobs:
- name: Check Links
if: ${{ matrix.group == 'link_check' }}
uses: jupyter-server/jupyter_releaser/.github/actions/check-links@v1

- name: Upload Distributions
uses: actions/upload-artifact@v2
if: ${{ matrix.group == 'check_release' }}
with:
name: notebook-jupyter-releaser-dist-${{ github.run_number }}
path: .jupyter_releaser_checkout/dist
3 changes: 2 additions & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ concurrency:
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v2
Expand All @@ -20,7 +21,7 @@ jobs:
python_version: '3.7'
- name: Install the Python dependencies
run: |
pip install -e .[test] codecov
pip install -e .[dev,test] codecov
pip install -r docs/doc-requirements.txt
wget https://github.com/jgm/pandoc/releases/download/1.19.1/pandoc-1.19.1-1-amd64.deb && sudo dpkg -i pandoc-1.19.1-1-amd64.deb
- name: List installed packages
Expand Down
12 changes: 3 additions & 9 deletions .github/workflows/ui-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ jobs:
ui-tests:
needs: [build]
runs-on: ubuntu-latest
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
Expand All @@ -32,21 +33,14 @@ jobs:
- name: Checkout
uses: actions/checkout@v2

- name: Install Python
uses: actions/setup-python@v2
with:
python-version: '3.9'
architecture: 'x64'
- name: Base Setup
uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1

- uses: actions/download-artifact@v2
with:
name: notebook-dist-${{ github.run_number }}
path: ./dist

- name: Install the prerequisites
run: |
python -m pip install pip wheel

- name: Install the package
run: |
cd dist
Expand Down
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ mamba create -n notebook -c conda-forge python nodejs -y
mamba activate notebook

# Install package in development mode
pip install -e .
pip install -e ".[dev,test]"

# Link the notebook extension and @jupyter-notebook schemas
jlpm develop
Expand Down Expand Up @@ -107,7 +107,7 @@ speeding up the review process.
As long as your code is valid,
the pre-commit hook should take care of how it should look.
`pre-commit` and its associated hooks will automatically be installed when
you run `pip install -e ".[test]"`
you run `pip install -e ".[dev,test]"`

To install `pre-commit` manually, run the following:

Expand Down
28 changes: 0 additions & 28 deletions MANIFEST.in

This file was deleted.

6 changes: 3 additions & 3 deletions buildutils/src/develop.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@ commander
);
if (overwrite) {
try {
fs.unlinkSync(destDir);
console.log('Removed previous symlink:', destDir);
fs.removeSync(destDir);
console.log('Removed previous destination:', destDir);
} catch (e) {
console.info('Skip unlinkink', destDir);
console.info('Skip unlink', destDir);
}
}
console.log('Symlinking:', sourceDir, destDir);
Expand Down
2 changes: 1 addition & 1 deletion buildutils/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { run } from '@jupyterlab/buildutils';
* Get the current version of notebook
*/
export function getPythonVersion(): string {
const cmd = 'python setup.py --version';
const cmd = 'hatchling version';
const lines = run(cmd, { stdio: 'pipe' }, true).split('\n');
return lines[lines.length - 1];
}
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,8 @@
]
},
"skip": [
"check-links"
"check-links",
"check-manifest"
]
}
}
128 changes: 111 additions & 17 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,32 +1,126 @@
[build-system]
requires = ["jupyter_packaging~=0.10", "jupyterlab>=4.0.0a25,<5", "pre-commit"]
build-backend = "jupyter_packaging.build_api"
requires = ["hatchling>=1.0", "jupyterlab>=4.0.0a25,<5"]
build-backend = "hatchling.build"

[license]
file="LICENSE"
[project]
name = "notebook"
description = "Jupyter Notebook - A web-based notebook environment for interactive computing"
readme = "README.md"
license = { file = "LICENSE" }
requires-python = ">=3.7"
authors = [
{ name = "Jupyter Development Team", email = "[email protected]" },
]
keywords = [
"Jupyter",
"JupyterLab",
"Notebook",
]
classifiers = [
"Framework :: Jupyter",
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"Intended Audience :: System Administrators",
"License :: OSI Approved :: BSD License",
"Programming Language :: Python",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
]
dependencies = [
"jupyter_server>=1.16.0,<2",
"jupyterlab>=4.0.0a24,<5",
"jupyterlab_server>=2.13,<3",
"notebook_shim>=0.1,<0.2",
"tornado>=6.1.0",
]
dynamic = ["version"]

[tool.jupyter-packaging.options]
skip-if-exists = ["notebook/labextension/static/style.js", "notebook/static/bundle.js"]
ensured-targets = ["notebook/labextension/static/style.js", "notebook/static/bundle.js"]
[project.scripts]
jupyter-notebook = "notebook.app:main"

[tool.jupyter-packaging.builder]
factory = "jupyter_packaging.npm_builder"
[project.urls]
Documentation = "https://jupyter-notebook.readthedocs.io/"
Homepage = "https://github.com/jupyter/notebook"
Source = "https://github.com/jupyter/notebook"
Tracker = "https://github.com/jupyter/notebook/issues"

[tool.jupyter-packaging.build-args]
build_cmd = "build:prod"
npm = ["jlpm"]
[project.optional-dependencies]
test = [
"coverage",
"nbval",
"pytest>=6.0",
"pytest-cov",
"requests",
"pytest-tornasync",
"pytest-timeout",
"pytest-console-scripts",
"ipykernel",
"jupyterlab_server[test]>=2.13,<3",
]
dev = [
"pre-commit",
"bump2version",
"hatchling"
]

[tool.hatch.version]
path = "notebook/_version.py"
source = "code"

[tool.hatch.build.targets.wheel.shared-data]
"notebook/labextension" = "share/jupyter/labextensions/@jupyter-notebook/lab-extension"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@blink1073 I'm not an expert on the filesystem layout for JupyterLab extensions, but should this be

Suggested change
"notebook/labextension" = "share/jupyter/labextensions/@jupyter-notebook/lab-extension"
"notebook/labextension" = "share/jupyter/labextensions/@jupyter-notebook"

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like this should be kept since it maps to "notebook/labextension" on the left hand side?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I agree

Copy link

@agoose77 agoose77 Jun 13, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, I could be wrong but I thought the output directory contents were supposed to end up in share/jupyter/labextensions/@jupyter-notebook/

If you look e.g. at the wheel for jupyterlab-katex, the contents of /jupyterlab_katex-3.3.0.data/data/share/jupyter/labextensions/@jupyterlab/katex-extension/ is

schemas
static
install.json
package.json

whereas in notebook's wheel we currently have the following files in /notebook-7.0.0a4.data/data/share/jupyter/labextensions/@jupyter-notebook/:

lab-extension

E.g. this is jupyterlab-myst which works: https://github.com/agoose77/jupyterlab-myst/blob/320b15187ee605b1f948619e9e1f9cfa672eaf00/pyproject.toml#L57

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The extension is nested in our case, under @jupyter-notebook. The full extension name is @jupyter-notebook/lab-extension.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right, I'm with you. This is where the fact that / is allowed in NPM package names threw me for a second!

"notebook/schemas/@jupyter-notebook" = "share/jupyter/lab/schemas/@jupyter-notebook"
"jupyter-config/jupyter_server_config.d" = "etc/jupyter/jupyter_server_config.d"

[tool.check-manifest]
ignore = ["app/**", "binder/**", "buildutils/**", "docs/**", "packages/**", "codecov.yml", "*.json", "yarn.lock", "readthedocs.yml", ".bumpversion.cfg", ".*", "lint-staged.config.js", "*.svg", "notebook/labextension/**", "notebook/schemas/**", "notebook/static/**", "notebook/template/**", "ui-tests/**"]
[tool.hatch.build.targets.sdist]
artifacts = [
"notebook/labextension",
"notebook/static",
"notebook/schemas/@jupyter-notebook",
"notebook/templates",
]
include = [
"/jupyter-config",
"/notebook",
"/tests",
"/package.json",
"/install.json",
"/ts*.json",
"/*.md"
]

[tool.hatch.build.targets.wheel]
artifacts = [
"notebook/static",
"notebook/templates",
]
include = ["/notebook"]


[tool.hatch.build.hooks.jupyter-builder]
dependencies = ["hatch-jupyter-builder>=0.2"]
build-function = "hatch_jupyter_builder.npm_builder"
ensured-targets = [
"notebook/labextension/static/style.js",
"notebook/static/bundle.js"
]
install-pre-commit-hook = true

[tool.hatch.build.hooks.jupyter-builder.build-kwargs]
build_cmd = "build:prod"
editable_build_cmd = "build"
source_dir = "packages"
build_dir = "notebook/static"
npm = "jlpm"

[tool.pytest.ini_options]
addopts = "-raXs --durations 10 --color=yes --doctest-modules"
testpaths = [
"tests/"
"tests/",
]
timeout = 300
# Restore this setting to debug failures
# timeout_method = "thread"
filterwarnings = [
"error",
"ignore:There is no current event loop:DeprecationWarning",
Expand Down
Loading