diff --git a/app/assets/stylesheets/framework/buttons.scss b/app/assets/stylesheets/framework/buttons.scss index fd5b3f74c4a..0d3b24eb6fb 100644 --- a/app/assets/stylesheets/framework/buttons.scss +++ b/app/assets/stylesheets/framework/buttons.scss @@ -495,6 +495,10 @@ } } +// The .btn-svg class is available for legacy icon buttons to +// preserve a 34px height and have 16x16 icons at the same time. +// Once a button is migrated (to the current 32px height) +// please remove this class from the new button. .btn-svg svg { @include btn-svg; } diff --git a/app/views/dashboard/_activities.html.haml b/app/views/dashboard/_activities.html.haml index 2db3e35250f..167aa0a2e59 100644 --- a/app/views/dashboard/_activities.html.haml +++ b/app/views/dashboard/_activities.html.haml @@ -1,8 +1,8 @@ .nav-block.activities = render 'shared/event_filter' .controls - = link_to dashboard_projects_path(rss_url_options), class: 'btn d-none d-sm-inline-block has-tooltip', title: 'Subscribe' do - %i.fa.fa-rss + = link_to dashboard_projects_path(rss_url_options), class: 'btn gl-button btn-default btn-icon d-none d-sm-inline-flex has-tooltip', title: 'Subscribe' do + = sprite_icon('rss', css_class: 'qa-rss-icon gl-icon', size: 16) .content_list .loading diff --git a/app/views/groups/_activities.html.haml b/app/views/groups/_activities.html.haml index 47e7e27de48..84cf4b31bd7 100644 --- a/app/views/groups/_activities.html.haml +++ b/app/views/groups/_activities.html.haml @@ -1,8 +1,8 @@ .nav-block.activities = render 'shared/event_filter', show_group_events: @group.supports_events? .controls - = link_to group_path(@group, rss_url_options), class: 'btn d-none d-sm-inline-block has-tooltip' , title: 'Subscribe' do - %i.fa.fa-rss + = link_to group_path(@group, rss_url_options), class: 'btn gl-button btn-default btn-icon d-none d-sm-inline-flex has-tooltip' , title: 'Subscribe' do + = sprite_icon('rss', css_class: 'qa-rss-icon gl-icon', size: 16) .content_list .loading diff --git a/app/views/help/ui.html.haml b/app/views/help/ui.html.haml index e8042de45f6..b34ca5abb65 100644 --- a/app/views/help/ui.html.haml +++ b/app/views/help/ui.html.haml @@ -69,8 +69,8 @@ = render layout: 'users/cover_controls' do = link_to '#', class: link_classes + 'btn btn-default' do = sprite_icon('pencil') - = link_to '#', class: link_classes + 'btn btn-default' do - = icon('rss') + = link_to '#', class: link_classes + 'btn btn-svg btn-default' do + = sprite_icon('rss', css_class: 'qa-rss-icon', size: 16) .avatar-holder = image_tag avatar_icon_for_email('admin@example.com', 90), class: "avatar s90", alt: '' .cover-title diff --git a/app/views/projects/_activity.html.haml b/app/views/projects/_activity.html.haml index af24ce84a35..26ff025b90b 100644 --- a/app/views/projects/_activity.html.haml +++ b/app/views/projects/_activity.html.haml @@ -4,8 +4,8 @@ .nav-block.d-none.d-sm-flex.activities.gl-static = render 'shared/event_filter' .controls.gl-display-flex - = link_to project_path(@project, rss_url_options), title: s_("ProjectActivityRSS|Subscribe"), class: 'btn d-none d-sm-inline-block has-tooltip' do - = icon('rss') + = link_to project_path(@project, rss_url_options), title: s_("ProjectActivityRSS|Subscribe"), class: 'btn gl-button btn-default btn-icon d-none d-sm-inline-flex has-tooltip' do + = sprite_icon('rss', css_class: 'qa-rss-icon gl-icon', size: 16) - if is_project_overview && can?(current_user, :download_code, @project) .project-clone-holder.d-none.d-md-inline-flex.gl-ml-2 = render "projects/buttons/clone", dropdown_class: 'dropdown-menu-right' diff --git a/app/views/projects/commits/show.html.haml b/app/views/projects/commits/show.html.haml index 737e4f66dd2..d915f4755cc 100644 --- a/app/views/projects/commits/show.html.haml +++ b/app/views/projects/commits/show.html.haml @@ -26,8 +26,8 @@ = form_tag(project_commits_path(@project, @id), method: :get, class: 'commits-search-form js-signature-container', data: { 'signatures-path' => namespace_project_signatures_path }) do = search_field_tag :search, params[:search], { placeholder: _('Search by message'), id: 'commits-search', class: 'form-control search-text-input input-short gl-mt-3 gl-sm-mt-0 gl-min-w-full', spellcheck: false } .control.d-none.d-md-block - = link_to project_commits_path(@project, @ref, rss_url_options), title: _("Commits feed"), class: 'btn' do - = icon("rss") + = link_to project_commits_path(@project, @ref, rss_url_options), title: _("Commits feed"), class: 'btn btn-svg' do + = sprite_icon('rss', css_class: 'qa-rss-icon', size: 16) = render_if_exists 'projects/commits/mirror_status' diff --git a/app/views/projects/tags/index.html.haml b/app/views/projects/tags/index.html.haml index e3d3f2226a8..330654d0690 100644 --- a/app/views/projects/tags/index.html.haml +++ b/app/views/projects/tags/index.html.haml @@ -26,8 +26,8 @@ - if can?(current_user, :admin_tag, @project) = link_to new_project_tag_path(@project), class: 'btn btn-success new-tag-btn', data: { qa_selector: "new_tag_button" } do = s_('TagsPage|New tag') - = link_to project_tags_path(@project, rss_url_options), title: _("Tags feed"), class: 'btn d-none d-sm-inline-block has-tooltip' do - = icon("rss") + = link_to project_tags_path(@project, rss_url_options), title: _("Tags feed"), class: 'btn btn-svg d-none d-sm-inline-block has-tooltip' do + = sprite_icon('rss', css_class: 'qa-rss-icon', size: 16) = render_if_exists 'projects/commits/mirror_status' diff --git a/app/views/shared/issuable/_feed_buttons.html.haml b/app/views/shared/issuable/_feed_buttons.html.haml index 4fed95e2607..2a149383da0 100644 --- a/app/views/shared/issuable/_feed_buttons.html.haml +++ b/app/views/shared/issuable/_feed_buttons.html.haml @@ -1,4 +1,4 @@ -= link_to safe_params.merge(rss_url_options), class: 'btn has-tooltip js-rss-button', data: { container: 'body' }, title: _('Subscribe to RSS feed') do - = sprite_icon('rss') += link_to safe_params.merge(rss_url_options), class: 'btn btn-svg has-tooltip', data: { container: 'body' }, title: _('Subscribe to RSS feed') do + = sprite_icon('rss', css_class: 'qa-rss-icon', size: 16) = link_to safe_params.merge(calendar_url_options), class: 'btn has-tooltip', data: { container: 'body' }, title: _('Subscribe to calendar') do = sprite_icon('calendar') diff --git a/app/views/users/show.html.haml b/app/views/users/show.html.haml index 7b777630375..ed655adfecf 100644 --- a/app/views/users/show.html.haml +++ b/app/views/users/show.html.haml @@ -25,8 +25,8 @@ title: s_('UserProfile|Report abuse'), data: { toggle: 'tooltip', placement: 'bottom', container: 'body' } do = icon('exclamation-circle') - if can?(current_user, :read_user_profile, @user) - = link_to user_path(@user, rss_url_options), class: link_classes + 'btn btn-default has-tooltip', title: s_('UserProfile|Subscribe'), 'aria-label': 'Subscribe' do - = icon('rss') + = link_to user_path(@user, rss_url_options), class: link_classes + 'btn btn-svg btn-default has-tooltip', title: s_('UserProfile|Subscribe'), 'aria-label': 'Subscribe' do + = sprite_icon('rss', css_class: 'qa-rss-icon', size: 16) - if current_user && current_user.admin? = link_to [:admin, @user], class: link_classes + 'btn btn-default', title: s_('UserProfile|View user in admin area'), data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do diff --git a/changelogs/unreleased/225947-replace-fa-rss.yml b/changelogs/unreleased/225947-replace-fa-rss.yml new file mode 100644 index 00000000000..677079c5025 --- /dev/null +++ b/changelogs/unreleased/225947-replace-fa-rss.yml @@ -0,0 +1,5 @@ +--- +title: Replace fa-rss with GitLab SVG icon +merge_request: 36553 +author: +type: other diff --git a/doc/administration/gitaly/praefect.md b/doc/administration/gitaly/praefect.md index 14f3209c73e..fea5da73a44 100644 --- a/doc/administration/gitaly/praefect.md +++ b/doc/administration/gitaly/praefect.md @@ -1031,11 +1031,11 @@ also be logged with an accompanying replication job ID. If your GitLab instance already has repositories, these won't be migrated automatically. -Repositories may be moved from one storage location using the [Repository -API](../../api/projects.html#edit-project): +Repositories may be moved from one storage location using the [Project repository storage moves API](../../api/project_repository_storage_moves.md): ```shell -curl --request PUT --header "PRIVATE-TOKEN: " --data "repository_storage=praefect" https://example.gitlab.com/api/v4/projects/123 +curl --request POST --header "PRIVATE_TOKEN: " --header "Content-Type: application/json" \ +--data '{"destination_storage_name":"praefect"}' "https://gitlab.example.com/api/v4/projects/123/repository_storage_moves" ``` ## Debugging Praefect diff --git a/qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb b/qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb index 50df1c3ef01..b0b2a83ae35 100644 --- a/qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb +++ b/qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb @@ -3,17 +3,18 @@ module QA RSpec.describe 'Plan', :smoke, :reliable do describe 'mention' do - before do - Flow::Login.sign_in - - @user = Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1) - - project = Resource::Project.fabricate_via_api! do |project| + let(:user) { Resource::User.fabricate_or_use(Runtime::Env.gitlab_qa_username_1, Runtime::Env.gitlab_qa_password_1) } + let(:project) do + Resource::Project.fabricate_via_api! do |project| project.name = 'project-to-test-mention' project.visibility = 'private' end + end - project.add_member(@user) + before do + Flow::Login.sign_in + + project.add_member(user) Resource::Issue.fabricate_via_api! do |issue| issue.project = project @@ -22,7 +23,7 @@ module QA it 'mentions another user in an issue' do Page::Project::Issue::Show.perform do |show| - at_username = "@#{@user.username}" + at_username = "@#{user.username}" show.select_all_activities_filter show.comment(at_username) diff --git a/spec/features/issues/user_filters_issues_spec.rb b/spec/features/issues/user_filters_issues_spec.rb index 54a600910ef..1b246181523 100644 --- a/spec/features/issues/user_filters_issues_spec.rb +++ b/spec/features/issues/user_filters_issues_spec.rb @@ -2,13 +2,11 @@ require 'spec_helper' -RSpec.describe 'User filters issues' do +RSpec.describe 'User filters issues', :js do let_it_be(:user) { create(:user) } let_it_be(:project) { create(:project_empty_repo, :public) } before do - stub_feature_flags(vue_issuables_list: false) - %w[foobar barbaz].each do |title| create(:issue, author: user, diff --git a/spec/features/issues/user_sees_empty_state_spec.rb b/spec/features/issues/user_sees_empty_state_spec.rb index e39369b0150..b43ba01606a 100644 --- a/spec/features/issues/user_sees_empty_state_spec.rb +++ b/spec/features/issues/user_sees_empty_state_spec.rb @@ -2,14 +2,10 @@ require 'spec_helper' -RSpec.describe 'Issues > User sees empty state' do +RSpec.describe 'Issues > User sees empty state', :js do let_it_be(:project) { create(:project, :public) } let_it_be(:user) { project.creator } - before do - stub_feature_flags(vue_issuables_list: false) - end - shared_examples_for 'empty state with filters' do it 'user sees empty state with filters' do create(:issue, author: user, project: project) diff --git a/spec/support/shared_examples/features/rss_shared_examples.rb b/spec/support/shared_examples/features/rss_shared_examples.rb index 42df88ec08e..1b0d3f9605a 100644 --- a/spec/support/shared_examples/features/rss_shared_examples.rb +++ b/spec/support/shared_examples/features/rss_shared_examples.rb @@ -9,8 +9,7 @@ end RSpec.shared_examples "it has an RSS button with current_user's feed token" do it "shows the RSS button with current_user's feed token" do expect(page) - .to have_css("a:has(.fa-rss)[href*='feed_token=#{user.feed_token}']") - .or have_css("a.js-rss-button[href*='feed_token=#{user.feed_token}']") + .to have_css("a:has(.qa-rss-icon)[href*='feed_token=#{user.feed_token}']") end end @@ -23,7 +22,6 @@ end RSpec.shared_examples "it has an RSS button without a feed token" do it "shows the RSS button without a feed token" do expect(page) - .to have_css("a:has(.fa-rss):not([href*='feed_token'])") - .or have_css("a.js-rss-button:not([href*='feed_token'])") + .to have_css("a:has(.qa-rss-icon):not([href*='feed_token'])") end end