doc/development/deprecation_guidelines/_index.md
For details about the terms used on this page, see the terminology.
Any change counts as a breaking change if customers need to take action to ensure their GitLab workflows aren't disrupted.
A breaking change could come from sources such as:
For many of our users, GitLab is a tier zero system. It is critical in creating, releasing, operating, and scaling users' businesses. The consequence of a breaking change can be serious.
Product and Engineering Managers are responsible and accountable for customer impacts due to the changes they make to the platform. The burden is on GitLab, not the customer, to own change management.
We aim to eliminate all breaking changes from GitLab. If you have exhausted the alternatives and believe you have a strong case for why a breaking change should be allowed, you can follow the process below to seek an exception.
By default, no breaking change is allowed unless the breaking change implementation plan has been granted explicit approval by following the process below.
The deprecations and removals
documentation is generated from the YAML files located in
gitlab/data/deprecations.
To update the deprecations and removals page when a YAML file is added, edited, or removed:
From the command line, go to your local clone of the gitlab-org/gitlab project.
Create, edit, or remove the YAML file under data/deprecations.
Compile the deprecations and removals documentation:
bin/rake gitlab:docs:compile_deprecations
If needed, you can verify the documentation is up to date with:
bin/rake gitlab:docs:check_deprecations
Commit the updated documentation and push the changes.
Create a merge request using the Deprecations and Removals template.
Related Handbook pages:
The breaking change windows
documentation is generated from the YAML files located in
gitlab/data/deprecations.
A deprecation is included in the breaking change windows page when all of the following are true:
removal_milestone matches the target milestone (for example, 19.0).breaking_change is true.gitlab_com is not false. If the field is absent, it defaults to true.
Set gitlab_com: false for breaking changes that do not affect GitLab.com
(for example, changes that only affect self-managed instances).All matching deprecations are assigned to the primary window by default,
regardless of the window value in the YAML file.
A contingency window is available as a fallback. To move a breaking change
to the contingency window, set window: 2 in its YAML file. The contingency
window section is only shown on the page when at least one deprecation is
assigned to it.
From the command line, go to your local clone of the gitlab-org/gitlab project.
Create, edit, or remove the YAML file under data/deprecations.
Compile the breaking change windows documentation:
bin/rake gitlab:docs:compile_windows
Update the deprecations documentation:
bin/rake gitlab:docs:compile_deprecations
If needed, you can verify the documentation is up to date with:
bin/rake gitlab:docs:check_windows
Commit the updated documentation and push the changes.
Create a merge request.
| Field | Required | Description |
|---|---|---|
title | Yes | The title that appears as a link to the deprecation item. |
removal_milestone | Yes | Must match the target milestone. |
breaking_change | Yes | Must be true. |
gitlab_com | No | Set to false to exclude from the page. Defaults to true. |
window | No | Set to 2 to assign to the contingency window. Any other value (or absent) assigns to the primary window. |
impact | No | Shown in the table. Can be a string or array. |
scope | No | Shown in the table. Can be a string or array. |
check_impact | No | URL shown in the table. Only rendered if a value is present. |
When features are deprecated and removed, update the related documentation.
Our APIs have special rules regarding deprecations and breaking changes.
REST API v4 cannot have breaking changes made to it unless the API feature was previously marked as experimental or beta.
See What to do instead of a breaking change?
The GraphQL API has a requirement for a longer deprecation cycle than the standard cycle before a breaking change can be made.
See the GraphQL deprecation process.
We cannot make breaking changes to webhook payloads.
For a list of what constitutes a breaking webhook payload change and what to do instead, see the Webhook breaking changes guide.
Development on deprecated features is restricted to Priority 1 / Severity 1 bug fixes. Any community contributions to deprecated features are unlikely to be prioritized during milestone planning.
However, at GitLab, we give agency to our team members. So, a member of the team associated with the contribution may decide to review and merge it at their discretion.
For configuration removals, see the Omnibus deprecation policy.
For versioning and upgrade details, see our Release and Maintenance policy.