WIP: Reference only - DO NOT MERGE #2

Closed
steve.vandeheuvel wants to merge 95 commits from tac into main
No description provided.
This commit provides proper configuration examples for the SocketCluster
WebSocket service and improves platform compatibility.

Changes:
- Platform: Add linux/amd64 platform specification for Apple Silicon compatibility
- CORS: Remove hardcoded permissive origins and add secure configuration examples
- Examples: Create docker-compose.override.yml.example with proper WebSocket origins

The configuration now supports:
- Development: localhost-only origins (http/https/ws/wss protocols)
- Production: Domain-specific origins with WebSocket protocol support
- Security: Prevents unauthorized cross-origin WebSocket connections

Updated documentation explains how to configure WebSocket origins securely
for different deployment environments.

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

Co-Authored-By: Claude <noreply@anthropic.com>
v0.7.19
## Changes

### Removed Old Instance Initializers
- Deleted `app/instance-initializers/load-extensions.js` (used bootEngines)
- Deleted `app/instance-initializers/initialize-widgets.js` (now in initialize-universe)

### Created New Instance Initializer
- `app/instance-initializers/initialize-universe.js`
  - Creates console-specific registries
  - Registers default dashboard widgets using WidgetService
  - Loads extension.js files from enabled extensions
  - No longer calls bootEngines (enables lazy loading)

### Migrated Application Route
- `app/routes/application.js`
  - Replaced `@service universe` with specialized services
  - Uses `@service('universe/hook-service')` for hook execution
  - Uses `@service('universe/extension-manager')` for boot waiting
  - `universe.callHooks()` → `hookService.execute()`
  - `universe.booting()` → `extensionManager.waitForBoot()`

### Migrated Dashboard Widget Panel
- `app/components/dashboard/widget-panel.js`
  - Replaced `@service universe` with `@service('universe/widget-service')`
  - `universe.getDashboardWidgets()` → `widgetService.getWidgets('dashboard')`

### Migrated Dashboard Model
- `app/models/dashboard.js`
  - `universe.getDashboardRegistry()` → `widgetService.getRegistry()`
  - Looks up `service:universe/widget-service` instead of `service:universe`

### What Stayed the Same
- `app/controllers/console.js` - Event system usage unchanged
- `app/controllers/console/notifications.js` - Event system usage unchanged
- Event system (`on`, `trigger`) remains on Universe facade

## Benefits

-  Enables true lazy loading (engines load on-demand)
-  Separation of concerns via specialized services
-  Clearer service responsibilities
-  Better performance (no bootEngines at startup)
-  Maintains backward compatibility for events
This reverts commit 4b12efef41.
- Modified prebuild.js to generate extension shims in app/extensions/
- Generate extension-loaders.js with dynamic import map
- Added ember-auto-import allowAppImports configuration
- Extension setup code is now code-split into separate chunks
- Removed FleetbaseExtensionsIndexer in favor of prebuild generation
- Added generated files to .gitignore

Successfully tested: extension code is code-split into separate chunk
(chunk.app_extensions_fleetops_js.*.js)
- Merge generatedAppTree into app.trees.app before app.toTree()
- Fix Funnel srcDir/destDir configuration
- Remove prebuild extension generation (now handled by Broccoli)
- Add extensionManifestTree to expose dist/extensions.json
- Files now treated as real app source for ember-auto-import
- Fix BroccoliMergeTrees error by adding srcDir to Funnel calls
- extensionShims: srcDir 'extensions' (files in outputPath/extensions/)
- extensionLoaders: srcDir 'utils' (files in outputPath/utils/)
- routerGen: srcDir '/' (files at outputPath root)
- Add comprehensive debug logging to all plugins
- Add detailed logging to in-repo addon index.js
- Improves debugging and troubleshooting of build process
- Remove Broccoli tree complexity, use included() hook instead
- Write files directly to app/ using Node.js fs operations
- Generate extension shims in app/extensions/
- Generate extension loaders in app/utils/extension-loaders.generated.js
- Generate router.js with proper engine mounts using recast AST
- Generate extensions.json manifest in public/
- Add recast dependency for AST manipulation
- Much simpler and more reliable than Broccoli trees
**Router Generation Fixes:**
- Fix router.js parsing (was looking for non-existent router.map.js)
- Parse Router.map(function() {...}) structure correctly
- Fix console route detection (check for path: '/' config)
- Fix function expression location (3rd arg after path config)
- Fix root extensions to use this.mount() not router.mount()

**File Watching:**
- Add chokidar to watch extension.js files in development
- Regenerate shims and loaders when extension.js changes
- Cache discovered extensions for regeneration
- Only watch in development mode

**Issues Fixed:**
1. Router.js now properly contains engine mounts
2. Extension.js changes trigger automatic regeneration
- Fixed 'this' context issue in addConsoleExtensions/addRootExtensions
- Refactored monolithic index.js into separate utility modules:
  - discover-extensions.js - Extension discovery logic
  - generate-extension-shims.js - Shim file generation
  - generate-extension-loaders.js - Loader map generation
  - generate-router.js - Router AST manipulation
  - generate-manifest.js - Manifest generation
  - watch-extensions.js - File watching logic
- Simplified index.js to orchestrate utilities
- Improved code organization and maintainability
- Copied all working functions from prebuild.js
- Adapted only for addon context (this.project.root instead of __dirname)
- No logic changes, just direct migration
- Should work exactly like prebuild.js did
- Changed extension loader generation to create app/extensions/index.js
- New format uses direct imports instead of dynamic imports
- Added getExtensionLoader helper function
- Removed unused plugins directory
- Removed old extension-loaders.generated.js file
- Cleaner and simpler loader structure
- Added Option 1 ASCII logo header to all generated files
- Header includes copyright notice and AGPL-3.0 license
- Improved console logging with [Fleetbase] prefix
- Better formatted output with separators and extension listing
- Cleaner file change notifications
- More professional and readable build output
Refactored app.js boot sequence to follow Ember conventions:

1. Created app/initializers/load-runtime-config.js
   - Loads fleetbase.config.json before application boots
   - Uses deferReadiness/advanceReadiness pattern
   - Runs before all other initializers
   - Added performance timing with debug logging

2. Created app/instance-initializers/apply-router-fix.js
   - Applies router refresh bug fix patch
   - Runs as instance-initializer (needs app instance)
   - Runs before extension loading
   - Added performance timing with debug logging

3. Refactored app/app.js
   - Removed custom ready() hook
   - Removed document.addEventListener('DOMContentLoaded')
   - Removed manual deferReadiness/boot calls
   - Now uses standard Ember boot sequence
   - Clean, minimal implementation

Benefits:
- Follows Ember conventions and best practices
- Proper initialization order guaranteed
- Performance monitoring for boot phases
- Easier to debug and maintain
- No custom boot logic needed

Boot sequence:
1. load-runtime-config initializer (runs first)
2. Other initializers (socketcluster, etc.)
3. apply-router-fix instance-initializer
4. load-extensions instance-initializer
5. Other instance-initializers
6. Application ready
- Added 1-hour localStorage cache for runtime config
- Reduces 750ms+ HTTP request to instant cache lookup
- Cache automatically expires and refreshes
- Includes cache clear utility function
- Uses browser cache as fallback
- Performance logging with debug()
- Excluded JSON files from fingerprinting

Expected improvement: 783ms → <5ms (99.4% faster)
- Fixed ember-intl locale format to use proper case (en-US)
- Renamed translation file: en-us.yaml → en-US.yaml
- Updated fallbackLocale in ember-intl config
- Updated default locale in application route
- Fixes MISSING_DATA error in Intl.NumberFormat

The Intl API requires proper locale format (en-US not en-us)
- Added name to load-intl-polyfills initializer
- Made load-runtime-config run after load-intl-polyfills
- Fixes race condition where intl service initialized before polyfill data loaded
- Resolves MISSING_DATA errors for all locales (mn-mn, etc.)

Initialization order now:
1. load-intl-polyfills (loads formatjs polyfill data)
2. load-runtime-config (loads fleetbase.config.json)
3. load-socketcluster-client
4. Other initializers
- Create app/instance-initializers/set-application-instance.js
- Sets window.Fleetbase = appInstance.application for global access
- Calls universeService.setApplicationInstance() to cascade to RegistryService
- Ensures all services have access to root application container
- Required for UniverseRegistry singleton to work across engines
- Change window.Fleetbase = appInstance (not appInstance.application)
- Change setApplicationInstance(appInstance) (not appInstance.application)
- appInstance IS the ApplicationInstance, not the Application class
- Remove comment about RegistryService cascade
Added directory cleanup logic to remove ./app/extensions before generating
new extension files. This prevents old/stale/removed extensions from
remaining in subsequent builds.

Changes:
- Added fs.rmSync to remove extensions directory if it exists
- Cleanup happens at the start of generateExtensionFiles()
- Directory is recreated during generation process
- Logs cleanup action for visibility

This ensures each build starts with a clean slate and only includes
currently installed extensions.
Fix/docker socket example
latin american spanish translation
Add Persian (Farsi) Language Support in fa-ir.yaml
docs: Add comprehensive translation contribution guide
feat: refactoring extension build pipelines
Remove console prebuild script, bump docker fleetbase version
v0.7.21 ~ 5x faster css compiling and flawless builds
Organizations can now set their own alpha-numeric sender ID for SMS
- Add wrapper property to OnboardingOrchestratorService
- Update onboarding/yield component to render wrapper using lazy-engine-component
- Clean up onboard.hbs template to remove styling constraints
- Enable extensions to provide custom wrapper components for onboarding flows
- Add onFlowWillStart, onFlowDidStart, onStepWillChange, onStepDidChange, onFlowWillEnd, onFlowDidEnd hooks
- Hooks are optional and backward compatible with existing flows
- Add getCurrentPath() and isStepInPath() helper methods for multi-path flows
- Support dynamic next() functions (already existed, now documented)
- Maintain full backward compatibility with default@v1 flow
**Changes:**

1. **Caddyfile**:
   - Reduced num_threads from 24 to 20
   - Added request timeouts (read_body: 10s, write: 60s, idle: 120s)
   - With 4 containers: 20 × 4 = 80 total workers

2. **Dockerfile**:
   - Added explicit --workers=20 to octane:frankenphp command
   - Increased --max-requests from 250 to 1000
   - Applied to app-dev, app-release, and app stages

3. **Octane config**:
   - Enabled DisconnectFromDatabases listener
   - Enabled CollectGarbage listener
   - Prevents DB connection leaks and memory leaks

**Impact:**
- Better resource management under load
- Prevents connection pool exhaustion
- Requires db.t3.large (591 max connections) or better
- Supports up to 250 concurrent VUs

**Related:**
- Requires RDS upgrade from db.t4g.micro to db.t3.large
- Works with DB_CONNECTION_POOL_SIZE=25 (100 total connections)
- See configuration-analysis.md for details
feat: Add wrapper component support to onboarding orchestrator
dev-v0.7.23
Fix: Critical cache key collision bug in ApiModelCache
feat: New SMS service to support multiple SMS providers + framework improvements
The script contained typographic curly quotes instead of standard ASCII
quotes around the DB_SERVICE variable, causing bash to fail with:
DB_SERVICE: unbound variable

Also replaced the unicode ellipsis with ASCII dots for shell compatibility.
fix(scripts): replace unicode quotes with ASCII in docker-install.sh
Added Uzbek translations for API and Console
Refactor README: Remove AWS Marketplace content and reorganize into tables
v0.7.27
Merge pull request #501 from fleetbase/dev-v0.7.28
Some checks failed
Fleetbase CI / Build and Start Docker Services (push) Has been cancelled
989fa9a777
Upgrades fleetops to v0.6.35
Add Forgejo workflows and Dockerfiles for API and Console
Some checks failed
Fleetbase - Build PROD / Build-Image (push) Failing after 2s
9dccd1836b
Add GitHub credentials and podman prune to deploy workflows
Some checks failed
Fleetbase - Build PROD / Build-Image (push) Failing after 5s
32b28a42b9
Update workflows to use tac branch and correct Dockerfiles
Some checks failed
Fleetbase - Build PROD / Build-Image (push) Failing after 18s
07bd7317ab
Update deploy_api.yaml
Some checks failed
Fleetbase - Build PROD / Build-Image (push) Failing after 6s
9807df8161
Rename docker-tac files to fix directory spacing
Some checks failed
Fleetbase - Build PROD / Build-Image (push) Failing after 10m9s
1373049ca1
Update api.Dockerfile
Some checks failed
Fleetbase - Build PROD / Build-Image (push) Failing after 10m19s
fafcb80fa1
Update deploy workflow and Dockerfiles for GitHub auth and image sources
Some checks failed
Fleetbase - Build PROD / Build-Image (push) Failing after 10m12s
db66daef96
- Add GitHub auth variables to deploy workflow
- Pass GITHUB_AUTH_KEY to podman build
- Use explicit docker.io image sources in Dockerfiles
Set command_timeout to 30m in deploy workflows
All checks were successful
Fleetbase - Build PROD / Build-Image (push) Successful in 12m20s
2fd79062f5
- Simplify upgrade-fleetbase.yaml steps and cleanup process
- Add docker-tac/upgrade.Dockerfile for upgrade automation
- Set PHP memory_limit to 4096M and max_execution_time to 600
- Replace nodejs/npm with curl in upgrade.Dockerfile dependencies
- Install Node.js 20 using nvm in upgrade.Dockerfile
- Refactor WORKDIR usage for package updates and commands

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
tac/fleetbase!2
No description provided.