gitlab-ctl check-config fails to detect mattermost[...] removal before upgrading to 19.0
## Summary `gitlab-ctl check-config --version 19.0.1` does not report `mattermost[...]` keys in `gitlab.rb` as a blocking removal, even though `reconfigure` after upgrading to 19.0 immediately aborts with: ``` RuntimeError: Removed configurations found in gitlab.rb. Aborting reconfigure. ``` This means customers who run the recommended pre-upgrade check get a false clean bill of health, then hit a hard failure mid-upgrade. ## Steps to reproduce 1. On GitLab 18.11.x with `mattermost[...]` keys present in `/etc/gitlab/gitlab.rb` (for example `mattermost['enable'] = true`). 2. Run `sudo gitlab-ctl check-config --version 19.0.1`. 3. Observe: no removal warning is printed for `mattermost`. 4. Upgrade to 19.0.x and run `sudo gitlab-ctl reconfigure`. 5. Observe: reconfigure aborts with `Removed configurations found in gitlab.rb`. ## Root cause In `deprecations.rb`, the `mattermost` entry has `deprecation: '19.0'` and `removal: '19.0'` — deprecated and removed in the same version with no grace period. The `check-config` command calls `Gitlab::Deprecations.check_config(version, config, :removal)`, which correctly identifies the removal. However, the detection relies on the `mattermost` key being present and non-nil/non-empty in the embedded nodes JSON (`/opt/gitlab/embedded/nodes/<fqdn>.json`). The `check-config` command reads config from the **current** installed package's node JSON, not from a fresh parse of `gitlab.rb` against the target version. If the node JSON was generated by a pre-19.0 reconfigure, the `mattermost` key may be serialised differently (e.g. as an empty hash or with default values only) than what `applicable_deprecations` expects, causing the removal check to silently pass. Additionally, `check-config` is documented as the recommended pre-upgrade validation step, but the mattermost removal is a **same-version** deprecation+removal (`19.0`/`19.0`), which is an unusual pattern that may not be exercised by the check-config test suite against a pre-19.0 node JSON. ## Impact Customers with `mattermost[...]` in `gitlab.rb` who follow the documented upgrade procedure (`check-config` → upgrade) are not warned before the upgrade. The failure only surfaces during `reconfigure` after the package has already been replaced, potentially mid-maintenance-window. Reported via Zendesk ticket 725485 (Geo customer, SMB Ultimate, upgrade 18.11.4 → 19.0.1). ## Expected behaviour `gitlab-ctl check-config --version 19.0.1` should print a clear removal warning for any `mattermost[...]` key present in `gitlab.rb`, matching the error that `reconfigure` produces. ## Workaround Comment out or remove all `mattermost[...]` lines from `/etc/gitlab/gitlab.rb` before upgrading to 19.0. ## Environment - Installation type: Linux package (Omnibus) - Affected versions: 18.x → 19.0 upgrade path - Related: `deprecations.rb` entry `config_keys: %w(mattermost), deprecation: '19.0', removal: '19.0'`
issue