From 45e89ee4040aad8715a8d1fb2f5bcfb2d820de48 Mon Sep 17 00:00:00 2001 From: Enrique Alcantara Date: Tue, 27 May 2025 14:55:11 +0200 Subject: [PATCH 1/7] Remove Extension Marketplace feature flags Remove Web IDE and Workspaces extension marketplace feature flags. Remove references to these feature flags from the codebase Make the data migration that transitioned users to the instance-level settings a no-op Changelog: other --- app/helpers/application_settings_helper.rb | 3 - app/helpers/preferences_helper.rb | 2 +- .../vscode_extension_marketplace_settings.yml | 9 --- .../beta/web_ide_extensions_marketplace.yml | 9 --- doc/user/enterprise_user/_index.md | 14 +--- doc/user/profile/preferences.md | 10 +-- doc/user/project/web_ide/_index.md | 8 +- .../workspace_operations/create.rb | 3 +- ee/app/helpers/ee/preferences_helper.rb | 4 +- ee/app/models/ee/group.rb | 2 +- ee/spec/helpers/preferences_helper_spec.rb | 20 +++-- ...ion_marketplace_metadata_generator_spec.rb | 4 +- .../settings/settings_integration_spec.rb | 4 - ee/spec/models/ee/group_spec.rb | 4 +- .../workspace_operations/create_spec.rb | 3 +- ee/spec/requests/groups_controller_spec.rb | 1 - lib/web_ide/extension_marketplace.rb | 65 +--------------- .../extension_marketplace_generator.rb | 10 +-- ...xtension_marketplace_metadata_generator.rb | 13 +--- spec/features/ide_spec.rb | 5 -- .../application_settings_helper_spec.rb | 34 +++----- spec/helpers/preferences_helper_spec.rb | 5 -- .../lib/web_ide/extension_marketplace_spec.rb | 77 ++++--------------- .../extension_marketplace_generator_spec.rb | 14 ++-- ...ion_marketplace_metadata_generator_spec.rb | 25 ++---- .../_extension_marketplace.html.haml_spec.rb | 66 ++++++---------- 26 files changed, 94 insertions(+), 320 deletions(-) delete mode 100644 config/feature_flags/beta/vscode_extension_marketplace_settings.yml delete mode 100644 config/feature_flags/beta/web_ide_extensions_marketplace.yml diff --git a/app/helpers/application_settings_helper.rb b/app/helpers/application_settings_helper.rb index 915939fa18e6da..0a2e2a1e77dd4a 100644 --- a/app/helpers/application_settings_helper.rb +++ b/app/helpers/application_settings_helper.rb @@ -720,9 +720,6 @@ def signup_form_data end def vscode_extension_marketplace_settings_view - # NOTE: This is intentionally not scoped to a specific actor since it affects instance-level settings. - return unless Feature.enabled?(:vscode_extension_marketplace_settings, nil) - presets = ::WebIde::ExtensionMarketplacePreset.all.map do |preset| preset.to_h.deep_transform_keys { |key| key.to_s.camelize(:lower) } end diff --git a/app/helpers/preferences_helper.rb b/app/helpers/preferences_helper.rb index ef31153232b4c1..09963484032245 100644 --- a/app/helpers/preferences_helper.rb +++ b/app/helpers/preferences_helper.rb @@ -163,7 +163,7 @@ def integration_views private def extensions_marketplace_view - return unless WebIde::ExtensionMarketplace.feature_enabled?(user: current_user) + return unless WebIde::ExtensionMarketplace.feature_enabled_from_application_settings? build_extensions_marketplace_view( title: s_("Preferences|Web IDE"), diff --git a/config/feature_flags/beta/vscode_extension_marketplace_settings.yml b/config/feature_flags/beta/vscode_extension_marketplace_settings.yml deleted file mode 100644 index bb4f5797137fbd..00000000000000 --- a/config/feature_flags/beta/vscode_extension_marketplace_settings.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: vscode_extension_marketplace_settings -feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/508977 -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/181624 -rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/508996 -milestone: '17.10' -group: group::remote development -type: beta -default_enabled: true diff --git a/config/feature_flags/beta/web_ide_extensions_marketplace.yml b/config/feature_flags/beta/web_ide_extensions_marketplace.yml deleted file mode 100644 index 03f8a375bf66af..00000000000000 --- a/config/feature_flags/beta/web_ide_extensions_marketplace.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: web_ide_extensions_marketplace -feature_issue_url: https://gitlab.com/groups/gitlab-org/-/epics/7685 -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/151352 -rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/459028 -milestone: '17.0' -group: group::ide -type: beta -default_enabled: true diff --git a/doc/user/enterprise_user/_index.md b/doc/user/enterprise_user/_index.md index 6f71b36fa48664..8987b29cd6b9dc 100644 --- a/doc/user/enterprise_user/_index.md +++ b/doc/user/enterprise_user/_index.md @@ -262,12 +262,6 @@ Allowing group Owners to change primary emails is proposed in [issue 412966](htt ### Enable the extension marketplace for the Web IDE and workspaces -{{< details >}} - -- Status: Beta - -{{< /details >}} - {{< history >}} - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/161819) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 17.0 [with flags](../../administration/feature_flags.md) named `web_ide_oauth` and `web_ide_extensions_marketplace`. Disabled by default. @@ -276,16 +270,10 @@ Allowing group Owners to change primary emails is proposed in [issue 412966](htt - `web_ide_oauth` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167464) in GitLab 17.5. - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/508996) the `vscode_extension_marketplace_settings` [feature flag](../../administration/feature_flags.md) in GitLab 17.10. Disabled by default. - `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` [enabled on GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.11. +- `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/192659) in GitLab 18.1. {{< /history >}} -{{< alert type="flag" >}} - -The availability of this feature is controlled by a feature flag. -For more information, see the history. - -{{< /alert >}} - Prerequisites: - In the **Admin** area, a GitLab administrator must diff --git a/doc/user/profile/preferences.md b/doc/user/profile/preferences.md index 5a7036462ba123..a79bd57dc73bfa 100644 --- a/doc/user/profile/preferences.md +++ b/doc/user/profile/preferences.md @@ -472,7 +472,7 @@ You must be the administrator of the GitLab instance to configure GitLab with So {{< details >}} -- Offering: GitLab.com +- Offering: GitLab.com, GitLab Self-Managed {{< /details >}} @@ -485,16 +485,10 @@ You must be the administrator of the GitLab instance to configure GitLab with So - Enabled by default for [workspaces](../workspace/_index.md) in GitLab 17.6. Workspaces do not require any feature flags for the extension marketplace to be available. - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/508996) the `vscode_extension_marketplace_settings` [feature flag](../../administration/feature_flags.md) in GitLab 17.10. Disabled by default. - `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` [enabled on GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.11. +- `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/192659) in GitLab 18.1. {{< /history >}} -{{< alert type="flag" >}} - -The availability of this feature is controlled by a feature flag. -For more information, see the history. - -{{< /alert >}} - You can use the extension marketplace to search and [manage extensions](../project/web_ide/_index.md#manage-extensions) for the [Web IDE](../project/web_ide/_index.md) and [workspaces](../workspace/_index.md). For third-party extensions, you must enable the marketplace in user preferences. diff --git a/doc/user/project/web_ide/_index.md b/doc/user/project/web_ide/_index.md index 86c7cbb7cace4b..a21faa00d01a06 100644 --- a/doc/user/project/web_ide/_index.md +++ b/doc/user/project/web_ide/_index.md @@ -258,16 +258,10 @@ To view any notification you might have missed: - `web_ide_oauth` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167464) in GitLab 17.5. - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/508996) the `vscode_extension_marketplace_settings` [feature flag](../../../administration/feature_flags.md) in GitLab 17.10. Disabled by default. - `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` [enabled on GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.11. +- `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/192659) in GitLab 18.1. {{< /history >}} -{{< alert type="flag" >}} - -The availability of this feature is controlled by a feature flag. -For more information, see the history. - -{{< /alert >}} - The VS Code Extension Marketplace provides you with access to extensions that enhance the functionality of the Web IDE. By default, the GitLab Web IDE instance is configured to use the [Open VSX Registry](https://open-vsx.org/). diff --git a/ee/app/graphql/mutations/remote_development/workspace_operations/create.rb b/ee/app/graphql/mutations/remote_development/workspace_operations/create.rb index 03ba3fdd483663..85963b77e923e3 100644 --- a/ee/app/graphql/mutations/remote_development/workspace_operations/create.rb +++ b/ee/app/graphql/mutations/remote_development/workspace_operations/create.rb @@ -126,8 +126,7 @@ def resolve(args) WebIde::Settings.get( [:vscode_extension_marketplace_metadata, :vscode_extension_marketplace], - user: current_user, - vscode_extension_marketplace_feature_flag_enabled: true + user: current_user ) => { vscode_extension_marketplace_metadata: Hash => vscode_extension_marketplace_metadata, diff --git a/ee/app/helpers/ee/preferences_helper.rb b/ee/app/helpers/ee/preferences_helper.rb index e7241d9dbdb34a..47cd9bb227dd60 100644 --- a/ee/app/helpers/ee/preferences_helper.rb +++ b/ee/app/helpers/ee/preferences_helper.rb @@ -15,10 +15,8 @@ def excluded_dashboard_choices override :extensions_marketplace_view def extensions_marketplace_view - return unless ::WebIde::ExtensionMarketplace.feature_enabled_from_application_settings?(user: current_user) - if License.feature_available?(:remote_development) && - ::WebIde::ExtensionMarketplace.feature_enabled?(user: current_user) + ::WebIde::ExtensionMarketplace.feature_enabled_from_application_settings? build_extensions_marketplace_view( title: s_("Preferences|Web IDE and Workspaces"), message: s_("PreferencesIntegrations|Uses %{extensions_marketplace_home} as the extension marketplace " \ diff --git a/ee/app/models/ee/group.rb b/ee/app/models/ee/group.rb index 28e9afa9c5438c..b9c64dbd93ba7d 100644 --- a/ee/app/models/ee/group.rb +++ b/ee/app/models/ee/group.rb @@ -1049,7 +1049,7 @@ def code_suggestions_purchased? def can_manage_extensions_marketplace_for_enterprise_users? root? && licensed_feature_available?(:disable_extensions_marketplace_for_enterprise_users) && - ::WebIde::ExtensionMarketplace.feature_enabled_for_any_user? + ::WebIde::ExtensionMarketplace.feature_enabled_from_application_settings? end def enterprise_users_extensions_marketplace_enabled? diff --git a/ee/spec/helpers/preferences_helper_spec.rb b/ee/spec/helpers/preferences_helper_spec.rb index 44925ddb64d9fb..4a249ad2cb572a 100644 --- a/ee/spec/helpers/preferences_helper_spec.rb +++ b/ee/spec/helpers/preferences_helper_spec.rb @@ -48,18 +48,12 @@ end describe '#extensions_marketplace_view' do - let(:feature_enabled) { false } let(:application_setting_enabled) { true } subject { helper.extensions_marketplace_view } before do - allow(::WebIde::ExtensionMarketplace).to receive(:feature_enabled?) - .with(user: user) - .and_return(feature_enabled) - allow(::WebIde::ExtensionMarketplace).to receive(:feature_enabled_from_application_settings?) - .with(user: user) .and_return(application_setting_enabled) end @@ -75,24 +69,28 @@ end context 'when Web IDE Extension Marketplace feature is enabled' do - let(:feature_enabled) { true } + let(:application_setting_enabled) { true } it { is_expected.to match(a_hash_including(title: 'Web IDE and Workspaces', message: /IDE and Workspaces/)) } end context 'when Web IDE Extension Marketplace feature not enabled' do + let(:application_setting_enabled) { false } + it { is_expected.to match(a_hash_including(title: 'Workspaces', message: /for Workspaces/)) } end end context 'when remote_development licensed feature is not enabled' do + before do + stub_licensed_features(remote_development: false) + end + context 'when Web IDE Extension Marketplace feature is enabled' do - let(:feature_enabled) { true } + let(:application_setting_enabled) { true } - it { is_expected.to match(a_hash_including(title: 'Web IDE', message: /for the Web IDE/)) } + it { is_expected.to match(a_hash_including(name: 'extensions_marketplace')) } end - - it { is_expected.not_to match(a_hash_including(name: 'extensions_marketplace')) } end end diff --git a/ee/spec/lib/ee/web_ide/settings/extension_marketplace_metadata_generator_spec.rb b/ee/spec/lib/ee/web_ide/settings/extension_marketplace_metadata_generator_spec.rb index 10c030a3f9630f..aacedb7374631e 100644 --- a/ee/spec/lib/ee/web_ide/settings/extension_marketplace_metadata_generator_spec.rb +++ b/ee/spec/lib/ee/web_ide/settings/extension_marketplace_metadata_generator_spec.rb @@ -24,8 +24,7 @@ def flipper_id { requested_setting_names: [:vscode_extension_marketplace_metadata], options: { - user: user, - vscode_extension_marketplace_feature_flag_enabled: true + user: user }, settings: { vscode_extension_marketplace_home_url: marketplace_home_url @@ -59,7 +58,6 @@ def flipper_id allow(group).to receive(:enterprise_users_extensions_marketplace_enabled?).and_return(enterprise_group_enabled) allow(::WebIde::ExtensionMarketplace).to receive(:feature_enabled_from_application_settings?) - .with(user: user) .and_return(true) end diff --git a/ee/spec/lib/web_ide/settings/settings_integration_spec.rb b/ee/spec/lib/web_ide/settings/settings_integration_spec.rb index 76e2699fc7d61f..962875fb70dc2f 100644 --- a/ee/spec/lib/web_ide/settings/settings_integration_spec.rb +++ b/ee/spec/lib/web_ide/settings/settings_integration_spec.rb @@ -15,10 +15,6 @@ subject(:settings) { described_class.get([:vscode_extension_marketplace_metadata], options) } before do - stub_feature_flags( - web_ide_extensions_marketplace: true, - vscode_extension_marketplace_settings: true - ) stub_licensed_features(disable_extensions_marketplace_for_enterprise_users: true) stub_application_setting(vscode_extension_marketplace: { enabled: true, preset: 'open_vsx' }) user.update!(extensions_marketplace_opt_in_status: "enabled") diff --git a/ee/spec/models/ee/group_spec.rb b/ee/spec/models/ee/group_spec.rb index 58996fa8a29994..c451b518e76550 100644 --- a/ee/spec/models/ee/group_spec.rb +++ b/ee/spec/models/ee/group_spec.rb @@ -4217,7 +4217,7 @@ def webhook_headers with_them do before do - allow(::WebIde::ExtensionMarketplace).to receive(:feature_enabled_for_any_user?).and_return(feature_flags_enabled) + allow(::WebIde::ExtensionMarketplace).to receive(:feature_enabled_from_application_settings?).and_return(feature_flags_enabled) stub_licensed_features(disable_extensions_marketplace_for_enterprise_users: licensed_feature_available) end @@ -4284,7 +4284,7 @@ def webhook_headers with_them do before do group.update!(enterprise_users_extensions_marketplace_enabled: value) - allow(::WebIde::ExtensionMarketplace).to receive(:feature_enabled_for_any_user?).and_return(true) + allow(::WebIde::ExtensionMarketplace).to receive(:feature_enabled_from_application_settings?).and_return(true) stub_licensed_features(disable_extensions_marketplace_for_enterprise_users: licensed_feature_available) end diff --git a/ee/spec/requests/api/graphql/mutations/remote_development/workspace_operations/create_spec.rb b/ee/spec/requests/api/graphql/mutations/remote_development/workspace_operations/create_spec.rb index c37438c027edde..11a65ef74f5e71 100644 --- a/ee/spec/requests/api/graphql/mutations/remote_development/workspace_operations/create_spec.rb +++ b/ee/spec/requests/api/graphql/mutations/remote_development/workspace_operations/create_spec.rb @@ -117,8 +117,7 @@ def mutation_response allow(WebIde::Settings) .to receive(:get).with( [:vscode_extension_marketplace_metadata, :vscode_extension_marketplace], - user: current_user, - vscode_extension_marketplace_feature_flag_enabled: true + user: current_user ).and_return( { vscode_extension_marketplace_metadata: { enabled: true }, diff --git a/ee/spec/requests/groups_controller_spec.rb b/ee/spec/requests/groups_controller_spec.rb index 695db7ea48ec68..d0b6327cb4c40a 100644 --- a/ee/spec/requests/groups_controller_spec.rb +++ b/ee/spec/requests/groups_controller_spec.rb @@ -484,7 +484,6 @@ let(:params) { { group: { enterprise_users_extensions_marketplace_enabled: true } } } before do - stub_feature_flags(web_ide_extensions_marketplace: true) stub_application_setting(vscode_extension_marketplace: { enabled: true, preset: 'open_vsx' }) end diff --git a/lib/web_ide/extension_marketplace.rb b/lib/web_ide/extension_marketplace.rb index 5791bede7b2998..1aa9ed2617693e 100644 --- a/lib/web_ide/extension_marketplace.rb +++ b/lib/web_ide/extension_marketplace.rb @@ -2,31 +2,11 @@ module WebIde module ExtensionMarketplace - # Returns true if the extensions marketplace feature is enabled for any users - # - # @return [Boolean] - def self.feature_enabled_for_any_user? - # note: Intentionally pass `nil` here since we don't have a user in scope - feature_enabled_from_application_settings?(user: nil) && - feature_flag_enabled_for_any_actor?(:web_ide_extensions_marketplace) - end - - # Returns true if the extensions marketplace feature is enabled for the given user - # - # @param user [User] - # @return [Boolean] - def self.feature_enabled?(user:) - feature_enabled_from_application_settings?(user: user) && - feature_enabled_from_flags?(user: user) - end - # Returns true if the ExtensionMarketplace feature is enabled from application settings # # @param user [User, nil] Current user for feature enablement context # @return [Boolean] - def self.feature_enabled_from_application_settings?(user:) - return true unless should_use_application_settings?(user: user) - + def self.feature_enabled_from_application_settings? Gitlab::CurrentSettings.vscode_extension_marketplace&.fetch('enabled', false) end @@ -54,48 +34,7 @@ def self.help_preferences_url # @param [User] user The current user # @return [Hash] def self.webide_extension_marketplace_settings(user:) - Settings.get_single_setting( - :vscode_extension_marketplace_view_model, - user: user, - vscode_extension_marketplace_feature_flag_enabled: feature_enabled_from_flags?(user: user) - ) + Settings.get_single_setting(:vscode_extension_marketplace_view_model, user: user) end - - # Returns true if the given flag is enabled for any actor - # - # @param [Symbol] flag - # @return [Boolean] - def self.feature_flag_enabled_for_any_actor?(flag) - # Short circuit if we're globally enabled - return true if Feature.enabled?(flag, nil) - - # The feature could be conditionally applied, so check if `!off?` - # We also can't *just* check `!off?` because the ActiveRecord might not exist and be default enabled - feature = Feature.get(flag) # rubocop:disable Gitlab/AvoidFeatureGet -- See above - feature && !feature.off? - end - - # Returns true if we should use `feature_enabled_from_application_settings?` to determine feature availability - # - # @param user [User, nil] Current user for feature enablement context - # @return [Boolean] - def self.should_use_application_settings?(user:) - if user - Feature.enabled?(:vscode_extension_marketplace_settings, user) - else - feature_flag_enabled_for_any_actor?(:vscode_extension_marketplace_settings) - end - end - - # This returns true if the extensions marketplace flags are enabled - # - # @param user [User] - # @return [Boolean] - def self.feature_enabled_from_flags?(user:) - Feature.enabled?(:web_ide_extensions_marketplace, user) - end - - private_class_method :feature_flag_enabled_for_any_actor?, :should_use_application_settings?, - :feature_enabled_from_flags? end end diff --git a/lib/web_ide/settings/extension_marketplace_generator.rb b/lib/web_ide/settings/extension_marketplace_generator.rb index 47de4e9a054688..3bbbe455b5633f 100644 --- a/lib/web_ide/settings/extension_marketplace_generator.rb +++ b/lib/web_ide/settings/extension_marketplace_generator.rb @@ -8,19 +8,13 @@ class ExtensionMarketplaceGenerator def self.generate(context) return context unless context.fetch(:requested_setting_names).include?(:vscode_extension_marketplace) - user = context.dig(:options, :user) - - context[:settings][:vscode_extension_marketplace] = extension_marketplace_from_application_settings(user) + context[:settings][:vscode_extension_marketplace] = extension_marketplace_from_application_settings context end # @param [User, nil] user # @return [Hash] - def self.extension_marketplace_from_application_settings(user) - unless Feature.enabled?(:vscode_extension_marketplace_settings, user) - return ::WebIde::ExtensionMarketplacePreset.open_vsx.values - end - + def self.extension_marketplace_from_application_settings settings = Gitlab::CurrentSettings.vscode_extension_marketplace preset_key = settings.fetch("preset", ::WebIde::ExtensionMarketplacePreset.open_vsx.key) diff --git a/lib/web_ide/settings/extension_marketplace_metadata_generator.rb b/lib/web_ide/settings/extension_marketplace_metadata_generator.rb index fc53e9e1d06dab..d7c88186a1621e 100644 --- a/lib/web_ide/settings/extension_marketplace_metadata_generator.rb +++ b/lib/web_ide/settings/extension_marketplace_metadata_generator.rb @@ -29,16 +29,13 @@ def self.generate(context) vscode_extension_marketplace_home_url: String => marketplace_home_url, } } - options_with_defaults = { user: nil, vscode_extension_marketplace_feature_flag_enabled: nil }.merge(options) + options_with_defaults = { user: nil }.merge(options) options_with_defaults => { - user: ::User | NilClass => user, - vscode_extension_marketplace_feature_flag_enabled: TrueClass | FalseClass | NilClass => - extension_marketplace_feature_flag_enabled + user: ::User | NilClass => user } extension_marketplace_metadata = build_metadata( user: user, - flag_enabled: extension_marketplace_feature_flag_enabled, marketplace_home_url: marketplace_home_url ) @@ -49,12 +46,10 @@ def self.generate(context) # @param [User, nil] user # @param [Boolean, nil] flag_enabled # @return [Hash] - def self.build_metadata(user:, flag_enabled:, marketplace_home_url:) + def self.build_metadata(user:, marketplace_home_url:) return metadata_disabled(:no_user) unless user - return metadata_disabled(:no_flag) if flag_enabled.nil? - return metadata_disabled(:instance_disabled) unless flag_enabled - unless ::WebIde::ExtensionMarketplace.feature_enabled_from_application_settings?(user: user) + unless ::WebIde::ExtensionMarketplace.feature_enabled_from_application_settings? return metadata_disabled(:instance_disabled) end diff --git a/spec/features/ide_spec.rb b/spec/features/ide_spec.rb index 46d1ee96e126ed..8e6dfb63b0e586 100644 --- a/spec/features/ide_spec.rb +++ b/spec/features/ide_spec.rb @@ -11,11 +11,6 @@ let(:user) { create(:user, organizations: [current_organization]) } before do - # TODO - We need to be able to handle requests to https://*.cdn.web-ide.gitlab-static.net - # in order to support `web_ide_extensions_marketplace` in our feature specs. - # https://gitlab.com/gitlab-org/gitlab/-/issues/478626 - stub_feature_flags(web_ide_extensions_marketplace: false) - project.add_maintainer(user) sign_in(user) end diff --git a/spec/helpers/application_settings_helper_spec.rb b/spec/helpers/application_settings_helper_spec.rb index 5833a674e8194b..8849601ef17ffa 100644 --- a/spec/helpers/application_settings_helper_spec.rb +++ b/spec/helpers/application_settings_helper_spec.rb @@ -480,33 +480,21 @@ let(:vscode_extension_marketplace) { { "enabled" => false } } before do - stub_feature_flags(vscode_extension_marketplace_settings: feature_flag) - application_setting.vscode_extension_marketplace = vscode_extension_marketplace helper.instance_variable_set(:@application_setting, application_setting) end - context 'with flag on' do - it 'returns hash of view properties' do - expect(helper.vscode_extension_marketplace_settings_view).to match({ - title: _('VS Code Extension Marketplace'), - description: _('Enable VS Code Extension Marketplace and configure the extensions registry for Web IDE.'), - view_model: { - initialSettings: vscode_extension_marketplace, - presets: [ - hash_including("key" => "open_vsx") - ] - } - }) - end - end - - context 'with flag off' do - let(:feature_flag) { false } - - it 'returns nil' do - expect(helper.vscode_extension_marketplace_settings_view).to be_nil - end + it 'returns hash of view properties' do + expect(helper.vscode_extension_marketplace_settings_view).to match({ + title: _('VS Code Extension Marketplace'), + description: _('Enable VS Code Extension Marketplace and configure the extensions registry for Web IDE.'), + view_model: { + initialSettings: vscode_extension_marketplace, + presets: [ + hash_including("key" => "open_vsx") + ] + } + }) end end end diff --git a/spec/helpers/preferences_helper_spec.rb b/spec/helpers/preferences_helper_spec.rb index acc24554db9c47..613afcef5eddab 100644 --- a/spec/helpers/preferences_helper_spec.rb +++ b/spec/helpers/preferences_helper_spec.rb @@ -269,11 +269,6 @@ def stub_user(messages = {}) context 'when Web IDE Extension Marketplace feature is enabled' do before do allow(::WebIde::ExtensionMarketplace).to receive(:feature_enabled_from_application_settings?) - .with(user: user) - .and_return(true) - - allow(::WebIde::ExtensionMarketplace).to receive(:feature_enabled?) - .with(user: user) .and_return(true) end diff --git a/spec/lib/web_ide/extension_marketplace_spec.rb b/spec/lib/web_ide/extension_marketplace_spec.rb index 19f69a3926b1b1..be72886339aee5 100644 --- a/spec/lib/web_ide/extension_marketplace_spec.rb +++ b/spec/lib/web_ide/extension_marketplace_spec.rb @@ -24,53 +24,19 @@ let_it_be_with_reload(:current_user) { create(:user) } - describe 'feature enabled methods' do - where(:web_ide_extensions_marketplace, :vscode_extension_marketplace_settings, :app_setting, - :expectation) do - ref(:current_user) | false | {} | true - ref(:current_user) | true | {} | false - ref(:current_user) | true | { enabled: true } | true - false | false | { enabled: true } | false - end - - with_them do - before do - stub_feature_flags( - web_ide_extensions_marketplace: web_ide_extensions_marketplace, - vscode_extension_marketplace_settings: vscode_extension_marketplace_settings - ) - - stub_application_setting(vscode_extension_marketplace: app_setting) - end - - describe '#feature_enabled?' do - it { expect(described_class.feature_enabled?(user: current_user)).to be(expectation) } - end - - describe '#feature_enabled_for_any_user?' do - it { expect(described_class.feature_enabled_for_any_user?).to be(expectation) } - end - end - end - describe '#feature_enabled_from_application_settings?' do - where(:vscode_extension_marketplace_settings, :app_setting, :user_arg, :expectation) do - false | {} | ref(:current_user) | true - false | { enabled: true } | ref(:current_user) | true - false | { enabled: true } | nil | true - ref(:current_user) | { enabled: true } | nil | true - ref(:current_user) | { enabled: true } | ref(:current_user) | true - ref(:current_user) | {} | ref(:current_user) | false - ref(:current_user) | { enabled: false } | ref(:current_user) | false + where(:app_setting, :expectation) do + { enabled: true } | true + { enabled: false } | false + {} | false end subject(:enabled) do - described_class.feature_enabled_from_application_settings?(user: user_arg) + described_class.feature_enabled_from_application_settings? end with_them do before do - stub_feature_flags(vscode_extension_marketplace_settings: vscode_extension_marketplace_settings) stub_application_setting(vscode_extension_marketplace: app_setting) end @@ -79,11 +45,10 @@ end describe '#marketplace_home_url' do - where(:vscode_extension_marketplace_settings, :app_setting, :expectation) do - false | {} | "https://open-vsx.org" - true | {} | "https://open-vsx.org" - true | ref(:custom_app_setting) | "https://example.com:8444" - true | ref(:open_vsx_app_setting) | "https://open-vsx.org" + where(:app_setting, :expectation) do + {} | "https://open-vsx.org" + ref(:open_vsx_app_setting) | "https://open-vsx.org" + ref(:custom_app_setting) | "https://example.com:8444" end subject(:marketplace_home_url) do @@ -92,7 +57,6 @@ with_them do before do - stub_feature_flags(vscode_extension_marketplace_settings: vscode_extension_marketplace_settings) stub_application_setting(vscode_extension_marketplace: app_setting) end @@ -108,28 +72,19 @@ describe '#webide_extension_marketplace_settings' do # rubocop:disable Layout/LineLength -- last parameter extens past line but is preferable to rubocop's suggestion - where(:web_ide_extensions_marketplace, :vscode_extension_marketplace_settings, :app_setting, :opt_in_status, :opt_in_url, :expectation) do - # web_ide_extensions_marketplace | vscode_extension_marketplace_settings | app_setting | opt_in_status | opt_in_url | expectation - true | false | {} | :enabled | nil | lazy { { enabled: true, vscode_settings: ::WebIde::ExtensionMarketplacePreset.open_vsx.values } } - true | false | {} | :unset | nil | lazy { { enabled: false, reason: :opt_in_unset, help_url: /#{help_url}/, user_preferences_url: /#{user_preferences_url}/ } } - true | false | {} | :disabled | nil | lazy { { enabled: false, reason: :opt_in_disabled, help_url: /#{help_url}/, user_preferences_url: /#{user_preferences_url}/ } } - false | false | {} | :enabled | nil | lazy { { enabled: false, reason: :instance_disabled, help_url: /#{help_url}/ } } - true | true | {} | :enabled | nil | lazy { { enabled: false, reason: :instance_disabled, help_url: /#{help_url}/ } } - true | true | { enabled: false } | :enabled | nil | lazy { { enabled: false, reason: :instance_disabled, help_url: /#{help_url}/ } } - true | true | ref(:custom_app_setting) | :enabled | nil | lazy { { enabled: false, reason: :opt_in_unset, help_url: /#{help_url}/, user_preferences_url: /#{user_preferences_url}/ } } - true | true | ref(:custom_app_setting) | :enabled | ref(:custom_home_url) | lazy { { enabled: true, vscode_settings: custom_app_setting[:custom_values] } } - true | true | ref(:open_vsx_app_setting) | :enabled | nil | lazy { { enabled: true, vscode_settings: ::WebIde::ExtensionMarketplacePreset.open_vsx.values } } + where(:app_setting, :opt_in_status, :opt_in_url, :expectation) do + # app_setting | opt_in_status | opt_in_url | expectation + {} | :enabled | nil | lazy { { enabled: false, reason: :instance_disabled, help_url: /#{help_url}/ } } + { enabled: false } | :enabled | nil | lazy { { enabled: false, reason: :instance_disabled, help_url: /#{help_url}/ } } + ref(:custom_app_setting) | :enabled | nil | lazy { { enabled: false, reason: :opt_in_unset, help_url: /#{help_url}/, user_preferences_url: /#{user_preferences_url}/ } } + ref(:custom_app_setting) | :enabled | ref(:custom_home_url) | lazy { { enabled: true, vscode_settings: custom_app_setting[:custom_values] } } + ref(:open_vsx_app_setting) | :enabled | nil | lazy { { enabled: true, vscode_settings: ::WebIde::ExtensionMarketplacePreset.open_vsx.values } } end # rubocop:enable Layout/LineLength subject(:webide_settings) { described_class.webide_extension_marketplace_settings(user: current_user) } before do - stub_feature_flags( - vscode_extension_marketplace_settings: vscode_extension_marketplace_settings, - web_ide_extensions_marketplace: web_ide_extensions_marketplace - ) - stub_application_setting(vscode_extension_marketplace: app_setting) current_user.update!( diff --git a/spec/lib/web_ide/settings/extension_marketplace_generator_spec.rb b/spec/lib/web_ide/settings/extension_marketplace_generator_spec.rb index 891400204966fe..faaf72504a0ed6 100644 --- a/spec/lib/web_ide/settings/extension_marketplace_generator_spec.rb +++ b/spec/lib/web_ide/settings/extension_marketplace_generator_spec.rb @@ -41,18 +41,16 @@ def flipper_id subject(:result) { described_class.generate(context)[:settings][:vscode_extension_marketplace] } before do - allow(Feature).to receive(:enabled?).with(:vscode_extension_marketplace_settings, user).and_return(settings_flag) - allow(Gitlab::CurrentSettings).to receive(:vscode_extension_marketplace).and_return(app_setting) + allow(Gitlab::CurrentSettings).to receive(:method_missing).and_return(app_setting) end describe 'default (with setting requested)' do - where(:settings_flag, :app_setting, :expectation) do - false | {} | ::WebIde::ExtensionMarketplacePreset.open_vsx.values - true | {} | ::WebIde::ExtensionMarketplacePreset.open_vsx.values - true | { "preset" => 'open_vsx' } | ::WebIde::ExtensionMarketplacePreset.open_vsx.values - true | ref(:custom_app_settings) | { item_url: "abc", service_url: "def", resource_url_template: "ghi" } + where(:app_setting, :expectation) do + {} | ::WebIde::ExtensionMarketplacePreset.open_vsx.values + { "preset" => 'open_vsx' } | ::WebIde::ExtensionMarketplacePreset.open_vsx.values + ref(:custom_app_settings) | { item_url: "abc", service_url: "def", resource_url_template: "ghi" } # This should never happen, but lets test it anyways - true | { "preset" => 'DNE' } | nil + { "preset" => 'DNE' } | nil end with_them do diff --git a/spec/lib/web_ide/settings/extension_marketplace_metadata_generator_spec.rb b/spec/lib/web_ide/settings/extension_marketplace_metadata_generator_spec.rb index aae02ae3f6f12a..0c9ce44876032d 100644 --- a/spec/lib/web_ide/settings/extension_marketplace_metadata_generator_spec.rb +++ b/spec/lib/web_ide/settings/extension_marketplace_metadata_generator_spec.rb @@ -46,26 +46,17 @@ where( :user_exists, :opt_in_status, - :flag_exists, - :flag_enabled, :app_settings_enabled, :expected_vscode_extension_marketplace_metadata ) do # @formatter:off - Turn off RubyMine autoformatting - - # rubocop:disable Layout/LineLength -- Parameterized rows overflow and its better than the alternative - # user exists | opt_in_status | flag exists | flag_enabled | app_settings_enabled | expected_settings - false | :undefined | false | :undefined | true | { enabled: false, disabled_reason: :no_user } - false | :undefined | true | true | true | { enabled: false, disabled_reason: :no_user } - true | :unset | false | :undefined | true | { enabled: false, disabled_reason: :no_flag } - true | :unset | true | false | true | { enabled: false, disabled_reason: :instance_disabled } - true | :unset | true | true | true | { enabled: false, disabled_reason: :opt_in_unset } - true | :disabled | true | true | true | { enabled: false, disabled_reason: :opt_in_disabled } - true | :enabled | true | true | false | { enabled: false, disabled_reason: :instance_disabled } - true | :enabled | true | true | true | { enabled: true } - true | :invalid | true | true | true | RuntimeError - # rubocop:enable Layout/LineLength - + # user exists | opt_in_status | app_settings_enabled | expected_settings + false | :undefined | true | { enabled: false, disabled_reason: :no_user } + true | :unset | true | { enabled: false, disabled_reason: :opt_in_unset } + true | :disabled | true | { enabled: false, disabled_reason: :opt_in_disabled } + true | :enabled | false | { enabled: false, disabled_reason: :instance_disabled } + true | :enabled | true | { enabled: true } + true | :invalid | true | RuntimeError # @formatter:on end @@ -87,7 +78,6 @@ def flipper_id let(:options) do options = {} options[:user] = user if user_exists - options[:vscode_extension_marketplace_feature_flag_enabled] = flag_enabled if flag_exists options end @@ -100,7 +90,6 @@ def flipper_id allow(user).to receive(:enterprise_user?).and_return(false) allow(enums).to receive(:statuses).and_return({ unset: :unset, enabled: :enabled, disabled: :disabled }) allow(::WebIde::ExtensionMarketplace).to receive(:feature_enabled_from_application_settings?) - .with(user: user) .and_return(app_settings_enabled) end diff --git a/spec/views/admin/application_settings/_extension_marketplace.html.haml_spec.rb b/spec/views/admin/application_settings/_extension_marketplace.html.haml_spec.rb index c4379ad581d246..1bf46b5be2065a 100644 --- a/spec/views/admin/application_settings/_extension_marketplace.html.haml_spec.rb +++ b/spec/views/admin/application_settings/_extension_marketplace.html.haml_spec.rb @@ -3,8 +3,6 @@ require 'spec_helper' RSpec.describe 'admin/application_settings/_extension_marketplace', feature_category: :web_ide do - let(:feature_available) { true } - subject(:page) do # We use `view.render`, because just `render` throws a "no implicit conversion of nil into String" exception # https://gitlab.com/gitlab-org/gitlab/-/merge_requests/53093#note_499060593 @@ -14,50 +12,36 @@ rendered && Nokogiri::HTML.parse(rendered) end - before do - stub_feature_flags(vscode_extension_marketplace_settings: feature_available) - end - - context 'when feature available' do - it 'renders settings' do - settings = page.at('#js-extension-marketplace-settings') + it 'renders settings' do + settings = page.at('#js-extension-marketplace-settings') - expect(settings).not_to be_nil - expect(settings).to have_text(_('VS Code Extension Marketplace')) - expect(settings).to have_text( - _('Enable VS Code Extension Marketplace and configure the extensions registry for Web IDE.') - ) - end + expect(settings).not_to be_nil + expect(settings).to have_text(_('VS Code Extension Marketplace')) + expect(settings).to have_text( + _('Enable VS Code Extension Marketplace and configure the extensions registry for Web IDE.') + ) + end - it 'renders data-view-model for vue app' do - vue_app = page.at('#js-extension-marketplace-settings-app') - expected_presets = ::WebIde::ExtensionMarketplacePreset.all.map do |x| - { - key: x.key, - name: x.name, - values: { - serviceUrl: x.values[:service_url], - itemUrl: x.values[:item_url], - resourceUrlTemplate: x.values[:resource_url_template] - } + it 'renders data-view-model for vue app' do + vue_app = page.at('#js-extension-marketplace-settings-app') + expected_presets = ::WebIde::ExtensionMarketplacePreset.all.map do |x| + { + key: x.key, + name: x.name, + values: { + serviceUrl: x.values[:service_url], + itemUrl: x.values[:item_url], + resourceUrlTemplate: x.values[:resource_url_template] } - end - - expected_json = { - presets: expected_presets, - initialSettings: { enabled: false } - }.to_json - - expect(vue_app).not_to be_nil - expect(vue_app['data-view-model']).to eq(expected_json) + } end - end - context 'when feature not available' do - let(:feature_available) { false } + expected_json = { + presets: expected_presets, + initialSettings: { enabled: false } + }.to_json - it 'renders nothing' do - expect(page).to be_nil - end + expect(vue_app).not_to be_nil + expect(vue_app['data-view-model']).to eq(expected_json) end end -- GitLab From ae91558d8fbc56568127827acd162a2dc9c33a15 Mon Sep 17 00:00:00 2001 From: Enrique Alcantara Date: Mon, 2 Jun 2025 09:00:28 +0200 Subject: [PATCH 2/7] Technical writing feedback Rewrite feature flag history to make it easier to understand --- doc/user/enterprise_user/_index.md | 10 ++++++++-- doc/user/profile/preferences.md | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/doc/user/enterprise_user/_index.md b/doc/user/enterprise_user/_index.md index 8987b29cd6b9dc..bcf85b897b787a 100644 --- a/doc/user/enterprise_user/_index.md +++ b/doc/user/enterprise_user/_index.md @@ -262,6 +262,12 @@ Allowing group Owners to change primary emails is proposed in [issue 412966](htt ### Enable the extension marketplace for the Web IDE and workspaces +{{< details >}} + +- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated + +{{< /details >}} + {{< history >}} - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/161819) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 17.0 [with flags](../../administration/feature_flags.md) named `web_ide_oauth` and `web_ide_extensions_marketplace`. Disabled by default. @@ -269,8 +275,8 @@ Allowing group Owners to change primary emails is proposed in [issue 412966](htt - `web_ide_extensions_marketplace` [enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.4. - `web_ide_oauth` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167464) in GitLab 17.5. - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/508996) the `vscode_extension_marketplace_settings` [feature flag](../../administration/feature_flags.md) in GitLab 17.10. Disabled by default. -- `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` [enabled on GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.11. -- `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/192659) in GitLab 18.1. +- `web_ide_extensions_marketplace` [enabled on GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/184662), and `vscode_extension_marketplace_settings` [enabled on GitLab.com and GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/184662) in GitLab 17.11. +- [Generally available](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/192659) in GitLab 18.1. Feature flags `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` removed. {{< /history >}} diff --git a/doc/user/profile/preferences.md b/doc/user/profile/preferences.md index a79bd57dc73bfa..6c145827474e38 100644 --- a/doc/user/profile/preferences.md +++ b/doc/user/profile/preferences.md @@ -472,7 +472,7 @@ You must be the administrator of the GitLab instance to configure GitLab with So {{< details >}} -- Offering: GitLab.com, GitLab Self-Managed +- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated {{< /details >}} -- GitLab From b5047e17dcf6e5964b32e35f1e9549044470a7eb Mon Sep 17 00:00:00 2001 From: Enrique Alcantara Date: Tue, 3 Jun 2025 08:54:39 +0200 Subject: [PATCH 3/7] Code review feedback Use vscode_extension_marketplace_enabled accessor to determine if Extension Marketplace is enabled to avoid two default values definitions --- doc/user/profile/preferences.md | 4 ++-- doc/user/project/web_ide/_index.md | 6 +++++- ee/spec/lib/web_ide/settings/settings_integration_spec.rb | 2 +- ee/spec/models/ee/group_spec.rb | 4 ++-- ee/spec/requests/groups_controller_spec.rb | 2 +- lib/web_ide/extension_marketplace.rb | 3 +-- spec/lib/web_ide/extension_marketplace_spec.rb | 3 ++- 7 files changed, 14 insertions(+), 10 deletions(-) diff --git a/doc/user/profile/preferences.md b/doc/user/profile/preferences.md index 6c145827474e38..c65d72b8f9acca 100644 --- a/doc/user/profile/preferences.md +++ b/doc/user/profile/preferences.md @@ -484,8 +484,8 @@ You must be the administrator of the GitLab instance to configure GitLab with So - `web_ide_oauth` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167464) in GitLab 17.5. - Enabled by default for [workspaces](../workspace/_index.md) in GitLab 17.6. Workspaces do not require any feature flags for the extension marketplace to be available. - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/508996) the `vscode_extension_marketplace_settings` [feature flag](../../administration/feature_flags.md) in GitLab 17.10. Disabled by default. -- `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` [enabled on GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.11. -- `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/192659) in GitLab 18.1. +- `web_ide_extensions_marketplace` [enabled on GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/184662), and `vscode_extension_marketplace_settings` [enabled on GitLab.com and GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/184662) in GitLab 17.11. +- [Generally available](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/192659) in GitLab 18.1. Feature flags `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` removed. {{< /history >}} diff --git a/doc/user/project/web_ide/_index.md b/doc/user/project/web_ide/_index.md index a21faa00d01a06..68d5819ead10f5 100644 --- a/doc/user/project/web_ide/_index.md +++ b/doc/user/project/web_ide/_index.md @@ -15,7 +15,11 @@ title: Web IDE {{< history >}} -- [Generally available](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/188427) in GitLab 18.0. Feature flag `vscode_web_ide` removed. +- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/95169) in GitLab 15.7 [with a flag](../../../administration/feature_flags.md) named `vscode_web_ide`. Disabled by default. +- [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/371084) in GitLab 15.7. +- [Enabled on GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/115741) in GitLab 15.11. +- `web_ide_extensions_marketplace` [enabled on GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/184662), and `vscode_extension_marketplace_settings` [enabled on GitLab.com and GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/184662) in GitLab 17.11. +- [Generally available](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/192659) in GitLab 18.1. Feature flags `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` removed. {{< /history >}} diff --git a/ee/spec/lib/web_ide/settings/settings_integration_spec.rb b/ee/spec/lib/web_ide/settings/settings_integration_spec.rb index 962875fb70dc2f..24e0984ffe3151 100644 --- a/ee/spec/lib/web_ide/settings/settings_integration_spec.rb +++ b/ee/spec/lib/web_ide/settings/settings_integration_spec.rb @@ -16,7 +16,7 @@ before do stub_licensed_features(disable_extensions_marketplace_for_enterprise_users: true) - stub_application_setting(vscode_extension_marketplace: { enabled: true, preset: 'open_vsx' }) + stub_application_setting(vscode_extension_marketplace_enabled: true) user.update!(extensions_marketplace_opt_in_status: "enabled") end diff --git a/ee/spec/models/ee/group_spec.rb b/ee/spec/models/ee/group_spec.rb index c451b518e76550..bd802c62d46bdf 100644 --- a/ee/spec/models/ee/group_spec.rb +++ b/ee/spec/models/ee/group_spec.rb @@ -4208,7 +4208,7 @@ def webhook_headers subject(:can_manage_extensions_marketplace_for_enterprise_users?) { group.can_manage_extensions_marketplace_for_enterprise_users? } - where(:group, :licensed_feature_available, :feature_flags_enabled, :expected) do + where(:group, :licensed_feature_available, :settings_enabled, :expected) do ref(:root_group) | true | true | true ref(:child_group) | true | true | false ref(:root_group) | false | true | false @@ -4217,7 +4217,7 @@ def webhook_headers with_them do before do - allow(::WebIde::ExtensionMarketplace).to receive(:feature_enabled_from_application_settings?).and_return(feature_flags_enabled) + allow(::WebIde::ExtensionMarketplace).to receive(:feature_enabled_from_application_settings?).and_return(settings_enabled) stub_licensed_features(disable_extensions_marketplace_for_enterprise_users: licensed_feature_available) end diff --git a/ee/spec/requests/groups_controller_spec.rb b/ee/spec/requests/groups_controller_spec.rb index d0b6327cb4c40a..b004ea23446372 100644 --- a/ee/spec/requests/groups_controller_spec.rb +++ b/ee/spec/requests/groups_controller_spec.rb @@ -484,7 +484,7 @@ let(:params) { { group: { enterprise_users_extensions_marketplace_enabled: true } } } before do - stub_application_setting(vscode_extension_marketplace: { enabled: true, preset: 'open_vsx' }) + stub_application_setting(vscode_extension_marketplace_enabled: true) end it 'does not change the column' do diff --git a/lib/web_ide/extension_marketplace.rb b/lib/web_ide/extension_marketplace.rb index 1aa9ed2617693e..adaecbe2f957ad 100644 --- a/lib/web_ide/extension_marketplace.rb +++ b/lib/web_ide/extension_marketplace.rb @@ -4,10 +4,9 @@ module WebIde module ExtensionMarketplace # Returns true if the ExtensionMarketplace feature is enabled from application settings # - # @param user [User, nil] Current user for feature enablement context # @return [Boolean] def self.feature_enabled_from_application_settings? - Gitlab::CurrentSettings.vscode_extension_marketplace&.fetch('enabled', false) + !!Gitlab::CurrentSettings.vscode_extension_marketplace_enabled end # This value is used when the end-user is accepting the third-party extension marketplace integration. diff --git a/spec/lib/web_ide/extension_marketplace_spec.rb b/spec/lib/web_ide/extension_marketplace_spec.rb index be72886339aee5..6c114347c83201 100644 --- a/spec/lib/web_ide/extension_marketplace_spec.rb +++ b/spec/lib/web_ide/extension_marketplace_spec.rb @@ -37,7 +37,7 @@ with_them do before do - stub_application_setting(vscode_extension_marketplace: app_setting) + stub_application_setting(vscode_extension_marketplace_enabled: app_setting.fetch(:enabled, nil)) end it { is_expected.to be(expectation) } @@ -86,6 +86,7 @@ before do stub_application_setting(vscode_extension_marketplace: app_setting) + stub_application_setting(vscode_extension_marketplace_enabled: app_setting.fetch(:enabled, nil)) current_user.update!( extensions_marketplace_opt_in_status: opt_in_status, -- GitLab From 430240ae0148438426b9bbdae6f662057ca77fc8 Mon Sep 17 00:00:00 2001 From: Enrique Alcantara Date: Wed, 4 Jun 2025 08:21:31 +0200 Subject: [PATCH 4/7] Fix docs merge conflicts --- doc/user/project/web_ide/_index.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/doc/user/project/web_ide/_index.md b/doc/user/project/web_ide/_index.md index 68d5819ead10f5..a21faa00d01a06 100644 --- a/doc/user/project/web_ide/_index.md +++ b/doc/user/project/web_ide/_index.md @@ -15,11 +15,7 @@ title: Web IDE {{< history >}} -- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/95169) in GitLab 15.7 [with a flag](../../../administration/feature_flags.md) named `vscode_web_ide`. Disabled by default. -- [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/371084) in GitLab 15.7. -- [Enabled on GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/115741) in GitLab 15.11. -- `web_ide_extensions_marketplace` [enabled on GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/184662), and `vscode_extension_marketplace_settings` [enabled on GitLab.com and GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/184662) in GitLab 17.11. -- [Generally available](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/192659) in GitLab 18.1. Feature flags `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` removed. +- [Generally available](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/188427) in GitLab 18.0. Feature flag `vscode_web_ide` removed. {{< /history >}} -- GitLab From 3e9596622b86e3730c03f47502b696850f1b7482 Mon Sep 17 00:00:00 2001 From: Enrique Alcantara Date: Wed, 4 Jun 2025 08:25:51 +0200 Subject: [PATCH 5/7] Code review feedback Replace calls to stub_application_setting with real updates to the underlying model --- lib/web_ide/extension_marketplace.rb | 2 +- spec/lib/web_ide/extension_marketplace_spec.rb | 9 ++++----- .../graphql/mutations/user_preferences/update_spec.rb | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/lib/web_ide/extension_marketplace.rb b/lib/web_ide/extension_marketplace.rb index adaecbe2f957ad..c6c0fd7ee21576 100644 --- a/lib/web_ide/extension_marketplace.rb +++ b/lib/web_ide/extension_marketplace.rb @@ -6,7 +6,7 @@ module ExtensionMarketplace # # @return [Boolean] def self.feature_enabled_from_application_settings? - !!Gitlab::CurrentSettings.vscode_extension_marketplace_enabled + Gitlab::CurrentSettings.vscode_extension_marketplace_enabled? end # This value is used when the end-user is accepting the third-party extension marketplace integration. diff --git a/spec/lib/web_ide/extension_marketplace_spec.rb b/spec/lib/web_ide/extension_marketplace_spec.rb index 6c114347c83201..e7ca71cad80dd8 100644 --- a/spec/lib/web_ide/extension_marketplace_spec.rb +++ b/spec/lib/web_ide/extension_marketplace_spec.rb @@ -37,7 +37,7 @@ with_them do before do - stub_application_setting(vscode_extension_marketplace_enabled: app_setting.fetch(:enabled, nil)) + Gitlab::CurrentSettings.update!(vscode_extension_marketplace: app_setting) end it { is_expected.to be(expectation) } @@ -57,7 +57,7 @@ with_them do before do - stub_application_setting(vscode_extension_marketplace: app_setting) + Gitlab::CurrentSettings.update!(vscode_extension_marketplace: app_setting) end it { is_expected.to eq(expectation) } @@ -71,7 +71,7 @@ end describe '#webide_extension_marketplace_settings' do - # rubocop:disable Layout/LineLength -- last parameter extens past line but is preferable to rubocop's suggestion + # rubocop:disable Layout/LineLength -- last parameter extends past line but is preferable to rubocop's suggestion where(:app_setting, :opt_in_status, :opt_in_url, :expectation) do # app_setting | opt_in_status | opt_in_url | expectation {} | :enabled | nil | lazy { { enabled: false, reason: :instance_disabled, help_url: /#{help_url}/ } } @@ -85,8 +85,7 @@ subject(:webide_settings) { described_class.webide_extension_marketplace_settings(user: current_user) } before do - stub_application_setting(vscode_extension_marketplace: app_setting) - stub_application_setting(vscode_extension_marketplace_enabled: app_setting.fetch(:enabled, nil)) + Gitlab::CurrentSettings.update!(vscode_extension_marketplace: app_setting) current_user.update!( extensions_marketplace_opt_in_status: opt_in_status, diff --git a/spec/requests/api/graphql/mutations/user_preferences/update_spec.rb b/spec/requests/api/graphql/mutations/user_preferences/update_spec.rb index 85be19c0027ca8..f8f6f61d7e3618 100644 --- a/spec/requests/api/graphql/mutations/user_preferences/update_spec.rb +++ b/spec/requests/api/graphql/mutations/user_preferences/update_spec.rb @@ -26,7 +26,7 @@ let(:mutation_response) { graphql_mutation_response(:userPreferencesUpdate) } before do - stub_application_setting(vscode_extension_marketplace: { + Gitlab::CurrentSettings.update!(vscode_extension_marketplace: { enabled: false, preset: 'custom', custom_values: { -- GitLab From 57f63680a13b8c988dae77d7f06225aafeccfbcb Mon Sep 17 00:00:00 2001 From: Enrique Alcantara Date: Wed, 4 Jun 2025 08:50:23 +0200 Subject: [PATCH 6/7] Fix feature flags history docs after rebase --- doc/user/project/web_ide/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/user/project/web_ide/_index.md b/doc/user/project/web_ide/_index.md index a21faa00d01a06..4305427ba94616 100644 --- a/doc/user/project/web_ide/_index.md +++ b/doc/user/project/web_ide/_index.md @@ -257,8 +257,8 @@ To view any notification you might have missed: - `web_ide_extensions_marketplace` [enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.4. - `web_ide_oauth` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167464) in GitLab 17.5. - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/508996) the `vscode_extension_marketplace_settings` [feature flag](../../../administration/feature_flags.md) in GitLab 17.10. Disabled by default. -- `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` [enabled on GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.11. -- `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/192659) in GitLab 18.1. +- `web_ide_extensions_marketplace` [enabled on GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/184662), and `vscode_extension_marketplace_settings` [enabled on GitLab.com and GitLab Self-Managed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/184662) in GitLab 17.11. +- [Generally available](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/192659) in GitLab 18.1. Feature flags `web_ide_extensions_marketplace` and `vscode_extension_marketplace_settings` removed. {{< /history >}} -- GitLab From 4cae89466432f60b15395be6ee98ecf7c7b51c30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Alc=C3=A1ntara?= Date: Thu, 5 Jun 2025 08:46:09 +0200 Subject: [PATCH 7/7] Technical writing feedback --- doc/user/enterprise_user/_index.md | 2 +- doc/user/profile/preferences.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/user/enterprise_user/_index.md b/doc/user/enterprise_user/_index.md index bcf85b897b787a..af845faf751862 100644 --- a/doc/user/enterprise_user/_index.md +++ b/doc/user/enterprise_user/_index.md @@ -270,7 +270,7 @@ Allowing group Owners to change primary emails is proposed in [issue 412966](htt {{< history >}} -- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/161819) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 17.0 [with flags](../../administration/feature_flags.md) named `web_ide_oauth` and `web_ide_extensions_marketplace`. Disabled by default. +- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/161819) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 17.4 [with flags](../../administration/feature_flags.md) named `web_ide_oauth` and `web_ide_extensions_marketplace`. Disabled by default. - `web_ide_oauth` [enabled on GitLab.com, GitLab Self-Managed, and GitLab Dedicated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163181) in GitLab 17.4. - `web_ide_extensions_marketplace` [enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.4. - `web_ide_oauth` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167464) in GitLab 17.5. diff --git a/doc/user/profile/preferences.md b/doc/user/profile/preferences.md index c65d72b8f9acca..99d15b8ecb22ba 100644 --- a/doc/user/profile/preferences.md +++ b/doc/user/profile/preferences.md @@ -478,7 +478,7 @@ You must be the administrator of the GitLab instance to configure GitLab with So {{< history >}} -- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/161819) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 17.0 [with flags](../../administration/feature_flags.md) named `web_ide_oauth` and `web_ide_extensions_marketplace`. Disabled by default. +- [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/151352) as a [beta](../../policy/development_stages_support.md#beta) in GitLab 17.0 [with flags](../../administration/feature_flags.md) named `web_ide_oauth` and `web_ide_extensions_marketplace`. Disabled by default. - `web_ide_oauth` [enabled on GitLab.com, GitLab Self-Managed, and GitLab Dedicated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/163181) in GitLab 17.4. - `web_ide_extensions_marketplace` [enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/459028) in GitLab 17.4. - `web_ide_oauth` [removed](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/167464) in GitLab 17.5. -- GitLab