Commit Graph

28 Commits

Author SHA1 Message Date
chrisfu
dda938ee95 Integrate namespace setup and management into scripts, Dockerfile, and update installer UI. 2026-01-28 23:02:50 -08:00
chrisfu
58d693de05 UI: Standardized console appearance and fixed cosmetic inconsistencies. This commit establishes a stable, consistent UI across the entire installer: Unified 'Light Background, Dark Text' theme for all console components. Standardized console creation routine to eliminate thick black borders on macOS. Refactored SSH key generation to use the standard canvas-based layout. Switched to tk.Frame and tk.Scrollbar for TerminalConsole to resist macOS dark mode shifts. Fixed shutil.SameFileError when PROLE_HOME matches the source directory. Improved notebook styling for inactive tabs and execution outputs. All screens now share the same professional look and feel. 2026-01-27 22:32:27 -08:00
chrisfu
5e823f82a8 feat(supabase): add optional init flow, k8s manifests, and docs
• install.py
• etc/init_supabase.sh
• k8s/prole/kustomization.yaml
• k8s/prole/prole-db-postgres-service.yaml
• k8s/prole/supabase-configmap.yaml
• k8s/prole/supabase-deployment.yaml
• k8s/prole/supabase-service.yaml
• prole-db/supabase.md
2026-01-27 13:06:35 -08:00
chrisfu
1a5c6d844e Enhance install.py to manage prole.cfg generation and configuration capturing
- Introduced `prole_cfg_data` to maintain configuration sections like Global, Network, and Kerberos Authentication.
- Implemented `_save_prole_cfg` to generate the `prole.cfg` file used for Ansible deployment.
- Captured environment and network settings into the configuration data structure.
- Integrated configuration updates throughout the installer workflow, ensuring comprehensive data capture for subsequent processes.
2026-01-23 20:33:29 -08:00
chrisfu
11746f40e9 chore: remove legacy Analysis-00.toc file from build directory
Deleted outdated and unused Analysis-00.toc file to clean up the project structure.
2026-01-19 23:35:07 -08:00
chrisfu
cbfe930b78 feat: add ncurses interface, build system, and embedded resources
Major feature additions and infrastructure improvements for the Prole
Database Installer, enabling command-line operation and packaged binary
distribution.

## Ncurses Terminal Interface

- Add installer/ncurses_ui.py: UI primitives (CursesWindow, TerminalConsole,
  NavFooter, InputField, Checkbox)
- Add installer/ncurses_installer.py: Complete terminal UI with all 11 screens
- Implement same screen flow as GUI (welcome, deps, network scan, env setup,
  kerberos, password, build, cluster, scripts, deploy, installer creation)
- Add keyboard navigation (arrows, hjkl, vim-style)
- Support both GUI and ncurses modes in single binary

## Automatic Display Detection

- Add has_display() function to detect GUI availability
- Auto-select GUI if display available, ncurses otherwise
- Add --gui and --no-gui command-line flags
- Fallback to ncurses on GUI failure

## Build System and Packaging

- Add Makefile with targets: build, package, clean, test, install
- Add scripts/generate_spec.py: PyInstaller spec generator
- Add installer.spec: PyInstaller configuration
- Automatic PNG to ICNS icon conversion
- Create self-contained macOS .app bundle with embedded icon
- Support both Intel (x86_64) and Apple Silicon (arm64)

## Embedded Resources

- Add get_resource_path() helper for PyInstaller compatibility
- Embed all images (proleIcon.png, proleLogo.png, proleLogoSepia.png)
- Embed prole-net/prole-scan binary (6.8 MB universal binary)
- Embed prole-app/dist/Prole Tools.app (12 MB app bundle)
- Embed prole-db/ Docker build context

## Writable Directory Fixes

- Create ~/.prole/build/prole-db/ for Docker builds (fixes read-only _MEIPASS)
- Create ~/.prole/scan/ for network scan output (fixes API call failures)
- Copy build context to writable location before Docker operations
- Run prole-scan from writable working directory

## Documentation

- docs/build-system.md: Complete build system guide
- docs/ncurses-installer.md: Ncurses interface documentation
- docs/RELEASE-NOTES.md: Feature overview and release notes
- docs/IMAGE-RESOURCES.md: Image resource management
- docs/EMBEDDED-RESOURCES.md: Binary and app bundle embedding
- docs/DOCKER-BUILD-FIX.md: Docker build hang solution
- docs/PROLE-HOME-DIRECTORY.md: ~/.prole directory structure
- BUILD.md: Quick build reference

## Key Changes

install.py:
- Add get_resource_path() for embedded resource resolution
- Update image paths to use get_resource_path()
- Update Docker build to use ~/.prole/build/prole-db/
- Update network scan to use ~/.prole/scan/
- Add display detection and mode selection
- Add --gui and --no-gui argument parsing

## Testing

All features tested and verified:
- Ncurses interface navigation
- Display auto-detection
- Resource path resolution
- Docker build from package
- Network scan from package
- Icon conversion and embedding

Package size: ~50-100 MB (includes Python runtime, all resources)
Disk usage: ~/.prole/ uses ~2-6 MB

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-19 23:10:37 -08:00
chrisfu
bc0ff26f87 feat(install): restore Initialization Scripts screen and refactor for stability
- Restored "Initialization Scripts" screen (step #9) and corrected wizard navigation flow.
- Refactored UI/logic separation by introducing `ProleController` for script execution.
- Implemented sequential execution of initialization scripts with automatic tab switching:
    1. init_openbao.sh initialize
    2. init_cloudnative_pg.sh initialize
    3. init_prole-db.sh start
    4. init_port_forwards.sh start
- Integrated AI-powered environment summary using local Ollama (llama3) and kubectl.
- Fixed Tkinter `TclError` race conditions using `safe_after` and widget existence checks.
- Resolved `SyntaxError` related to `PROJECT_ROOT` global declaration.
- Synchronized sidebar numbering and footer navigation across the 11-step installer.
2026-01-19 21:14:52 -08:00
chrisfu
c462c3fb71 Cleanup: Remove unused ProleRouter components and update network scan references
- Deleted ProleRouter-related YAML files (services, deployments, storage) and unused `call_openapi.py`.
- Updated installer to reference `prole-net/prole-scan` instead of outdated `net/scan`.
- Renamed `network_prompt.txt` to match the new directory structure.
2026-01-18 15:12:21 -08:00
chrisfu
197c72dd7a Refactor prole-app and establish temporary release process
- Moved prole-tools-app to prole-app at the project root to make it self-contained for transition to its own repository.
- Created prole-tools-app/dist/ directory to host build artifacts.
- Generated distribution artifacts (Prole Tools.app and Prole Tools.zip) using prole-app/build.sh package.
- Checked in the generated artifacts to prole-tools-app/dist/ (bypassing .gitignore for temporary release process).
Changes Summary
•
Renamed directory prole-tools-app/ to prole-app/.
•
Populated prole-tools-app/dist/ with the latest build output from prole-app/build.sh.
•
Staged all changes, including the forced addition of ignored artifacts in prole-tools-app/dist/.
2026-01-18 15:04:23 -08:00
chrisfu
a4d0a2e0a3 Update prole-db docker tag to 17.7-037 and update pg_prolelog deb package 2026-01-15 11:58:39 -08:00
chrisfu
80587c167c Fix navigation infinite loop in installer and add comprehensive test coverage - Fixed infinite loop in ProleInstaller.show_page by preventing default fallback to page 0 on invalid IDs - Improved on_next/on_prev logic with robust sequence checks - Added tests/test_navigation.py to verify navigation flows and edge cases - Cleaned up redundant imports and page registrations in install.py 2026-01-11 20:13:53 -08:00
chrisfu
f7ba4f6235 Milestone: Unified Prole Installation Experience. Successfully established a new user-friendly installation workflow for macOS: Restored traditional drag-and-drop installer for Prole.app; Introduced a standalone 'setup' binary built with PyInstaller, enabling users to run the full dependency installer without a local Python environment; Automated DMG creation with a clean layout including Prole.app, the setup tool, and an Applications symlink; Enhanced the internal app launcher to automatically source local environment configurations ($PROLE_HOME/env.sh); Streamlined the codebase by rolling back complex multi-terminal 'Remote Join' logic in favor of this robust, static-binary approach. 2026-01-11 15:37:10 -08:00
chrisfu
906392d462 feat(installer): improve UI and add test coverage for core features
- Refactored installer UI with updated canvas rendering, sidebar navigation, and footer buttons.
- Enhanced styling for macOS compatibility and consistent design across controls.
- Added Pytest-based unit tests for `screen.py` and `config.py`.
- Expanded dependency catalog with new tools like `tshark` and `pyshark`.
- Improved error tolerance for background rendering and added placeholders for Kerberos configuration.
2026-01-08 21:51:30 -08:00
chrisfu
7140933f28 feat(app): add support for Ollama service integration
- Added Ollama endpoint to `Config.swift` and `install.py`.
- Updated `ServiceChecker` to handle Ollama status checks and errors.
- Enhanced `StatusView` with a sixth traffic light for Ollama.
2025-12-30 23:56:24 -08:00
chrisfu
73bc5bfede feat: implement encrypted development database with OpenBao and CNPG - Update install.py with password matching visual feedback and OpenBao integration - Enhance etc/init_openbao.sh to store database password in OpenBao KV - Update etc/init_cloudnative_pg.sh to synchronize database password from OpenBao to K8s secrets - Configure CNPG cluster in k8s/prole/prole-db.yaml with pg_hba for password authentication - Update various scripts and app sources for better service integration 2025-12-30 22:18:55 -08:00
chrisfu
940a48a237 refactor(scripts, installer): replace deprecated init_primary_domain.sh with init_openbao.sh
- Removed `init_primary_domain.sh` entirely; introduced `init_openbao.sh` with updated logic and streamlined functionality.
- Standardized script names to align with the OpenBao-centric workflow.
- Updated installer to dynamically fetch Prole database versions and reflect script changes.
- Improved TLS generation and k8s manifest handling for CloudNative-PG.
- Added new references to OpenBao initialization across scripts and UI components.
2025-12-23 22:40:03 -08:00
chrisfu
3a1f5ea444 Milestone: Integrated CloudNative-PG initialization and build flow into Prole installer. Added new initialization screens, refactored scripts, and updated k8s manifests. 2025-12-20 20:33:19 -08:00
chrisfu
0e01595de0 refactor: switch to environment wrapper; standardize env.sh usage and improve $PROLE_HOME management
- Replace direct script invocation with `$PROLE_HOME/env.sh` wrapper for consistent environment setup across all components.
- Update runtime processes to dynamically resolve `$PROLE_HOME` or fallback to `$HOME/.prole`.
- Deprecate `init-port-forwards.sh` script bundling; remove from LaunchAgentManager and build system.
- Overhaul `env.sh` generation to include execution capability, customizable paths, and improved error handling.
- Standardize app name and paths to "Prole Tools" across all files and UI elements.
- Adjust build output to align with new structure, including executable naming and resource packaging.
2025-12-15 22:00:32 -08:00
chrisfu
1af0447303 install.py environment management
feat(installer): clear overlay widgets on page switch; generate robust env.sh with safe PATH defaults
•
Fix UI bug where Environment page widgets persisted after navigation
◦
Destroy overlay widgets and clear page-specific canvas items in _clear_canvas_page()
•
Improve $PROLE_HOME/env.sh generation in _save_env_to_file()
◦
Export core PROLE_* directories
◦
Add portable _prole_add_path helper
◦
Prepend $PROLE_HOME/bin and common macOS paths: /opt/homebrew/bin, /usr/local/bin, /usr/bin, /bin, /usr/sbin, /sbin
◦
Export final PATH and include guidance for custom paths (e.g., Ollama app bundle)
Rationale: Ensures clean screen transitions in the installer and provides a minimal, safe PATH so shells launched by Prole.app can find docker and ollama by default.
2025-12-15 12:51:45 -08:00
chrisfu
3f0f4b4c22 install.py drag and drop deploy. mv gcp to deploy dir. add init-port-fowards.sh and port-mappings.properties; now configured by Prole.app 2025-12-14 23:18:54 -08:00
chrisfu
f93ce88d33 Properly manage local port-forwards for dev environments. somewhat configurable, easily updatable. moving on 2025-12-05 00:29:51 -08:00
chrisfu
120c9c2567 feat(installer): unified welcome flow, reliable footer gating; externalize install scripts; add Ollama; centralize canvas helpers
- Startup/UI: open main window with background; run dependency check on-canvas; hide footer during scan; reveal Next after debounce; add 600ms refresh and 9s failsafe; fixed background image replacement without clearing content.

- Canvas helpers: route all canvas calls via installer/screen.py; consistent status drawing.

- Installer script externalization: per-dependency templates + validator; compose install_dependencies.sh.

- Dependencies: add Ollama and template; install order: brew → ollama → k3d → kubectl → helm → krew → cmctl → plugins.

- Cleanup: removed deprecated splash and unused code paths.
2025-12-04 14:01:28 -08:00
chrisfu
aad4c9c919 installer: switch workstation build to Docker, drop Vagrant
- Remove Vagrant from dependency checks and UI; use Docker for workstation build.\n- Add WORKSTATION_VERSION ARG + OCI version label in workstation/Dockerfile; tag image as prole-workstation:<version>.\n- Add installer.workstation helpers: parse version, compose canonical docker build (auto platform flags on Apple Silicon).\n- Refactor install.py Workstation page to display/execute docker build; write logs to logs/workstation-docker-<ts>.log; update summary links.\n- Update Deploy page copy: "Build workstation Docker image".\n- Centralize footer buttons styling/layout with installer.screen.create_nav_footer and use it from install.py.\n- Update installer package docs to describe Docker-based workstation helpers.
2025-12-03 22:55:21 -08:00
chrisfu
da8bca97f6 chore(installer): Show 'Prole Installer' name and Prole icon on macOS; read images from properties
- Set visible process/menu name to 'Prole Installer' via Foundation on macOS.
- Prefer .icns from built Prole.app for Dock icon; fallback to PNG from properties via AppKit.
- Keep Tk iconphoto as a universal fallback.
- Move image configuration to prole-app/prole.properties with new keys:
  - icon=img/proleIcon.png
  - background=img/proleLogoSepia.png
- Support legacy keys ui.icon and ui.background for backward compatibility.

Files:
- install.py: strengthen _set_app_identity for process title and Dock icon.
- installer/config.py: add getters prioritizing new keys (with fallbacks).
- prole-app/prole.properties: add canonical keys; retain legacy; document.

Result: On macOS the menu bar now shows 'Prole Installer' instead of 'Python' and the Dock uses the Prole 'P' icon by default. Non-macOS behavior unchanged.
2025-12-02 18:52:04 -08:00
chrisfu
8a6e8738db ProleStatus: app-window default, light splash restored, status bar controls; endpoint config via properties; build + docs
- Default to Application Window mode with full app menu; status bar overlay remains available
- Restore clickable startup Splash Tip (5s) with animated GIF and live counter; use light theme (Aqua)
- Status bar item: monospaced "P" icon; left click shows overlay (status mode) or main window (app mode)
- Overlay: add Maximize button (□) to toggle back to main window; keep click‑through elsewhere
- Global hotkey Cmd+Opt+Shift+P toggles modes; Prole menu item mirrors the same toggle and updates title dynamically
- Application menu (Prole): Show Status Bar / Show Main Window (contextual), Refresh Now, Quit
- Application Window layout: non‑scrolling, vertical 1‑line rows (svc, k3s aggregate, local) with top‑right timestamp; bottom‑left controls (⟳ Refresh, _ Minimize)
- Parameterize endpoints via `prole.properties` (bundled + user override). Replace legacy raspberry with retropie defaults
- ServiceChecker + UI read endpoints from Config loader; tooltips/labels reflect configured hosts/ports
- Build script: generate `Info.plist` with `LSUIElement=false`; bundle resources (`prole-type.gif`, `prole.properties`); ad‑hoc codesign. Universal build supported
- Documentation: rewrite README with technical build/run/config details and operational posture

Files:
- proleStatus/Sources/: AppDelegate.swift, OverlayWindow.swift, StatusView.swift, StatusItemController.swift,
  SplashTipWindowController.swift, MainWindowController.swift, AppStatusView.swift, ServiceChecker.swift, Config.swift
- proleStatus/build.sh
- proleStatus/prole.properties
- proleStatus/README.md

Notes:
- Build verified via `./build.sh build` (arm64). App starts in App Window mode with light theme; menu + hotkey + overlay toggle operate as intended
2025-12-01 21:08:30 -08:00
chrisfu
053d907666 prole.installer wip 2025-12-01 14:52:18 -08:00
chrisfu
1f4b394e94 installer: split monolith into installer/* modules, update entry install.py to use them; remove nested prole/* references and prefer top-level proleStatus build
- Add root-level installer package: config, build, workstation, deploy
- Update install.py to import from installer.*
- Ensure build/deploy use top-level proleStatus only (no prole/proleStatus)
- Keep UI/behavior intact (wizard pages, embedded console)

This commit contains only files required to run ./install.py and the new installer/* modules.
2025-12-01 14:25:43 -08:00
chrisfu
10e1113eea WIP: k3s remote setup and graphical installer 2025-11-16 21:48:31 -08:00