[Feature flag] Roll out status_checks_add_status_field flag
<!-- Title suggestion: [Feature flag] Enable description of feature --> ## Summary Roll out the changes behind `status_checks_add_status_field` flag. This should be done during 15.0 as it introduces a breaking change to the REST API. ## Owners - Team: ~"group::compliance" - Most appropriate slack channel to reach out to: `#g_manage_compliance` - Best individual to reach out to: @mwoolf / @dennis - PM: @sam.white ## Stakeholders <!-- Are there any other stages or teams involved that need to be kept in the loop? - Name of a PM - The Support Team - The Delivery Team --> ## Expectations ### What are we expecting to happen? * It will be possible to explictly fail an external status check. * The `GET /projects/:id/merge_requests/:iid/status_checks` endpoint will now return `passed` rather than `approved` for passed status checks. It can also now return `failed`. ### When is the feature viable? * No settings need to be configured. ### What might happen if this goes wrong? * Any unexpected bugs around the status of external status checks. ### What can we monitor to detect problems with this? <!-- Which dashboards from https://dashboards.gitlab.net are most relevant? --> _Consider mentioning checks for 5xx errors or other anomalies like an increase in redirects (302 HTTP response status)_ ### What can we check for monitoring production after rollouts? _Consider adding links to check for Sentry errors, Production logs for 5xx, 302s, etc._ ## Rollout Steps ### Rollout on non-production environments - Ensure that the feature MRs have been deployed to non-production environments. - [x] `/chatops run auto_deploy status <merge-commit-of-your-feature>` - [x] Enable the feature globally on non-production environments. - [x] `/chatops run feature set <feature-flag-name> true --dev` - [x] `/chatops run feature set <feature-flag-name> true --staging` - [x] Verify that the feature works as expected. Posting the QA result in this issue is preferable. ### Specific rollout on production - Ensure that the feature MRs have been deployed to both production and canary. - [x] `/chatops run auto_deploy status <merge-commit-of-your-feature>` - If you're using [project-actor](https://docs.gitlab.com/ee/development/feature_flags/#feature-actors), you must enable the feature on these entries: - [ ] `/chatops run feature set --project=gitlab-org/gitlab <feature-flag-name> true` - [ ] `/chatops run feature set --project=gitlab-org/gitlab-foss <feature-flag-name> true` - [ ] `/chatops run feature set --project=gitlab-com/www-gitlab-com <feature-flag-name> true` - If you're using [group-actor](https://docs.gitlab.com/ee/development/feature_flags/#feature-actors), you must enable the feature on these entries: - [ ] `/chatops run feature set --group=gitlab-org <feature-flag-name> true` - [ ] `/chatops run feature set --group=gitlab-com <feature-flag-name> true` - If you're using [user-actor](https://docs.gitlab.com/ee/development/feature_flags/#feature-actors), you must enable the feature on these entries: - [ ] `/chatops run feature set --user=<your-username> <feature-flag-name> true` - [ ] Verify that the feature works on the specific entries. Posting the QA result in this issue is preferable. ### Preparation before global rollout - [x] Check if the feature flag change needs to be accompanied with a [change management issue](https://about.gitlab.com/handbook/engineering/infrastructure/change-management/#feature-flags-and-the-change-management-process). Cross link the issue here if it does. - [x] Ensure that you or a representative in development can be available for at least 2 hours after feature flag updates in production. If a different developer will be covering, or an exception is needed, please inform the oncall SRE by using the `@sre-oncall` Slack alias. - [x] Ensure that documentation has been updated ([More info](https://docs.gitlab.com/ee/development/documentation/feature_flags.html#features-that-became-enabled-by-default)). - [x] Announce on [the feature issue](ISSUE LINK) an estimated time this will be enabled on GitLab.com. - [x] Notify `#support_gitlab-com` and your team channel ([more guidance when this is necessary in the dev docs](https://docs.gitlab.com/ee/development/feature_flags/controls.html#communicate-the-change)). ### Global rollout on production For visibility, all `/chatops` commands that target production should be executed in the `#production` slack channel and cross-posted (with the command results) to the responsible team's slack channel (`#g_TEAM_NAME`). - [x] [Incrementally roll out](https://docs.gitlab.com/ee/development/feature_flags/controls.html#process) the feature. - If the feature flag in code has [an actor](https://docs.gitlab.com/ee/development/feature_flags/#feature-actors), perform **actor-based** rollout. - [ ] `/chatops run feature set <feature-flag-name> <rollout-percentage> --actors` - If the feature flag in code does **NOT** have [an actor](https://docs.gitlab.com/ee/development/feature_flags/#feature-actors), perform time-based rollout (**random** rollout). - [x] `/chatops run feature set <feature-flag-name> <rollout-percentage>` - Enable the feature globally on production environment. - [ ] `/chatops run feature set <feature-flag-name> true` - [x] Announce on [the feature issue](ISSUE LINK) that the feature has been globally enabled. - [x] Wait for [at least one day for the verification term](https://about.gitlab.com/handbook/product-development-flow/feature-flag-lifecycle/#including-a-feature-behind-feature-flag-in-the-final-release). ### Release the feature After the feature has been [deemed stable](https://about.gitlab.com/handbook/product-development-flow/feature-flag-lifecycle/#including-a-feature-behind-feature-flag-in-the-final-release), the [clean up](https://docs.gitlab.com/ee/development/feature_flags/controls.html#cleaning-up) should be done as soon as possible to permanently enable the feature and reduce complexity in the codebase. You can either [create a follow-up issue for Feature Flag Cleanup](https://gitlab.com/gitlab-org/gitlab/-/issues/new?issuable_template=Feature%20Flag%20Cleanup) or use the checklist below in this same issue. <!-- The checklist here is to help stakeholders keep track of the feature flag status --> - [x] Create a merge request to remove `<feature-flag-name>` feature flag. Ask for review and merge it. - [x] Remove all references to the feature flag from the codebase. - [x] Remove the YAML definitions for the feature from the repository. - [x] Create [a changelog entry](https://docs.gitlab.com/ee/development/feature_flags/#changelog). - [x] Ensure that the cleanup MR has been deployed to both production and canary. If the merge request was deployed before [the code cutoff](https://about.gitlab.com/handbook/engineering/releases/#self-managed-releases-1), the feature can be officially announced in a release blog post. - [x] `/chatops run auto_deploy status <merge-commit-of-cleanup-mr>` - [x] Close [the feature issue](ISSUE LINK) to indicate the feature will be released in the current milestone. - [x] Clean up the feature flag from all environments by running these chatops command in `#production` channel: - [x] `/chatops run feature delete <feature-flag-name> --dev` - [x] `/chatops run feature delete <feature-flag-name> --staging` - [x] `/chatops run feature delete <feature-flag-name>` - [x] Close this rollout issue. ## Rollback Steps - [ ] This feature can be disabled by running the following Chatops command: ``` /chatops run feature set <feature-flag-name> false ```
issue