diff --git a/INSTALLER_README.md b/INSTALLER_README.md deleted file mode 100644 index 64313fd..0000000 --- a/INSTALLER_README.md +++ /dev/null @@ -1,79 +0,0 @@ -# Prole Service Dependencies Installer - -A desktop application for installing, deploying, and validating Prole services. - -## Features - -### 1. Install Screen -- Check installation status of required dependencies: - - Docker - - Homebrew - - k3d - - kubectl - - Helm - - krew - - cmctl -- Download links to each project's homepage -- Generate installer script (`install_dependencies.sh`) with all installation commands - -### 2. Deploy Screen -- Single "Build and Deploy" button that: - - Checks Docker is running - - Creates or restarts k3d `prole-service-cluster` - - Builds the local `prole-db` Docker image - - Tags the image for the registry - - Pushes the image to the registry - - Imports the image to the k3d cluster -- Real-time progress tracking with visual indicators (pending, running, completed, error) -- Green checkmarks for completed steps - -### 3. Validate Screen -- Displays `kubectl cnpg status prole-db` output -- Shows k3d cluster list status -- Auto-refreshes every 10 seconds (can be toggled) -- Manual refresh button -- Link to Prometheus (http://localhost:9090) - -## Usage - -### Running the Installer - -```bash -python3 install.py -``` - -Or make it executable and run directly: - -```bash -chmod +x install.py -./install.py -``` - -### Requirements - -- Python 3.6+ -- tkinter (usually included with Python on macOS/Linux) -- macOS (for Homebrew installation) - -### Installation Steps - -1. **Install Dependencies**: Use the Install screen to check and install required dependencies -2. **Deploy Services**: Use the Deploy screen to build and deploy Prole services -3. **Validate**: Use the Validate screen to monitor the deployment status - -## Notes - -- The installer requires Docker Desktop to be running for deployment -- The k3d cluster name is `prole-service-cluster` as specified in README.md -- The Docker image version is `prole-db:17.5-027` -- The registry is configured as `k8s-prole-org-registry:k8s.prole.org:5000` - -## Apple Silicon Support - -The installer automatically detects if running on Apple Silicon (ARM64) and: -- Sets `--platform linux/amd64` flag for Docker builds -- Ensures mssql Docker images are built for AMD64 platform (required for MSSQL Server) -- Ensures prole-db images are built for AMD64 platform for compatibility - -This ensures compatibility with services that require AMD64 architecture, such as MSSQL Server. - diff --git a/gcp/terraform/vpn.tf b/gcp/terraform/vpn.tf index c47fa91..7e36012 100644 --- a/gcp/terraform/vpn.tf +++ b/gcp/terraform/vpn.tf @@ -53,13 +53,13 @@ module "cs-prod-prod-us-west1-gateway" { } ] } - router_asn = + router_asn = 64514 keepalive_interval = 20 tunnels = { tnl0 = { bgp_peer = { address = cidrhost("${local.bgp_ips.prod-prod-us-west1-gateway-tnl0}/30", 2) - asn = + asn = 65001 } bgp_session_name = "prod-us-west1-gateway-tnl0" bgp_peer_options = { @@ -73,7 +73,7 @@ module "cs-prod-prod-us-west1-gateway" { tnl1 = { bgp_peer = { address = cidrhost("${local.bgp_ips.prod-prod-us-west1-gateway-tnl1}/30", 2) - asn = + asn = 65001 } bgp_session_name = "prod-us-west1-gateway-tnl1" bgp_peer_options = { diff --git a/img/proleLogo.png b/img/proleLogo.png new file mode 100644 index 0000000..1ec8295 Binary files /dev/null and b/img/proleLogo.png differ diff --git a/img/proleLogoBlueprint.png b/img/proleLogoBlueprint.png new file mode 100644 index 0000000..2529c5d Binary files /dev/null and b/img/proleLogoBlueprint.png differ diff --git a/img/proleLogoSepia.png b/img/proleLogoSepia.png new file mode 100644 index 0000000..78b1705 Binary files /dev/null and b/img/proleLogoSepia.png differ diff --git a/install.py b/install.py index fb5e044..b8a8228 100755 --- a/install.py +++ b/install.py @@ -45,6 +45,11 @@ class ProleInstaller: def __init__(self, root): self.root = root self.root.title("Prole Installer") + # Best-effort: set app identity (menu title / dock icon) early + try: + self._set_app_identity() + except Exception: + pass # Center window on screen window_width = 1000 @@ -183,6 +188,62 @@ class ProleInstaller: self.show_page(0) self.update_footer() + # ---------------- App identity (title, Dock icon) ---------------- + def _set_app_identity(self): + """Set the app name shown by Tk and attempt to set the macOS Dock icon. + + Notes: + - tk appname affects Tk's internal application name and may improve + display in some OS integrations. On macOS, fully changing the menu bar + app name from "Python" typically requires running as a bundled app + with CFBundleName set, but we still set the Tk appname here. + - For the Dock icon on macOS, we try to use the ProleStatus.app icns + (capital P icon). If PyObjC (AppKit) isn't available, we fall back to + setting a Tk window icon from a PNG/GIF in img/. + """ + # Set Tk application name + try: + self.root.tk.call('tk', 'appname', 'Prole Installer') + except Exception: + pass + + # macOS Dock icon via AppKit (preferred) + if platform.system() == 'Darwin': + icns_candidates = [ + PROJECT_ROOT / 'proleStatus' / 'dist' / 'ProleStatus.app' / 'Contents' / 'Resources' / 'AppIcon.icns', + PROJECT_ROOT / 'proleStatus' / 'dist' / 'ProleStatus.app' / 'Contents' / 'Resources' / 'ProleStatus.icns', + ] + icns_path = next((p for p in icns_candidates if p.exists()), None) + if icns_path is not None: + try: + # Use PyObjC if available + from AppKit import NSApplication, NSImage + img = NSImage.alloc().initWithContentsOfFile_(str(icns_path)) + if img is not None: + NSApplication.sharedApplication().setApplicationIconImage_(img) + return + except Exception: + pass + + # Fallback: Tk icon from image assets (PNG/GIF) + img_candidates = [ + PROJECT_ROOT / 'img' / 'prole-type.gif', + PROJECT_ROOT / 'img' / 'prole-type.png', + PROJECT_ROOT / 'img' / 'ProleStatus.png', + PROJECT_ROOT / 'img' / 'proleLogoSepia.png', + ] + for p in img_candidates: + try: + if p.exists(): + self._app_iconphoto = tk.PhotoImage(file=str(p)) + try: + self.root.iconphoto(True, self._app_iconphoto) + except Exception: + pass + break + except Exception: + continue + def configure_styles(self): """Configure ttk styles""" base_bg = '#f5f5f7' @@ -225,6 +286,7 @@ class ProleInstaller: # Hide any legacy frames if they exist for _, f in self.pages: try: + if f is not None: f.place_forget() f.pack_forget() diff --git a/installer/README.md b/installer/README.md new file mode 100644 index 0000000..7633b8c --- /dev/null +++ b/installer/README.md @@ -0,0 +1,8 @@ +# Moved + +This document has moved. Please see the up-to-date installer guide at: + +installer/README.md + +The root-level file is kept only as a pointer to avoid breaking links during the refactor. + diff --git a/k3s/create_k3d_join_remote_agents.sh b/k3s/create_k3d_join_remote_agents.sh old mode 100644 new mode 100755 diff --git a/proleStatus/dist/ProleStatus.app/Contents/MacOS/ProleStatus b/proleStatus/dist/ProleStatus.app/Contents/MacOS/ProleStatus index e5905ce..9265784 100755 Binary files a/proleStatus/dist/ProleStatus.app/Contents/MacOS/ProleStatus and b/proleStatus/dist/ProleStatus.app/Contents/MacOS/ProleStatus differ diff --git a/proleStatus/dist/ProleStatus.app/Contents/_CodeSignature/CodeResources b/proleStatus/dist/ProleStatus.app/Contents/_CodeSignature/CodeResources index 3a10fb1..b3fefd8 100644 --- a/proleStatus/dist/ProleStatus.app/Contents/_CodeSignature/CodeResources +++ b/proleStatus/dist/ProleStatus.app/Contents/_CodeSignature/CodeResources @@ -6,7 +6,7 @@ Resources/ProleStatus.icns - +cdQzwSUcmjm7+xsMSNENM8UmDs= + aScVfsEFHQVphfcvzhC9dp1TB0Q= Resources/prole-type.gif @@ -14,11 +14,11 @@ Resources/prole.properties - DrOicjCcsYx0qpecyvrGCknJU/0= + Cj9W/KW+Rny/lDw/SJDfNdPFjVY= Resources/statusIcon.png - Tdx6sY6fxRnTUTFufZjqK0ciHCQ= + 3FV12k9vnMTt/OUzA+8MwBJsC4c= files2 @@ -27,7 +27,7 @@ hash2 - Gw6vHKwQDAYnqybQs82BVotLuxQPfeFRosM58Z9veXI= + 1tKOrjdtGcfGEuLS6EnEdE0lfLpfwgI+Wcq6j8etOUY= Resources/prole-type.gif @@ -41,14 +41,14 @@ hash2 - 2c+rUHdA13baSVtHIm0CS92ZHfI9jkSJME/tuRSD5Qs= + rShwRtFhpcuZ6wbDkVmNg/vd3XzWvL/v8BX6pzk1tdg= Resources/statusIcon.png hash2 - ryjfhxseGqvWZt2dsVgqZU21o0yPUCsTxHleEpJoo/g= + WPDWAmMYDCd1OomngoN/U/IFnTsX1tZsuAZTJhEPtOc= diff --git a/www/installer.html b/www/installer.html index f75d1bb..3660d8f 100644 --- a/www/installer.html +++ b/www/installer.html @@ -757,3 +757,6 @@ Clusters found: 1`; + + +