Vue 3 migration: project environments pages
What does this MR do and why?
Adds the vue3_migrate_environments feature flag and vue3_migration.yml for the project environments pages. Opts into Option 1: the bundler builds a Vue 2 and a Vue 3 chunk, and Rails serves the Vue 3 chunk only when the flag is on (default-off).
Entrypoints under pages/projects/environments all share the ~/environments app (Apollo): index, show, new, edit, folder, k8s (re-imports show), and ee/show (re-imports show) — all status: rollout behind the flag. terminal is non-Vue (xterm.js), so it is set to status: migrated with no flag.
Risk
The ~/environments tree was audited thoroughly (a mechanical sweep plus full reads of all 75 files across components, environment_details incl. kubernetes, and the mount layer + Apollo client/resolvers). No hard Vue 3 runtime throws under @vue/compat MODE 2: data() is a function throughout, no filters: option, no Vue.extend/propsData/Vue.observable/$children/functional components/local directives; string router-view renders and root apolloProvider options resolve via the compat shims; kubernetes Apollo handlers reassign whole objects. Covered by spec/frontend/environments (67 spec files, green under Vue 3).
Residual follow-up (not a blocker, does not gate enabling the flag): environments_detail_header.vue runs renderGFM over the environment descriptionHtml; a milestone/iteration reference in a description drives the shared issuable/popover legacy mount path, which errors (async convertToGraphQLId(undefined)). Under MODE 2 this degrades to a console error + non-functional popover, not a page crash. Shares the fix tracked for the releases migration; to be resolved before wide ramp.
References
- Migration issue: Vue 3 migration: project environments pages (#629443)
- Epic: &23285
Screenshots or screen recordings
| Path | Video |
|---|---|
| Environments index + terminal | |
| Environments show - deployments tab | |
| Environments show - Kubernetes tab (no Flux) | |
| Environments show - Kubernetes tab (with Flux) | |
| Environments new and edit | |
| Environments folder |
How to set up and validate locally
- Enable the flag:
Feature.enable(:vue3_migrate_environments) /-/environments— Available/Stopped tabs, search, folders, row actions (deploy/stop/rollback/pin/delete), review-app and stop-stale modals./-/environments/:id— header actions, deployments table, SPA nav/breadcrumbs; kubernetes tabs on an agent-connected environment./-/environments/newand/:id/edit— create/edit round-trip (name, external URL, agent/namespace/flux selectors).- Run
VUE_VERSION=3 yarn jest spec/frontend/environments.
MR acceptance checklist
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.