Enable Vue 3 migration rollout for DevOps adoption
What does this MR do and why?
Enables the Vue 3 migration rollout for the DevOps adoption pages: the group-level DevOps adoption page (ee/app/assets/javascripts/pages/groups/analytics/devops_adoption) and the admin DevOps Report page (ee/app/assets/javascripts/pages/admin/dev_ops_report/show). Both entrypoints mount the same ee/analytics/devops_reports/devops_adoption app.
This uses the vue3_migration.yml mechanism to opt the pages into Vue 3 behind a feature flag. When vue3_migrate_devops_adoption is enabled, Rails serves the Vue 3 (@vue/compat) chunks; otherwise the pages continue to run on Vue 2.
What changed
- Added
config/feature_flags/beta/vue3_migrate_devops_adoption.yml - Added
ee/app/assets/javascripts/pages/groups/analytics/devops_adoption/vue3_migration.ymlwithstatus: rollout - Added
ee/app/assets/javascripts/pages/admin/dev_ops_report/show/vue3_migration.ymlwithstatus: rollout
No JavaScript or controller changes are needed.
Scope note: the admin DevOps Report page also loads the CE bundle app/assets/javascripts/pages/admin/dev_ops_report/index.js (DevOps Score). That bundle intentionally stays on Vue 2 for now: compat hybrid mode supports Vue 2 and Vue 3 apps on the same page, so no vue3_migration.yml is added for the CE bundle.
How to verify
- Enable the feature flag:
Feature.enable(:vue3_migrate_devops_adoption) - Navigate to a group's DevOps adoption page (Analyze > DevOps adoption,
/groups/<group>/-/analytics/devops_adoption) - Open the browser console and confirm the message:
[gitlab] [V] Using Vue.js 3 - Verify the Dev, Sec, and Ops adoption tables render, and add and remove a sub-group or project from the table
- Navigate to the admin DevOps Report page (Admin area > Analytics > DevOps Reports,
/admin/dev_ops_reports) and confirm the same console message - Verify the Adoption tab renders alongside the DevOps Score tab
Existing test coverage for the DevOps adoption pages
For visibility while this rollout is in flight: what is and is not covered for these pages today, independent of the Vue 3 mechanism.
Frontend unit tests (Jest), ee/spec/frontend/analytics/devops_reports/devops_adoption/
components/devops_adoption_app_spec.jscovers the top-level app: fetching group data via GraphQL (fetch once, error handling with Sentry, refetching on search), enabling a namespace via mutation (variables, cache updates, error handling), table data polling, and the tab layout (Overview tab, per-section adoption tabs, the add dropdown as the last tab, tab click tracking, and the DevOps Score tab shown at admin level but not at group level).components/devops_adoption_section_spec.jscovers a report section: loading state, table and header with enabled namespace data, empty state, header timestamp, and the add groups dropdown.components/devops_adoption_table_spec.jscovers the main table: headings and helper tooltips, the name cell (group link, "This group" badge, pending state), per-column cell flags, the actions cell and delete modal integration, and sorting with local storage persistence.components/devops_adoption_overview_spec.jscovers the overview container: header, overview cards and data passthrough, overview table, chart visibility at group level, card title click events, and loading state.components/devops_adoption_overview_table_spec.jscovers the overview table: headings, the name cell (including relative URLs), per-column progress bars, delete modal events, and sort persistence.components/devops_adoption_overview_card_spec.jscovers the overview card: icon, title, progress bar, description, and meta rows.components/devops_adoption_overview_chart_spec.jscovers the overview chart: rendering, computed series data, loading state, and tooltip content (snapshot).components/devops_adoption_add_dropdown_spec.jscovers the add/enable dropdown: disabled state and tooltip, group versus instance variants, enabling and disabling namespaces (including multi-select), Sentry error handling, loading state, and search.components/devops_adoption_delete_modal_spec.jscovers the delete modal: confirmation message, submit states, successful removal (mutation variables, emitted events, modal close), and Sentry error handling.components/devops_adoption_empty_state_spec.jsandcomponents/devops_adoption_table_cell_flag_spec.jscover the empty state and the enabled/disabled cell flag (snapshots).graphql/resolvers_spec.jscovers the client-side GraphQL resolvers for fetching groups and subgroups.utils/cache_updates_spec.jsandutils/helpers_spec.jscover the Apollo cache updates for adding and removing enabled namespaces, plusshouldPollTableData,getAdoptedCountsByCols, andgetGroupAdoptionPath.
For the CE DevOps Score tab (which stays on Vue 2), spec/frontend/analytics/devops_reports/components/service_ping_disabled_spec.js covers the Service Ping disabled empty state.
scripts/frontend/quarantined_vue3_specs.txt is currently empty, so all of these suites run and must pass in both the jest (Vue 2) and jest vue3 (@vue/compat) CI jobs.
Backend
ee/spec/requests/groups/analytics/devops_adoption_controller_spec.rb(GET show) covers authorization (403 withoutview_group_devops_adoption, access for auditors and group maintainers), license availability, rendering, and usage event tracking.ee/spec/controllers/admin/dev_ops_report_controller_spec.rbcoversshow_adoption?(license and usage ping variants) and#showwith DevOps adoption available versus unavailable.spec/controllers/admin/dev_ops_report_controller_spec.rb(CE) coversshow_adoption?being false andGET #show(success for admins, 404 for regular users).- GraphQL specs cover the page's data layer:
ee/spec/requests/api/graphql/analytics/devops_adoption/enabled_namespaces_spec.rb(the table data query),ee/spec/graphql/resolvers/analytics/devops_adoption/enabled_namespaces_resolver_spec.rb(authorization at instance and group level), andee/spec/requests/api/graphql/mutations/analytics/devops_adoption/enabled_namespaces/{enable,bulk_enable,disable}_spec.rb(the mutations behind the add dropdown and delete modal).
Feature specs (Capybara)
ee/spec/features/admin/admin_dev_ops_reports_spec.rb(:js) covers the admin page with an Ultimate license: the tabbed layout, defaulting to the Overview tab, tab content and?tab=URL behavior, the DevOps Score tab states (usage ping disabled, no data, with data), and the fallback without a license.spec/features/admin/admin_dev_ops_reports_spec.rb(CE,:js) covers the DevOps Score empty states and the score app when data exists.ee/spec/features/groups/navbar_spec.rbasserts the "DevOps adoption" nav item appears under Analyze when licensed (navigation only).
Not covered
- No feature/system spec exercises the group DevOps adoption page itself beyond the nav item check.
- No QA/E2E spec covers these pages (
qa/qa/ee/page/group/sub_menus/analyze.rbhas ago_to_devops_adoptionnavigation helper, but no spec uses it).
References
- Resolves #607824 (closed)
- Rollout issue: #608140
- Parent epic: gitlab-org#23041