GitLab

This epic is created to track the current state of migrating the codebase from Vue 2 to Vue 3. We aim to outline here the list of potential blockers and track the ongoing efforts. Please keep in mind this epic is planned to be very general/shallow as we plan to be more detailed in the sub-epics / linked issues We are proceeding with migrations in each of our entrypoints at https://docs.gitlab.com/development/fe_guide/vue3_migration/#migrate-to-vue-3 --- Hello! :wave: ### If you're just landing here and you're the DRI for a Vue 3 migration on your team. Welcome! This is what we need from you: 1. Find the entrypoint(s) you and your team maintain. Most entrypoints are defined in `~/pages/**/index.js` and `ee/pages/**/index.js`. 2. List the entrypoints you're going to migrate in an issue. You can use https://gitlab.com/groups/gitlab-org/-/work_items/23084 as a reference. * Label your issue with ~&quot;vue3-migration&quot; 3. Get familiar with https://docs.gitlab.com/development/fe_guide/vue3_migration/#migrate-to-vue-3 4. Decide which `vue3_migrate_*` feature flags you need. Consider: * In general, one flag should cover entrypoints that import related Vue code. * We strongly suggest user-actor feature flags. * Think about how rolling out many flags will impact your workflow (fewer feature flags might be best). 5. Migrate your first feature flag and test your entrypoints. * Feature specs already run with the feature flag enabled, so they're part of your safety net. * Some team members are proposing automation steps using agents for fuzzy testing in the browser. Feel free to use those tools. * If you hit a problem that could impact other teams, raise it in this channel and your MR. * Label your MR with ~&quot;vue3-migration&quot; * Assign the MR to @ntepluhina, @xanf, or @mrincon * Ultimately, you need to ensure your apps work. :) 6. Roll out your feature flag to gitlab.com, enabled for all users (100% or simply `true`) AND `default_enabled: false` * WHY? We want to wait until all our applications are migrated before we remove the feature flags to ensure full compatibility. **Note:** We are still working a good migration experience, let me know if there is anything we can improve and/or document :thumbsup: ### Which entrypoints? Finding your entrypoints can be difficult, below we have compiled a list of entrypoints by team, the list is being refined as some data is still missing. **Note :** :exclamation: Don't update this list yourself, it is automatically generated based on a script at (https://gitlab.com/gitlab-org/gitlab/-/merge_requests/247873) --- Vue 3 page entrypoint migration — EE build Latest commit: 2026-08-14T07:58:39+02:00 Ownership — inferred from the controller's feature_category ### AI Engineering: agent_foundations 3 entrypoints | group | fileName | size (components) | status | featureFlag | |-------|--------------------------------------------------|-------------------|------------|------------------------------------| | — | `ee/pages/groups/duo_agents_platform/index.js` | L (127) | 🟢 rollout | `vue3_migrate_duo_agents_platform` | | — | `ee/pages/projects/duo_agents_platform/index.js` | L (127) | 🟢 rollout | `vue3_migrate_duo_agents_platform` | | — | `ee/pages/explore/ai_catalog/index.js` | L (88) | 🟢 rollout | `vue3_migrate_ai_catalog` | ### AI Engineering: ai_coding 17 entrypoints | group | fileName | size (components) | status | featureFlag | |-------------|-----------------------------------------------------------------------------------------------------------------------|-------------------|---------|-------------| | code_review | `~/pages/projects/merge_requests/show/index.js`<br>`ee/pages/projects/merge_requests/show/index.js` | XL (784) | ⚪ vue2 | | | code_review | `~/pages/projects/merge_requests/diffs/index.js` | XL (783) | ⚪ vue2 | | | code_review | `~/pages/projects/merge_requests/reports/index.js` | XL (783) | ⚪ vue2 | | | code_review | `~/pages/projects/merge_requests/creations/new/index.js`<br>`ee/pages/projects/merge_requests/creations/new/index.js` | XL (530) | ⚪ vue2 | | | code_review | `~/pages/groups/merge_requests/index.js` | XL (438) | ⚪ vue2 | | | code_review | `~/pages/projects/merge_requests/index/index.js` | XL (438) | ⚪ vue2 | | | code_review | `~/pages/projects/merge_requests/edit/index.js`<br>`ee/pages/projects/merge_requests/edit/index.js` | XL (429) | ⚪ vue2 | | | code_review | `~/pages/projects/merge_requests/conflicts/index.js`<br>`ee/pages/projects/merge_requests/conflicts/index.js` | XL (409) | ⚪ vue2 | | | code_review | `~/pages/projects/merge_requests/creations/index.js` | XL (405) | ⚪ vue2 | | | code_review | `ee/pages/groups/comment_templates/index.js` | L (139) | ⚪ vue2 | | | code_review | `ee/pages/projects/comment_templates/index.js` | L (139) | ⚪ vue2 | | | code_review | `~/pages/projects/settings/merge_requests/index.js`<br>`ee/pages/projects/settings/merge_requests/index.js` | L (50) | ⚪ vue2 | | | code_review | `ee/pages/projects/merge_requests/creations/diffs/index.js` | M (29) | ⚪ vue2 | | | code_review | `~/pages/dashboard/merge_requests/index.js` | M (24) | ⚪ vue2 | | | code_review | `~/pages/groups/custom_emoji/index.js` | S (7) | ⚪ vue2 | | | code_review | `~/pages/dashboard/search_merge_requests/index.js` | S (2) | ⚪ vue2 | | | — | `~/pages/projects/commit/rapid_diffs/index.js` | XL (222) | ⚪ vue2 | | ### AI Engineering: ai_platform 5 entrypoints | group | fileName | size (components) | status | featureFlag | |-------|----------------------------------------------------------------|-------------------|------------|-----------------------------------------| | — | `ee/pages/admin/gitlab_duo/configuration/index.js` | M (45) | ⚪ vue2 | | | — | `ee/pages/admin/gitlab_duo/show/index.js` | M (39) | ⚪ vue2 | | | — | `ee/pages/admin/gitlab_duo/model_selection/index.js` | M (29) | 🟢 rollout | `vue3_migrate_instance_model_selection` | | — | `ee/pages/groups/settings/gitlab_duo/model_selection/index.js` | M (16) | ⚪ vue2 | | | — | `ee/pages/admin/ai/amazon_q_settings/index.js` | S (7) | ⚪ vue2 | | ### Core DevOps: create 75 entrypoints | group | fileName | size (components) | status | featureFlag | |--------------------|---------------------------------------------------------------------------------------------------------------|-------------------|------------|--------------------------------------| | import | `~/pages/admin/integrations/edit/index.js` | L (54) | ⚪ vue2 | | | import | `~/pages/groups/settings/integrations/edit/index.js` | L (54) | ⚪ vue2 | | | import | `~/pages/projects/settings/integrations/edit/index.js` | L (54) | ⚪ vue2 | | | import | `~/pages/projects/hooks/index.js` | M (20) | ⚪ vue2 | | | import | `ee/pages/groups/hooks/index.js` | M (20) | ⚪ vue2 | | | import | `~/pages/admin/integrations/overrides/index.js` | M (18) | ⚪ vue2 | | | import | `~/pages/import/manifest/new/index.js` | M (18) | ⚪ vue2 | | | import | `~/pages/admin/hooks/index.js` | M (17) | ⚪ vue2 | | | import | `~/pages/import/gitlab_projects/new/index.js` | M (16) | ⚪ vue2 | | | import | `~/pages/import/bulk_imports/status/index.js` | M (14) | ⚪ vue2 | | | import | `~/pages/import/bitbucket_server/status/index.js` | M (10) | ⚪ vue2 | | | import | `~/pages/import/github/status/index.js` | M (10) | ⚪ vue2 | | | import | `~/pages/import/bitbucket/status/index.js` | S (9) | ⚪ vue2 | | | import | `~/pages/import/bulk_imports/history/index.js` | S (9) | ⚪ vue2 | | | import | `~/pages/import/fogbugz/status/index.js` | S (8) | ⚪ vue2 | | | import | `~/pages/import/gitea/status/index.js` | S (8) | ⚪ vue2 | | | import | `~/pages/import/history/index.js` | S (8) | ⚪ vue2 | | | import | `~/pages/import/manifest/status/index.js` | S (8) | ⚪ vue2 | | | import | `~/pages/import/offline/export/index.js` | S (8) | ⚪ vue2 | | | import | `~/pages/import/bulk_imports/failures/index.js` | S (7) | ⚪ vue2 | | | import | `~/pages/import/github/details/index.js` | S (7) | ⚪ vue2 | | | import | `~/pages/import/url/new/index.js` | S (7) | ⚪ vue2 | | | import | `~/pages/admin/application_settings/integrations/index.js` | S (4) | ⚪ vue2 | | | import | `~/pages/groups/settings/integrations/index.js` | S (4) | ⚪ vue2 | | | import | `~/pages/projects/settings/integrations/index/index.js` | S (4) | ⚪ vue2 | | | import | `~/pages/profiles/slacks/index.js` | S (3) | ⚪ vue2 | | | import | `~/pages/projects/imports/new/index.js` | S (3) | ⚪ vue2 | | | import | `~/pages/groups/import_histories/show/index.js` | S (2) | ⚪ vue2 | | | import | `~/pages/import/fogbugz/new_user_map/index.js` | S (2) | ⚪ vue2 | | | import | `~/pages/import/bitbucket_server/new/index.js` | S (1) | ⚪ vue2 | | | import | `~/pages/import/fogbugz/new/index.js` | S (1) | ⚪ vue2 | | | import | `~/pages/import/gitea/new/index.js` | S (1) | ⚪ vue2 | | | import | `~/pages/import/github/new/index.js` | S (1) | ⚪ vue2 | | | import | `~/pages/import/offline/export/history/index.js` | S (1) | ⚪ vue2 | | | import | `~/pages/import/offline/import/index.js` | S (1) | ⚪ vue2 | | | import | `~/pages/import/offline/index.js` | S (1) | ⚪ vue2 | | | import | `~/pages/projects/imports/show/index.js` | S (0) | ⚪ vue2 | | | remote_development | `ee/pages/remote_development/index.js` | M (32) | ⚪ vue2 | | | remote_development | `ee/pages/groups/settings/remote_development/workspaces/show/index.js` | M (11) | ⚪ vue2 | | | source_code | `~/pages/projects/blob/show/index.js`<br>`ee/pages/projects/blob/show/index.js` | XL (240) | 🟢 rollout | `vue3_migrate_repository` | | source_code | `~/pages/projects/tree/show/index.js` | XL (239) | 🟢 rollout | `vue3_migrate_repository` | | source_code | `~/pages/projects/snippets/show/index.js` | L (159) | ⚪ vue2 | | | source_code | `~/pages/snippets/show/index.js` | L (153) | ⚪ vue2 | | | source_code | `~/pages/projects/snippets/edit/index.js` | L (141) | ⚪ vue2 | | | source_code | `~/pages/projects/snippets/new/index.js` | L (141) | ⚪ vue2 | | | source_code | `~/pages/snippets/edit/index.js` | L (141) | ⚪ vue2 | | | source_code | `~/pages/snippets/new/index.js` | L (141) | ⚪ vue2 | | | source_code | `~/pages/projects/commits/show/index.js` | L (129) | ⚪ vue2 | | | source_code | `~/pages/projects/commit/show/index.js` | L (122) | ⚪ vue2 | | | source_code | `~/pages/projects/blob/edit/index.js` | L (105) | ⚪ vue2 | | | source_code | `~/pages/projects/blob/new/index.js` | L (105) | ⚪ vue2 | | | source_code | `~/pages/projects/index.js`<br>`ee/pages/projects/index.js` | L (103) | ⚪ vue2 | | | source_code | `~/pages/projects/network/show/index.js` | L (101) | ⚪ vue2 | | | source_code | `~/pages/projects/find_file/show/index.js` | L (100) | ⚪ vue2 | | | source_code | `~/pages/projects/tags/new/index.js` | L (100) | ⚪ vue2 | | | source_code | `~/pages/projects/blame/show/index.js`<br>`ee/pages/projects/blame/show/index.js` | L (99) | ⚪ vue2 | | | source_code | `~/pages/projects/blame/streaming/index.js` | L (98) | ⚪ vue2 | | | source_code | `~/pages/projects/commit/pipelines/index.js` | M (47) | ⚪ vue2 | | | source_code | `~/pages/projects/settings/branch_rules/index.js` | M (47) | ⚪ vue2 | | | source_code | `~/pages/projects/settings/repository/show/index.js`<br>`ee/pages/projects/settings/repository/show/index.js` | M (46) | ⚪ vue2 | | | source_code | `~/pages/projects/compare/show/index.js` | M (37) | ⚪ vue2 | | | source_code | `~/pages/projects/branches/index/index.js` | M (24) | ⚪ vue2 | | | source_code | `~/pages/projects/tags/index/index.js` | M (20) | ⚪ vue2 | | | source_code | `~/pages/projects/tags/show/index.js` | M (18) | ⚪ vue2 | | | source_code | `~/pages/projects/compare/index/index.js` | S (8) | ⚪ vue2 | | | source_code | `~/pages/projects/graphs/show/index.js` | S (6) | 🟢 rollout | `vue3_migrate_contributor_analytics` | | source_code | `~/pages/projects/forks/new/index.js` | S (5) | ⚪ vue2 | | | source_code | `~/pages/projects/graphs/charts/index.js` | S (5) | 🟢 rollout | `vue3_migrate_repository_analytics` | | source_code | `ee/pages/admin/application_settings/templates/index.js` | S (4) | ⚪ vue2 | | | source_code | `~/pages/projects/branches/new/index.js` | S (3) | ⚪ vue2 | | | source_code | `~/pages/admin/application_settings/repository/index.js` | S (1) | ⚪ vue2 | | | source_code | `ee/pages/admin/push_rules/index.js` | S (1) | ⚪ vue2 | | | source_code | `ee/pages/projects/path_locks/index.js` | S (0) | ⚪ vue2 | | | — | `~/pages/ide/index/index.js` | S (3) | ⚪ vue2 | | | — | `~/pages/ide/oauth_redirect/index.js` | S (1) | ⚪ vue2 | | ### Core DevOps: deploy 31 entrypoints | group | fileName | size (components) | status | featureFlag | |--------------|---------------------------------------------------------------------------------------------------------------------------------------------|-------------------|---------|-------------| | environments | `~/pages/projects/environments/k8s/index.js` | L (149) | ⚪ vue2 | | | environments | `~/pages/projects/environments/show/index.js`<br>`ee/pages/projects/environments/show/index.js` | L (149) | ⚪ vue2 | | | environments | `~/pages/projects/releases/edit/index.js` | L (146) | ⚪ vue2 | | | environments | `~/pages/projects/releases/new/index.js` | L (146) | ⚪ vue2 | | | environments | `~/pages/projects/environments/edit/index.js` | L (137) | ⚪ vue2 | | | environments | `~/pages/projects/environments/new/index.js` | L (137) | ⚪ vue2 | | | environments | `~/pages/projects/releases/index/index.js` | L (120) | ⚪ vue2 | | | environments | `~/pages/projects/releases/show/index.js` | L (117) | ⚪ vue2 | | | environments | `~/pages/projects/deployments/show/index.js` | L (113) | ⚪ vue2 | | | environments | `~/pages/projects/settings/repository/create_deploy_token/index.js`<br>`ee/pages/projects/settings/repository/create_deploy_token/index.js` | M (46) | ⚪ vue2 | | | environments | `ee/pages/organizations/continuous_deployment/show/index.js` | M (39) | ⚪ vue2 | | | environments | `~/pages/projects/environments/index/index.js` | M (38) | ⚪ vue2 | | | environments | `~/pages/projects/feature_flags/edit/index.js` | M (33) | ⚪ vue2 | | | environments | `~/pages/projects/feature_flags/new/index.js` | M (32) | ⚪ vue2 | | | environments | `~/pages/projects/environments/folder/index.js` | M (31) | ⚪ vue2 | | | environments | `ee/pages/operations/environments/index.js` | M (21) | ⚪ vue2 | | | environments | `ee/pages/operations/index/index.js` | M (20) | ⚪ vue2 | | | environments | `~/pages/projects/feature_flags/index/index.js` | M (12) | ⚪ vue2 | | | environments | `~/pages/groups/settings/repository/show/index.js`<br>`ee/pages/groups/settings/repository/show/index.js` | S (5) | ⚪ vue2 | | | environments | `~/pages/projects/feature_flags_user_lists/index/index.js` | S (5) | ⚪ vue2 | | | environments | `~/pages/admin/deploy_keys/index/index.js` | S (4) | ⚪ vue2 | | | environments | `~/pages/projects/feature_flags_user_lists/edit/index.js` | S (3) | ⚪ vue2 | | | environments | `~/pages/projects/feature_flags_user_lists/new/index.js` | S (3) | ⚪ vue2 | | | environments | `~/pages/projects/feature_flags_user_lists/show/index.js` | S (3) | ⚪ vue2 | | | environments | `~/pages/groups/settings/repository/create_deploy_token/index.js` | S (1) | ⚪ vue2 | | | environments | `~/pages/admin/deploy_keys/new/index.js` | S (0) | ⚪ vue2 | | | environments | `~/pages/projects/environments/terminal/index.js` | S (0) | ⚪ vue2 | | | — | `~/pages/projects/google_cloud/configuration/index.js` | S (5) | ⚪ vue2 | | | — | `~/pages/projects/google_cloud/deployments/index.js` | S (3) | ⚪ vue2 | | | — | `~/pages/projects/google_cloud/gcp_regions/index.js` | S (1) | ⚪ vue2 | | | — | `~/pages/projects/google_cloud/service_accounts/index.js` | S (1) | ⚪ vue2 | | ### Core DevOps: package 25 entrypoints | group | fileName | size (components) | status | featureFlag | |--------------------|---------------------------------------------------------------------------------------------------|-------------------|---------|-------------| | container_registry | `~/pages/groups/registry/repositories/index.js` | M (48) | ⚪ vue2 | | | container_registry | `~/pages/projects/registry/repositories/index.js` | M (48) | ⚪ vue2 | | | container_registry | `ee/pages/groups/virtual_registries/container/index.js` | M (38) | ⚪ vue2 | | | container_registry | `ee/pages/organizations/artifact_registry_repositories/index/index.js` | M (37) | ⚪ vue2 | | | container_registry | `~/pages/groups/harbor/repositories/index.js` | M (32) | ⚪ vue2 | | | container_registry | `~/pages/projects/harbor/repositories/index.js` | M (32) | ⚪ vue2 | | | container_registry | `ee/pages/groups/virtual_registries/maven/registries/show/index.js` | M (16) | ⚪ vue2 | | | container_registry | `ee/pages/projects/google_cloud/artifact_registry/index.js` | M (16) | ⚪ vue2 | | | container_registry | `ee/pages/groups/virtual_registries/maven/registries_and_upstreams/index.js` | M (12) | ⚪ vue2 | | | container_registry | `~/pages/groups/dependency_proxies/index.js` | M (11) | ⚪ vue2 | | | container_registry | `ee/pages/groups/virtual_registries/maven/upstreams/show/index.js` | S (9) | ⚪ vue2 | | | container_registry | `ee/pages/groups/virtual_registries/maven/upstreams/edit/index.js` | S (7) | ⚪ vue2 | | | container_registry | `ee/pages/organizations/artifact_registry/index/index.js` | S (6) | ⚪ vue2 | | | container_registry | `ee/pages/organizations/settings/artifact_registry/show/index.js` | S (6) | ⚪ vue2 | | | container_registry | `ee/pages/groups/virtual_registries/index.js` | S (4) | ⚪ vue2 | | | container_registry | `ee/pages/groups/settings/packages_and_registries/virtual_registry_cleanup_policy/index/index.js` | S (3) | ⚪ vue2 | | | container_registry | `ee/pages/groups/virtual_registries/maven/registries/edit/index.js` | S (2) | ⚪ vue2 | | | package_registry | `~/pages/groups/packages/index.js` | L (64) | ⚪ vue2 | | | package_registry | `~/pages/projects/packages/packages/index.js` | L (64) | ⚪ vue2 | | | package_registry | `~/pages/projects/packages/infrastructure_registry/show/index.js` | M (28) | ⚪ vue2 | | | package_registry | `~/pages/projects/settings/packages_and_registries/show/index.js` | M (24) | ⚪ vue2 | | | package_registry | `~/pages/groups/infrastructure_registry/index/index.js` | M (21) | ⚪ vue2 | | | package_registry | `~/pages/projects/packages/infrastructure_registry/index/index.js` | M (21) | ⚪ vue2 | | | package_registry | `~/pages/groups/settings/packages_and_registries/show/index.js` | M (13) | ⚪ vue2 | | | package_registry | `~/pages/projects/settings/packages_and_registries/cleanup_tags/index.js` | S (9) | ⚪ vue2 | | ### Core DevOps: plan 72 entrypoints | group | fileName | size (components) | status | featureFlag | |--------------------|---------------------------------------------------------------------------------------------|-------------------|------------|-----------------------------------| | knowledge | `~/pages/projects/wikis/index.js` | L (187) | ⚪ vue2 | | | knowledge | `~/pages/projects/wikis/show/index.js` | L (187) | ⚪ vue2 | | | knowledge | `ee/pages/groups/wikis/index.js` | L (187) | ⚪ vue2 | | | knowledge | `ee/pages/groups/wikis/show/index.js` | L (187) | ⚪ vue2 | | | knowledge | `~/pages/projects/pages/new/index.js` | M (14) | ⚪ vue2 | | | knowledge | `~/pages/projects/pages/show/index.js` | M (10) | ⚪ vue2 | | | knowledge | `~/pages/projects/wikis/pages/index.js` | S (7) | ⚪ vue2 | | | knowledge | `~/pages/projects/pages/index.js` | S (3) | ⚪ vue2 | | | knowledge | `~/pages/projects/wikis/diff/index.js` | S (2) | ⚪ vue2 | | | knowledge | `ee/pages/groups/wikis/diff/index.js` | S (2) | ⚪ vue2 | | | knowledge | `~/pages/projects/pages_domains/new/index.js` | S (0) | ⚪ vue2 | | | knowledge | `~/pages/projects/pages_domains/show/index.js` | S (0) | ⚪ vue2 | | | knowledge | `~/pages/projects/wikis/git_access/index.js` | S (0) | ⚪ vue2 | | | knowledge | `~/pages/projects/wikis/history/index.js` | S (0) | ⚪ vue2 | | | knowledge | `ee/pages/groups/wikis/git_access/index.js` | S (0) | ⚪ vue2 | | | knowledge | `ee/pages/groups/wikis/history/index.js` | S (0) | ⚪ vue2 | | | planning_views | `~/pages/groups/saved_views/show/index.js` | XL (439) | 🟢 rollout | `vue3_migrate_work_items` | | planning_views | `~/pages/groups/work_items/index.js` | XL (439) | 🟢 rollout | `vue3_migrate_work_items` | | planning_views | `~/pages/projects/saved_views/show/index.js` | XL (439) | 🟢 rollout | `vue3_migrate_work_items` | | planning_views | `~/pages/groups/boards/index.js` | XL (417) | ⚪ vue2 | | | planning_views | `~/pages/projects/boards/index.js` | XL (417) | ⚪ vue2 | | | planning_views | `ee/pages/groups/epic_boards/index.js` | XL (417) | ⚪ vue2 | | | planning_views | `~/pages/dashboard/issues/index.js` | L (51) | ⚪ vue2 | | | planning_views | `~/pages/dashboard/work_items/index.js` | L (51) | ⚪ vue2 | | | product_planning | `ee/pages/projects/quality/test_cases/show/index.js` | L (164) | ⚪ vue2 | | | product_planning | `ee/pages/projects/requirements_management/requirements/index.js` | L (152) | ⚪ vue2 | | | product_planning | `ee/pages/projects/quality/test_cases/new/index.js` | L (145) | ⚪ vue2 | | | product_planning | `ee/pages/groups/roadmap/show/index.js` | M (44) | 🟢 rollout | `vue3_migrate_roadmap` | | product_planning | `ee/pages/projects/quality/test_cases/index.js` | M (29) | ⚪ vue2 | | | product_planning | `ee/pages/groups/index.js` | M (12) | ⚪ vue2 | | | project_management | `~/pages/projects/issues/show/index.js`<br>`ee/pages/projects/issues/show/index.js` | XL (616) | 🟢 rollout | `vue3_migrate_work_items` | | project_management | `~/pages/projects/work_items/index.js` | XL (440) | 🟢 rollout | `vue3_migrate_work_items` | | project_management | `~/pages/groups/work_items/show/index.js` | XL (439) | 🟢 rollout | `vue3_migrate_work_items` | | project_management | `~/pages/projects/issues/service_desk/index.js` | XL (439) | 🟢 rollout | `vue3_migrate_work_items` | | project_management | `ee/pages/projects/integrations/jira/issues/show/index.js` | L (166) | ⚪ vue2 | | | project_management | `ee/pages/projects/integrations/zentao/issues/show/index.js` | L (165) | ⚪ vue2 | | | project_management | `ee/pages/groups/iteration_cadences/index.js` | L (157) | ⚪ vue2 | | | project_management | `ee/pages/projects/iteration_cadences/index.js` | L (157) | ⚪ vue2 | | | project_management | `~/pages/groups/milestones/show/index.js`<br>`ee/pages/groups/milestones/show/index.js` | L (148) | ⚪ vue2 | | | project_management | `~/pages/projects/milestones/show/index.js`<br>`ee/pages/projects/milestones/show/index.js` | L (148) | ⚪ vue2 | | | project_management | `~/pages/groups/milestones/edit/index.js` | L (140) | ⚪ vue2 | | | project_management | `~/pages/groups/milestones/new/index.js` | L (140) | ⚪ vue2 | | | project_management | `~/pages/projects/milestones/edit/index.js` | L (140) | ⚪ vue2 | | | project_management | `~/pages/projects/milestones/new/index.js` | L (140) | ⚪ vue2 | | | project_management | `~/pages/dashboard/home/index.js` | M (37) | ⚪ vue2 | | | project_management | `ee/pages/admin/application_settings/work_item/index.js` | M (36) | 🟢 rollout | `vue3_migrate_work_item_settings` | | project_management | `ee/pages/groups/settings/work_items/show/index.js` | M (36) | 🟢 rollout | `vue3_migrate_work_item_settings` | | project_management | `ee/pages/projects/settings/work_items/index.js` | M (36) | 🟢 rollout | `vue3_migrate_work_item_settings` | | project_management | `~/pages/dashboard/todos/index/index.js` | M (28) | ⚪ vue2 | | | project_management | `ee/pages/projects/integrations/jira/issues/index/index.js` | M (28) | ⚪ vue2 | | | project_management | `ee/pages/projects/integrations/zentao/issues/index/index.js` | M (28) | ⚪ vue2 | | | project_management | `~/pages/groups/crm/contacts/index.js` | S (9) | ⚪ vue2 | | | project_management | `~/pages/groups/crm/organizations/index.js` | S (9) | ⚪ vue2 | | | project_management | `~/pages/time_tracking/timelogs/index.js` | S (8) | ⚪ vue2 | | | project_management | `~/pages/admin/broadcast_messages/index/index.js` | S (6) | ⚪ vue2 | | | project_management | `~/pages/dashboard/milestones/index/index.js` | S (6) | ⚪ vue2 | | | project_management | `~/pages/admin/labels/edit/index.js` | S (5) | ⚪ vue2 | | | project_management | `~/pages/admin/labels/index/index.js` | S (5) | ⚪ vue2 | | | project_management | `~/pages/groups/labels/edit/index.js` | S (5) | ⚪ vue2 | | | project_management | `~/pages/groups/labels/index/index.js` | S (5) | ⚪ vue2 | | | project_management | `~/pages/jira_connect/branches/new/index.js` | S (5) | ⚪ vue2 | | | project_management | `~/pages/profiles/notifications/show/index.js` | S (5) | ⚪ vue2 | | | project_management | `~/pages/projects/import/jira/index.js` | S (5) | ⚪ vue2 | | | project_management | `~/pages/projects/labels/edit/index.js` | S (5) | ⚪ vue2 | | | project_management | `~/pages/projects/labels/index/index.js` | S (5) | ⚪ vue2 | | | project_management | `~/pages/groups/milestones/index/index.js` | S (4) | ⚪ vue2 | | | project_management | `~/pages/projects/milestones/index/index.js` | S (4) | ⚪ vue2 | | | project_management | `~/pages/admin/broadcast_messages/edit/index.js` | S (3) | ⚪ vue2 | | | project_management | `~/pages/admin/labels/new/index.js` | S (0) | ⚪ vue2 | | | project_management | `~/pages/groups/labels/new/index.js` | S (0) | ⚪ vue2 | | | project_management | `~/pages/jira_connect/oauth_callbacks/index.js` | S (0) | ⚪ vue2 | | | project_management | `~/pages/projects/labels/new/index.js` | S (0) | ⚪ vue2 | | ### Core DevOps: verify 64 entrypoints | group | fileName | size (components) | status | featureFlag | |--------------------|-------------------------------------------------------------------------------------------------------------|-------------------|------------|----------------------------------| | pipeline_authoring | `~/pages/explore/catalog/index.js` | L (135) | ⚪ vue2 | | | pipeline_authoring | `~/pages/projects/ci/pipeline_editor/show/index.js` | L (65) | ⚪ vue2 | | | pipeline_authoring | `~/pages/projects/ci/lints/show/index.js` | S (8) | ⚪ vue2 | | | pipeline_execution | `~/pages/projects/pipelines/builds/index.js`<br>`ee/pages/projects/pipelines/builds/index.js` | XL (298) | ⚪ vue2 | | | pipeline_execution | `~/pages/projects/pipelines/failures/index.js`<br>`ee/pages/projects/pipelines/failures/index.js` | XL (298) | ⚪ vue2 | | | pipeline_execution | `~/pages/projects/pipelines/manual_variables/index.js` | XL (298) | ⚪ vue2 | | | pipeline_execution | `~/pages/projects/pipelines/show/index.js` | XL (298) | 🟢 rollout | `vue3_migrate_pipelines` | | pipeline_execution | `~/pages/projects/pipelines/test_report/index.js` | XL (298) | ⚪ vue2 | | | pipeline_execution | `~/pages/projects/settings/ci_cd/show/index.js`<br>`ee/pages/projects/settings/ci_cd/show/index.js` | L (121) | 🟠 manual | `vue3_migrate_admin_runners` | | pipeline_execution | `~/pages/projects/artifacts/file/index.js` | L (118) | ⚪ vue2 | | | pipeline_execution | `~/pages/projects/artifacts/browse/index.js` | L (98) | ⚪ vue2 | | | pipeline_execution | `~/pages/projects/pipelines/index/index.js`<br>`ee/pages/projects/pipelines/index/index.js` | L (62) | 🟢 rollout | `vue3_migrate_pipelines` | | pipeline_execution | `~/pages/projects/jobs/show/index.js`<br>`ee/pages/projects/jobs/show/index.js` | L (51) | 🟢 rollout | `vue3_migrate_jobs` | | pipeline_execution | `~/pages/groups/settings/ci_cd/show/index.js`<br>`ee/pages/groups/settings/ci_cd/show/index.js` | M (32) | ⚪ vue2 | | | pipeline_execution | `~/pages/admin/jobs/index/index.js` | M (27) | 🟢 rollout | `vue3_migrate_jobs` | | pipeline_execution | `~/pages/projects/jobs/index/index.js` | M (27) | 🟢 rollout | `vue3_migrate_jobs` | | pipeline_execution | `~/pages/projects/pipelines/new/index.js` | M (22) | ⚪ vue2 | | | pipeline_execution | `~/pages/projects/pipeline_schedules/edit/index.js` | M (21) | ⚪ vue2 | | | pipeline_execution | `~/pages/projects/pipeline_schedules/new/index.js` | M (21) | ⚪ vue2 | | | pipeline_execution | `~/pages/projects/pipelines/charts/index.js` | M (21) | ⚪ vue2 | | | pipeline_execution | `~/pages/projects/artifacts/index.js` | M (15) | ⚪ vue2 | | | pipeline_execution | `~/pages/projects/pipeline_schedules/index/index.js` | M (14) | ⚪ vue2 | | | pipeline_execution | `ee/pages/projects/merge_trains/index.js` | M (12) | ⚪ vue2 | | | pipeline_execution | `~/pages/projects/settings/index.js` | S (8) | ⚪ vue2 | | | pipeline_execution | `~/pages/admin/application_settings/ci_cd/index.js`<br>`ee/pages/admin/application_settings/ci_cd/index.js` | S (4) | ⚪ vue2 | | | pipeline_execution | `~/pages/projects/jobs/viewer/index.js` | S (3) | ⚪ vue2 | | | pipeline_execution | `~/pages/projects/jobs/terminal/index.js` | S (0) | ⚪ vue2 | | | runner_core | `~/pages/projects/cluster_agents/show/index.js` | L (88) | ⚪ vue2 | | | runner_core | `~/pages/admin/runners/index/index.js` | L (61) | 🟢 rollout | `vue3_migrate_admin_runners` | | runner_core | `~/pages/groups/runners/index/index.js` | L (59) | 🟢 rollout | `vue3_migrate_admin_runners` | | runner_core | `~/pages/admin/runners/show/index.js` | M (39) | 🟢 rollout | `vue3_migrate_admin_runners` | | runner_core | `~/pages/groups/runners/show/index.js` | M (39) | 🟢 rollout | `vue3_migrate_admin_runners` | | runner_core | `~/pages/projects/runners/show/index.js` | M (39) | 🟢 rollout | `vue3_migrate_admin_runners` | | runner_core | `~/pages/admin/runners/new/index.js` | M (29) | 🟢 rollout | `vue3_migrate_admin_runners` | | runner_core | `~/pages/admin/clusters/index/index.js` | M (23) | ⚪ vue2 | | | runner_core | `~/pages/groups/clusters/index/index.js` | M (23) | ⚪ vue2 | | | runner_core | `~/pages/projects/clusters/index/index.js` | M (23) | ⚪ vue2 | | | runner_core | `~/pages/admin/runners/register/index.js` | M (20) | 🟢 rollout | `vue3_migrate_admin_runners` | | runner_core | `~/pages/groups/runners/register/index.js` | M (20) | 🟢 rollout | `vue3_migrate_admin_runners` | | runner_core | `~/pages/projects/runners/register/index.js` | M (20) | 🟢 rollout | `vue3_migrate_admin_runners` | | runner_core | `~/pages/clusters/agents/dashboard/index.js` | M (19) | ⚪ vue2 | | | runner_core | `ee/pages/admin/runners/dashboard/index.js` | M (19) | 🟢 rollout | `vue3_migrate_runners_dashboard` | | runner_core | `ee/pages/groups/runners/dashboard/index.js` | M (16) | 🟢 rollout | `vue3_migrate_runners_dashboard` | | runner_core | `~/pages/admin/runners/edit/index.js` | M (14) | 🟢 rollout | `vue3_migrate_admin_runners` | | runner_core | `~/pages/groups/runners/edit/index.js` | M (14) | 🟢 rollout | `vue3_migrate_admin_runners` | | runner_core | `~/pages/projects/runners/edit/index.js` | M (14) | 🟢 rollout | `vue3_migrate_admin_runners` | | runner_core | `~/pages/projects/terraform/index/index.js` | M (10) | ⚪ vue2 | | | runner_core | `~/pages/admin/clusters/show/index.js` | S (8) | ⚪ vue2 | | | runner_core | `~/pages/projects/clusters/show/index.js` | S (8) | ⚪ vue2 | | | runner_core | `ee/pages/admin/application_settings/usage_quotas/index.js` | S (8) | ⚪ vue2 | | | runner_core | `~/pages/admin/clusters/destroy/index.js` | S (7) | ⚪ vue2 | | | runner_core | `~/pages/admin/clusters/edit/index.js` | S (7) | ⚪ vue2 | | | runner_core | `~/pages/groups/clusters/destroy/index.js` | S (7) | ⚪ vue2 | | | runner_core | `~/pages/groups/clusters/edit/index.js` | S (7) | ⚪ vue2 | | | runner_core | `~/pages/groups/clusters/show/index.js` | S (7) | ⚪ vue2 | | | runner_core | `~/pages/groups/runners/new/index.js` | S (7) | 🟢 rollout | `vue3_migrate_admin_runners` | | runner_core | `~/pages/projects/clusters/destroy/index.js` | S (7) | ⚪ vue2 | | | runner_core | `~/pages/projects/clusters/edit/index.js` | S (7) | ⚪ vue2 | | | runner_core | `~/pages/projects/runners/new/index.js` | S (7) | 🟢 rollout | `vue3_migrate_admin_runners` | | runner_core | `~/pages/admin/index.js` | S (4) | ⚪ vue2 | | | runner_core | `~/pages/admin/clusters/connect/index.js` | S (1) | ⚪ vue2 | | | runner_core | `~/pages/groups/clusters/connect/index.js` | S (1) | ⚪ vue2 | | | runner_core | `~/pages/groups/clusters/index.js` | S (1) | ⚪ vue2 | | | runner_core | `~/pages/projects/clusters/connect/index.js` | S (1) | ⚪ vue2 | | ### Data / Analytics: analytics 47 entrypoints | group | fileName | size (components) | status | featureFlag | |-------------------|---------------------------------------------------------------------------------------------------------------|-------------------|------------|---------------------------------------| | global_search | `~/pages/search/show/index.js`<br>`ee/pages/search/show/index.js` | L (147) | 🟢 rollout | `vue3_migrate_global_search` | | global_search | `ee/pages/admin/application_settings/search/index.js` | S (4) | ⚪ vue2 | | | global_search | `ee/pages/admin/application_settings/semantic_search_embeddings/show/index.js` | S (1) | ⚪ vue2 | | | global_search | `ee/pages/search/admin/vector_storage/index.js` | S (0) | ⚪ vue2 | | | optimize | `ee/pages/groups/analytics/dashboards/index.js` | L (171) | 🟢 rollout | `vue3_migrate_analytics_dashboards` | | optimize | `~/pages/projects/cycle_analytics/show/index.js`<br>`ee/pages/projects/cycle_analytics/show/index.js` | M (37) | 🟢 rollout | `vue3_migrate_value_stream_analytics` | | optimize | `ee/pages/groups/analytics/cycle_analytics/show/index.js` | M (36) | 🟢 rollout | `vue3_migrate_value_stream_analytics` | | optimize | `ee/pages/admin/dev_ops_report/show/index.js` | M (16) | 🟢 rollout | `vue3_migrate_devops_adoption` | | optimize | `ee/pages/groups/analytics/devops_adoption/index.js` | M (16) | 🟢 rollout | `vue3_migrate_devops_adoption` | | optimize | `ee/pages/groups/analytics/productivity_analytics/index.js` | M (13) | 🟢 rollout | `vue3_migrate_productivity_analytics` | | optimize | `ee/pages/groups/analytics/cycle_analytics/value_streams/edit/index.js` | M (11) | 🟢 rollout | `vue3_migrate_value_stream_analytics` | | optimize | `ee/pages/groups/analytics/cycle_analytics/value_streams/new/index.js` | M (11) | 🟢 rollout | `vue3_migrate_value_stream_analytics` | | optimize | `ee/pages/projects/analytics/cycle_analytics/value_streams/edit/index.js` | M (11) | 🟢 rollout | `vue3_migrate_value_stream_analytics` | | optimize | `ee/pages/projects/analytics/cycle_analytics/value_streams/new/index.js` | M (11) | 🟢 rollout | `vue3_migrate_value_stream_analytics` | | optimize | `ee/pages/groups/issues_analytics/index.js` | M (10) | 🟢 rollout | `vue3_migrate_issues_analytics` | | optimize | `ee/pages/projects/analytics/code_reviews/index/index.js` | M (10) | ⚪ vue2 | | | optimize | `ee/pages/projects/analytics/issues_analytics/index.js` | M (10) | 🟢 rollout | `vue3_migrate_issues_analytics` | | optimize | `ee/pages/groups/analytics/repository_analytics/index.js` | S (9) | 🟢 rollout | `vue3_migrate_repository_analytics` | | optimize | `ee/pages/groups/insights/index.js` | S (8) | 🟢 rollout | `vue3_migrate_insights` | | optimize | `ee/pages/projects/insights/index.js` | S (8) | 🟢 rollout | `vue3_migrate_insights` | | optimize | `~/pages/admin/usage_trends/index.js` | S (7) | 🟢 rollout | `vue3_migrate_usage_trends` | | optimize | `ee/pages/groups/contribution_analytics/show/index.js` | S (7) | 🟢 rollout | `vue3_migrate_contribution_analytics` | | optimize | `ee/pages/groups/analytics/ci_cd_analytics/index.js` | S (6) | ⚪ vue2 | | | platform_insights | `~/pages/projects/incidents/show/index.js` | XL (518) | ⚪ vue2 | | | platform_insights | `~/pages/explore/analytics_dashboards/index.js` | L (178) | 🟢 rollout | `vue3_migrate_analytics_dashboards` | | platform_insights | `ee/pages/projects/analytics/dashboards/index.js` | L (171) | 🟢 rollout | `vue3_migrate_analytics_dashboards` | | platform_insights | `ee/pages/projects/logs/index/index.js` | M (34) | ⚪ vue2 | | | platform_insights | `ee/pages/projects/metrics/show/index.js` | M (32) | ⚪ vue2 | | | platform_insights | `~/pages/projects/alert_management/details/index.js` | M (26) | ⚪ vue2 | | | platform_insights | `ee/pages/projects/tracing/show/index.js` | M (26) | ⚪ vue2 | | | platform_insights | `ee/pages/projects/incident_management/oncall_schedules/index/index.js` | M (20) | ⚪ vue2 | | | platform_insights | `~/pages/projects/settings/operations/show/index.js`<br>`ee/pages/projects/settings/operations/show/index.js` | M (19) | ⚪ vue2 | | | platform_insights | `ee/pages/projects/tracing/index/index.js` | M (18) | ⚪ vue2 | | | platform_insights | `~/pages/projects/error_tracking/details/index.js` | M (11) | ⚪ vue2 | | | platform_insights | `~/pages/projects/incidents/index/index.js` | M (11) | ⚪ vue2 | | | platform_insights | `~/pages/projects/alert_management/index/index.js` | M (10) | ⚪ vue2 | | | platform_insights | `ee/pages/projects/incident_management/escalation_policies/index/index.js` | S (8) | ⚪ vue2 | | | platform_insights | `ee/pages/projects/metrics/index/index.js` | S (8) | ⚪ vue2 | | | platform_insights | `~/pages/projects/error_tracking/index/index.js` | S (5) | ⚪ vue2 | | | platform_insights | `ee/pages/groups/settings/analytics/show/index.js` | S (5) | ⚪ vue2 | | | platform_insights | `~/pages/groups/observability/index.js` | S (4) | ⚪ vue2 | | | platform_insights | `~/pages/projects/observability/show/index.js` | S (4) | ⚪ vue2 | | | platform_insights | `~/pages/experimental/o11y_service_settings/index.js` | S (2) | ⚪ vue2 | | | platform_insights | `~/pages/groups/observability/setup/show/index.js` | S (2) | ⚪ vue2 | | | platform_insights | `~/pages/groups/observability/o11y_service_settings/index.js` | S (1) | ⚪ vue2 | | | — | `ee/pages/admin/application_settings/reporting/index.js` | S (4) | ⚪ vue2 | | | — | `~/pages/admin/dev_ops_report/index.js` | S (2) | ⚪ vue2 | | ### Data / Analytics: modelops 11 entrypoints | group | fileName | size (components) | status | featureFlag | |-------|----------------------------------------------------|-------------------|---------|-------------| | mlops | `~/pages/projects/ml/model_versions/edit/index.js` | L (176) | ⚪ vue2 | | | mlops | `~/pages/projects/ml/model_versions/new/index.js` | L (176) | ⚪ vue2 | | | mlops | `~/pages/projects/ml/model_versions/show/index.js` | L (176) | ⚪ vue2 | | | mlops | `~/pages/projects/ml/models/edit/index.js` | L (176) | ⚪ vue2 | | | mlops | `~/pages/projects/ml/models/index/index.js` | L (176) | ⚪ vue2 | | | mlops | `~/pages/projects/ml/models/new/index.js` | L (176) | ⚪ vue2 | | | mlops | `~/pages/projects/ml/models/show/index.js` | L (176) | ⚪ vue2 | | | mlops | `~/pages/projects/ml/candidates/promote/index.js` | L (136) | ⚪ vue2 | | | mlops | `~/pages/projects/ml/candidates/show/index.js` | M (14) | ⚪ vue2 | | | mlops | `~/pages/projects/ml/experiments/show/index.js` | M (11) | ⚪ vue2 | | | mlops | `~/pages/projects/ml/experiments/index/index.js` | S (9) | ⚪ vue2 | | ### Data / Analytics: orbit 3 entrypoints | group | fileName | size (components) | status | featureFlag | |-------|------------------------------------------------|-------------------|---------|-------------| | — | `ee/pages/dashboard/orbit/show/index.js` | M (32) | ⚪ vue2 | | | — | `ee/pages/admin/orbit/show/index.js` | S (7) | ⚪ vue2 | | | — | `ee/pages/groups/settings/orbit/show/index.js` | S (7) | ⚪ vue2 | | ### Fulfillment: fulfillment 40 entrypoints | group | fileName | size (components) | status | featureFlag | |-------------------------|-----------------------------------------------------------------------------|-------------------|---------|-------------| | provision | `ee/pages/admin/subscriptions/show/index.js` | M (22) | ⚪ vue2 | | | seat_management | `~/pages/users/terms/index/index.js` | L (99) | ⚪ vue2 | | | seat_management | `~/pages/admin/impersonation_tokens/index.js` | L (51) | ⚪ vue2 | | | seat_management | `~/pages/admin/users/edit/index.js`<br>`ee/pages/admin/users/edit/index.js` | M (38) | ⚪ vue2 | | | seat_management | `~/pages/admin/users/new/index.js` | M (36) | ⚪ vue2 | | | seat_management | `~/pages/admin/users/index.js`<br>`ee/pages/admin/users/index.js` | M (32) | ⚪ vue2 | | | seat_management | `ee/pages/admin/gitlab_duo/seat_utilization/index.js` | M (27) | ⚪ vue2 | | | seat_management | `ee/pages/admin/application_settings/roles_and_permissions/index.js` | M (25) | ⚪ vue2 | | | seat_management | `ee/pages/groups/settings/roles_and_permissions/index.js` | M (25) | ⚪ vue2 | | | seat_management | `~/pages/admin/application_settings/service_accounts/index.js` | M (21) | ⚪ vue2 | | | seat_management | `~/pages/groups/settings/service_accounts/index/index.js` | M (21) | ⚪ vue2 | | | seat_management | `~/pages/projects/settings/service_accounts/index/index.js` | M (21) | ⚪ vue2 | | | seat_management | `ee/pages/admin/application_settings/roles_and_permissions/edit/index.js` | M (14) | ⚪ vue2 | | | seat_management | `ee/pages/groups/settings/roles_and_permissions/edit/index.js` | M (14) | ⚪ vue2 | | | seat_management | `ee/pages/admin/application_settings/roles_and_permissions/new/index.js` | S (9) | ⚪ vue2 | | | seat_management | `ee/pages/groups/settings/roles_and_permissions/new/index.js` | S (9) | ⚪ vue2 | | | seat_management | `ee/pages/admin/application_settings/roles_and_permissions/show/index.js` | S (8) | ⚪ vue2 | | | seat_management | `ee/pages/groups/settings/roles_and_permissions/show/index.js` | S (8) | ⚪ vue2 | | | seat_management | `ee/pages/admin/role_promotion_requests/index.js` | S (5) | ⚪ vue2 | | | seat_management | `~/pages/admin/credentials/index.js` | S (4) | ⚪ vue2 | | | seat_management | `~/pages/groups/security/credentials/index.js` | S (4) | ⚪ vue2 | | | seat_management | `ee/pages/groups/ldap_group_links/index.js` | S (4) | ⚪ vue2 | | | seat_management | `~/pages/admin/keys/index.js` | S (2) | ⚪ vue2 | | | seat_management | `ee/pages/groups/saml_group_links/index.js` | S (2) | ⚪ vue2 | | | seat_management | `ee/pages/groups/usage_quotas/pending_members/index.js` | S (2) | ⚪ vue2 | | | subscription_management | `ee/pages/groups/billings/index.js` | M (14) | ⚪ vue2 | | | subscription_management | `ee/pages/profiles/billings/index.js` | M (11) | ⚪ vue2 | | | subscription_management | `ee/pages/gitlab_subscriptions/groups/new/index.js` | S (3) | ⚪ vue2 | | | utilization | `~/pages/groups/usage_quotas/root/index.js` | L (60) | ⚪ vue2 | | | utilization | `~/pages/profiles/usage_quotas/index.js` | M (45) | ⚪ vue2 | | | utilization | `~/pages/projects/usage_quotas/index.js` | M (32) | ⚪ vue2 | | | utilization | `ee/pages/admin/gitlab_credits_dashboard/index.js` | M (30) | ⚪ vue2 | | | utilization | `ee/pages/groups/settings/gitlab_credits_dashboard/index.js` | M (30) | ⚪ vue2 | | | utilization | `ee/pages/admin/namespace_limits/index.js` | S (7) | ⚪ vue2 | | | utilization | `ee/pages/admin/gitlab_credits_dashboard/users/show/index.js` | S (6) | ⚪ vue2 | | | utilization | `ee/pages/groups/settings/gitlab_credits_dashboard/users/show/index.js` | S (6) | ⚪ vue2 | | | utilization | `ee/pages/profiles/gitlab_credits_dashboard/index.js` | S (6) | ⚪ vue2 | | | — | `ee/pages/groups/settings/gitlab_duo/configuration/index.js` | M (40) | ⚪ vue2 | | | — | `ee/pages/groups/settings/gitlab_duo/show/index.js` | M (39) | ⚪ vue2 | | | — | `ee/pages/groups/settings/gitlab_duo/seat_utilization/index.js` | M (27) | ⚪ vue2 | | ### Growth: growth 23 entrypoints | group | fileName | size (components) | status | featureFlag | |-------------|-------------------------------------------------------------------------------------------------|-------------------|---------|-------------| | acquisition | `ee/pages/projects/get_started/show/index.js` | M (26) | ⚪ vue2 | | | acquisition | `ee/pages/trial_registrations/new/index.js` | M (23) | ⚪ vue2 | | | acquisition | `ee/pages/projects/learn_gitlab/show/index.js` | M (15) | ⚪ vue2 | | | acquisition | `ee/pages/registrations/groups/new/index.js` | S (5) | ⚪ vue2 | | | acquisition | `ee/pages/gitlab_subscriptions/self_managed/trials/index.js` | S (3) | ⚪ vue2 | | | acquisition | `ee/pages/gitlab_subscriptions/trials/duo_enterprise/new/index.js` | S (3) | ⚪ vue2 | | | acquisition | `ee/pages/gitlab_subscriptions/trials/duo_pro/new/index.js` | S (3) | ⚪ vue2 | | | acquisition | `ee/pages/gitlab_subscriptions/trials/new/index.js` | S (3) | ⚪ vue2 | | | acquisition | `ee/pages/registrations/company/new/index.js` | S (3) | ⚪ vue2 | | | acquisition | `ee/pages/registrations/trial_welcome/index.js` | S (3) | ⚪ vue2 | | | acquisition | `ee/pages/registrations/welcome/index.js` | S (3) | ⚪ vue2 | | | acquisition | `ee/pages/admin/targeted_messages/edit/index.js` | S (2) | ⚪ vue2 | | | acquisition | `ee/pages/admin/targeted_messages/new/index.js` | S (2) | ⚪ vue2 | | | acquisition | `ee/pages/registrations/subscription_welcome/index.js` | S (2) | ⚪ vue2 | | | acquisition | `~/pages/admin/registrations/groups/new/index.js` | S (1) | ⚪ vue2 | | | acquisition | `ee/pages/registrations/invite_welcome/index.js` | S (1) | ⚪ vue2 | | | activation | `ee/pages/groups/discovers/show/index.js` | S (5) | ⚪ vue2 | | | activation | `ee/pages/projects/security/discover/show/index.js` | S (3) | ⚪ vue2 | | | engagement | `~/pages/admin/application_settings/appearances/preview_sign_in/index.js` | L (98) | ⚪ vue2 | | | engagement | `~/pages/admin/application_settings/index.js`<br>`ee/pages/admin/application_settings/index.js` | L (58) | ⚪ vue2 | | | — | `ee/pages/gitlab_subscriptions/trials/duo_enterprise/index.js` | S (1) | ⚪ vue2 | | | — | `ee/pages/gitlab_subscriptions/trials/duo_pro/index.js` | S (1) | ⚪ vue2 | | | — | `ee/pages/gitlab_subscriptions/trials/index.js` | S (1) | ⚪ vue2 | | ### Infrastructure Platforms: database_excellence 4 entrypoints | group | fileName | size (components) | status | featureFlag | |-----------------------|----------------------------------------------------------|-------------------|---------|-------------| | database_architecture | `~/pages/admin/database_diagnostics/index.js` | M (17) | ⚪ vue2 | | | database_architecture | `~/pages/admin/background_migrations/index.js` | S (1) | ⚪ vue2 | | | — | `~/pages/projects/google_cloud/databases/index/index.js` | S (4) | ⚪ vue2 | | | — | `~/pages/projects/google_cloud/databases/new/index.js` | S (1) | ⚪ vue2 | | ### Infrastructure Platforms: production_engineering 1 entrypoints | group | fileName | size (components) | status | featureFlag | |-------|---------------------------------------------------------------------|-------------------|---------|-------------| | — | `~/pages/admin/application_settings/metrics_and_profiling/index.js` | S (2) | ⚪ vue2 | | ### Infrastructure Platforms: tenant_scale 43 entrypoints | group | fileName | size (components) | status | featureFlag | |---------------|-------------------------------------------------------------------------------------|-------------------|-----------|---------------------------| | geo | `ee/pages/admin/geo/nodes/index.js` | M (30) | ⚪ vue2 | | | geo | `ee/pages/admin/geo/replicables/index/index.js` | M (17) | ⚪ vue2 | | | geo | `ee/pages/admin/data_management/index.js` | M (16) | ⚪ vue2 | | | geo | `ee/pages/admin/geo/replicables/show/index.js` | M (11) | ⚪ vue2 | | | geo | `ee/pages/admin/data_management/show/index.js` | M (10) | ⚪ vue2 | | | geo | `ee/pages/admin/geo/nodes/edit/index.js` | M (10) | ⚪ vue2 | | | geo | `ee/pages/admin/geo/nodes/new/index.js` | M (10) | ⚪ vue2 | | | geo | `ee/pages/admin/geo/settings/index.js` | S (4) | ⚪ vue2 | | | organizations | `~/pages/projects/show/index.js`<br>`ee/pages/projects/show/index.js` | XL (264) | 🟠 manual | `vue3_migrate_repository` | | organizations | `~/pages/groups/show/index.js`<br>`ee/pages/groups/show/index.js` | L (152) | ⚪ vue2 | | | organizations | `~/pages/admin/topics/edit/index.js` | L (136) | ⚪ vue2 | | | organizations | `~/pages/admin/topics/new/index.js` | L (133) | ⚪ vue2 | | | organizations | `~/pages/organizations/settings/general/index.js` | L (131) | ⚪ vue2 | | | organizations | `~/pages/organizations/organizations/new/index.js` | L (123) | ⚪ vue2 | | | organizations | `~/pages/organizations/projects/edit/index.js` | L (118) | ⚪ vue2 | | | organizations | `~/pages/projects/activity/index.js` | L (98) | ⚪ vue2 | | | organizations | `~/pages/groups/edit/index.js`<br>`ee/pages/groups/edit/index.js` | L (90) | ⚪ vue2 | | | organizations | `~/pages/projects/project_members/index.js` | L (78) | ⚪ vue2 | | | organizations | `~/pages/groups/group_members/index.js`<br>`ee/pages/groups/group_members/index.js` | L (77) | ⚪ vue2 | | | organizations | `~/pages/root/index.js`<br>`ee/pages/root/index.js` | L (65) | ⚪ vue2 | | | organizations | `~/pages/projects/edit/index.js`<br>`ee/pages/projects/edit/index.js` | L (56) | ⚪ vue2 | | | organizations | `~/pages/dashboard/groups/index/index.js` | M (42) | ⚪ vue2 | | | organizations | `~/pages/explore/groups/index.js` | M (39) | ⚪ vue2 | | | organizations | `~/pages/organizations/organizations/groups_and_projects/index.js` | M (38) | ⚪ vue2 | | | organizations | `~/pages/dashboard/projects/index.js` | M (33) | ⚪ vue2 | | | organizations | `~/pages/admin/groups/index/index.js` | M (30) | ⚪ vue2 | | | organizations | `~/pages/admin/projects/index/index.js` | M (30) | ⚪ vue2 | | | organizations | `~/pages/explore/projects/index.js` | M (30) | ⚪ vue2 | | | organizations | `~/pages/organizations/organizations/activity/index.js` | M (21) | ⚪ vue2 | | | organizations | `~/pages/projects/new/index.js`<br>`ee/pages/projects/new/index.js` | M (14) | ⚪ vue2 | | | organizations | `~/pages/groups/new/index.js`<br>`ee/pages/groups/new/index.js` | M (11) | ⚪ vue2 | | | organizations | `~/pages/organizations/organizations/users/index.js` | S (8) | ⚪ vue2 | | | organizations | `~/pages/organizations/groups/edit/index.js` | S (7) | ⚪ vue2 | | | organizations | `~/pages/organizations/groups/new/index.js` | S (6) | ⚪ vue2 | | | organizations | `~/pages/organizations/organizations/index/index.js` | S (5) | ⚪ vue2 | | | organizations | `ee/pages/admin/organizations/index/index.js` | S (5) | ⚪ vue2 | | | organizations | `~/pages/admin/projects/index.js` | S (4) | ⚪ vue2 | | | organizations | `~/pages/admin/topics/index.js` | S (4) | ⚪ vue2 | | | organizations | `~/pages/admin/groups/edit/index.js`<br>`ee/pages/admin/groups/edit/index.js` | S (3) | ⚪ vue2 | | | organizations | `~/pages/organizations/organizations/show/index.js` | S (3) | ⚪ vue2 | | | organizations | `~/pages/admin/groups/new/index.js`<br>`ee/pages/admin/groups/new/index.js` | S (2) | ⚪ vue2 | | | organizations | `~/pages/groups/activity/index.js` | S (1) | ⚪ vue2 | | | — | `ee/pages/admin/geo/index.js` | S (3) | ⚪ vue2 | | ### Product Security: application_security_testing 11 entrypoints | group | fileName | size (components) | status | featureFlag | |------------------|------------------------------------------------------------------|-------------------|---------|-------------| | dynamic_analysis | `ee/pages/projects/on_demand_scans/edit/index.js` | L (51) | ⚪ vue2 | | | dynamic_analysis | `ee/pages/projects/on_demand_scans/new/index.js` | L (51) | ⚪ vue2 | | | dynamic_analysis | `ee/pages/projects/security/dast_configuration/index.js` | M (46) | ⚪ vue2 | | | dynamic_analysis | `ee/pages/projects/on_demand_scans/index/index.js` | M (28) | ⚪ vue2 | | | dynamic_analysis | `ee/pages/projects/security/corpus_management/index.js` | M (11) | ⚪ vue2 | | | dynamic_analysis | `ee/pages/projects/security/dast_profiles/index.js` | M (11) | ⚪ vue2 | | | dynamic_analysis | `ee/pages/projects/security/api_fuzzing_configuration/index.js` | M (10) | ⚪ vue2 | | | dynamic_analysis | `ee/pages/projects/security/dast_site_profiles/edit/index.js` | S (8) | ⚪ vue2 | | | dynamic_analysis | `ee/pages/projects/security/dast_site_profiles/new/index.js` | S (8) | ⚪ vue2 | | | dynamic_analysis | `ee/pages/projects/security/dast_scanner_profiles/edit/index.js` | S (4) | ⚪ vue2 | | | dynamic_analysis | `ee/pages/projects/security/dast_scanner_profiles/new/index.js` | S (4) | ⚪ vue2 | | ### Product Security: security_factory 19 entrypoints | group | fileName | size (components) | status | featureFlag | |--------------------------|------------------------------------------------------------------------|-------------------|------------|--------------------------------------------| | code_scanning | `ee/pages/projects/pipelines/codequality_report/index.js` | XL (298) | ⚪ vue2 | | | code_scanning | `ee/pages/projects/security/sast_configuration/index.js` | M (10) | ⚪ vue2 | | | composition_analysis | `ee/pages/projects/pipelines/licenses/index.js` | XL (298) | ⚪ vue2 | | | composition_analysis | `ee/pages/admin/application_settings/security_and_compliance/index.js` | S (3) | ⚪ vue2 | | | secret_detection | `ee/pages/projects/security/secret_detection_configuration/index.js` | M (11) | 🟢 rollout | `vue3_migrate_secret_detection_exclusions` | | vulnerability_management | `ee/pages/projects/pipelines/security/index.js` | XL (298) | ⚪ vue2 | | | vulnerability_management | `ee/pages/projects/security/vulnerabilities/show/index.js` | XL (204) | ⚪ vue2 | | | vulnerability_management | `ee/pages/projects/security/vulnerabilities/new/index.js` | L (141) | ⚪ vue2 | | | vulnerability_management | `ee/pages/groups/security/vulnerabilities/index/index.js` | L (74) | ⚪ vue2 | | | vulnerability_management | `ee/pages/projects/security/vulnerability_report/index.js` | L (74) | ⚪ vue2 | | | vulnerability_management | `ee/pages/security/vulnerabilities/index/index.js` | L (74) | ⚪ vue2 | | | vulnerability_management | `ee/pages/groups/security/dashboard/show/index.js` | L (65) | ⚪ vue2 | | | vulnerability_management | `ee/pages/organizations/security/dashboard/show/index.js` | L (65) | ⚪ vue2 | | | vulnerability_management | `ee/pages/projects/security/dashboard/index/index.js` | L (65) | ⚪ vue2 | | | vulnerability_management | `ee/pages/security/dashboard/show/index.js` | L (65) | ⚪ vue2 | | | vulnerability_management | `ee/pages/groups/dependencies/index.js` | M (37) | ⚪ vue2 | | | vulnerability_management | `ee/pages/projects/dependencies/index/index.js` | M (37) | ⚪ vue2 | | | vulnerability_management | `ee/pages/security/dashboard/settings/index.js` | S (7) | ⚪ vue2 | | | vulnerability_management | `ee/pages/groups/security/discover/show/index.js` | S (3) | ⚪ vue2 | | ### Product Security: security_governance 18 entrypoints | group | fileName | size (components) | status | featureFlag | |-------------------|-------------------------------------------------------------|-------------------|------------|--------------------------------------| | compliance | `ee/pages/projects/security/compliance_violations/index.js` | L (173) | 🟢 rollout | `vue3_migrate_compliance_violations` | | compliance | `ee/pages/groups/security/compliance_dashboards/index.js` | L (139) | 🟢 rollout | `vue3_migrate_compliance_center` | | compliance | `ee/pages/projects/security/compliance_dashboards/index.js` | L (139) | 🟢 rollout | `vue3_migrate_compliance_center` | | compliance | `ee/pages/groups/settings/gitlab_duo/governance/index.js` | M (32) | ⚪ vue2 | | | compliance | `ee/pages/projects/settings/gitlab_duo/governance/index.js` | M (32) | ⚪ vue2 | | | compliance | `ee/pages/admin/audit_logs/index.js` | M (30) | ⚪ vue2 | | | compliance | `ee/pages/groups/audit_events/index.js` | M (30) | ⚪ vue2 | | | compliance | `ee/pages/projects/audit_events/index.js` | M (30) | ⚪ vue2 | | | policy_management | `ee/pages/groups/security/policies/edit/index.js` | L (186) | ⚪ vue2 | | | policy_management | `ee/pages/groups/security/policies/new/index.js` | L (186) | ⚪ vue2 | | | policy_management | `ee/pages/projects/security/policies/edit/index.js` | L (186) | ⚪ vue2 | | | policy_management | `ee/pages/projects/security/policies/new/index.js` | L (186) | ⚪ vue2 | | | policy_management | `ee/pages/groups/security/policies/index/index.js` | L (68) | ⚪ vue2 | | | policy_management | `ee/pages/projects/security/policies/index/index.js` | L (68) | ⚪ vue2 | | | policy_management | `ee/pages/groups/security/policy_store/index/index.js` | M (21) | ⚪ vue2 | | | security_controls | `~/pages/projects/security/configuration/index.js` | L (53) | ⚪ vue2 | | | security_controls | `ee/pages/groups/security/configuration/index.js` | L (50) | ⚪ vue2 | | | security_controls | `ee/pages/groups/security/inventory/index.js` | M (42) | ⚪ vue2 | | ### Product Security: security_platform 57 entrypoints | group | fileName | size (components) | status | featureFlag | |-----------------------------|---------------------------------------------------------------------------------------------------|-------------------|---------|-------------| | abuse_engineering | `~/pages/admin/abuse_reports/show/index.js` | L (108) | ⚪ vue2 | | | abuse_engineering | `~/pages/registrations/new/index.js`<br>`ee/pages/registrations/new/index.js` | L (106) | ⚪ vue2 | | | abuse_engineering | `ee/pages/users/identity_verification/show/index.js` | M (12) | ⚪ vue2 | | | abuse_engineering | `ee/pages/users/registrations_identity_verification/show/index.js` | M (12) | ⚪ vue2 | | | abuse_engineering | `~/pages/admin/abuse_reports/index.js` | M (10) | ⚪ vue2 | | | abuse_engineering | `~/pages/users/index.js` | S (5) | ⚪ vue2 | | | abuse_engineering | `ee/pages/groups/settings/reporting/show/index.js` | S (4) | ⚪ vue2 | | | abuse_engineering | `ee/pages/users/registrations_identity_verification/arkose_labs_challenge/index.js` | S (4) | ⚪ vue2 | | | abuse_engineering | `~/pages/abuse_reports/index.js` | S (1) | ⚪ vue2 | | | abuse_engineering | `~/pages/admin/spam_logs/index.js` | S (0) | ⚪ vue2 | | | authentication | `~/pages/profiles/comment_templates/index.js` | L (139) | ⚪ vue2 | | | authentication | `~/pages/sessions/new/index.js` | L (107) | ⚪ vue2 | | | authentication | `ee/pages/groups/sso/index.js` | L (102) | ⚪ vue2 | | | authentication | `~/pages/passwords/new/index.js` | L (98) | ⚪ vue2 | | | authentication | `~/pages/users/show/index.js` | L (98) | ⚪ vue2 | | | authentication | `~/pages/user_settings/personal_access_tokens/index.js` | L (54) | ⚪ vue2 | | | authentication | `~/pages/user_settings/personal_access_tokens/granular_new/index.js` | M (38) | ⚪ vue2 | | | authentication | `~/pages/user_settings/personal_access_tokens/legacy_new/index.js` | M (38) | ⚪ vue2 | | | authentication | `~/pages/admin/identities/index.js` | M (30) | ⚪ vue2 | | | authentication | `~/pages/user_settings/ssh_keys/index.js` | M (25) | ⚪ vue2 | | | authentication | `~/pages/groups/settings/access_tokens/index.js` | M (24) | ⚪ vue2 | | | authentication | `~/pages/projects/settings/access_tokens/index.js` | M (24) | ⚪ vue2 | | | authentication | `~/pages/user_settings/profiles/show/index.js`<br>`ee/pages/user_settings/profiles/show/index.js` | M (18) | ⚪ vue2 | | | authentication | `~/pages/admin/sessions/index.js` | M (16) | ⚪ vue2 | | | authentication | `~/pages/sessions/index.js`<br>`ee/pages/sessions/index.js` | M (16) | ⚪ vue2 | | | authentication | `ee/pages/groups/omniauth_callbacks/index.js` | M (15) | ⚪ vue2 | | | authentication | `~/pages/groups/settings/index.js`<br>`ee/pages/groups/settings/index.js` | M (11) | ⚪ vue2 | | | authentication | `~/pages/profiles/index.js` | M (11) | ⚪ vue2 | | | authentication | `~/pages/profiles/preferences/show/index.js` | M (11) | ⚪ vue2 | | | authentication | `~/pages/groups/achievements/index.js` | M (10) | ⚪ vue2 | | | authentication | `~/pages/profiles/accounts/show/index.js`<br>`ee/pages/profiles/accounts/show/index.js` | M (10) | ⚪ vue2 | | | authentication | `~/pages/profiles/two_factor_auths/index.js` | M (10) | ⚪ vue2 | | | authentication | `ee/pages/groups/saml_providers/index.js` | S (9) | ⚪ vue2 | | | authentication | `~/pages/admin/applications/index.js` | S (7) | ⚪ vue2 | | | authentication | `~/pages/groups/settings/applications/index.js` | S (4) | ⚪ vue2 | | | authentication | `~/pages/oauth/index.js` | S (3) | ⚪ vue2 | | | authentication | `~/pages/profiles/passkeys/new/index.js` | S (3) | ⚪ vue2 | | | authentication | `ee/pages/groups/settings/domain_verification/new/index.js` | S (3) | ⚪ vue2 | | | authentication | `ee/pages/groups/settings/domain_verification/show/index.js` | S (3) | ⚪ vue2 | | | authentication | `ee/pages/admin/initial_setup/index.js` | S (2) | ⚪ vue2 | | | authentication | `ee/pages/passwords/edit/index.js` | S (2) | ⚪ vue2 | | | authentication | `ee/pages/user_settings/passwords/edit/index.js` | S (2) | ⚪ vue2 | | | authentication | `ee/pages/user_settings/passwords/new/index.js` | S (2) | ⚪ vue2 | | | authentication | `~/pages/dashboard/activity/index.js` | S (1) | ⚪ vue2 | | | authentication | `~/pages/iam/consent/index.js` | S (0) | ⚪ vue2 | | | authentication | `ee/pages/admin/identities/edit/index.js` | S (0) | ⚪ vue2 | | | authentication | `ee/pages/admin/identities/new/index.js` | S (0) | ⚪ vue2 | | | authentication | `ee/pages/groups/settings/domain_verification/index/index.js` | S (0) | ⚪ vue2 | | | dependency_firewall | `ee/pages/groups/security/dependency_firewall/show/index.js` | S (7) | ⚪ vue2 | | | dependency_firewall | `ee/pages/projects/security/dependency_firewall/show/index.js` | S (7) | ⚪ vue2 | | | dependency_firewall | `ee/pages/groups/settings/secure/show/index.js` | S (1) | ⚪ vue2 | | | secrets_manager_application | `ee/pages/groups/secrets/index.js` | M (16) | ⚪ vue2 | | | secrets_manager_application | `ee/pages/projects/secrets/index.js` | M (16) | ⚪ vue2 | | | — | `~/pages/ldap/omniauth_callbacks/index.js` | M (15) | ⚪ vue2 | | | — | `~/pages/omniauth_callbacks/index.js` | M (15) | ⚪ vue2 | | | — | `~/pages/oauth/applications/index.js` | S (4) | ⚪ vue2 | | | — | `~/pages/admin/application_settings/network/index.js` | S (0) | ⚪ vue2 | | ### No owner 10 entrypoints | group | fileName | size (components) | status | featureFlag | |-------|-----------------------------------------------------------------------------------------------------------------|-------------------|---------|-------------| | — | `~/pages/projects/merge_requests/rapid_diffs/index.js` | XL (783) | ⚪ vue2 | | | — | `~/pages/help/show/index.js` | L (98) | ⚪ vue2 | | | — | `~/pages/admin/application_settings/general/index.js`<br>`ee/pages/admin/application_settings/general/index.js` | M (29) | ⚪ vue2 | | | — | `~/pages/admin/dashboard/index.js`<br>`ee/pages/admin/dashboard/index.js` | S (4) | ⚪ vue2 | | | — | `~/pages/admin/application_settings/preferences/index.js` | S (2) | ⚪ vue2 | | | — | `ee/pages/admin/emails/show/index.js` | S (2) | ⚪ vue2 | | | — | `~/pages/help/index/index.js` | S (0) | ⚪ vue2 | | | — | `ee/pages/organizations/security/policy_store/edit/index.js` | S (0) | ⚪ vue2 | | | — | `ee/pages/organizations/security/policy_store/index/index.js` | S (0) | ⚪ vue2 | | | — | `ee/pages/organizations/security/policy_store/new/index.js` | S (0) | ⚪ vue2 | | 579 entrypoints · 535 across 40 groups in 20 stages · 44 with no owner --- <details> <summary>Previous description</summary> ## Process overview ### Graph Legend - Gray = GitLab repo task (Not started) - Green = GitLab repo task (Completed) - Yellow = GitLab repo task (In progress) - Blue = GitLab UI task - Purple = Switchboard task - Green outline = Non main GitLab repo task (Completed) - Yellow outline = Non main GitLab repo task (In progress) ```mermaid %%{init: {'flowchart': { 'nodeSpacing': 20, 'rankSpacing': 20 } } }%% graph TD %% Styles classDef gitlab %% fill:#6f8,color:#fff classDef gitlab_in_progress fill:#ffef00 classDef gitlab_complete fill:#3dc068 classDef gitlab_ui fill:#00a4ff,color:#fff classDef gitlab_ui_in_progress fill:#00a4ff,color:#fff,stroke:#ffef00,stroke-width:10px classDef gitlab_ui_complete fill:#00a4ff,color:#fff,stroke:#3dc068,stroke-width:10px classDef other fill:#a2a2d0,color:#fff classDef other_in_progress fill:#a2a2d0,color:#fff,stroke:#ffef00,stroke-width:10px classDef other_complete fill:#a2a2d0,color:#fff,stroke:#3dc068,stroke-width:10px classDef optional stroke-dasharray: 5 5 %% Nodes gitlab_use_gitlab_ui_source["`Make GitLab consume GitLab UI source`"]:::gitlab_complete gitlab_ui_vue_compat_package["`Publish versions built with @vue/compat to npm (gitlab-ui#1985)`"]:::gitlab_ui gitlab_jest_unquarantine["`Fix all GitLab Jest specs under @vue/compat quarantine`"]:::gitlab_complete gitlab_jest_unskip["`Fix all skipped @vue/compat GitLab Jest specs`"]:::gitlab_complete gitlab_gdk["`Add support for running GDK with @vue/compat`"]:::gitlab_complete gitlab_run_rspec["`Add support for running RSpecs with @vue/compat`"]:::gitlab_complete gitlab_run_qa["`Add support for running QA specs with @vue/compat`"]:::gitlab gitlab_fix_rspec["`Fix RSpecs with @vue/compat`"]:::gitlab_in_progress gitlab_fix_qa["`Fix QA specs with @vue/compat`"]:::gitlab gitlab_prod_build_vite["`Add support for a Vite production build with @vue/compat`"]:::gitlab gitlab_prod_build_vite_vue2["`Add support for a Vite production build with Vue 2`"]:::gitlab gitlab_prod_build_webpack["`Add support for a Webpack production build with @vue/compat`"]:::gitlab gitlab_feature_flagged_builds["`Add support for feature flagged asset builds`"]:::gitlab class gitlab_feature_flagged_builds optional switchboard_drop_compat_flags["`Drop compat flags in Switchboard`"]:::other switchboard_vue3["`Switch to Vue 3 in Switchboard`"]:::other gitlab_drop_vue2["`Drop support for Vue 2 in GitLab`"]:::gitlab gitlab_ui_drop_vue2["`Drop support for Vue 2 in GitLab UI`"]:::gitlab_ui_in_progress gitlab_ui_drop_compat_flags["`Drop compat flags in GitLab UI`"]:::gitlab_ui_in_progress gitlab_drop_compat_flags["`Drop compat flags in GitLab`"]:::gitlab gitlab_vue3["`Switch to Vue 3 in GitLab`"]:::gitlab gitlab_ui_vue3["`Switch to Vue 3 in GitLab UI`"]:::gitlab_ui %% Dependencies - kill webpack first gitlab_gdk --> gitlab_run_rspec gitlab_gdk --> gitlab_run_qa gitlab_feature_flagged_builds -.-> vite_or_webpack switchboard_drop_compat_flags --> switchboard_vue3 switchboard_vue3 --> gitlab_ui_vue3 gitlab_jest_unquarantine --> gitlab_drop_vue2 gitlab_jest_unskip --> gitlab_drop_vue2 gitlab_run_rspec --> gitlab_fix_rspec --> gitlab_drop_vue2 gitlab_run_qa --> gitlab_fix_qa --> gitlab_drop_vue2 vite_or_webpack --> gitlab_drop_vue2 gitlab_drop_vue2 --> gitlab_drop_compat_flags --> gitlab_vue3 gitlab_drop_vue2 --> gitlab_ui_drop_vue2 gitlab_ui_drop_vue2 --> gitlab_vue3 --> gitlab_ui_vue3 gitlab_ui_package ---> gitlab_gdk gitlab_drop_vue2 --> gitlab_ui_drop_compat_flags --> gitlab_ui_vue3 gitlab_ui_drop_compat_flags --> switchboard_vue3 gitlab_ui_drop_compat_flags --> gitlab_vue3 subgraph gitlab_ui_package["Either"] direction LR gitlab_use_gitlab_ui_source gitlab_ui_vue_compat_package end subgraph vite_or_webpack["Either"] direction LR subgraph vite["Vite"] direction LR gitlab_prod_build_vite_vue2 --> gitlab_prod_build_vite end subgraph webpack["Webpack"] gitlab_prod_build_webpack end end ``` ### Step 0: pre-migration - [x] remove the outdated `slot`/`slot-scope` attributes - [x] main codebase (https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64604 by @ntepluhina) - [x] GitLab UI - [ ] Mostly done in https://gitlab.com/gitlab-org/gitlab-ui/-/merge_requests/2269 - [x] Several chart components still use the deprecated slot syntax, and require particular attention due to more complex slot definitions and incomplete test coverage (see https://gitlab.com/gitlab-org/gitlab-ui/-/merge_requests/2269#note_612928917) - [x] set up linter rules to prevent deprecated APIs from being used (https://gitlab.com/gitlab-org/frontend/eslint-plugin/-/merge_requests/50#note_610914212 by @markrian) - [x] check how unit tests work with compat build and evaluate the effort for VTU 1 -\> 2 migration - VTU 1 --\> 2 migration could be mostly automated with codemods, however it is possible only when - [x] evaluate the effort of making class-based stores reactive - [x] check how Vuex works in compat build and evaluate the effort for Vuex v3 -\> v4 migration - [x] check how VueApollo works in compat build and evaluate the effort for VueApollo 3 -\> 4 migration - [x] check how Vue Router works in compat build and evaluate the effort for v3 -\> v4 migration - [ ] evaluate Vue-related non-core dependencies in terms of their readiness for migration / working in compat build ### Step 1: "Vue3-friendly". Utilize `@vue/compat` for migration Child epic: https://gitlab.com/groups/gitlab-org/-/epics/9013+ At this point we want all our Vue-related project use `@vue/compat`: * [x] https://gitlab.com/gitlab-org/gitlab-ui (epic: https://gitlab.com/groups/gitlab-org/-/epics/7203) * [ ] https://gitlab.com/gitlab-org/gitlab (epic: TBD) * [ ] https://gitlab.com/gitlab-org/status-page (epic/issue: TBD) * [ ] https://gitlab.com/gitlab-org/customers-gitlab-com/ (epic: https://gitlab.com/groups/gitlab-org/-/epics/10121) * [ ] https://gitlab.com/gitlab-org/gitlab-design (epic: TBD) * [x] https://gitlab.com/gitlab-com/gl-infra/gitlab-dedicated/switchboard (epic: TBD) At this point we will be relying on [vue-test-utils-compat](https://www.npmjs.com/package/vue-test-utils-compat) to make our test suite compatible with Vue2 and `@vue/compat`. Our codebase should be tested and verified both with Vue2 and Vue3 with feature flag (or similar approach) flipping usage of vue version when needed Known blockers outside of GitLab: * [x] `bootstrap-vue` release with `@vue/compat` https://github.com/bootstrap-vue/bootstrap-vue/pull/6905 * [x] `@vue/test-utils` release with https://github.com/vuejs/test-utils/pull/1804 merged ### Step 2: "Vue3-first". Drop Vue.js 2 support (per project) After ensuring everything is working with `@vue/compat` each project **independently** will take decision to drop Vue2 support. `gitlab-ui` will be the last one as long as there will be no vue2-based consumers At this point we will move [vue-test-utils-compat](https://www.npmjs.com/package/vue-test-utils-compat) from being application-wide to specific explicit initialization in each test suite. This will allow us to write tests using `@vue/test-utils v2` while not being forced to rewrite all tests to `@vue/test-utils-v1`. For old tests we will switch compat flags one-by-one, applying codemods with fixes (approx. 80% of test suide could be automatically migrated to `@vue/test-utils v2` automatically) Also we will start migrating codebase to Vue3 by acting both horizontally and vertically. Under **vertical** migration we are considering disabling **compat flags** in `@vue/compat` one-by-one and performing mostly automated conversions to our codebase. Under **horizontal** migration we're considering migrating existing components to Vue3 by adding: `{ compatConfig: { MODE: 3 }}` to components. These approaches will take place simultaneously and decision will taken on per-case basics ### Step 3: Switch `@vue/compat` to `vue` (per project) As soon as `@vue/compat` will have all compat flags switched off, we should be able just swap `@vue/compat` with `vue` and be ready to go </details>

Read the original on gitlab.com ↗