From d29a2e9b333eefbeb20b08bcf2a9609d5d455f74 Mon Sep 17 00:00:00 2001 From: jejacks0n <jjackson@gitlab.com> Date: Thu, 17 Mar 2022 09:45:39 -0600 Subject: [PATCH] Add ability to enable SAST at project creation This introduces a new checkbox on project creation, and cleans up the new_project_sast_enabled experiment that tested the usefulness and engagement of that checkbox. Changelog: added --- app/controllers/projects_controller.rb | 7 ------ .../new_project_sast_enabled_experiment.rb | 15 ------------ .../projects/_new_project_fields.html.haml | 17 +++++++------- ...new_project_initialize_with_sast.html.haml | 16 ------------- .../experiment/new_project_sast_enabled.yml | 8 ------- locale/gitlab.pot | 3 --- qa/qa/page/project/new.rb | 5 +--- spec/controllers/projects_controller_spec.rb | 22 ------------------ ...ew_project_sast_enabled_experiment_spec.rb | 20 ---------------- .../projects/user_creates_project_spec.rb | 23 ------------------- 10 files changed, 9 insertions(+), 127 deletions(-) delete mode 100644 app/experiments/new_project_sast_enabled_experiment.rb delete mode 100644 app/views/projects/_new_project_initialize_with_sast.html.haml delete mode 100644 config/feature_flags/experiment/new_project_sast_enabled.yml delete mode 100644 spec/experiments/new_project_sast_enabled_experiment_spec.rb diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 507a8b66942a8..e76cae5feeeab 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -82,13 +82,6 @@ def create @project = ::Projects::CreateService.new(current_user, project_params(attributes: project_params_create_attributes)).execute if @project.saved? - experiment(:new_project_sast_enabled, user: current_user).track(:created, - property: active_new_project_tab, - checked: Gitlab::Utils.to_boolean(project_params[:initialize_with_sast]), - project: @project, - namespace: @project.namespace - ) - redirect_to( project_path(@project, custom_import_params), notice: _("Project '%{project_name}' was successfully created.") % { project_name: @project.name } diff --git a/app/experiments/new_project_sast_enabled_experiment.rb b/app/experiments/new_project_sast_enabled_experiment.rb deleted file mode 100644 index 4aca4c875b212..0000000000000 --- a/app/experiments/new_project_sast_enabled_experiment.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -class NewProjectSastEnabledExperiment < ApplicationExperiment - control { } - variant(:candidate) { } - variant(:free_indicator) { } - variant(:unchecked_candidate) { } - variant(:unchecked_free_indicator) { } - - def publish(*args) - super - - publish_to_database - end -end diff --git a/app/views/projects/_new_project_fields.html.haml b/app/views/projects/_new_project_fields.html.haml index 1fb045544aa1e..d30a7cc317254 100644 --- a/app/views/projects/_new_project_fields.html.haml +++ b/app/views/projects/_new_project_fields.html.haml @@ -64,15 +64,14 @@ .form-text.text-muted = s_('ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository.') - - experiment(:new_project_sast_enabled, user: current_user) do |e| - - e.variant(:candidate) do - = render 'new_project_initialize_with_sast', experiment_name: e.name, track_label: track_label, checked: true, with_free_badge: false - - e.variant(:unchecked_candidate) do - = render 'new_project_initialize_with_sast', experiment_name: e.name, track_label: track_label, checked: false, with_free_badge: false - - e.variant(:free_indicator) do - = render 'new_project_initialize_with_sast', experiment_name: e.name, track_label: track_label, checked: true, with_free_badge: true - - e.variant(:unchecked_free_indicator) do - = render 'new_project_initialize_with_sast', experiment_name: e.name, track_label: track_label, checked: false, with_free_badge: true + .form-group + .form-check.gl-mb-3 + = check_box_tag 'project[initialize_with_sast]', '1', false, class: 'form-check-input', data: { qa_selector: 'initialize_with_sast_checkbox', track_label: track_label, track_action: 'activate_form_input', track_property: 'init_with_sast' } + = label_tag 'project[initialize_with_sast]', class: 'form-check-label' do + = s_('ProjectsNew|Enable Static Application Security Testing (SAST)') + .form-text.text-muted + = s_('ProjectsNew|Analyze your source code for known security vulnerabilities.') + = link_to _('Learn more.'), help_page_path('user/application_security/sast/index'), target: '_blank', rel: 'noopener noreferrer', data: { track_action: 'followed' } = f.submit _('Create project'), class: "btn gl-button btn-confirm", data: { qa_selector: 'project_create_button', track_label: "#{track_label}", track_action: "click_button", track_property: "create_project", track_value: "" } = link_to _('Cancel'), dashboard_projects_path, class: 'btn gl-button btn-default btn-cancel', data: { track_label: "#{track_label}", track_action: "click_button", track_property: "cancel", track_value: "" } diff --git a/app/views/projects/_new_project_initialize_with_sast.html.haml b/app/views/projects/_new_project_initialize_with_sast.html.haml deleted file mode 100644 index ec12abbf78956..0000000000000 --- a/app/views/projects/_new_project_initialize_with_sast.html.haml +++ /dev/null @@ -1,16 +0,0 @@ -- experiment_name = local_assigns.fetch(:experiment_name) -- track_label = local_assigns.fetch(:track_label) - -- with_free_badge = local_assigns.fetch(:with_free_badge, false) -- checked = local_assigns.fetch(:checked, false) - -.form-group - .form-check.gl-mb-3 - = check_box_tag 'project[initialize_with_sast]', '1', checked, class: 'form-check-input', data: { qa_selector: 'initialize_with_sast_checkbox', track_experiment: experiment_name, track_label: track_label, track_action: 'activate_form_input', track_property: 'init_with_sast' } - = label_tag 'project[initialize_with_sast]', class: 'form-check-label' do - = s_('ProjectsNew|Enable Static Application Security Testing (SAST)') - - if with_free_badge - = gl_badge_tag _('Free'), variant: :info, size: :sm - .form-text.text-muted - = s_('ProjectsNew|Analyze your source code for known security vulnerabilities.') - = link_to _('Learn more.'), help_page_path('user/application_security/sast/index'), target: '_blank', rel: 'noopener noreferrer', data: { track_action: 'followed', track_experiment: experiment_name } diff --git a/config/feature_flags/experiment/new_project_sast_enabled.yml b/config/feature_flags/experiment/new_project_sast_enabled.yml deleted file mode 100644 index f47c01d26aab9..0000000000000 --- a/config/feature_flags/experiment/new_project_sast_enabled.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: new_project_sast_enabled -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/70548 -rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/340929 -milestone: '14.4' -type: experiment -group: group::adoption -default_enabled: false diff --git a/locale/gitlab.pot b/locale/gitlab.pot index aea718dab5c1d..f3ff201033e4e 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -16131,9 +16131,6 @@ msgstr "" msgid "Framework successfully deleted" msgstr "" -msgid "Free" -msgstr "" - msgid "Free Trial of GitLab.com Ultimate" msgstr "" diff --git a/qa/qa/page/project/new.rb b/qa/qa/page/project/new.rb index 340e40127c92f..26fff85dd9947 100644 --- a/qa/qa/page/project/new.rb +++ b/qa/qa/page/project/new.rb @@ -13,6 +13,7 @@ class New < Page::Base view 'app/views/projects/_new_project_fields.html.haml' do element :initialize_with_readme_checkbox + element :initialize_with_sast_checkbox element :project_name element :project_path element :project_description @@ -20,10 +21,6 @@ class New < Page::Base element :visibility_radios end - view 'app/views/projects/_new_project_initialize_with_sast.html.haml' do - element :initialize_with_sast_checkbox - end - view 'app/views/projects/project_templates/_template.html.haml' do element :use_template_button element :template_option_row diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index c098ea71f7a28..d0aff6e282ac4 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -473,28 +473,6 @@ def get_show end end end - - context 'with new_project_sast_enabled', :experiment do - let(:params) do - { - path: 'foo', - description: 'bar', - namespace_id: user.namespace.id, - initialize_with_sast: '1' - } - end - - it 'tracks an event on project creation' do - expect(experiment(:new_project_sast_enabled)).to track(:created, - property: 'blank', - checked: true, - project: an_instance_of(Project), - namespace: user.namespace - ).on_next_instance.with_context(user: user) - - post :create, params: { project: params } - end - end end describe 'GET edit' do diff --git a/spec/experiments/new_project_sast_enabled_experiment_spec.rb b/spec/experiments/new_project_sast_enabled_experiment_spec.rb deleted file mode 100644 index 041e5dfa46975..0000000000000 --- a/spec/experiments/new_project_sast_enabled_experiment_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe NewProjectSastEnabledExperiment do - it "defines the expected behaviors and variants" do - expect(subject.variant_names).to match_array([ - :candidate, - :free_indicator, - :unchecked_candidate, - :unchecked_free_indicator - ]) - end - - it "publishes to the database" do - expect(subject).to receive(:publish_to_database) - - subject.publish - end -end diff --git a/spec/features/projects/user_creates_project_spec.rb b/spec/features/projects/user_creates_project_spec.rb index 6491a7425f733..84977b6c962b5 100644 --- a/spec/features/projects/user_creates_project_spec.rb +++ b/spec/features/projects/user_creates_project_spec.rb @@ -33,29 +33,6 @@ end it 'creates a new project that is not blank' do - stub_experiments(new_project_sast_enabled: 'candidate') - - visit(new_project_path) - - click_link 'Create blank project' - fill_in(:project_name, with: 'With initial commits') - - expect(page).to have_checked_field 'Initialize repository with a README' - expect(page).to have_checked_field 'Enable Static Application Security Testing (SAST)' - - click_button('Create project') - - project = Project.last - - expect(page).to have_current_path(project_path(project), ignore_query: true) - expect(page).to have_content('With initial commits') - expect(page).to have_content('Configure SAST in `.gitlab-ci.yml`, creating this file if it does not already exist') - expect(page).to have_content('README.md Initial commit') - end - - it 'allows creating a new project when the new_project_sast_enabled is assigned the unchecked candidate' do - stub_experiments(new_project_sast_enabled: 'unchecked_candidate') - visit(new_project_path) click_link 'Create blank project' -- GitLab