Add Vue 3 rollout flag for the Terraform state page

Adds the vue3_migrate_terraform feature flag and a vue3_migration.yml for the Terraform state page. This opts it into the Vue 3 migration with Option 1. The bundler builds both a Vue 2 and a Vue 3 chunk. Rails serves the Vue 3 chunk only when the flag is on. The flag is default-off.

~/terraform mounts TerraformList with initVueApp, so the root element carries the data-gitlab-vue3-app marker. All 5 page-specific components sit in terraform/components.

Risk

The page registers GlToast as a Vue plugin and sets custom Apollo cache normalisation through defaultDataIdFromObject. Plugin registration and cache identity both changed between Vue 2 and Vue 3. Check that toasts appear, and that the list updates after a state file is locked or removed.

Verification

  • bundle exec rspec spec/lib/gitlab/vue3_migration_files_spec.rb — 1101 examples, 0 failures (after rebase onto master, 2026-09-10)
  • node scripts/frontend/vue3_migration_stats.mjs --owners reports the page(s) as rollout under the new flag

Local verification

A temporary feature spec loaded the page with vue3_migrate_terraform stubbed on. It asserted that the page HTML included a <script> whose src contains the .vue3.js entrypoint, and that a [data-gitlab-vue3-app] element exists. Then it saved a screenshot.

Page Entrypoint served Vue 3 root marker
Project Terraform states index (one locked state) pages.projects.terraform.index.vue3.js TerraformListRoot
Terraform states index on Vue 3

References

Edited by Miguel Rincon

Merge request reports

Loading
Loading