Page MenuHomePhabricator

[EPIC] <Core Technology> Upgrade MediaWiki projects from Vue 2 to Vue 3
Open, In Progress, HighPublic

Description

Upgrade MediaWiki projects to Vue 3 and remove compatibility build

Current Status (5/31/23)
  • MediaWiki currently ships Vue 3 with the Compatibility build included.
  • New Vue-based features and Codex components are all being developed against the full Vue 3 API. However, there are still some legacy Vue apps embedded in skins or extensions which rely on Vue 2 behavior.
Acceptance Criteria
  • All code that uses Vue has been migrated to the full version of Vue 3, and the compatibility build has been removed.
  • This work must be completed before Vue 2 reaches EOL at the end of 2023.
Next Steps:
  • Now that we are using Vue 3 with the Compatibility Build across MediaWiki, we should go into each codebase which is using Vue.js and follow the steps documented in the Vue 3 Migration Guide. To test Vue 3 compatibility, set compatConfig: { MODE: 3 } as an option in each component file – this disables all compatibility mode features and forces full Vue 3 behavior on a per-component basis. See T289020: Migrate all extension/skin code to Vue 3 for a list of all Vue-based features; subtasks should be filed against that task for each codebase, and patches should be written against the respective codebase-specific tasks to add compatConfig flags to Vue components. These patches can be tested, deployed, and (if necessary) reverted normally.
Steps: Vue 3 Full Build
  • Begin migrating all code using Vue, addressing migration warnings then disabling compat mode for migrated components (T289020)
  • Ensure all code using Vuex is ready to be migrated (T289089)
  • Wait for the security readiness review for Vuex 4 (T288768) to be completed
  • Upgrade the Vuex version in MediaWiki to 4.0.2 (T289102)
  • Migrate code using Vuex to the new calling style (T289103)
  • Once everything is migrated, remove compatibility code and switch from the migration build of Vue to the regular build (T289104)
  • Clean up other compatibility/migration remnants, like the { compatConfig: { MODE: 3 } } settings disabling compat mode for migrated components (T289105)
Deploy Checklist
  • Coordinate QA timelines and QA sign-off across teams (product/program)
  • Target deploy train and post ETA in comments
  • Prod verify and address fast-follows

Details

TitleReferenceAuthorSource BranchDest Branch
Remove Vue.configureCompat callrepos/design-systems/CodexExample!9egardnerremove-vue-compatmain
Customize query in GitLab

Related Objects

StatusSubtypeAssignedTask
Duplicate STH
In ProgressNone
Resolvedsbassett
ResolvedMstyles
ResolvedCatrope
ResolvedNone
Resolvedegardner
ResolvedLucas_Werkmeister_WMDE
ResolvedMichael
ResolvedLucas_Werkmeister_WMDE
ResolvedLucas_Werkmeister_WMDE
OpenNone
ResolvedLucas_Werkmeister_WMDE
OpenNone
ResolvedCatrope
ResolvedCatrope
ResolvedSimoneThisDot
ResolvedCatrope
ResolvedCatrope
ResolvedCatrope
ResolvedJdforrester-WMF
DeclinedNone
ResolvedCatrope
Resolvedegardner
ResolvedSimoneThisDot
ResolvedNone
ResolvedMichael
ResolvedMichael
ResolvedMichael
ResolvedMichael
ResolvedLucas_Werkmeister_WMDE
ResolvedLucas_Werkmeister_WMDE
ResolvedLucas_Werkmeister_WMDE
ResolvedMichael
ResolvedMichael
ResolvedMichael
ResolvedSimoneThisDot
Resolvedegardner
Resolvedegardner
Resolvedegardner
Resolvedegardner
Resolvedngkountas
ResolvedSgs
ResolvedUrbanecm_WMF
DeclinedNone
ResolvedCatrope
ResolvedCatrope
ResolvedCatrope
ResolvedSBisson
ResolvedCatrope
ResolvedCatrope
ResolvedCatrope
ResolvedNone
Resolvedegardner
Resolvedegardner
Resolvedegardner
ResolvedJdforrester-WMF
Resolvedegardner
ResolvedEdtadros
ResolvedSimoneThisDot
In ProgressNone
Resolvedlwatson
OpenNone
OpenUniversal_Omega
ResolvedMPGuy2824
OpenNone
OpenNone
ResolvedJdforrester-WMF
ResolvedCatrope
ResolvedSimoneThisDot
Resolved AdesojiThisDot
ResolvedSimoneThisDot
ResolvedSimoneThisDot
ResolvedSimoneThisDot
ResolvedSimoneThisDot
ResolvedSimoneThisDot
ResolvedSimoneThisDot
ResolvedJdlrobson
ResolvedJdlrobson
ResolvedJdlrobson
InvalidNone
Resolvedegardner
DeclinedNone
ResolvedVolker_E
ResolvedNone
ResolvedNone
ResolvedCatrope
DeclinedBUG REPORTNone

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes
STH changed the task status from Open to In Progress.Dec 23 2021, 7:39 PM
STH triaged this task as High priority.

Adding Design-System-Team because Design-Systems-team-20200324-20220422 got archived though this open task has no other active project tags associated, so it cannot be found on boards.

STH changed the task status from In Progress to Stalled.Apr 30 2022, 5:37 PM
STH moved this task from Inbox to Foundational Technology Backlog on the Design-System-Team board.

Teams such as WMDE have requested advance notice to plan this in to an upcoming quarter. We can target the July-September quarter to complete this and should begin outreach to affected teams in May/June.

STH lowered the priority of this task from High to Medium.May 1 2022, 1:20 PM
STH renamed this task from [Epic] Migrate from Vue 2 to Vue 3 to <Core Technology> Upgrade MediaWiki projects from Vue 2 to Vue 3.May 20 2022, 2:47 PM
STH updated the task description. (Show Details)
ldelench_wmf renamed this task from <Core Technology> Upgrade MediaWiki projects from Vue 2 to Vue 3 to [EPIC] <Core Technology> Upgrade MediaWiki projects from Vue 2 to Vue 3.Nov 17 2022, 11:25 PM
Restricted Application raised the priority of this task from Medium to High. · View Herald TranscriptMay 31 2023, 6:35 PM

This task is in progress again, but we can consider it "blocked" until T289020: Migrate all extension/skin code to Vue 3 is complete.

I did a quick search for Vue.configureCompat calls across our codebases. Unlike some of the other compat code artifacts, this line will cause JS to error out once we remove the migration build, since that method will no longer exist on the Vue object. We will need to ensure all traces of this are removed from any code that is still in production before we flip the switch.

Here are the places that still include this code as of Tuesday Nov 28:

  • The Extension:VueTest (this is a legacy example repo maintained by DST; we've talked about replacing this with the more modern CodexExample; perhaps it's time to archive this repo?) – this is not deployed in production anywhere
  • Extension:MachineVision – this has also been officially un-deployed, right?
  • Extension:FileImporter – who maintains this?
  • CodexExample Extension – this lives in GitLab and is not picked up by CodeSearch. I will update this shortly.

All of these configureCompat calls have already been wrapped in if statements, so they should be safe. See e.g. https://gerrit.wikimedia.org/r/c/mediawiki/extensions/VueTest/+/968789 . We should remove these after the migration is complete, but for now I think it makes the most sense to keep them as conditional calls.

egardner changed the task status from Stalled to In Progress.Dec 7 2023, 5:46 PM