[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1106727: unblock: jupyterhub/5.2.1+ds1-4



Package: release.debian.org
Severity: normal
X-Debbugs-Cc: jupyterhub@packages.debian.org
Control: affects -1 + src:jupyterhub
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package jupyterhub

It fixed a bunch of bugs in order to have a working jupyterhub in trixie.
- Added the alembic dependency
- rebuilt the javascript part in order to provide a working frontend for users.
- use ucf to deal with the jupyterhub config file.

It passe all tests on salsa.debian.org except the reproducible test.
for now the package do not have the test suite activated since a dependency is missing.

https://salsa.debian.org/python-team/packages/jupyterhub/-/pipelines/871348

With these changes, it is now possible to start a jupyterhub (by default it accepts no connetion but listen on all port)

[ Impact ]
(What is the impact for the user if the unblock isn't granted?)

a non working jupyterhub service.

[ Tests ]
(What automated or manual tests cover the affected code?)

I tested all this on my computer and it is in use in our institut with those modifications.

[ Risks ]
(Discussion of the risks involved. E.g. code is trivial or
complex, key package vs leaf package, alternatives available.)

the package is a leaf package, there is no change in the upstream code, only packaging modifications.

[ Checklist ]
  [X] all changes are documented in the d/changelog
  [X] I reviewed all changes and I approve them
  [X] attach debdiff against the package in testing

thanks for considering

unblock jupyterhub/5.2.1+ds1-4
diff -Nru jupyterhub-5.2.1+ds1/debian/changelog jupyterhub-5.2.1+ds1/debian/changelog
--- jupyterhub-5.2.1+ds1/debian/changelog	2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/changelog	2025-05-28 11:40:25.000000000 +0200
@@ -1,3 +1,23 @@
+jupyterhub (5.2.1+ds1-4) unstable; urgency=medium
+
+  * use ucf in order to manage the config file
+  * Bug fix: "config.yaml config file that comes in package is never
+    read", thanks to Guillaume Knispel (Closes: #1038110).
+
+ -- Picca Frédéric-Emmanuel <picca@debian.org>  Wed, 28 May 2025 11:40:25 +0200
+
+jupyterhub (5.2.1+ds1-3) unstable; urgency=medium
+
+  * Bug fix: "missing python3-alembic dependency", thanks to Picca
+    Frédéric-Emmanuel (Closes: #1104404).
+  * Bug fix: "move from twitter-bootstrap{3,4} to bootstrap-html (v5)",
+    thanks to santiagorr@riseup.net</a>; (Closes: #1088461).
+  * Bug fix: "Could not open static file
+    &#39;/usr/share/jupyterhub/static/components/bootstrap/dist/js/bootstrap&gt;",
+    thanks to Picca Frédéric-Emmanuel (Closes: #1104588).
+
+ -- Picca Frédéric-Emmanuel <picca@debian.org>  Wed, 07 May 2025 18:14:37 +0200
+
 jupyterhub (5.2.1+ds1-2) unstable; urgency=medium
 
   * Team upload.
diff -Nru jupyterhub-5.2.1+ds1/debian/control jupyterhub-5.2.1+ds1/debian/control
--- jupyterhub-5.2.1+ds1/debian/control	2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/control	2025-05-28 11:40:25.000000000 +0200
@@ -9,6 +9,14 @@
  debhelper-compat (= 13),
  dh-sequence-python3,
  help2man,
+ libjs-moment,
+ node-bootstrap,
+ node-fortawesome-fontawesome-free,
+ node-jquery,
+ node-moment,
+ node-node-sass,
+ node-requirejs,
+ pkg-js-tools,
  python3-alembic,
  python3-all,
  python3-async-generator,
@@ -39,8 +47,9 @@
 Package: jupyterhub
 Architecture: all
 Depends:
+ alembic,
  fonts-font-awesome,
- libjs-bootstrap,
+ libjs-bootstrap5,
  libjs-jquery,
  libjs-prototype,
  libjs-requirejs,
diff -Nru jupyterhub-5.2.1+ds1/debian/dirs jupyterhub-5.2.1+ds1/debian/dirs
--- jupyterhub-5.2.1+ds1/debian/dirs	2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/dirs	2025-05-28 11:40:25.000000000 +0200
@@ -1,2 +1,2 @@
-/etc/jupyterhub/config/jupyterhub_config.d
+/etc/jupyterhub
 /var/lib/jupyterhub
diff -Nru jupyterhub-5.2.1+ds1/debian/install jupyterhub-5.2.1+ds1/debian/install
--- jupyterhub-5.2.1+ds1/debian/install	2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/install	1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-50-use-configurable-http-proxy.py /etc/jupyterhub/config/jupyterhub_config.d
-config.yaml /etc/jupyterhub/config/jupyterhub_config.d
diff -Nru jupyterhub-5.2.1+ds1/debian/jupyterhub.maintscript jupyterhub-5.2.1+ds1/debian/jupyterhub.maintscript
--- jupyterhub-5.2.1+ds1/debian/jupyterhub.maintscript	1970-01-01 01:00:00.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/jupyterhub.maintscript	2025-05-28 11:40:25.000000000 +0200
@@ -0,0 +1,2 @@
+rm_conffile /etc/jupyterhub/config/jupyterhub_config.d/50-use-configurable-http-proxy.py 5.2.1+ds1-4~
+rm_conffile /etc/jupyterhub/config/jupyterhub_config.d/config.yaml 5.2.1+ds1-4~
diff -Nru jupyterhub-5.2.1+ds1/debian/jupyterhub.service jupyterhub-5.2.1+ds1/debian/jupyterhub.service
--- jupyterhub-5.2.1+ds1/debian/jupyterhub.service	2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/jupyterhub.service	2025-05-28 11:40:25.000000000 +0200
@@ -8,7 +8,7 @@
 PrivateDevices=yes
 ProtectKernelTunables=yes
 ProtectKernelModules=yes
-ExecStart=/usr/bin/python3 -m jupyterhub.app -f /etc/jupyterhub/config/jupyterhub_config.d/config.yaml --upgrade-db
+ExecStart=/usr/bin/python3 -m jupyterhub.app -f /etc/jupyterhub/jupyterhub_config.py --upgrade-db
 
 [Install]
 WantedBy=multi-user.target
diff -Nru jupyterhub-5.2.1+ds1/debian/jupyterhub.ucf jupyterhub-5.2.1+ds1/debian/jupyterhub.ucf
--- jupyterhub-5.2.1+ds1/debian/jupyterhub.ucf	1970-01-01 01:00:00.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/jupyterhub.ucf	2025-05-28 11:40:25.000000000 +0200
@@ -0,0 +1 @@
+/usr/share/jupyterhub/jupyterhub_config.py /etc/jupyterhub/jupyterhub_config.py
\ Pas de fin de ligne à la fin du fichier
diff -Nru jupyterhub-5.2.1+ds1/debian/links jupyterhub-5.2.1+ds1/debian/links
--- jupyterhub-5.2.1+ds1/debian/links	2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/links	2025-05-28 11:40:25.000000000 +0200
@@ -1,8 +1,4 @@
-/usr/share/fonts/opentype/font-awesome/FontAwesome.otf /usr/share/jupyterhub/static/components/font-awesome/fonts/FontAwesome.otf
-/usr/share/fonts/truetype/font-awesome/fontawesome-webfont.ttf /usr/share/jupyterhub/static/components/font-awesome/fonts/fontawesome-webfont.ttf
-/usr/share/javascript/bootstrap /usr/share/jupyterhub/static/components/bootstrap
-/usr/share/javascript/bootstrap/css/bootstrap.css.map /usr/share/jupyterhub/static/css/style.min.css.map
-/usr/share/javascript/bootstrap/css/bootstrap.min.css /usr/share/jupyterhub/static/css/style.min.css
-/usr/share/javascript/jquery /usr/share/jupyterhub/static/components/jquery
+/usr/share/javascript/bootstrap5 /usr/share/jupyterhub/static/components/bootstrap/dist
+/usr/share/javascript/jquery /usr/share/jupyterhub/static/components/jquery/dist
 /usr/share/javascript/moment /usr/share/jupyterhub/static/components/moment
 /usr/share/javascript/requirejs /usr/share/jupyterhub/static/components/requirejs
diff -Nru jupyterhub-5.2.1+ds1/debian/patches/0001-Add-empty-config-file.patch jupyterhub-5.2.1+ds1/debian/patches/0001-Add-empty-config-file.patch
--- jupyterhub-5.2.1+ds1/debian/patches/0001-Add-empty-config-file.patch	2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/patches/0001-Add-empty-config-file.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-From: Roland Mas <lolando@debian.org>
-Date: Wed, 2 Jun 2021 16:06:35 +0200
-Subject: Add empty config file
-
----
- config.yaml | 1 +
- 1 file changed, 1 insertion(+)
- create mode 100644 config.yaml
-
-diff --git a/config.yaml b/config.yaml
-new file mode 100644
-index 0000000..ed97d53
---- /dev/null
-+++ b/config.yaml
-@@ -0,0 +1 @@
-+---
diff -Nru jupyterhub-5.2.1+ds1/debian/patches/0002-Use-configurable-http-proxy-instead-of-Traefik.patch jupyterhub-5.2.1+ds1/debian/patches/0002-Use-configurable-http-proxy-instead-of-Traefik.patch
--- jupyterhub-5.2.1+ds1/debian/patches/0002-Use-configurable-http-proxy-instead-of-Traefik.patch	2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/patches/0002-Use-configurable-http-proxy-instead-of-Traefik.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-From: Roland Mas <lolando@debian.org>
-Date: Tue, 21 Sep 2021 12:08:23 +0200
-Subject: Use configurable-http-proxy instead of Traefik
-
----
- 50-use-configurable-http-proxy.py | 1 +
- 1 file changed, 1 insertion(+)
- create mode 100644 50-use-configurable-http-proxy.py
-
-diff --git a/50-use-configurable-http-proxy.py b/50-use-configurable-http-proxy.py
-new file mode 100644
-index 0000000..2ae0c29
---- /dev/null
-+++ b/50-use-configurable-http-proxy.py
-@@ -0,0 +1 @@
-+c.JupyterHub.proxy_class = 'jupyterhub.proxy.ConfigurableHTTPProxy'
diff -Nru jupyterhub-5.2.1+ds1/debian/patches/0003-Do-not-use-npm-even-if-available-during-build.patch jupyterhub-5.2.1+ds1/debian/patches/0003-Do-not-use-npm-even-if-available-during-build.patch
--- jupyterhub-5.2.1+ds1/debian/patches/0003-Do-not-use-npm-even-if-available-during-build.patch	2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/patches/0003-Do-not-use-npm-even-if-available-during-build.patch	2025-05-28 11:40:25.000000000 +0200
@@ -3,21 +3,70 @@
 Subject: Do not use npm even if available during build
 
 ---
- setup.py | 4 ++++
- 1 file changed, 4 insertions(+)
+ setup.py | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
 
 diff --git a/setup.py b/setup.py
-index 611b822..736f958 100755
+index 611b822..20549c0 100755
 --- a/setup.py
 +++ b/setup.py
-@@ -85,6 +85,10 @@ class NPM(BaseCommand):
+@@ -28,6 +28,8 @@ static = pjoin(share_jupyterhub, 'static')
+ 
+ is_repo = os.path.exists(pjoin(here, '.git'))
+ 
++NPM_PATH="pkgjs"
++
+ # Build basic package data, etc.
+ 
+ 
+@@ -85,6 +87,9 @@ class NPM(BaseCommand):
      bower_dir = pjoin(static, 'components')
  
      def should_run(self):
-+        return False
-+        if not shutil.which('npm'):
++        if not shutil.which(NPM_PATH):
 +            print("npm unavailable", file=sys.stderr)
 +            return False
          if not os.path.exists(self.bower_dir):
              return True
          if not os.path.exists(self.node_modules):
+@@ -100,7 +105,7 @@ class NPM(BaseCommand):
+ 
+         print("installing js dependencies with npm")
+         check_call(
+-            ['npm', 'install', '--progress=false', '--unsafe-perm'],
++            [NPM_PATH, 'install', '--progress=false', '--unsafe-perm'],
+             cwd=here,
+             shell=shell,
+         )
+@@ -153,7 +158,7 @@ class CSS(BaseCommand):
+         self.run_command('js')
+         print("Building css")
+ 
+-        args = ['npm', 'run', 'css']
++        args = [NPM_PATH, 'run', 'css']
+         try:
+             check_call(args, cwd=here, shell=shell)
+         except OSError as e:
+@@ -190,19 +195,19 @@ class JSX(BaseCommand):
+             print("JSX admin app is up to date")
+             return
+ 
+-        if not shutil.which('npm'):
++        if not shutil.which(NPM_PATH):
+             raise Exception('JSX needs to be updated but npm is not installed')
+ 
+         print("Installing JSX admin app requirements")
+         check_call(
+-            ['npm', 'install', '--progress=false', '--unsafe-perm'],
++            [NPM_PATH, 'install', '--progress=false', '--unsafe-perm'],
+             cwd=self.jsx_dir,
+             shell=shell,
+         )
+ 
+         print("Building JSX admin app")
+         check_call(
+-            ["npm", "run", "build"],
++            [NPM_PATH, "run", "build"],
+             cwd=self.jsx_dir,
+             shell=shell,
+         )
diff -Nru jupyterhub-5.2.1+ds1/debian/patches/0004-use-node-sass.patch jupyterhub-5.2.1+ds1/debian/patches/0004-use-node-sass.patch
--- jupyterhub-5.2.1+ds1/debian/patches/0004-use-node-sass.patch	1970-01-01 01:00:00.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/patches/0004-use-node-sass.patch	2025-05-28 11:40:25.000000000 +0200
@@ -0,0 +1,21 @@
+From: =?utf-8?q?Picca_Fr=C3=A9d=C3=A9ric-Emmanuel?= <picca@debian.org>
+Date: Wed, 7 May 2025 16:52:43 +0200
+Subject: use node-sass
+
+---
+ package.json | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/package.json b/package.json
+index 8b651bf..24efde5 100644
+--- a/package.json
++++ b/package.json
+@@ -10,7 +10,7 @@
+   },
+   "scripts": {
+     "postinstall": "python3 ./bower-lite",
+-    "css": "sass --style compressed -I share/jupyterhub/static/components --source-map share/jupyterhub/static/scss/style.scss:share/jupyterhub/static/css/style.min.css",
++    "css": "node-sass --output-style compressed --include-path share/jupyterhub/static/components --source-map=true share/jupyterhub/static/scss/style.scss > share/jupyterhub/static/css/style.min.css",
+     "build:watch": "npm run css -- --watch"
+   },
+   "devDependencies": {
diff -Nru jupyterhub-5.2.1+ds1/debian/patches/series jupyterhub-5.2.1+ds1/debian/patches/series
--- jupyterhub-5.2.1+ds1/debian/patches/series	2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/patches/series	2025-05-28 11:40:25.000000000 +0200
@@ -1,3 +1,2 @@
-0001-Add-empty-config-file.patch
-0002-Use-configurable-http-proxy-instead-of-Traefik.patch
 0003-Do-not-use-npm-even-if-available-during-build.patch
+0004-use-node-sass.patch
diff -Nru jupyterhub-5.2.1+ds1/debian/postinst jupyterhub-5.2.1+ds1/debian/postinst
--- jupyterhub-5.2.1+ds1/debian/postinst	2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/postinst	2025-05-28 11:40:25.000000000 +0200
@@ -1,42 +1,16 @@
 #!/bin/sh
-# postinst script
-#
-# see: dh_installdeb(1)
-
 set -e
 
-# summary of how this script can be called:
-#        * <postinst> `configure' <most-recently-configured-version>
-#        * <old-postinst> `abort-upgrade' <new version>
-#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
-#          <new-version>
-#        * <postinst> `abort-remove'
-#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
-#          <failed-install-package> <version> `removing'
-#          <conflicting-package> <version>
-# for details, see http://www.debian.org/doc/debian-policy/ or
-# the debian-policy package
-
-# dh_installdeb will replace this with shell code automatically
-# generated by other debhelper scripts.
-
 #DEBHELPER#
 
-case "$1" in
-    configure)
-	config_file=/etc/jupyterhub/jupyterhub_config.py
-	if ! [ -e "$config_file" ] ; then
-	    jupyterhub --generate-config -f "$config_file"
-	fi
-    ;;
-
-    abort-upgrade|abort-remove|abort-deconfigure)
-    ;;
-
-    *)
-        echo "postinst called with unknown argument \`$1'" >&2
-        exit 1
-    ;;
-esac
-
-exit 0
+if [ "${1}" = "configure" ] && [ ! -z "${2}" ]; then
+    if dpkg --compare-versions ${2} le "5.2.1+ds1-4~"; then
+        if [ -d /etc/jupyterhub/config/jupyterhub_config.d ]; then
+	    rmdir --ignore-fail-on-non-empty -p /etc/jupyterhub/config/jupyterhub_config.d
+        fi
+
+        if [ -d /etc/jupyterhub/config ]; then
+	    rmdir --ignore-fail-on-non-empty -p /etc/jupyterhub/config
+        fi
+    fi
+fi
diff -Nru jupyterhub-5.2.1+ds1/debian/rules jupyterhub-5.2.1+ds1/debian/rules
--- jupyterhub-5.2.1+ds1/debian/rules	2025-03-16 17:47:16.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/rules	2025-05-28 11:40:25.000000000 +0200
@@ -1,15 +1,23 @@
 #!/usr/bin/make -f
 
-# This file was automatically generated by stdeb 0.10.0 at
-# Wed, 26 May 2021 19:12:50 +0200
-export PYBUILD_NAME=jupyterhub
 PYVERS=$(shell py3versions -d)
 PYPATH=debian/jupyterhub/usr/lib/$(PYVERS)/dist-packages
+
+export PYBUILD_NAME=jupyterhub
+
 %:
 	dh $@ --buildsystem=pybuild
 
+execute_before_dh_auto_build:
+	pkgjs-install-minimal
+	-cp -fd node_modules/* share/jupyterhub/static/components
+	mkdir -p share/jupyterhub/static/css
+
 execute_after_dh_auto_install:
 	PYTHONPATH=$(PYPATH) help2man --output=jupyterhub.1 --name="Multi-user server for Jupyter notebooks" --version-string=$$(dpkg-parsechangelog -S Version | sed s/-[^-]*$$//) debian/jupyterhub/usr/bin/jupyterhub
 	PYTHONPATH=$(PYPATH) help2man --output=jupyterhub-singleuser.1 --name="Single-user server for Jupyter notebooks" --version-string=$$(dpkg-parsechangelog -S Version | sed s/-[^-]*$$//) debian/jupyterhub/usr/bin/jupyterhub-singleuser
 
+	# generate and install the config file
+	PYTHONPATH=$(PYPATH) debian/jupyterhub/usr/bin/jupyterhub --generate-config -f debian/jupyterhub/usr/share/jupyterhub/jupyterhub_config.py
+
 override_dh_auto_test:
diff -Nru jupyterhub-5.2.1+ds1/debian/salsa-ci.yml jupyterhub-5.2.1+ds1/debian/salsa-ci.yml
--- jupyterhub-5.2.1+ds1/debian/salsa-ci.yml	1970-01-01 01:00:00.000000000 +0100
+++ jupyterhub-5.2.1+ds1/debian/salsa-ci.yml	2025-05-28 11:40:25.000000000 +0200
@@ -0,0 +1,3 @@
+---
+include:
+  - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/recipes/debian.yml
\ Pas de fin de ligne à la fin du fichier

Reply to: