Skip to content

Pre-release v0.0.2#17

Merged
KerwinTsaiii merged 46 commits into
mainfrom
develop
Feb 5, 2026
Merged

Pre-release v0.0.2#17
KerwinTsaiii merged 46 commits into
mainfrom
develop

Conversation

@KerwinTsaiii

@KerwinTsaiii KerwinTsaiii commented Feb 5, 2026

Copy link
Copy Markdown
Collaborator

Summary

Pre-release version 0.0.2 with major feature additions including user quota management, Physics Simulation course, UI branding updates, and offline/portable deployment support.

Changes

New Features

User Quota Management System

  • Per-accelerator quota tracking with configurable rates (GPU/NPU)
  • Admin UI with inline quota editing and batch operations
  • Default quota allocation for new users
  • Auto-refresh support with CronJob (configurable rules)
  • Complete API with Pydantic validation

Physics Simulation (PhySim) Course

  • New course material with 4 Jupyter notebooks:
    • PhySim01: Hello Genesis
    • PhySim02: Control Your Robot
    • PhySim03: Motion Planning
    • PhySim04: Parallel Simulation
  • Franka Emika Panda robot model assets

Offline & Portable Deployment

  • External image pre-pulling for air-gapped environments
  • Registry mirror support (MIRROR_PREFIX) for Docker build and K3s runtime
  • Dummy network interface for stable K3s operation across network changes
  • pip/npm mirror support for builds in restricted networks

UI & Branding

  • AMD logo and AUP Learning Cloud branding across all templates
  • Black/gray color theme for buttons and UI elements
  • Expandable user details panel in Admin UI
  • Delete user functionality with confirmation modal

Bug Fixes

  • Fix spawn form validation error in single-node mode
  • Fix XSRF token issue in spawn page API calls
  • Fix K3s images not updated properly
  • Fix docker.io image path detection for mirror prefix

Documentation

  • New quota-system.md with full API reference
  • Updated user-management.md and authentication-guide.md
  • Mirror configuration guide
  • Offline operation documentation

Files Changed

  • 936,611 additions / 501 deletions
  • 100+ files modified including new PhySim course assets

Testing

  • Tested on local Kubernetes cluster
  • Quota system API endpoints verified
  • Offline deployment with pre-pulled images
  • Mirror prefix configuration tested

Checklist

  • Code follows project style guidelines
  • Changes are backward compatible
  • Tested on local Kubernetes cluster
  • Documentation links updated

MioYuuIH and others added 30 commits January 29, 2026 16:22
Features:
- Quota tracking with per-accelerator rates (GPU/NPU)
- Admin UI quota column with inline editing
- Batch quota operations API
- Auto-refresh with CronJob support (configurable rules)
- Pydantic validation for all quota API endpoints

Security & Stability:
- Input validation with Pydantic models
- Proper API authentication
- SQL injection prevention
- Rate limiting support

Documentation:
- quota-system.md with full API reference
- Updated user-management.md
Features:
- Add defaultQuota setting to grant initial quota to new users
- Add defaultUnlimited setting to grant unlimited quota to new users
- Auto-allocate quota when new users first attempt to start container
- Record initial grants in transaction log as 'initial_grant' type

Documentation:
- Update quota system docs with new configuration options
- Fix outdated configuration examples (enabled: null)
- Fix transaction field structure in API examples
- Add /api/quota/me response fields (accelerators, enabled)
- Add screenshots for admin quota management UI
- Remove outdated quota status indicator documentation

Implementation:
- Add ensure_user_quota() method in QuotaManager
- Update can_start_container() to support default quota allocation
- Add DEFAULT_QUOTA and DEFAULT_UNLIMITED config loading
- Add logging for new user quota grants
Features:
- Add expandable user details panel showing User and Server info
- Display auth_state, state, user_options as formatted JSON
- Add delete user button with confirmation modal
- Move "Back to Users" button to right side in GroupList

UI improvements:
- JSON fields displayed in formatted <pre> with syntax highlighting
- Expand/collapse toggle (▶/▼) for each user row
- Delete button disabled for admin user
- Split /api/accelerators from /api/quota/me and /api/quota/rates
- Add XSRF token to spawn page API calls (fixes 403 error)
- Update documentation with new API structure
- Add missing doc links to main README (authentication, user-management, quota-system)
- Remove outdated jupyterhub_config.py sections from docs/jupyterhub/README.md
- Fix CustomNativeAuthenticator -> CustomFirstUseAuthenticator in authentication-guide.md
- Remove adminsUnlimited, unlimitedUsers, defaultUnlimited config options
- Unlimited quota now managed exclusively via Admin UI
- Auto-login mode still disables quota system entirely
- Update documentation and values.yaml
Disable runtime input when hidden to prevent browser validation error:
'invalid form control with name=runtime is not focusable'
TODO: Find a way to properly disable the timer in single-node mode
- Change AMD logo color to black in navigation bar
- Update all buttons from blue to dark/gray theme
- Modify Admin UI React components button colors
- Update spawn page resource tags and accent colors
- Add home.html template with dark theme buttons
- Fix Launch button not enabled on default resource selection
- Add EXTERNAL_IMAGES array with all JupyterHub core component images
- Add pull_external_images() function to pull and save images to K3s
- Include external image pulling in default install flow
- Add pull-images command for standalone use
- Add MIRROR_* environment variables for configuring registry mirrors
- Configure K3s registries.yaml automatically when mirrors are set
- Support mirror configuration in Dockerfile build args
- Update Makefile to pass mirror settings to docker build
- Add help documentation for mirror configuration
- Add MIRROR_PIP and MIRROR_NPM environment variables
- Configure pip index URL in Hub and Base Dockerfiles
- Configure pnpm registry in Hub Dockerfile
- Update help documentation with package manager mirrors
MioYuuIH and others added 16 commits February 5, 2026 11:14
- Replace multiple MIRROR_* vars with single MIRROR_PREFIX
- Use prefix pattern: <prefix>/<registry>/<image>
- Fix Dockerfile ARG scope for multi-stage builds
- Tested with actual build using mirror prefix
- Add base images for Docker build to EXTERNAL_IMAGES
- Tag pulled images to mirror-prefixed name for Docker build cache
This ensures K3s cluster networking works even when external
network is disconnected.
…st binding

Create a dummy network interface with fallback default route for K3s.
This allows K3s to detect node IP even when external network is disconnected.

Reference: https://docs.k3s.io/installation/airgap
Use a stable dummy interface IP (10.255.255.1) as node-ip and flannel-iface.
This ensures K3s works regardless of which WiFi/network is connected.
Add offline and portable single-node deployment support
@KerwinTsaiii KerwinTsaiii merged commit 80b09ba into main Feb 5, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants