From 4b4d338d32fa30c7dcbf0ed54e99c00a56d66ff3 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 5 Mar 2021 03:08:54 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- app/views/abuse_reports/new.html.haml | 2 +- app/views/admin/users/_form.html.haml | 8 ++-- app/views/admin/users/_users.html.haml | 2 +- .../closed_merge_request_email.text.haml | 1 + ...ormation-to-closed-merge-request-email.yml | 5 +++ .../unreleased/btn-confirm-abuse-reports.yml | 5 +++ .../unreleased/btn-confirm-admin-users.yml | 5 +++ ...ks-checks-skip-integrity-lfs-deletions.yml | 5 +++ .../gitaly/img/gitaly_network_13_9.png | Bin 0 -> 33155 bytes doc/administration/gitaly/index.md | 5 +++ .../vulnerability_report/index.md | 3 +- lib/gitlab/checks/lfs_check.rb | 1 + spec/lib/gitlab/checks/lfs_check_spec.rb | 23 ++++++++--- spec/mailers/emails/merge_requests_spec.rb | 37 +++++++++++++++++- 14 files changed, 88 insertions(+), 14 deletions(-) create mode 100644 changelogs/unreleased/300750-add-missing-reviewers-information-to-closed-merge-request-email.yml create mode 100644 changelogs/unreleased/btn-confirm-abuse-reports.yml create mode 100644 changelogs/unreleased/btn-confirm-admin-users.yml create mode 100644 changelogs/unreleased/pks-checks-skip-integrity-lfs-deletions.yml create mode 100644 doc/administration/gitaly/img/gitaly_network_13_9.png diff --git a/app/views/abuse_reports/new.html.haml b/app/views/abuse_reports/new.html.haml index 09b16c54700..78fa16c13a5 100644 --- a/app/views/abuse_reports/new.html.haml +++ b/app/views/abuse_reports/new.html.haml @@ -25,4 +25,4 @@ = _("Explain the problem. If appropriate, provide a link to the relevant issue or comment.") .form-actions - = f.submit _("Send report"), class: "gl-button btn btn-success" + = f.submit _("Send report"), class: "gl-button btn btn-confirm" diff --git a/app/views/admin/users/_form.html.haml b/app/views/admin/users/_form.html.haml index 40393f0db99..b3ed8369263 100644 --- a/app/views/admin/users/_form.html.haml +++ b/app/views/admin/users/_form.html.haml @@ -87,8 +87,8 @@ .form-actions - if @user.new_record? - = f.submit 'Create user', class: "btn gl-button btn-success" - = link_to 'Cancel', admin_users_path, class: "gl-button btn btn-cancel" + = f.submit 'Create user', class: "btn gl-button btn-confirm" + = link_to 'Cancel', admin_users_path, class: "gl-button btn btn-default btn-cancel" - else - = f.submit 'Save changes', class: "btn gl-button btn-success" - = link_to 'Cancel', admin_user_path(@user), class: "btn gl-button btn-cancel" + = f.submit 'Save changes', class: "btn gl-button btn-confirm" + = link_to 'Cancel', admin_user_path(@user), class: "gl-button btn btn-default btn-cancel" diff --git a/app/views/admin/users/_users.html.haml b/app/views/admin/users/_users.html.haml index 57edb9abe90..c79b2e978f2 100644 --- a/app/views/admin/users/_users.html.haml +++ b/app/views/admin/users/_users.html.haml @@ -43,7 +43,7 @@ .nav-controls = render_if_exists 'admin/users/admin_email_users' = render_if_exists 'admin/users/admin_export_user_permissions' - = link_to s_('AdminUsers|New user'), new_admin_user_path, class: 'btn gl-button btn-success btn-search float-right' + = link_to s_('AdminUsers|New user'), new_admin_user_path, class: 'btn gl-button btn-confirm btn-search float-right' .filtered-search-block.row-content-block.border-top-0 = form_tag admin_users_path, method: :get do diff --git a/app/views/notify/closed_merge_request_email.text.haml b/app/views/notify/closed_merge_request_email.text.haml index 8546da2d7f0..28766f861d9 100644 --- a/app/views/notify/closed_merge_request_email.text.haml +++ b/app/views/notify/closed_merge_request_email.text.haml @@ -6,3 +6,4 @@ Merge Request URL: #{project_merge_request_url(@merge_request.target_project, @m Author: #{sanitize_name(@merge_request.author_name)} = assignees_label(@merge_request) += reviewers_label(@merge_request) diff --git a/changelogs/unreleased/300750-add-missing-reviewers-information-to-closed-merge-request-email.yml b/changelogs/unreleased/300750-add-missing-reviewers-information-to-closed-merge-request-email.yml new file mode 100644 index 00000000000..814b4280ed2 --- /dev/null +++ b/changelogs/unreleased/300750-add-missing-reviewers-information-to-closed-merge-request-email.yml @@ -0,0 +1,5 @@ +--- +title: Add reviewers detail to text version of closed merge request email +merge_request: 55594 +author: +type: added diff --git a/changelogs/unreleased/btn-confirm-abuse-reports.yml b/changelogs/unreleased/btn-confirm-abuse-reports.yml new file mode 100644 index 00000000000..8bda61fdc62 --- /dev/null +++ b/changelogs/unreleased/btn-confirm-abuse-reports.yml @@ -0,0 +1,5 @@ +--- +title: Move to btn-confirm from btn-success in abuse_reports folder +merge_request: 55262 +author: Yogi (@yo) +type: changed diff --git a/changelogs/unreleased/btn-confirm-admin-users.yml b/changelogs/unreleased/btn-confirm-admin-users.yml new file mode 100644 index 00000000000..cafd375323f --- /dev/null +++ b/changelogs/unreleased/btn-confirm-admin-users.yml @@ -0,0 +1,5 @@ +--- +title: Move to btn-confirm from btn-success in admin/users directory +merge_request: 55276 +author: Yogi (@yo) +type: changed diff --git a/changelogs/unreleased/pks-checks-skip-integrity-lfs-deletions.yml b/changelogs/unreleased/pks-checks-skip-integrity-lfs-deletions.yml new file mode 100644 index 00000000000..ffbc6cff4c3 --- /dev/null +++ b/changelogs/unreleased/pks-checks-skip-integrity-lfs-deletions.yml @@ -0,0 +1,5 @@ +--- +title: 'checks: Skip LFS checks when deleting refs' +merge_request: 55609 +author: +type: fixed diff --git a/doc/administration/gitaly/img/gitaly_network_13_9.png b/doc/administration/gitaly/img/gitaly_network_13_9.png new file mode 100644 index 0000000000000000000000000000000000000000..d7dbfdaf0d0530650499de52dd31f505660ee270 GIT binary patch literal 33155 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 UIU~sfFMEZPkx&$`6g3L|ANjjL%K!iX literal 0 HcmV?d00001 diff --git a/doc/administration/gitaly/index.md b/doc/administration/gitaly/index.md index c442fd6cda2..c2103823815 100644 --- a/doc/administration/gitaly/index.md +++ b/doc/administration/gitaly/index.md @@ -126,6 +126,11 @@ The following list depicts the network architecture of Gitaly: - Authentication is done through a static token which is shared among the Gitaly and GitLab Rails nodes. +The following digraph illustrates communication between Gitaly servers and GitLab Rails showing +the default ports for HTTP and HTTPs communication. + +![Gitaly network architecture diagram](img/gitaly_network_13_9.png) + WARNING: Gitaly servers must not be exposed to the public internet as Gitaly's network traffic is unencrypted by default. The use of firewall is highly recommended to restrict access to the Gitaly server. diff --git a/doc/user/application_security/vulnerability_report/index.md b/doc/user/application_security/vulnerability_report/index.md index 292f99dfc10..b1435543101 100644 --- a/doc/user/application_security/vulnerability_report/index.md +++ b/doc/user/application_security/vulnerability_report/index.md @@ -74,7 +74,8 @@ the **Failed jobs** tab of the pipeline page. ## Export vulnerabilities -> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/213014) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 12.10. +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/213014) in the Security Center (previously known as the Instance Security Dashboard) and project-level Vulnerability Report (previously known as the Project Security Dashboard) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 13.0. +> - [Added](https://gitlab.com/gitlab-org/gitlab/-/issues/213013) to the group-level Vulnerability Report in [GitLab Ultimate](https://about.gitlab.com/pricing/) 13.1. You can export all your vulnerabilities in CSV (comma separated values) format by clicking the **{upload}** **Export** button located at top right of the Security Dashboard. When the report is diff --git a/lib/gitlab/checks/lfs_check.rb b/lib/gitlab/checks/lfs_check.rb index b70a6a69b93..38f0b82c8b4 100644 --- a/lib/gitlab/checks/lfs_check.rb +++ b/lib/gitlab/checks/lfs_check.rb @@ -13,6 +13,7 @@ module Gitlab return unless project.lfs_enabled? return if skip_lfs_integrity_check + return if deletion? logger.log_timed(LOG_MESSAGE) do lfs_check = Checks::LfsIntegrity.new(project, newrev, logger.time_left) diff --git a/spec/lib/gitlab/checks/lfs_check_spec.rb b/spec/lib/gitlab/checks/lfs_check_spec.rb index 713858e0e35..19c1d820dff 100644 --- a/spec/lib/gitlab/checks/lfs_check_spec.rb +++ b/spec/lib/gitlab/checks/lfs_check_spec.rb @@ -39,13 +39,26 @@ RSpec.describe Gitlab::Checks::LfsCheck do end end - context 'deletion' do - let(:changes) { { oldrev: oldrev, ref: ref } } + context 'with deletion' do + shared_examples 'a skipped integrity check' do + it 'skips integrity check' do + expect(project.repository).not_to receive(:new_objects) + expect_any_instance_of(Gitlab::Git::LfsChanges).not_to receive(:new_pointers) - it 'skips integrity check' do - expect(project.repository).not_to receive(:new_objects) + subject.validate! + end + end - subject.validate! + context 'with missing newrev' do + it_behaves_like 'a skipped integrity check' do + let(:changes) { { oldrev: oldrev, ref: ref } } + end + end + + context 'with blank newrev' do + it_behaves_like 'a skipped integrity check' do + let(:changes) { { oldrev: oldrev, newrev: Gitlab::Git::BLANK_SHA, ref: ref } } + end end end diff --git a/spec/mailers/emails/merge_requests_spec.rb b/spec/mailers/emails/merge_requests_spec.rb index 1a61d3c4362..d127867aa82 100644 --- a/spec/mailers/emails/merge_requests_spec.rb +++ b/spec/mailers/emails/merge_requests_spec.rb @@ -8,7 +8,7 @@ RSpec.describe Emails::MergeRequests do include_context 'gitlab email notification' - let_it_be(:current_user) { create(:user) } + let_it_be(:current_user, reload: true) { create(:user, email: "current@email.com", name: 'www.example.com') } let_it_be(:assignee, reload: true) { create(:user, email: 'assignee@example.com', name: 'John Doe') } let_it_be(:reviewer, reload: true) { create(:user, email: 'reviewer@example.com', name: 'Jane Doe') } let_it_be(:project) { create(:project, :repository) } @@ -22,6 +22,39 @@ RSpec.describe Emails::MergeRequests do end let(:recipient) { assignee } + let(:current_user_sanitized) { 'www_example_com' } + + describe '#closed_merge_request_email' do + subject { Notify.closed_merge_request_email(recipient.id, merge_request.id, current_user.id) } + + it_behaves_like 'an answer to an existing thread with reply-by-email enabled' do + let(:model) { merge_request } + end + + it_behaves_like 'it should show Gmail Actions View Merge request link' + it_behaves_like 'an unsubscribeable thread' + it_behaves_like 'appearance header and footer enabled' + it_behaves_like 'appearance header and footer not enabled' + + it 'is sent as the author' do + sender = subject.header[:from].addrs[0] + expect(sender.display_name).to eq(current_user.name) + expect(sender.address).to eq(gitlab_sender) + end + + it 'has the correct subject and body' do + aggregate_failures do + is_expected.to have_referable_subject(merge_request, reply: true) + is_expected.to have_body_text('closed') + is_expected.to have_body_text(current_user_sanitized) + is_expected.to have_body_text(project_merge_request_path(project, merge_request)) + is_expected.to have_link(merge_request.to_reference, href: project_merge_request_url(merge_request.target_project, merge_request)) + + expect(subject.text_part).to have_content(assignee.name) + expect(subject.text_part).to have_content(reviewer.name) + end + end + end describe '#merged_merge_request_email' do let(:merge_author) { assignee } @@ -79,7 +112,7 @@ RSpec.describe Emails::MergeRequests do subject { Notify.resolved_all_discussions_email(recipient.id, merge_request.id, current_user.id) } it "includes the name of the resolver" do - expect(subject).to have_body_text current_user.name + expect(subject).to have_body_text current_user_sanitized end end