Cleaning up old feature flags
Problem
When working in the codebase, we see lots of feature flags. We always need to consider the "else" case when implementing a feature or fixing a bug. However, most of those "development" feature flags are actually stable enough to be cleaned up.
Enabled by default
Here's the list of "enabled by default" "development" feature flags that were introduced before 15.0
:geo_repository_verification => 10.6,
:lfs_check => 11.11,
:geo_repository_reverification => 11.6,
:groups_tokens_optional_encryption => 11.9,
:chatops => 11.9,
:projects_tokens_optional_encryption => 11.9,
:phabricator_import => 12.0,
:ci_job_jwt => 12.1,
:repository_archive_hotlinking_interception => 12.1,
:project_import_ndjson => 12.1,
:project_export_as_ndjson => 12.1,
:sourcegraph => 12.5,
:unlink_fork_network_upon_visibility_decrease => 12.6,
:forward_deployment_enabled => 12.8,
:create_approval_todos_on_mr_update => 12.9,
:group_export_ndjson => 13.0,
:json_wrapper_legacy_mode => 13.0,
:group_import_ndjson => 13.0,
:subscribable_license_banner => 13.0,
:geo_group_wiki_repository_replication => 13.1,
:track_epics_activity => 13.1,
:iteration_cadences => 13.1,
:geo_lfs_object_replication => 13.11,
:enforce_max_attachment_size_upload_api => 13.11,
:use_traversal_ids => 13.11,
:reject_unsigned_commits_by_gitlab => 13.11,
:geo_pipeline_artifact_replication => 13.11,
:ban_user_feature_flag => 13.12,
:main_branch_over_master => 13.12,
:geo_package_file_replication => 13.3,
:merge_request_widget_graphql => 13.3,
:offline_spdx_catalogue => 13.3,
:webauthn => 13.4,
:geo_merge_request_diff_replication => 13.4,
:validate_import_decompressed_archive_size => 13.4,
:rebalance_issues => 13.4,
:usage_data_incident_management_incident_published => 13.4,
:geo_snippet_repository_replication => 13.4,
:bulk_import => 13.5,
:geo_terraform_state_version_replication => 13.5,
:usage_data_i_ci_secrets_management_vault_build_created => 13.6,
:s3_multithreaded_uploads => 13.8,
:use_traversal_ids_for_root_ancestor => 14.0,
:geo_use_clone_on_first_sync => 14.1,
:recursive_approach_for_all_projects => 14.1,
:ci_job_artifacts_backlog_work => 14.1,
:sidekiq_job_completion_metric_initialize => 14.1,
:usage_data_i_code_review_user_gitlab_cli_api_request => 14.1,
:new_header_search => 14.3,
:work_items => 14.3,
:geo_pages_deployment_replication => 14.3,
:geo_upload_replication => 14.4,
:refactor_mr_widgets_extensions => 14.4,
:ci_update_unlocked_job_artifacts => 14.5,
:issues_full_text_search => 14.5,
:ci_destroy_unlocked_job_artifacts => 14.5,
:geo_secondary_proxy_separate_urls => 14.6,
:automated_email_provision => 14.6,
:highlight_js => 14.6,
:rate_limit_gitlab_shell => 14.7,
:use_traversal_ids_for_descendants_scopes => 14.8,
:geo_job_artifact_replication => 14.8,
:usage_data_i_code_review_user_jetbrains_api_request => 14.8,
:incident_timeline => 14.9,
:ci_detect_wrongly_expired_artifacts => 14.9,
:audit_event_streaming_git_operations => 14.9,
:route_hll_to_snowplow => 14.9,
:track_work_items_activity => 14.9,
:enhanced_notify_css => 14.9,
:enable_old_sentry_integration => 14.9,
:dispensable_render => 14.9
Disabled by default
Here's the list of "disabled by default" "development" feature flags that were introduced before 15.0
:namespace_storage_limit => 0,
:use_primary_store_as_default_for_sidekiq_status => 0,
:rugged_commit_is_ancestor => 0,
:rugged_find_commit => 0,
:use_primary_store_as_default_for_duplicate_jobs => 0,
:use_primary_and_secondary_stores_for_sidekiq_status => 0,
:rugged_tree_entries => 0,
:use_primary_and_secondary_stores_for_duplicate_jobs => 0,
:rugged_tree_entry => 0,
:auto_devops_banner_disabled => 10.0,
:workhorse_archive_cache_disabled => 10.5,
:ci_enable_live_trace => 10.8,
:rugged_list_commits_by_oid => 11.1,
:git_push_create_all_pipelines => 11.1,
:user_time_settings => 11.11,
:project_list_filter_bar => 11.11,
:build_service_proxy => 11.11,
:force_autodevops_on_by_default => 11.3,
:rugged_commit_tree_entry => 11.9,
:application_settings_tokens_optional_encryption => 11.9,
:group_managed_accounts => 11.9,
:prometheus_computed_alerts => 12.0,
:sign_up_on_sso => 12.0,
:audit_log_group_level => 12.1,
:ldap_settings_unlock_groups_by_owners => 12.1,
:remove_non_gma_memberships => 12.1,
:wiki_front_matter => 12.1,
:ajax_new_deploy_token => 12.1,
:group_administration_nav_item => 12.1,
:soft_email_confirmation => 12.2,
:artifacts_management_page => 12.4,
:allow_possible_spam => 12.4,
:design_management_allow_dangerous_images => 12.4,
:anonymous_visual_review_feedback => 12.5,
:notes_create_service_tracking => 12.5,
:repack_after_shard_migration => 12.6,
:disable_merge_trains => 12.8,
:archive_rate_limit => 12.9,
:convert_user_to_group_managed_accounts => 12.9,
:security_auto_fix => 13.0,
:gitlab_employee_badge => 13.0,
:enforced_sso_expiry => 13.0,
:ci_register_job_temporary_lock => 13.1,
:diff_line_syntax_highlighting => 13.1,
:ci_skip_persistent_ref_existence_check => 13.1,
:gitlab_ci_builds_queuing_metrics => 13.1,
:use_marker_ranges => 13.1,
:or_issuable_queries => 13.1,
:go_proxy_disable_gomod_validation => 13.1,
:go_proxy => 13.1,
:issue_assignees_widget => 13.11,
:allow_extend_reactivate_trial => 13.11,
:ci_job_token_scope => 13.12,
:pipeline_security_dashboard_graphql => 13.12,
:web_hooks_disable_failed => 13.12,
:ci_require_credit_card_on_free_plan => 13.12,
:ci_require_credit_card_on_trial_plan => 13.12,
:cache_home_panel => 13.12,
:create_vulnerability_jira_issue_via_graphql => 13.12,
:cached_commits => 13.12,
:use_traversal_ids_for_ancestors => 13.12,
:ci_require_credit_card_for_old_users => 13.12,
:product_analytics => 13.2,
:branch_list_keyset_pagination => 13.2,
:disable_metric_dashboard_refresh_rate => 13.2,
:schema_linting => 13.2,
:async_commit_diff_files => 13.3,
:remove_legacy_github_client => 13.3,
:temporary_storage_increase => 13.3,
:personal_snippet_reference_filters => 13.3,
:missing_mr_security_scan_types => 13.4,
:elasticsearch_use_or_default_operator => 13.4,
:advanced_global_search_for_limited_indexing => 13.4,
:bitbucket_server_user_mapping_by_username => 13.4,
:lfs_link_existing_object => 13.4,
:metrics_dashboard_exhaustive_validations => 13.4,
:forti_authenticator => 13.5,
:ci_pipeline_triggers_settings_vue_ui => 13.5,
:display_merge_conflicts_in_diff => 13.5,
:two_factor_for_cli => 13.5,
:debian_packages => 13.5,
:custom_emoji => 13.6,
:seats_in_use_for_free_or_trial => 13.6,
:new_issues_analytics_chart_data => 13.6,
:collect_package_events => 13.6,
:core_security_mr_widget_counts => 13.7,
:hide_deprecated_billing_plans => 13.7,
:forti_token_cloud => 13.7,
:merge_request_refs_cleanup => 13.8,
:non_public_artifacts => 13.8,
:multiple_todos => 13.8,
:issue_email_participants => 13.8,
:rubygem_packages => 13.9,
:show_billing_eoa_banner => 13.9,
:gitlab_ci_archived_trace_consistent_reads => 13.9,
:subscription_plan_cache_key => 13.9,
:disable_ssh_key_used_tracking => 13.9,
:disable_git_http_fetch_writes => 13.9,
:pnp_subscription_plan_cache_key => 13.9,
:board_multi_select => 14.0,
:enforce_storage_limit_for_free => 14.1,
:container_registry_migration_phase2_capacity_2 => 14.1,
:enforce_storage_limit_for_paid => 14.1,
:container_registry_migration_phase2_all_plans => 14.1,
:debian_group_packages => 14.1,
:ci_recreate_downstream_pipeline => 14.1,
:ci_job_artifacts_backlog_large_loop_limit => 14.1,
:use_api_for_payment_validation => 14.1,
:runner_registration_control => 14.1,
:preview_free_user_cap => 14.1,
:saas_user_caps => 14.1,
:arkose_labs_prevent_login => 14.1,
:arkose_labs_login_challenge => 14.1,
:allow_non_blocking_member_refresh => 14.1,
:refactor_security_extension => 14.1,
:record_projects_target_platforms => 14.1,
:realtime_labels => 14.1,
:project_overwrite_service_tracking => 14.1,
:pipeline_tabs_vue => 14.1,
:increase_page_size_exponentially => 14.1,
:add_timezone_to_web_operations => 14.1,
:moved_mr_sidebar => 14.1,
:about_your_company_registration_flow => 14.1,
:specialized_worker_for_group_lock_update_auth_recalculation => 14.2,
:linear_project_ancestors => 14.2,
:repository_tree_gitaly_pagination => 14.3,
:incubation_5mp_google_cloud => 14.3,
:use_traversal_ids_for_ancestor_scopes => 14.3,
:linear_user_manageable_groups => 14.3,
:bulk_import_projects => 14.3,
:search_blobs_language_aggregation => 14.4,
:mergeability_caching => 14.4,
:lazy_load_commits => 14.4,
:ci_new_query_for_running_stuck_jobs => 14.4,
:refactor_mr_widgets_extensions_user => 14.4,
:project_quality_summary_page => 14.4,
:graphql_code_quality_full_report => 14.4,
:advanced_search_multi_project_select => 14.4,
:use_traversal_ids_roots => 14.5,
:configure_sentry_in_application_settings => 14.5,
:verification_reminder => 14.6,
:use_traversal_ids_for_ancestors_upto => 14.6,
:use_traversal_ids_groups_finder => 14.6,
:account_validation_email => 14.6,
:saas_user_caps_auto_approve_pending_users_on_cap_increase => 14.6,
:use_typhoeus_elasticsearch_adapter => 14.7,
:unify_security_configuration => 14.7,
:inline_haml_diff_line_rendering => 14.7,
:use_traversal_ids_for_self_and_hierarchy => 14.7,
:dast_api_scanner => 14.7,
:epic_board_total_weight => 14.7,
:elastic_file_name_reverse_optimization => 14.7,
:remote_mirror_fail_on_lfs => 14.7,
:container_registry_migration_phase2_enabled => 14.8,
:ci_secure_files => 14.8,
:hide_public_email_on_profile => 14.8,
:container_registry_migration_phase2_capacity_1 => 14.8,
:enforce_runner_token_expires_at => 14.8,
:container_registry_migration_phase2_enqueue_speed_fast => 14.8,
:container_registry_migration_phase2_enqueue_speed_slow => 14.8,
:overage_members_modal => 14.8,
:container_registry_migration_phase2_capacity_10 => 14.8,
:use_traversal_ids_for_self_and_hierarchy_scopes => 14.8,
:container_registry_migration_limit_gitlab_org => 14.8,
:permit_all_shared_groups_for_approval => 14.8,
:container_registry_migration_phase2_capacity_25 => 14.8,
:linear_group_descendants_finder_upto => 14.8,
:exit_registration_verification => 14.8,
:saved_replies => 14.9,
:harbor_registry_integration => 14.9,
:free_user_cap => 14.9,
:role_targeted_broadcast_messages => 14.9,
:epic_color_highlight => 14.9,
:gl_avatar_for_all_user_avatars => 14.9,
:integrated_error_tracking => 14.9,
:optimized_housekeeping => 14.9,
:jira_connect_oauth => 14.9,
:source_editor_toolbar => 14.9,
:import_project_from_remote_file_s3 => 14.9,
:admin_runners_bulk_delete => 14.9,
:enable_new_sentry_integration => 14.9,
:disable_unsafe_regexp => 14.9
Solution
- Find DRIs or group team members of feature flags without
group
assigned. - Ping DRIs or group team members to create rollout issues for feature flags without rollout issues.
- Ping DRIs or group team members in feature flag rollout issues.
- Each DRI will find if the feature flag is enabled on
GitLab.com
.- We can use https://samdbeckham.gitlab.io/feature-flags
- Each DRI will remove the feature flag.
- Later: Collaborate with Engineering Productivity to automate pinging DRIs or group team members in rollout issues.
Edited by Furkan Ayhan