Migration testing for multi-version upgrades without building an environment
## Goal :dart: Add CI job which would emulate multi-version* upgrades by running `bundle exec rake gitlab:db:configure` against DB dump from latest known GitLab version stop with test data. :star: Parent epic - https://gitlab.com/groups/gitlab-org/-/epics/9201+ *multi-version upgrades - upgrade that follows [upgrade path](https://docs.gitlab.com/ee/update/index.html#upgrade-paths) and skipping some versions, for example 16.0 -\> 16.3 -\> 16.7 #### Challenge No existing unit-level tests  for multi-version migration testing in GitLab project CI. #### Business Outcome - Catch migration errors for multi-version upgrades in merge requests at unit-level. - Save costs by running unit tests without building actual environments ## High-level overview :notepad_spiral: [Epic DRI](https://handbook.gitlab.com/handbook/engineering/infrastructure/team/gitlab-dedicated/#epic-owner-responsibilities): @niskhakova - [x] Proof-of-concept https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1806+ - [x] Explore seeding options for the DB dump with data - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1919+s - [x] Prepare and store DB dump for the latest known GitLab version - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1920+s - [x] Add multi-version upgrades test to GitLab CI - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1921+s - [x] Expand data seeding configuration for multi-version upgrades testing - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2354+s - [x] Identify solutions for storing DB dumps for multi-version upgrade testing - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2355+s - [x] Iterate on multi-version upgrades CI test configuration - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2356+s - [x] Monitor test stability and results - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1922+s - [x] Make multi-version upgrades job required to pass - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1923+s - [x] Create follow up for background migrations testing - https://gitlab.com/groups/gitlab-org/quality/quality-engineering/-/epics/62 ## Latest status Completed :tada: See https://gitlab.com/groups/gitlab-org/quality/quality-engineering/-/epics/19#note_1859948872 <details><summary>Previous status updates </summary> #### 2024-03-28 https://gitlab.com/gitlab-com/gitlab-OKRs/-/work_items/5928#note_1837062985 #### 2024-03-22 https://gitlab.com/gitlab-com/gitlab-OKRs/-/work_items/5928#note_1828217200 #### 2024-03-15 https://gitlab.com/gitlab-com/gitlab-OKRs/-/work_items/5928#note_1817440697 #### 2024-03-08 Latest status update in OKR: https://gitlab.com/gitlab-com/gitlab-OKRs/-/work_items/5928#note_1807812515 #### 2024-03-01 Latest status update in OKR: https://gitlab.com/gitlab-com/gitlab-OKRs/-/work_items/5928#note_1797676186 #### 2024-02-23 Done: - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2354+s - ~"Progress::ongoing" - Tested out suggested scenario for breaking migrations for validating the seeding approach - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2354#note_1786905633 - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2355+s - ~"Progress::ongoing" - Implement script for PG Dump Generator that follows outlined design https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2355#note_1783504407, Updated existing multi-version upgrade test job and switched it to allow to fail from previous `manual`.https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2355#note_1783749422 - `db:migrate:multi-version-upgrade` is now running in MRs as allowed to fail :tada: Next steps: * https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2354+ - sync with Database team for scenario that intentionally breaks migrations for validating the seeding approach * https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2355+ - address https://gitlab.com/gitlab-org/gitlab/-/issues/442778+, enable CI pipelines for generating PG dumps * https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2356+ - review how multi-version upgrades test job will work with multiple PG version support, review rules when job should be triggered * https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1922+ - start looking into monitoring the stability of the job #### 2024-02-16 Done: - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2354+s - ~"Progress::ongoing" - Created https://gitlab.com/gitlab-org/gitlab/-/merge_requests/144631 which adds config to seed all fixtures using Data Seeder, Resolved most frequent fixture seeding error related to bundle files (collaborated with Gitaly team) - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2354#note_1775000308, Reached out to Database team for review of the approach and advise on validation - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2354#note_1775308818 - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2355+s - ~"Progress::started" - created script design for creating PG dumps - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2355#note_1777067946 Next steps: * https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2354+ - work with Database team on the feedback for approach, explore options for intentionally breaking migrations for validating the seeding approach * https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2355+ - implement initial script for PG Dump Generator #### 2024-02-09 Done: - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1919+s - ~"workflow::complete" - https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137582 was merged, @ddavison closed relevant issue as done - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1920+s - ~"workflow::complete" - https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137582 was merged, @ddavison closed relevant issue as done - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1921+s - ~"workflow::complete" - https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137582 was merged, @ddavison closed relevant issue as done - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2354+s - ~"Progress::ongoing" - @niskhakova caught up with Seeder and MR!137582 changes, [validated](https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2354#note_1758876296) that data selected approach work by creating DB dump for known problematic upgrade path and verify that there is a migration error, [started](https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2354#note_1762969866) exploring options for seeding environment with all possible fixtures Next steps: - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2354+s - Proceed exploring options for seeding environment with all possible fixtures, work on design for realistic data for upgrade testing with Seeder #### 2024-02-02 Done: - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1919+s - ~"Progress::ongoing" - https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137582 is in final review stages, @ddavison worked on review feedback - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1920+s - ~"Progress::ongoing" - https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137582 is in final review stages, @ddavison worked on review feedback - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1921+s - ~"Progress::ongoing" - https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137582 is in final review stages, @ddavison worked on review feedback - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2354+s - ~"Progress::started" - @niskhakova catches up with Seeder and MR!137582 changes Next steps: - https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137582 - continue to work on review feedback - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2354+s - Validate that data selected approach work - create DB dump for known problematic upgrade path and verify that there is a migration error #### FY24Q4 / 2024-01-26: - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1919+s - ~"Progress::ongoing" - https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137582 is in review - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1920+s - ~"Progress::ongoing" - https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137582 is in review - https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1921+s - ~"Progress::ongoing" - https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137582 is in review </details>
epic