Roadmap - Improve test coverage for GitLab upgrades
:construction: This roadmap is still in progress :construction:
## Goal
Increase test coverage for GitLab Upgrades to ensure that if customer is following [upgrade path](https://docs.gitlab.com/ee/update/index.html#upgrade-paths) the upgrade is successful.
## Customer facing problems
From previous discussions with Support team, the main problems that customers encounter during upgrade:
1. Unplanned upgrade stops - errors caused by migrations ( https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1270#note_1374819271)
- Example: https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1529
2. Functionality degradation between upgrades - feature regression between upgrades which requires customers to perform multiple upgrades to leverage bug fixes.
- Example: When customer finds a bug, GitLab team recommends to upgrade to X where bug is fixed, then customer upgrades to X - and finds another bug, and GitLab team recommends upgrade to X+n where it was fixed in Y -\> then they need to repeat this all again
<details>
<summary>
Current coverage :mag_right:
</summary>
1. Lower level testing - [Unit tests for `db` rake tasks without building an environment](https://docs.gitlab.com/ee/development/database/database_migration_pipeline.html)
2. System level testing - upgrade tests against GitLab environments
1. Docker Upgrade testing - [GitLab QA upgrade testing jobs using GitLab Docker images](https://handbook.gitlab.com/handbook/engineering/infrastructure/test-platform/test-coverage/#gitlab-qa-update-scenario) - covers multi-version upgrades. For minor update test jobs - tests upgrade from latest known upgrade stop to the latest code from `master` (example 16.3 -\> `master`). For major update test jobs - tests upgrade from latest known major-1 version to the latest master (example 15.11 -\> 16.1 -\> 16.3 -\> `master`)
2. Self-Managed Upgrade testing - [Performance environments nightly upgrades](https://handbook.gitlab.com/handbook/engineering/infrastructure/test-platform/test-coverage/#performance-environments-nightly-upgrades)
</details>
# High-level work overview :mag:
The below is proposed work for improving Upgrade testing coverage:
<table>
<tr>
<td>Milestone</td>
<td>Goal(s)</td>
<td>Issue(s) / Epic (s)</td>
<td>Status</td>
</tr>
<tr>
<td rowspan="3">Test gaps review</td>
<td rowspan="3">Review existing test coverage, identify test gaps</td>
<td>
https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1270+s
</td>
<td>
Done :white_check_mark:
</td>
</tr>
<tr>
<td>
https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/2320+s
</td>
<td>
Done :white_check_mark:
</td>
</tr>
<tr>
<td>
https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/issues/1846+s
</td>
<td>
To be scheduled :calendar_spiral:
</td>
</tr>
<tr>
<td>Planned upgrade stops</td>
<td>
_\[Stage 1\]_ Ensure that if customer is following [upgrade path](https://docs.gitlab.com/ee/update/index.html#upgrade-paths) there are no unknown/unplanned upgrade stops.
</td>
<td>
Epic: https://gitlab.com/groups/gitlab-org/-/epics/9201+s
</td>
<td>
FY25 Q1, FY25 Q2
Done :white_check_mark:
</td>
</tr>
<tr>
<td>Planned upgrade stops</td>
<td>
_\[Stage 2\]_ Ensure that if customer is following [upgrade path](https://docs.gitlab.com/ee/update/index.html#upgrade-paths) there are no unknown/unplanned upgrade stops.
</td>
<td>
Epic: https://gitlab.com/groups/gitlab-com/gl-infra/software-delivery/framework/-/epics/3+
</td>
<td>
To be scheduled :calendar_spiral:
</td>
</tr>
<tr>
<td>Functionality consistency</td>
<td>Reduce functionality degradation between upgrades by building processes to prevent regressions</td>
<td>
Epic: https://gitlab.com/groups/gitlab-org/-/epics/12457+s
</td>
<td>
To be scheduled :calendar_spiral:
</td>
</tr>
<tr>
<td>Downgrade testing</td>
<td>Ensure that if customer is following documented guidance the downgrade is successful</td>
<td>
Epic: https://gitlab.com/groups/gitlab-org/-/epics/13023+
</td>
<td>
To be scheduled :calendar_spiral:
</td>
</tr>
</table>
epic