| e5b9cca7 | 08-Jan-2026 |
Jason Westover <jwestover@nvidia.com> |
Migrate unit tests from Jest to Vitest
Replace Jest test runner with Vitest for native ES modules support and faster test execution. This migration aligns the test tooling with the Vite build system
Migrate unit tests from Jest to Vitest
Replace Jest test runner with Vitest for native ES modules support and faster test execution. This migration aligns the test tooling with the Vite build system and eliminates CommonJS compatibility issues.
Why Vitest over Jest?
While Jest is a mature ecosystem with broader adoption (45.5k GitHub stars vs Vitest's 15.7k), Vitest is the recommended testing framework for Vue 3 + Vite projects:
1. **Native ESM Support**: Vitest runs tests directly as ESM without transformation, while Jest requires Babel/transformation layers that add complexity and slow down test execution.
2. **Vite Integration**: Shares the same configuration, plugins, and resolvers as the Vite build system. This eliminates the dual-config maintenance burden (vite.config.js + jest.config.js).
3. **Vue 3 Ecosystem Alignment**: Vitest is created by the Vue team and is the official recommendation in Vue 3 documentation. It has first-class Vue component testing support via @vue/test-utils.
4. **Performance**: Cold start is significantly faster due to Vite's on-demand compilation. HMR for tests provides instant feedback during test-driven development.
5. **API Compatibility**: Vitest intentionally matches Jest's API, making migration straightforward and allowing developers to leverage existing Jest knowledge.
ESLint 9 Upgrade: - Upgrade ESLint from 8.57.1 to 9.18.0 - Migrate from .eslintrc.cjs to eslint.config.js (flat config) - Upgrade eslint-plugin-vue from 9.2.0 to 10.0.0 - Replace eslint-plugin-vitest with @vitest/eslint-plugin@1.1.43 - Replace @vue/eslint-config-prettier with eslint-config-prettier - Add globals package for flat config environment definitions - Update lint-staged from 13.0.3 to 16.0.0 - Update prettier from 3.2.5 to 3.4.2 - Disable stricter vue rules for follow-up PR: vue/no-reserved-component-names, vue/no-unused-components, vue/no-deprecated-delete-set, vue/no-required-prop-with-default
Pre-commit Hooks: - Add simple-git-hooks and lint-staged for automatic linting - Run eslint --fix on JS/Vue files before commit - Run prettier --write on markdown files before commit - Add .prettierrc.yaml matching CI configuration - Include .cjs/.mjs files in prettier JS override
Documentation: - Update unit testing guide for Vitest - Update coding standards with pre-commit hook details
References: - Vitest official comparison: https://vitest.dev/guide/comparisons.html#jest - Vue 3 testing guide: https://vuejs.org/guide/scaling-up/testing.html#unit-testing - Vite ecosystem recommendations: https://vitejs.dev/guide/features.html#testing
Test Results: - 19 test files, 123 tests passing - No warnings or deprecation messages - Test execution: ~3.1s (on par with Jest)
Changes: - Replace jest.config.js with Vitest config in vite.config.js - Create tests/vitest.setup.js with Vitest-compatible mocks - Update package.json scripts for Vitest - Add vue3-snapshot-serializer for cleaner snapshots - Use happy-dom and real i18n instance for faster tests
Dependency Updates: - Remove @vue/cli-plugin-unit-jest, @vue/vue3-jest, babel-jest, jest - Add vitest, @vitest/coverage-v8, jsdom, happy-dom, vue3-snapshot-serializer
Test File Migrations: - Replace jest.fn() with vi.fn() - Replace jest.spyOn() with vi.spyOn() - Replace jest.mock() with vi.mock() - Replace jest.resetModules() with vi.resetModules() - Replace jest.unmock() with vi.unmock() - Replace require() with dynamic import() for ESM compatibility - Add explicit Vitest imports (vi, describe, it, expect, etc.)
Snapshot Improvements: - Use vue3-snapshot-serializer to strip data-v-* scoped style attributes from snapshots for cleaner, more stable output - Add SVG component stubs for logo assets to avoid verbose path data in snapshots (logo-header.svg, login-company-logo.svg, built-on-openbmc-logo.svg) - Updated all snapshot files for Vitest format - Removed obsolete Jest snapshot entries
Performance Optimizations: - Use happy-dom instead of jsdom (17% faster environment setup) - Use real i18n instance instead of mock (eliminates redundant dynamic imports, 55% faster test execution)
Tested: - npm run test:unit runs 19 test files, 123 tests, and passed them all with 0 warnings.
Change-Id: Iaf04335db54a5ceeff09bcd43675a488828dc44f Signed-off-by: Jason Westover <jwestover@nvidia.com>
show more ...
|
| 063a8e0e | 08-Jan-2026 |
Jason Westover <jwestover@nvidia.com> |
Migrate build system from Vue-CLI to Vite
"Vue CLI is in Maintenance Mode!" https://cli.vuejs.org/
Vite is created by Vue's creator and is the recommended build tool for Vue 3. It supports most of
Migrate build system from Vue-CLI to Vite
"Vue CLI is in Maintenance Mode!" https://cli.vuejs.org/
Vite is created by Vue's creator and is the recommended build tool for Vue 3. It supports most of the configured conventions in Vue CLI. Dev Server startup is 60X faster and HMR is noticeably faster ~50ms. Better Tree-shaking support and modern ESM support.
This migration preserves all existing functionality while eliminating Vue 2 legacy dependencies.
Build Output Comparison (gzipped): Master (Webpack) Vite Delta CSS: 39 KB 45 KB +6 KB (+15%) JS: 505 KB 483 KB -22 KB (-4.4%) Total dist: 556 KB 544 KB -12 KB (-2.2%) Build time: ~29s ~7s ~4x faster
Build System Changes: - Replace vue.config.js with vite.config.js - Remove babel.config.js (Vite uses esbuild) - Remove postcss.config.js (Vite handles PostCSS internally) - Add index.html to project root with ESM module entry point - Add custom Vite plugin for directory import resolution - Rename .eslintrc.js to .eslintrc.cjs (ESM compatibility)
Dependency Updates: - Remove @vue/cli-* packages and webpack-related dependencies - Add vite, @vitejs/plugin-vue, @vitejs/plugin-basic-ssl - Add vite-svg-loader, vite-plugin-compression - Upgrade Bootstrap to 5.3.8 - Upgrade Sass to 1.97.2 (supports quietDeps option) - Upgrade xterm to @xterm/xterm v6 (new package name) - Upgrade xterm-addon-* to @xterm/addon-* packages - Upgrade vue-i18n to v11 - Upgrade eslint to 8.57.1 - Upgrade axios-cache-interceptor to latest
Environment Variable Migration: - Change VUE_APP_* prefix to VITE_* (Vite convention) - Replace process.env with import.meta.env in source files - Update .env.ibm, .env.intel example files - Update documentation with new variable names
ESM Module Compatibility: - Replace require('@/eventBus') with ESM imports (~23 files) - Ensure event bus listeners are registered/unregistered with stable handler references to prevent leaks - Replace require.context with import.meta.glob in i18n.js - Convert SVG inline loader to vite-svg-loader component imports
SCSS/Sass Updates: - Remove tilde (~) prefix from node_modules imports - Add silenceDeprecations and quietDeps for Bootstrap warnings - Fix color() function syntax for Sass 2.0 compatibility
xterm.js v6 Migration: - Update imports to @xterm/xterm, @xterm/addon-attach, @xterm/addon-fit - Replace deprecated setOption() with constructor options - Add CSS fix for helper textarea visibility
Dev Server: - Configure HTTPS with @vitejs/plugin-basic-ssl - Preserve proxy configuration for BMC backend - Add WebSocket proxy auth token forwarding for /console, /kvm, /vm - Configure HMR on separate WebSocket path (/ws_hmr)
X-Auth-Token Persistence (opt-in): - Add VITE_STORE_SESSION env flag for non-cookie auth backends - Persist X-Auth-Token to session cookie when enabled - Enables direct browser navigation to Redfish endpoints
Follow-on: CI/testing updates (unit test runner + run-ci alignment) Some Jest config changes skipped here since this follow-on commit switches to Vitest. follow-up change is here: https://gerrit.openbmc.org/c/openbmc/webui-vue/+/86511
Tested: Sanity tested most navigational screens in the default UI, including many different types of API calls. Tested most build options. Tested the new i18n:report and it is working correctly.
Change-Id: Ie84d1ed6121ffe7d2ddb379084d833b8d5a6fccf Signed-off-by: Jason Westover <jwestover@nvidia.com>
show more ...
|
| 313d15cf | 18-Aug-2025 |
jason westover <jwestover@nvidia.com> |
Fix Unit tests and useI18n() misuse
Vue 3's vue-i18n requires useI18n() to be called within setup() or reactive contexts. Calling it in Options API data() creates disconnected i18n instances that ca
Fix Unit tests and useI18n() misuse
Vue 3's vue-i18n requires useI18n() to be called within setup() or reactive contexts. Calling it in Options API data() creates disconnected i18n instances that cannot resolve linked messages.
Component fixes: - Enable globalInjection in i18n.js for automatic $t injection - Remove explicit useI18n() imports from 84 components that incorrectly called useI18n().t in their data() functions
Unit test fixes: - Mock @/i18n module in jest.setup.js because Webpack's require.context() does not work in Jest, leaving the real module with no locale messages loaded - Re-export real createI18nInstance so i18n unit tests work - Update snapshots to reflect real translated text instead of raw translation keys - Fix b-form-radio/checkbox stubs to wrap content in div for proper data-test-id attribute inheritance - Remove duplicate i18n plugin installations from individual test files that caused 'already registered' warnings - Suppress expected missing-key warning in vendor overlay test
Tested: - Sanity testing on webui, ensured translations work. - All Unit tests pass (19/19) with no Errors or Warnings.
Change-Id: I9789acd823261eccc7affde0957dd22e8fec06b1 Signed-off-by: Jason Westover <jwestover@nvidia.com>
show more ...
|
| 7a1c39be | 12-Jan-2026 |
Nikhil Ashoka <a.nikhil@ibm.com> |
Fix boot source override handling
Add optional chaining to avoid errors when BootSourceOverrideTarget is missing.
Change-Id: I176119ac115d92749722ed74aabd84ebd2dae384 Signed-off-by: Nikhil Ashoka <
Fix boot source override handling
Add optional chaining to avoid errors when BootSourceOverrideTarget is missing.
Change-Id: I176119ac115d92749722ed74aabd84ebd2dae384 Signed-off-by: Nikhil Ashoka <a.nikhil@ibm.com>
show more ...
|
| 75b02039 | 21-Dec-2025 |
Jason Westover <jwestover@nvidia.com> |
Migrate Vuelidate from v1 to v2 API
Complete the migration from Vuelidate v1 (vuelidate 0.7.7) to v2 (@vuelidate/core 2.0.3 and @vuelidate/validators 2.0.4).
Changes include: - Replace imports from
Migrate Vuelidate from v1 to v2 API
Complete the migration from Vuelidate v1 (vuelidate 0.7.7) to v2 (@vuelidate/core 2.0.3 and @vuelidate/validators 2.0.4).
Changes include: - Replace imports from 'vuelidate/lib/validators' with '@vuelidate/validators' - Convert static 'validations:' objects to 'validations()' methods which return the validation rules object - Update helpers.regex() syntax from v1 two-arg format helpers.regex('name', pattern) to v2 single-arg helpers.regex(pattern) - Create custom macAddress validator using regex since macAddress is not included in @vuelidate/validators v2 - Remove deprecated vuelidate 0.7.7 package from dependencies - Add unit tests for Vuelidate v2 migration verification - Fix DateTime store to continue with DateTime update even if NTP settings update fails - Fix Network Table components (IPv4, IPv6, DNS) missing @ok event handlers for Add modal dialogs - Fix CSR country dropdown by restoring COUNTRY_LIST data and moving useI18n() call to setup() function - Fix disconnected modals in Network page by using eventBus to communicate between child components and parent (hostname, MAC address, default gateway edit buttons)
Tested: - npm run build completes successfully - npm run test:unit passes 66 new Vuelidate validation tests: - VuelidateMixin.spec.js: getValidationState method tests - TableDateFilter.spec.js: Date range validation tests - ModalHostname.spec.js: Hostname validation tests - ModalMacAddress.spec.js: MAC address validation tests - ModalUser.spec.js: User form validation tests - Manual testing performed: - User Management: Create/edit user with password confirmation - LDAP: Enable/disable with conditional field requirements - Date/Time: Switch between NTP and manual modes - Factory Reset: Confirm checkbox validation when server is on - Network Settings: Add IPv4, IPv6, DNS addresses via modals - Network Settings: Edit hostname, MAC address, default gateway - Certificates: Generate CSR with country dropdown working
Change-Id: I0f6b5d89d1791b36977f1a3c16cbd10bca6a484a Signed-off-by: Jason Westover <jwestover@nvidia.com>
show more ...
|
| 28ec9c65 | 06-Jan-2026 |
Troy Lee <troy_lee@aspeedtech.com> |
VirtualMedia: fix incorrect NBD export size encoding
The NBD export size is encoded as a 64-bit value (MSB/LSB) in NBDServer.js. The previous implementation relied on JavaScript bitwise operations (
VirtualMedia: fix incorrect NBD export size encoding
The NBD export size is encoded as a 64-bit value (MSB/LSB) in NBDServer.js. The previous implementation relied on JavaScript bitwise operations (e.g. size >>> 32), which is incorrect because all bitwise operators coerce values to 32-bit integers.
This resulted in an incorrect export size for large files, causing the kernel to detect an invalidly large NBD device and leading nbd_client to fail with: "Exported device is too big for me. Get 64-bit machine :-("
Fix the MSB calculation by using arithmetic division instead of bitwise shifts so the exported size is encoded correctly.
Fixes: d36ac8a8be86 ("Migrate to Bootstrap 5 and remove Vue compat plugin")
Tested: VirtualMedia on evb-ast2600.
Change-Id: I18d8cdd05cf149907d31d79cfd5308c0943ef83e Signed-off-by: Troy Lee <troy_lee@aspeedtech.com> Signed-off-by: Vince Chang <vince_chang@aspeedtech.com>
show more ...
|
| 60d5c9eb | 12-Dec-2025 |
Jason Westover <jwestover@nvidia.com> |
Fix Vue 3 @change event bindings for forms
In Bootstrap-Vue-Next (Vue 3), the @change event on BFormCheckbox and BFormRadio passes an Event object instead of the boolean value. This caused malformed
Fix Vue 3 @change event bindings for forms
In Bootstrap-Vue-Next (Vue 3), the @change event on BFormCheckbox and BFormRadio passes an Event object instead of the boolean value. This caused malformed API payloads like:
{"LocationIndicatorActive": {"isTrusted": true, "_vts": 1765562875420}}
instead of:
{"LocationIndicatorActive": true}
Replace @change with @update:model-value which correctly passes the new value in Vue 3/Bootstrap-Vue-Next.
Components fixed: - OverviewInventory.vue: LED toggle - InventoryServiceIndicator.vue: LED toggle - InventoryTableSystem.vue: LED toggle - NetworkGlobalSettings.vue: 6 network switches - Policies.vue: 4 policy switches (SSH, IPMI, vTPM, RTAD) - TableIpv4.vue: DHCP switch - TableIpv6.vue: DHCPv6 switch - Ldap.vue: LDAP auth and service type controls
Also adds safety net in api.js: - Request interceptor to strip Vue reactivity from payloads - Detects and warns about Event objects in API payloads - Improved response error handling with null safety - Conditional debug logging (development mode only)
Change-Id: I180d9143087284e28c5066a6ffc141cd7f7038c6 Signed-off-by: jason westover <jwestover@nvidia.com>
show more ...
|
| 741a3f30 | 11-Dec-2025 |
Jason Westover <jwestover@nvidia.com> |
Fix Vue 3 v-model and form event handling
Add proper Vue 3 v-model support to components that are used with v-model bindings from parent components:
- FormFile: Add modelValue prop with computed ge
Fix Vue 3 v-model and form event handling
Add proper Vue 3 v-model support to components that are used with v-model bindings from parent components:
- FormFile: Add modelValue prop with computed getter/setter, emit both update:modelValue and input events for backward compatibility, maintain internal state when parent uses @input instead of v-model
- Modal components: Add modelValue prop and isModalVisible computed property for proper two-way binding with bootstrap-vue-next
Fix form validation event handling by changing @input to @change for select, radio, and checkbox elements. In Vue 3 with bootstrap-vue-next, these elements do not fire @input correctly on first selection.
Components updated: - FormFile.vue - ModalConfigureConnection.vue - ModalAddDestination.vue - ModalUser.vue - ModalSettings.vue - ModalAddRoleGroup.vue - FirmwareModalUpdateFirmware.vue - FactoryResetModal.vue - ModalGenerateCsr.vue - ModalUploadCertificate.vue - DumpsModalConfirmation.vue
Change-Id: Ib7376fdff8e9ab5e764f5fae80ac05a761b70312 Signed-off-by: Jason Westover <jwestover@nvidia.com>
show more ...
|
| 1675b9a9 | 15-Dec-2025 |
Hariharan Rangasamy <hariharanr@ami.com> |
Apply npm audit fix to reduce vulnerabilities
Ran `npm audit fix` to address non-breaking security issues. Reduced vulnerabilities from 112 to 109.
Before: 112 vulnerabilities (2 low, 75 moderate,
Apply npm audit fix to reduce vulnerabilities
Ran `npm audit fix` to address non-breaking security issues. Reduced vulnerabilities from 112 to 109.
Before: 112 vulnerabilities (2 low, 75 moderate, 30 high, 5 critical) After: 109 vulnerabilities (1 low, 74 moderate, 29 high, 5 critical)
Tested: Able to launch web UI and login success.
Change-Id: If4e43e2b03e660c483d09577f3eade4d9b5e293f Signed-off-by: Hariharan Rangasamy <hariharanr@ami.com>
show more ...
|
| 0c051ff6 | 03-Dec-2025 |
Hariharan Rangasamy <hariharanr@ami.com> |
Set HTTPS as the default protocol for dev server
If the user wants to set HTTP as the dev server protocol, they must set the variable DEV_HTTPS=false before starting the development server.
The def
Set HTTPS as the default protocol for dev server
If the user wants to set HTTP as the dev server protocol, they must set the variable DEV_HTTPS=false before starting the development server.
The default protocol was changed from HTTPS to HTTP in https://gerrit.openbmc.org/c/openbmc/webui-vue/+/85090.
Change-Id: Iac1d3aef62ad0cb8292b3358ff590d83e1a06629 Signed-off-by: Hariharan Rangasamy <hariharanr@ami.com>
show more ...
|
| dbfd2704 | 09-Dec-2025 |
Hariharan Rangasamy <hariharanr@ami.com> |
Update Axios version
Current axis version 1.6.0 has the following vulnerabilities Server-Side Request Forgery in axios - https://github.com/advisories/GHSA-8hc4-vh64-cxmj Axios is vulnerable to DoS
Update Axios version
Current axis version 1.6.0 has the following vulnerabilities Server-Side Request Forgery in axios - https://github.com/advisories/GHSA-8hc4-vh64-cxmj Axios is vulnerable to DoS attack through lack of data size check - https://github.com/advisories/GHSA-4hjh-wcwx-xvwj axios Requests Vulnerable To Possible SSRF and Credential Leakage via Absolute URL - https://github.com/advisories/GHSA-jr5f-v2jv-69x6
Updated axios to latest version 1.13.2 using npm i axios@^1.13.2
Testing: Web page loads and login works.
Change-Id: I7967bcb558668d2a1bffdb16511c344f2b6550b8 Signed-off-by: Hariharan Rangasamy <hariharanr@ami.com>
show more ...
|
| 280b920e | 31-Oct-2025 |
tiwari-nishant <tiwari.nishant@ibm.com> |
Fixed Loading bar overriding the App Header
- Made the position of loading bar relative to top header
- Loading bar now appears below the App header
Change-Id: I1b0ecca593a039c8354160b505e6aa299c4
Fixed Loading bar overriding the App Header
- Made the position of loading bar relative to top header
- Loading bar now appears below the App header
Change-Id: I1b0ecca593a039c8354160b505e6aa299c40e6f9 Signed-off-by: Nishant Tiwari <tiwari.nishant@ibm.com>
show more ...
|
| c25e0351 | 15-Nov-2025 |
Hariharan Rangasamy <hariharanr@ami.com> |
Document all the Vue App environmental settings
List all the vue app/env flags and add oneline description
Fixes https://github.com/openbmc/webui-vue/issues/75
Change-Id: I0133645297588784f6589b23
Document all the Vue App environmental settings
List all the vue app/env flags and add oneline description
Fixes https://github.com/openbmc/webui-vue/issues/75
Change-Id: I0133645297588784f6589b234ad8ac1e0814e782 Signed-off-by: Hariharan Rangasamy <hariharanr@ami.com>
show more ...
|
| 61bab8aa | 20-Nov-2025 |
Hariharan Rangasamy <hariharanr@ami.com> |
Prevent error when EfficiencyRatings is undefined
Use optional chaining on the element access and on the property access to prevent TypeError
Fixes: https://github.com/openbmc/webui-vue/issues/135
Prevent error when EfficiencyRatings is undefined
Use optional chaining on the element access and on the property access to prevent TypeError
Fixes: https://github.com/openbmc/webui-vue/issues/135
Change-Id: Ic58d4ef086e5d0a43a44b6388b3d1d450c79d224 Signed-off-by: Hariharan Rangasamy <hariharanr@ami.com>
show more ...
|
| 7a2b464a | 19-Nov-2025 |
Jae Hyun Yoo <jae.yoo@oss.qualcomm.com> |
Add forceUpdate option for uploadFirmwareMultipartHttpPush
Add the forceUpdate option for the uploadFirmwareMultipartHttpPush call so that ForceUpdate can be set through it.
Change-Id: I4d1f326963e
Add forceUpdate option for uploadFirmwareMultipartHttpPush
Add the forceUpdate option for the uploadFirmwareMultipartHttpPush call so that ForceUpdate can be set through it.
Change-Id: I4d1f326963e87f024037001c964ab72c90ccb8e1 Signed-off-by: Jae Hyun Yoo <jae.yoo@oss.qualcomm.com>
show more ...
|
| cfbd678d | 28-Apr-2025 |
Jae Hyun Yoo <jae.yoo@oss.qualcomm.com> |
Add applyTime option for uploadFirmwareMultipartHttpPush
Add the applyTime option for the uploadFirmwareMultipartHttpPush call and set its default value to ‘Immediate’.
Change-Id: I7e9a442ef0bd4487
Add applyTime option for uploadFirmwareMultipartHttpPush
Add the applyTime option for the uploadFirmwareMultipartHttpPush call and set its default value to ‘Immediate’.
Change-Id: I7e9a442ef0bd4487b67b921761b51b603a77d9ed Signed-off-by: Jae Hyun Yoo <jae.yoo@oss.qualcomm.com>
show more ...
|
| 75a0fc19 | 19-Nov-2025 |
Thu Nguyen <thu@os.amperecomputing.com> |
SOL: change `scrollback` default to 10000
The Host boot log usually has more than 1000 lines. Apply the default value 1000 for `scrollback` of xterm can cause missing the console messages. Change th
SOL: change `scrollback` default to 10000
The Host boot log usually has more than 1000 lines. Apply the default value 1000 for `scrollback` of xterm can cause missing the console messages. Change the `scrollback` of SOL to 10000.
Tested: 1. Reboot the host while opening the SOL in WebUI 2. The maximum of the number of the scroll back messages in SOL should be 10000.
Change-Id: I96b8e41bb18f2f9eaaf1b977dea1fb03370eda46 Signed-off-by: Thu Nguyen <thu@os.amperecomputing.com>
show more ...
|
| 757550f9 | 19-Nov-2025 |
Hariharan Rangasamy <hariharanr@ami.com> |
Fix typo in CSR form validation
correct typo in ModalGenerateCsr.vue to restore keyCurveId/keyBitLength requiredIf rules
Change-Id: Ied25a53c7b188956925f22fea90f47708055333f Signed-off-by: Harihara
Fix typo in CSR form validation
correct typo in ModalGenerateCsr.vue to restore keyCurveId/keyBitLength requiredIf rules
Change-Id: Ied25a53c7b188956925f22fea90f47708055333f Signed-off-by: Hariharan Rangasamy <hariharanr@ami.com>
show more ...
|
| d36ac8a8 | 03-Nov-2025 |
jason westover <jwestover@nvidia.com> |
Migrate to Bootstrap 5 and remove Vue compat plugin
Complete migration from Bootstrap 4 (bootstrap-vue) to Bootstrap 5 (bootstrap-vue-next) and remove the @vue/compat plugin to finalize the Vue 3 mi
Migrate to Bootstrap 5 and remove Vue compat plugin
Complete migration from Bootstrap 4 (bootstrap-vue) to Bootstrap 5 (bootstrap-vue-next) and remove the @vue/compat plugin to finalize the Vue 3 migration.
Bundle size impact: - Before (Bootstrap 4 + bootstrap-vue): 535 KiB gzipped - After (Bootstrap 5 + bootstrap-vue-next): 511 KiB gzipped - Reduction: 24 KiB (4.5% smaller)
Package updates: - Update bootstrap 4.6.2 -> 5.3.8 - Update bootstrap-vue 2.23.1 -> bootstrap-vue-next 0.40.8 - Remove @vue/compat plugin - Update vue 3.4.29 -> 3.5.24 and related packages - Add mitt 3.0.1 for global event bus - Add vue-demi 0.14.10 for library compatibility
Bootstrap 5 CSS updates: - Replace directional classes: ml/mr/pl/pr -> ms/me/ps/pe - Replace text-left/right -> text-start/end - Replace sr-only -> visually-hidden / visually-hidden-focusable - Update media breakpoint xs -> sm (Bootstrap 5 removed xs) - Update color functions: gray("700") -> $gray-700 - Add form-switch border-radius for curved toggles - Update alert, table, toast, form, and button styles
Bootstrap-Vue-Next API changes: - Use createBootstrap() for plugin registration - Update modal footer slots: #modal-footer -> #footer - Fix form select events: @change -> @update:model-value - Add v-model bindings to modals instead of manual show()/hide() - Update toast system with custom plugin wrapping useToast() - Register components and directives explicitly
Vue 3 specific updates: - Replace $root.$emit with mitt event bus (eventBus.js) - Update render function from h(App) to createApp(App) - Add emits option to components - Use h() instead of $createElement in mixins - Add Vue 3 compile-time feature flags with documentation - Update event listeners: $on/$off to eventBus methods - Add beforeUnmount cleanup for event listeners
New components and significant additions: - src/plugins/toast.js - Custom toast plugin wrapping useToast() for Options API compatibility - src/components/Global/ConfirmModal.vue - Global confirmation dialog shim to replace Bootstrap 4's removed bvModal.msgBoxConfirm - src/eventBus.js - mitt-based event bus with Vue 2-compatible API - Navigation state preservation on page refresh implemented
Critical fixes: - Add global API interceptor to strip Vue reactivity from payloads - Preserve binary data (File, Blob, FormData) in API requests - Fix Generate CSR modal v-model binding for proper open/close - Remove debug logging and fix jest configuration - Fix responsive text visibility in AppHeader - Update BVTableSelectableMixin for proper row selection - Fix BVToastMixin VNode rendering for Vue 3
Vue 3 modal fixes (lazy-loaded components): - Add v-model support to network modals (ModalIpv4, ModalIpv6, ModalDns, ModalHostname, ModalMacAddress, ModalDefaultGateway) by adding modelValue prop, watcher on modelValue that triggers show(), and update:modelValue emit in resetForm - Remove lazy loading from TableIpv4, TableIpv6, TableDns to ensure modal component refs are available when v-model triggers - Fix modal title accessibility by adding title prop to modals (ModalAddDestination, ModalUser, ModalAddRoleGroup, etc.)
i18n fixes (computed properties): - Fix computed properties using i18n translations in ModalAddRoleGroup, ModalUser, and ModalUploadCertificate - Move useI18n() call from data() to setup() and return i18n object - Use i18n.t() instead of $t in computed properties and templates - Prevents "this.$t is not a function" and "_ctx.$t is not a function" errors in Vue 3
Toast notification fixes: - Fix toast progress bar visibility by setting progressProps to undefined (documented way to opt-out) instead of false - Change modelValue prop to interval for auto-dismiss timing - Remove temporary CSS display:none hack from _toasts.scss
Network settings fixes: - Fix checkbox @change event sending Vue reactive proxy object instead of boolean by casting with !! operator in changeDomainNameState and related methods in NetworkGlobalSettings.vue - Ensures API receives plain boolean values in PATCH requests
Navigation fixes: - Fix nav-link styling for navigation items without children by replacing b-nav-item with router-link in AppNavigation.vue - Prevents blue font color from .nav-link CSS class
Configuration updates: - Remove vue-compat webpack configuration - Add Vue 3 feature flags (__VUE_OPTIONS_API__, etc.) - Add .cursor to .gitignore
Accessibility improvements: - Add autocomplete attributes to password and credential inputs - Add modal title props for screen reader support
Build completes successfully and UI behavior matches pre-migration.
Extracted features (to be submitted in follow-up PRs): The following features were removed from this migration PR to keep it focused on the Bootstrap 5 upgrade. They will be submitted separately: 1. UnresponsiveModal - Server connectivity watchdog with auto-retry 2. Auth token persistence - sessionStorage support for X-Auth-Token 3. Hardware store error handling - try/catch, dynamic discovery 4. Login page connecting indicator - Backend polling with spinner 5. Test updates - Jest setup and snapshot updates for Bootstrap-Vue-Next 6. Documentation updates - Vue 3 and Vue I18n v9+ API documentation 7. Enhanced ConfirmModal - Feature-rich confirmation dialog with custom actions
Change-Id: Ib76a58f324b3c926cf536e6e4626e4271639de38 Signed-off-by: Jason Westover <jwestover@nvidia.com>
show more ...
|
| 8e38779a | 10-Nov-2025 |
Hariharan Rangasamy <hariharanr@ami.com> |
Fix warning shown when running npm run serve
(node:2671539) [DEP_WEBPACK_DEV_SERVER_HTTPS] DeprecationWarning: 'https' option is deprecated. Please use the 'server' option. (Use `node --trace-deprec
Fix warning shown when running npm run serve
(node:2671539) [DEP_WEBPACK_DEV_SERVER_HTTPS] DeprecationWarning: 'https' option is deprecated. Please use the 'server' option. (Use `node --trace-deprecation ...` to show where the warning was created)
Added a new environment flag called DEV_HTTPS. Set it to true to run the app with HTTPS (useful for testing secure-only features or using a signed certificate) Ref: https://webpack.js.org/configuration/dev-server/#devserverserver
Change-Id: I31d27b04488923be58514499234286fa89b4d03b Signed-off-by: Hariharan Rangasamy <hariharanr@ami.com>
show more ...
|
| c5d60f52 | 31-Oct-2025 |
Hariharan Rangasamy <hariharanr@ami.com> |
Fixed linter warning messages
Warnings: src/components/AppHeader/AppHeader.vue 235:18 warning The "refresh" event has been triggered but not declared on `emits` option vue/require-explicit-emits
Fixed linter warning messages
Warnings: src/components/AppHeader/AppHeader.vue 235:18 warning The "refresh" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/components/Global/FormFile.vue 11:23 warning The "input" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/components/Global/Search.vue 64:18 warning The "change-search" event has been triggered but not declared on `emits` option vue/require-explicit-emits 68:18 warning The "clear-search" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/components/Global/TableDateFilter.vue 165:18 warning The "change" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/components/Global/TableFilter.vue 107:18 warning The "filter-change" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/components/Global/TableRowAction.vue 47:21 warning The "click-table-action" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/components/Global/TableToolbar.vue 16:27 warning The "batch-action" event has been triggered but not declared on `emits` option vue/require-explicit-emits 23:27 warning The "clear-selected" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/Logs/Dumps/DumpsModalConfirmation.vue 85:18 warning The "ok" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/Operations/FactoryReset/FactoryResetModal.vue 122:18 warning The "okConfirm" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/Operations/Firmware/FirmwareFormUpdate.vue 6:9 warning `<template>` require directive vue/no-lone-template
src/views/Operations/Firmware/FirmwareModalSwitchToRunning.vue 7:16 warning The "ok" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/Operations/Firmware/FirmwareModalUpdateFirmware.vue 7:16 warning The "ok" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/Operations/VirtualMedia/ModalConfigureConnection.vue 127:18 warning The "ok" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/SecurityAndAccess/Certificates/ModalUploadCertificate.vue 147:18 warning The "ok" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/SecurityAndAccess/Ldap/ModalAddRoleGroup.vue 147:18 warning The "ok" event has been triggered but not declared on `emits` option vue/require-explicit-emits 163:18 warning The "hidden" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/SecurityAndAccess/UserManagement/ModalSettings.vue 200:18 warning The "ok" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/SecurityAndAccess/UserManagement/ModalUser.vue 370:18 warning The "ok" event has been triggered but not declared on `emits` option vue/require-explicit-emits 386:18 warning The "hidden" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/Settings/DateTime/DateTime.vue 328:18 warning The "change" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/Settings/Network/ModalDefaultGateway.vue 103:18 warning The "ok" event has been triggered but not declared on `emits` option vue/require-explicit-emits 114:18 warning The "hidden" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/Settings/Network/ModalDns.vue 81:18 warning The "ok" event has been triggered but not declared on `emits` option vue/require-explicit-emits 92:18 warning The "hidden" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/Settings/Network/ModalHostname.vue 99:18 warning The "ok" event has been triggered but not declared on `emits` option vue/require-explicit-emits 110:18 warning The "hidden" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/Settings/Network/ModalIpv4.vue 148:18 warning The "ok" event has been triggered but not declared on `emits` option vue/require-explicit-emits 165:18 warning The "hidden" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/Settings/Network/ModalIpv6.vue 120:18 warning The "ok" event has been triggered but not declared on `emits` option vue/require-explicit-emits 135:18 warning The "hidden" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/Settings/Network/ModalMacAddress.vue 98:18 warning The "ok" event has been triggered but not declared on `emits` option vue/require-explicit-emits 109:18 warning The "hidden" event has been triggered but not declared on `emits` option vue/require-explicit-emits
src/views/Settings/SnmpAlerts/ModalAddDestination.vue 124:18 warning The "ok" event has been triggered but not declared on `emits` option vue/require-explicit-emits 139:18 warning The "hidden" event has been triggered but not declared on `emits` option vue/require-explicit-emits
Change-Id: I66fb82679cc12003ad435c5c73bb67c2d70b3658 Signed-off-by: Hariharan Rangasamy <hariharanr@ami.com>
show more ...
|
| e1420032 | 01-Sep-2025 |
tiwari-nishant <tiwari.nishant0077@gmail.com> |
Dumps Validation Fix
- Fixed Vuelidate returning validations always as false
- Activated Dumps Modal Validations only when its open
Change-Id: I87e61f3033f6e4f7ab0cd19859638d686bdc9775 Signed-off-
Dumps Validation Fix
- Fixed Vuelidate returning validations always as false
- Activated Dumps Modal Validations only when its open
Change-Id: I87e61f3033f6e4f7ab0cd19859638d686bdc9775 Signed-off-by: Nishant Tiwari <tiwari.nishant@ibm.com>
show more ...
|
| 99fe228e | 20-Aug-2025 |
Aravinth S <aravinths@ami.com> |
Add privilege check to power operation button
Disables power operation buttons for users with "Read-only" privileges. This change ensures that only "Operator" and administrative users can perform po
Add privilege check to power operation button
Disables power operation buttons for users with "Read-only" privileges. This change ensures that only "Operator" and administrative users can perform power operations, preventing unauthorized actions and enhancing system security.
Change-Id: I515ede092cef3c82a110d9534d9f8d3d6afc3135 Signed-off-by: Aravinth S <aravinths@ami.com>
show more ...
|
| 399ade72 | 28-Aug-2025 |
Gunnar Mills <gmills@us.ibm.com> |
Force package-lock to regenerate
1. Take latest webui-vue and openbmc 2. Point at my local webui-vue repo (devtool modify -n webui-vue) 3. Delete package-lock.json 4. Build p10bmc
This is a fresh
Force package-lock to regenerate
1. Take latest webui-vue and openbmc 2. Point at my local webui-vue repo (devtool modify -n webui-vue) 3. Delete package-lock.json 4. Build p10bmc
This is a fresh build of package-lock.json and picks up many new versions. openbmc/openbmc is using nodejs_22.16.0. Bumping nodejs also introduces some changes.
Discussion at the 8/28/25 call, we will continue to use the nodejs version from openbmc/openbmc which is picked up in meta-openembedded subtree updates.
Tested: p10bmc builds.
Change-Id: If110a2e86e37b46796f2f42773ed53111556e72c Signed-off-by: Gunnar Mills <gmills@us.ibm.com>
show more ...
|
| e81384f1 | 28-Aug-2025 |
Gunnar Mills <gmills@us.ibm.com> |
Update package-lock.json with i18n
Cherry-pick https://gerrit.openbmc.org/c/openbmc/webui-vue/+/82876, using latest openbmc/openbmc, point at my local webui-vue repo (devtool modify -n webui-vue <l
Update package-lock.json with i18n
Cherry-pick https://gerrit.openbmc.org/c/openbmc/webui-vue/+/82876, using latest openbmc/openbmc, point at my local webui-vue repo (devtool modify -n webui-vue <local repo>) and build p10bmc. Looks like Yocto is using nodejs_22.16.0.
Tested: p10bmc builds.
Change-Id: I903bc7d485e62142c97506b162507f9a1d35a58f Signed-off-by: Gunnar Mills <gmills@us.ibm.com>
show more ...
|