From b717ff8e489cc7c86fdeac474d847053d45724ac Mon Sep 17 00:00:00 2001 From: Luke Duncalfe Date: Wed, 19 Apr 2023 10:54:53 +1200 Subject: [PATCH 1/2] Moving Slack::API to FOSS --- .rubocop_todo/rspec/missing_feature_category.yml | 1 - {ee/lib => lib}/slack/api.rb | 0 {ee/spec => spec}/lib/slack/api_spec.rb | 2 +- 3 files changed, 1 insertion(+), 2 deletions(-) rename {ee/lib => lib}/slack/api.rb (100%) rename {ee/spec => spec}/lib/slack/api_spec.rb (94%) diff --git a/.rubocop_todo/rspec/missing_feature_category.yml b/.rubocop_todo/rspec/missing_feature_category.yml index 6fa47e8788fba5..150eb5cc929425 100644 --- a/.rubocop_todo/rspec/missing_feature_category.yml +++ b/.rubocop_todo/rspec/missing_feature_category.yml @@ -1036,7 +1036,6 @@ RSpec/MissingFeatureCategory: - 'ee/spec/lib/quality/seeders/vulnerabilities_spec.rb' - 'ee/spec/lib/sidebars/groups/menus/analytics_menu_spec.rb' - 'ee/spec/lib/sidebars/groups/menus/security_compliance_menu_spec.rb' - - 'ee/spec/lib/slack/api_spec.rb' - 'ee/spec/lib/slack/block_kit/app_home_opened_spec.rb' - 'ee/spec/lib/slack/block_kit/incident_management/incident_modal_opened_spec.rb' - 'ee/spec/lib/system_check/app/search_check_spec.rb' diff --git a/ee/lib/slack/api.rb b/lib/slack/api.rb similarity index 100% rename from ee/lib/slack/api.rb rename to lib/slack/api.rb diff --git a/ee/spec/lib/slack/api_spec.rb b/spec/lib/slack/api_spec.rb similarity index 94% rename from ee/spec/lib/slack/api_spec.rb rename to spec/lib/slack/api_spec.rb index 29b6a055bd3f81..360e02841640ad 100644 --- a/ee/spec/lib/slack/api_spec.rb +++ b/spec/lib/slack/api_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Slack::API do +RSpec.describe Slack::API, feature_category: :integrations do describe '#post' do let(:slack_installation) { build(:slack_integration) } let(:api_method) { 'api_method_call' } -- GitLab From b1d3fe9dfa4ca504edad2fa70ad2ce04a563b695 Mon Sep 17 00:00:00 2001 From: Luke Duncalfe Date: Tue, 18 Apr 2023 15:19:07 +1200 Subject: [PATCH 2/2] Move GitLab for Slack app models to FOSS This change is part of https://gitlab.com/gitlab-org/gitlab/-/issues/355896 to move all GitLab for Slack app code to FOSS. This MR moves: - Models - Factories --- .rubocop_todo/gitlab/namespaced_class.yml | 2 +- .rubocop_todo/layout/argument_alignment.yml | 1 - .../layout/space_in_lambda_literal.yml | 1 - .rubocop_todo/lint/unused_block_argument.yml | 1 - .rubocop_todo/rails/inverse_of.yml | 1 - .rubocop_todo/style/numbered_parameters.yml | 1 - .../integrations/gitlab_slack_application.rb | 2 +- .../integrations/slack_workspace/api_scope.rb | 0 .../slack_workspace/integration_api_scope.rb | 0 {ee/app => app}/models/slack_integration.rb | 10 ++++---- ee/spec/factories/integrations.rb | 23 ------------------- spec/factories/integrations.rb | 23 +++++++++++++++++++ .../factories/slack_integrations.rb | 2 +- .../gitlab_slack_application_spec.rb | 0 .../slack_workspace/api_scope_spec.rb | 0 .../models/slack_integration_spec.rb | 0 16 files changed, 31 insertions(+), 36 deletions(-) rename {ee/app => app}/models/integrations/gitlab_slack_application.rb (98%) rename {ee/app => app}/models/integrations/slack_workspace/api_scope.rb (100%) rename {ee/app => app}/models/integrations/slack_workspace/integration_api_scope.rb (100%) rename {ee/app => app}/models/slack_integration.rb (86%) rename {ee/spec => spec}/factories/slack_integrations.rb (93%) rename {ee/spec => spec}/models/integrations/gitlab_slack_application_spec.rb (100%) rename {ee/spec => spec}/models/integrations/slack_workspace/api_scope_spec.rb (100%) rename {ee/spec => spec}/models/slack_integration_spec.rb (100%) diff --git a/.rubocop_todo/gitlab/namespaced_class.yml b/.rubocop_todo/gitlab/namespaced_class.yml index 0ec0bc66869746..4f5d5ab3a80dce 100644 --- a/.rubocop_todo/gitlab/namespaced_class.yml +++ b/.rubocop_todo/gitlab/namespaced_class.yml @@ -307,6 +307,7 @@ Gitlab/NamespacedClass: - 'app/models/service_desk_setting.rb' - 'app/models/service_list.rb' - 'app/models/shard.rb' + - 'app/models/slack_integration.rb' - 'app/models/snippet.rb' - 'app/models/snippet_blob.rb' - 'app/models/snippet_input_action.rb' @@ -938,7 +939,6 @@ Gitlab/NamespacedClass: - 'ee/app/models/scim_identity.rb' - 'ee/app/models/scim_oauth_access_token.rb' - 'ee/app/models/scoped_label_set.rb' - - 'ee/app/models/slack_integration.rb' - 'ee/app/models/smartcard_identity.rb' - 'ee/app/models/software_license.rb' - 'ee/app/models/software_license_policy.rb' diff --git a/.rubocop_todo/layout/argument_alignment.yml b/.rubocop_todo/layout/argument_alignment.yml index 4fda4e8f2b6b0d..b39f2181ceea6d 100644 --- a/.rubocop_todo/layout/argument_alignment.yml +++ b/.rubocop_todo/layout/argument_alignment.yml @@ -1118,7 +1118,6 @@ Layout/ArgumentAlignment: - 'ee/app/models/scim_identity.rb' - 'ee/app/models/security/finding.rb' - 'ee/app/models/security/orchestration_policy_rule_schedule.rb' - - 'ee/app/models/slack_integration.rb' - 'ee/app/models/smartcard_identity.rb' - 'ee/app/models/status_page/project_setting.rb' - 'ee/app/models/vulnerabilities/external_issue_link.rb' diff --git a/.rubocop_todo/layout/space_in_lambda_literal.yml b/.rubocop_todo/layout/space_in_lambda_literal.yml index 144b4eb04a7969..7c914f47443d70 100644 --- a/.rubocop_todo/layout/space_in_lambda_literal.yml +++ b/.rubocop_todo/layout/space_in_lambda_literal.yml @@ -233,7 +233,6 @@ Layout/SpaceInLambdaLiteral: - 'ee/app/models/security/scan.rb' - 'ee/app/models/security/training.rb' - 'ee/app/models/security/training_provider.rb' - - 'ee/app/models/slack_integration.rb' - 'ee/app/models/software_license.rb' - 'ee/app/models/software_license_policy.rb' - 'ee/app/models/vulnerabilities/external_issue_link.rb' diff --git a/.rubocop_todo/lint/unused_block_argument.yml b/.rubocop_todo/lint/unused_block_argument.yml index a70c3823c1dbb4..f4c0ddf38cf801 100644 --- a/.rubocop_todo/lint/unused_block_argument.yml +++ b/.rubocop_todo/lint/unused_block_argument.yml @@ -135,7 +135,6 @@ Lint/UnusedBlockArgument: - 'ee/spec/factories/projects.rb' - 'ee/spec/factories/protected_branches.rb' - 'ee/spec/factories/protected_environments.rb' - - 'ee/spec/factories/slack_integrations.rb' - 'ee/spec/factories/users.rb' - 'ee/spec/features/groups/group_settings_spec.rb' - 'ee/spec/graphql/mutations/dast/profiles/update_spec.rb' diff --git a/.rubocop_todo/rails/inverse_of.yml b/.rubocop_todo/rails/inverse_of.yml index de45a47fed6c1f..412d28a11da7a3 100644 --- a/.rubocop_todo/rails/inverse_of.yml +++ b/.rubocop_todo/rails/inverse_of.yml @@ -76,7 +76,6 @@ Rails/InverseOf: - 'ee/app/models/incident_management/escalation_rule.rb' - 'ee/app/models/incident_management/oncall_participant.rb' - 'ee/app/models/insight.rb' - - 'ee/app/models/integrations/gitlab_slack_application.rb' - 'ee/app/models/iteration.rb' - 'ee/app/models/requirements_management/requirement.rb' - 'ee/app/models/requirements_management/test_report.rb' diff --git a/.rubocop_todo/style/numbered_parameters.yml b/.rubocop_todo/style/numbered_parameters.yml index 3251cc0bcad1d5..aa3df93ab8f772 100644 --- a/.rubocop_todo/style/numbered_parameters.yml +++ b/.rubocop_todo/style/numbered_parameters.yml @@ -25,7 +25,6 @@ Style/NumberedParameters: - 'app/services/web_hooks/log_execution_service.rb' - 'ee/app/models/ee/project.rb' - 'ee/app/models/security/finding.rb' - - 'ee/app/models/slack_integration.rb' - 'ee/app/models/vulnerabilities/feedback.rb' - 'ee/app/services/security/ingestion/tasks/hooks_execution.rb' - 'ee/app/services/security/ingestion/tasks/ingest_remediations.rb' diff --git a/ee/app/models/integrations/gitlab_slack_application.rb b/app/models/integrations/gitlab_slack_application.rb similarity index 98% rename from ee/app/models/integrations/gitlab_slack_application.rb rename to app/models/integrations/gitlab_slack_application.rb index 006b6ee456ab1b..b0f54f39e8cf3f 100644 --- a/ee/app/models/integrations/gitlab_slack_application.rb +++ b/app/models/integrations/gitlab_slack_application.rb @@ -17,7 +17,7 @@ class GitlabSlackApplication < BaseSlackNotification attribute :vulnerability_events, default: false attribute :wiki_page_events, default: false - has_one :slack_integration, foreign_key: :integration_id + has_one :slack_integration, foreign_key: :integration_id, inverse_of: :integration delegate :bot_access_token, :bot_user_id, to: :slack_integration, allow_nil: true def update_active_status diff --git a/ee/app/models/integrations/slack_workspace/api_scope.rb b/app/models/integrations/slack_workspace/api_scope.rb similarity index 100% rename from ee/app/models/integrations/slack_workspace/api_scope.rb rename to app/models/integrations/slack_workspace/api_scope.rb diff --git a/ee/app/models/integrations/slack_workspace/integration_api_scope.rb b/app/models/integrations/slack_workspace/integration_api_scope.rb similarity index 100% rename from ee/app/models/integrations/slack_workspace/integration_api_scope.rb rename to app/models/integrations/slack_workspace/integration_api_scope.rb diff --git a/ee/app/models/slack_integration.rb b/app/models/slack_integration.rb similarity index 86% rename from ee/app/models/slack_integration.rb rename to app/models/slack_integration.rb index 390100deebfa4e..22e911aeacd32d 100644 --- a/ee/app/models/slack_integration.rb +++ b/app/models/slack_integration.rb @@ -31,13 +31,13 @@ class SlackIntegration < ApplicationRecord through: :slack_integrations_scopes scope :with_bot, -> { where.not(bot_user_id: nil) } - scope :by_team, -> (team_id) { where(team_id: team_id) } + scope :by_team, ->(team_id) { where(team_id: team_id) } validates :team_id, presence: true validates :team_name, presence: true validates :alias, presence: true, - uniqueness: { scope: :team_id, message: 'This alias has already been taken' }, - length: 2..4096 + uniqueness: { scope: :team_id, message: 'This alias has already been taken' }, + length: 2..4096 validates :user_id, presence: true validates :integration, presence: true @@ -65,11 +65,11 @@ def upgrade_needed? end def all_features_supported? - ALL_FEATURES.all? { feature_available?(_1) } # rubocop: disable Gitlab/FeatureAvailableUsage + ALL_FEATURES.all? { |feature| feature_available?(feature) } # rubocop: disable Gitlab/FeatureAvailableUsage end def authorized_scope_names=(names) - names = Array.wrap(names).flat_map { _1.split(',') }.map(&:strip) + names = Array.wrap(names).flat_map { |name| name.split(',') }.map(&:strip) scopes = ::Integrations::SlackWorkspace::ApiScope.find_or_initialize_by_names(names) self.slack_api_scopes = scopes diff --git a/ee/spec/factories/integrations.rb b/ee/spec/factories/integrations.rb index 37c9e149df12aa..ee13feafc66654 100644 --- a/ee/spec/factories/integrations.rb +++ b/ee/spec/factories/integrations.rb @@ -1,29 +1,6 @@ # frozen_string_literal: true FactoryBot.define do - factory :gitlab_slack_application_integration, class: 'Integrations::GitlabSlackApplication' do - project - active { true } - type { 'Integrations::GitlabSlackApplication' } - slack_integration { association :slack_integration, integration: instance } - - transient do - all_channels { true } - end - - after(:build) do |integration, evaluator| - next unless evaluator.all_channels - - integration.event_channel_names.each do |name| - integration.send("#{name}=".to_sym, "##{name}") - end - end - - trait :all_features_supported do - slack_integration { association :slack_integration, :all_features_supported, integration: instance } - end - end - factory :github_integration, class: 'Integrations::Github' do project type { 'Integrations::Github' } diff --git a/spec/factories/integrations.rb b/spec/factories/integrations.rb index d765e5562b6915..0b940c552e57dc 100644 --- a/spec/factories/integrations.rb +++ b/spec/factories/integrations.rb @@ -43,6 +43,29 @@ end end + factory :gitlab_slack_application_integration, class: 'Integrations::GitlabSlackApplication' do + project + active { true } + type { 'Integrations::GitlabSlackApplication' } + slack_integration { association :slack_integration, integration: instance } + + transient do + all_channels { true } + end + + after(:build) do |integration, evaluator| + next unless evaluator.all_channels + + integration.event_channel_names.each do |name| + integration.send("#{name}=".to_sym, "##{name}") + end + end + + trait :all_features_supported do + slack_integration { association :slack_integration, :all_features_supported, integration: instance } + end + end + factory :packagist_integration, class: 'Integrations::Packagist' do project type { 'Integrations::Packagist' } diff --git a/ee/spec/factories/slack_integrations.rb b/spec/factories/slack_integrations.rb similarity index 93% rename from ee/spec/factories/slack_integrations.rb rename to spec/factories/slack_integrations.rb index bffafa644a9ebb..a43ba8e7453f13 100644 --- a/ee/spec/factories/slack_integrations.rb +++ b/spec/factories/slack_integrations.rb @@ -17,7 +17,7 @@ end trait :all_features_supported do - after(:build) do |slack_integration, evaluator| + after(:build) do |slack_integration, _evaluator| slack_integration.authorized_scope_names = %w[commands chat:write chat:write.public] end end diff --git a/ee/spec/models/integrations/gitlab_slack_application_spec.rb b/spec/models/integrations/gitlab_slack_application_spec.rb similarity index 100% rename from ee/spec/models/integrations/gitlab_slack_application_spec.rb rename to spec/models/integrations/gitlab_slack_application_spec.rb diff --git a/ee/spec/models/integrations/slack_workspace/api_scope_spec.rb b/spec/models/integrations/slack_workspace/api_scope_spec.rb similarity index 100% rename from ee/spec/models/integrations/slack_workspace/api_scope_spec.rb rename to spec/models/integrations/slack_workspace/api_scope_spec.rb diff --git a/ee/spec/models/slack_integration_spec.rb b/spec/models/slack_integration_spec.rb similarity index 100% rename from ee/spec/models/slack_integration_spec.rb rename to spec/models/slack_integration_spec.rb -- GitLab