mirror of
https://github.com/stellarshenson/stellars-jupyterhub-ds.git
synced 2026-03-15 09:15:08 +00:00
docs: update RELEASE.md for v3.2.11
Delta release notes covering changes from v3.0.14 to v3.2.11: - Configuration-agnostic volume management with optional descriptions - Admin notification broadcast system - Privileged user docker.sock access control - Documentation following modus primaris style - Technical improvements and upgrade notes Following modus primaris: concise, factual, organized sections.
This commit is contained in:
105
RELEASE.md
105
RELEASE.md
@@ -1,53 +1,94 @@
|
||||
# Release v3.0.14
|
||||
# Release v3.2.11
|
||||
|
||||
## Major Features
|
||||
|
||||
**User Self-Service Capabilities**
|
||||
- **Restart Server**: Users can restart their running JupyterLab containers directly from the control panel without admin intervention
|
||||
- **Manage Volumes**: Selective reset of persistent volumes (home/workspace/cache) when server is stopped - users choose which volumes to reset via checkbox interface
|
||||
**Configuration-Agnostic Volume Management**
|
||||
- Volume list dynamically generated from `DOCKER_SPAWNER_VOLUMES` configuration
|
||||
- Optional `VOLUME_DESCRIPTIONS` dict for user-friendly volume descriptions
|
||||
- UI automatically adapts if volumes renamed, added, or removed in config
|
||||
- Template uses Jinja2 loop with conditional description display
|
||||
- Handler validates against `USER_VOLUME_SUFFIXES` from config
|
||||
|
||||
**Admin Notification Broadcast**
|
||||
- Broadcast notifications to all active JupyterLab servers via `/hub/notifications`
|
||||
- Six notification types: default, info, success, warning, error, in-progress
|
||||
- 140-character message limit with live counter
|
||||
- Concurrent delivery using `asyncio.gather()` with 5-second timeout per server
|
||||
- Temporary API tokens (5-minute expiry) for authentication
|
||||
- Requires `jupyterlab_notifications_extension` on spawned servers
|
||||
|
||||
**Privileged User Access Control**
|
||||
- Group-based docker.sock access via `docker-privileged` built-in group
|
||||
- Pre-spawn hook conditionally mounts `/var/run/docker.sock` based on group membership
|
||||
- Built-in group protection (auto-recreates if deleted)
|
||||
- Managed through JupyterHub admin panel at `/hub/admin`
|
||||
|
||||
## Technical Improvements
|
||||
|
||||
**Frontend**
|
||||
- Bootstrap 5 modal compatibility (data-bs-toggle, data-bs-target, btn-close)
|
||||
- RequireJS module loading for proper JavaScript execution
|
||||
- Font Awesome icons (fa-rotate for restart, fa-database for volumes)
|
||||
- Proper template inheritance extending JupyterHub's default home.html
|
||||
**Configuration**
|
||||
- `jupyterhub_config.py` protected from import errors with `if c is not None:` guards
|
||||
- `DOCKER_SPAWNER_VOLUMES` defined as module-level constant (importable by handlers)
|
||||
- `get_user_volume_suffixes()` extracts volume suffixes from config
|
||||
- `USER_VOLUME_SUFFIXES` calculated and exposed to templates
|
||||
|
||||
**Backend**
|
||||
- New API endpoint: `/api/users/{username}/manage-volumes` accepting JSON body with volume array
|
||||
- ManageVolumesHandler processes multiple volumes with detailed success/failure response
|
||||
- Manual permission checking (admin or self) for API handlers
|
||||
- Comprehensive logging for all operations (frontend console + backend logs)
|
||||
**Handlers**
|
||||
- `ManageVolumesHandler` validates against configured volumes (not hardcoded)
|
||||
- `BroadcastNotificationHandler` sends to `/jupyterlab-notifications-extension/ingest`
|
||||
- `NotificationsPageHandler` renders broadcast form
|
||||
- One-line logging per server: username, message preview, type, outcome
|
||||
|
||||
**Infrastructure**
|
||||
- Version management system with project.env and auto-increment on build
|
||||
- Makefile enhancements: increment_version, tag, stop, logs targets
|
||||
- Docker API integration via /var/run/docker.sock for volume and container management
|
||||
**Templates**
|
||||
- Dynamic volume checkbox generation from `user_volume_suffixes`
|
||||
- Conditional description display from `volume_descriptions`
|
||||
- Bootstrap 5 modal syntax throughout
|
||||
- RequireJS wrapped JavaScript with CSRF protection
|
||||
|
||||
## Documentation
|
||||
|
||||
- README updated with Features section and visual screenshots
|
||||
- CLAUDE.md created with architecture overview and configuration patterns
|
||||
- FEATURE_PLAN.md documenting implementation strategy
|
||||
- Journal tracking all substantive work
|
||||
**Modus Primaris Style**
|
||||
- README reorganized: features first, screenshots, then architecture
|
||||
- Simplified notification description (verbose → concise)
|
||||
- Simplified architecture diagram labels
|
||||
- Features as bullet points at top
|
||||
|
||||
**New Documentation**
|
||||
- `doc/notifications.md` (35 lines) - notification system implementation
|
||||
- `doc/ui-template-customization.md` (58 lines) - template extension patterns
|
||||
- `doc/docker-socket-permissions.md` (66 lines) - socket access control
|
||||
|
||||
**Screenshots**
|
||||
- `screenshot-home.png` - user control panel with restart and volume management
|
||||
- `screenshot-send-notification.png` - admin notification broadcast interface
|
||||
- `screenshot-volumes.png` - volume management modal
|
||||
- `screenshot-volumes-modal.png` - volume selection checkboxes
|
||||
|
||||
## Version History
|
||||
|
||||
- **v3.0.14**: Documentation updates, 3-second stop delay
|
||||
- **v3.0.12**: Multi-volume management, Bootstrap 5 fixes, icons
|
||||
- **v2.11**: Previous stable release
|
||||
- **v3.2.11**: Configuration-agnostic volume management, optional descriptions
|
||||
- **v3.2.0**: Admin notification broadcast system
|
||||
- **v3.1.2**: Privileged user docker.sock access control
|
||||
- **v3.0.23**: Production readiness, CI/CD, architecture cleanup
|
||||
- **v3.0.14**: User self-service capabilities (restart, volume management)
|
||||
|
||||
## Upgrade Notes
|
||||
|
||||
No breaking changes. Existing deployments will seamlessly adopt new self-service features upon container restart.
|
||||
No breaking changes. Configuration backward compatible.
|
||||
|
||||
Users will see new buttons on the JupyterHub control panel:
|
||||
- "Restart Server" (when server is running)
|
||||
- "Manage Volumes" (when server is stopped)
|
||||
**Optional**: Add `VOLUME_DESCRIPTIONS` dict to `jupyterhub_config.py` for user-friendly volume descriptions in UI:
|
||||
```python
|
||||
VOLUME_DESCRIPTIONS = {
|
||||
'home': 'User home directory files, configurations',
|
||||
'workspace': 'Project files, notebooks, code',
|
||||
'cache': 'Temporary files, pip cache, conda cache'
|
||||
}
|
||||
```
|
||||
|
||||
**Optional**: Install `jupyterlab_notifications_extension` on spawned servers to enable admin notification broadcast.
|
||||
|
||||
Existing deployments adopt new features upon container rebuild and restart.
|
||||
|
||||
---
|
||||
|
||||
**From**: v2.11-cuda-12.9.1
|
||||
**To**: v3.0.14_cuda-12.9.1_jh-5.4.2
|
||||
**Date**: 2025-11-04
|
||||
**From**: v3.0.14_cuda-12.9.1_jh-5.4.2
|
||||
**To**: v3.2.11_cuda-12.9.1_jh-5.4.2
|
||||
**Date**: 2025-11-09
|
||||
|
||||
Reference in New Issue
Block a user