diff options
21 files changed, 228 insertions, 86 deletions
diff --git a/app/assets/javascripts/frequent_items/components/frequent_items_list_item.vue b/app/assets/javascripts/frequent_items/components/frequent_items_list_item.vue index 92c3bcb5012..6188d41ae96 100644 --- a/app/assets/javascripts/frequent_items/components/frequent_items_list_item.vue +++ b/app/assets/javascripts/frequent_items/components/frequent_items_list_item.vue @@ -54,8 +54,8 @@ export default { <template> <li class="frequent-items-list-item-container"> <a :href="webUrl" class="clearfix"> - <div class="frequent-items-item-avatar-container"> - <img v-if="hasAvatar" :src="avatarUrl" class="avatar rect-avatar s32" /> + <div class="frequent-items-item-avatar-container avatar-container rect-avatar s32"> + <img v-if="hasAvatar" :src="avatarUrl" class="avatar s32" /> <identicon v-else :entity-id="itemId" diff --git a/app/assets/javascripts/pipelines/pipeline_details_bundle.js b/app/assets/javascripts/pipelines/pipeline_details_bundle.js index 71bdf279861..7e14b810c13 100644 --- a/app/assets/javascripts/pipelines/pipeline_details_bundle.js +++ b/app/assets/javascripts/pipelines/pipeline_details_bundle.js @@ -99,8 +99,26 @@ export default () => { window.gon && window.gon.features && window.gon.features.junitPipelineView; if (testReportsEnabled) { + const fetchReportsAction = 'fetchReports'; testReportsStore.dispatch('setEndpoint', dataset.testReportEndpoint); - testReportsStore.dispatch('fetchReports'); + + const tabsElmement = document.querySelector('.pipelines-tabs'); + const isTestTabActive = Boolean( + document.querySelector('.pipelines-tabs > li > a.test-tab.active'), + ); + + if (isTestTabActive) { + testReportsStore.dispatch(fetchReportsAction); + } else { + const tabClickHandler = e => { + if (e.target.className === 'test-tab') { + testReportsStore.dispatch(fetchReportsAction); + tabsElmement.removeEventListener('click', tabClickHandler); + } + }; + + tabsElmement.addEventListener('click', tabClickHandler); + } // eslint-disable-next-line no-new new Vue({ diff --git a/app/assets/stylesheets/pages/experimental_separate_sign_up.scss b/app/assets/stylesheets/pages/experimental_separate_sign_up.scss index aeeb8b7384d..710d89d9341 100644 --- a/app/assets/stylesheets/pages/experimental_separate_sign_up.scss +++ b/app/assets/stylesheets/pages/experimental_separate_sign_up.scss @@ -3,33 +3,8 @@ background-color: $gray-light; } - .gitlab-logo { - width: 80px; - height: 80px; - } - .signup-box-container { - max-width: 900px; - - &.navless-container { - padding: 35px $gl-padding; - // overriding .devise-layout-html.navless-container to support the sticky footer - // without having a header on size xs - @include media-breakpoint-down(xs) { - padding: 65px $gl-padding; // height of footer - padding-top: $gl-padding; - } - } - } - - .signup-heading h2 { - font-weight: $gl-font-weight-bold; - padding: 0 $gl-padding; - font-size: $gl-font-size-28; - - @include media-breakpoint-down(md) { - font-size: $gl-font-size-large; - } + max-width: 960px; } .signup-box { diff --git a/app/views/devise/registrations/new.html.haml b/app/views/devise/registrations/new.html.haml index 5f85235e8fa..232dffa28b4 100644 --- a/app/views/devise/registrations/new.html.haml +++ b/app/views/devise/registrations/new.html.haml @@ -1,7 +1,16 @@ - page_title "Sign up" - if experiment_enabled?(:signup_flow) - = render 'devise/shared/experimental_separate_sign_up_flow_box' + .row + .col-lg-7 + %h1.mb-3.font-weight-bold.text-6.mt-0 + = _("Speed up your DevOps<br>with GitLab").html_safe + %p.text-3 + = _("GitLab is a single application for the entire software development lifecycle. From project planning and source code management to CI/CD, monitoring, and security.") + .col-lg-5.order-12 + .text-center.mb-3 + %h2.font-weight-bold.gl-font-size-20= _('Register for GitLab') + = render 'devise/shared/experimental_separate_sign_up_flow_box' + = render 'devise/shared/sign_in_link' - else = render 'devise/shared/signup_box' - -= render 'devise/shared/sign_in_link' + = render 'devise/shared/sign_in_link' diff --git a/app/views/devise/shared/_experimental_separate_sign_up_flow_box.html.haml b/app/views/devise/shared/_experimental_separate_sign_up_flow_box.html.haml index 7de7dec61b0..7bc3042c94d 100644 --- a/app/views/devise/shared/_experimental_separate_sign_up_flow_box.html.haml +++ b/app/views/devise/shared/_experimental_separate_sign_up_flow_box.html.haml @@ -1,4 +1,3 @@ -- content_for(:page_title, _('Register for GitLab')) - max_first_name_length = max_last_name_length = 127 - max_username_length = 255 .signup-box.p-3.mb-2 diff --git a/app/views/layouts/devise_experimental_separate_sign_up_flow.html.haml b/app/views/layouts/devise_experimental_separate_sign_up_flow.html.haml index 3a5c5399355..fddfe14e05f 100644 --- a/app/views/layouts/devise_experimental_separate_sign_up_flow.html.haml +++ b/app/views/layouts/devise_experimental_separate_sign_up_flow.html.haml @@ -1,22 +1,15 @@ !!! 5 %html.devise-layout-html.navless{ class: system_message_class } = render "layouts/head" - %body.ui-indigo.signup-page.application.navless{ class: "#{client_class_list}", data: { page: body_data_page, qa_selector: 'signup_page' } } - = header_message + %body.ui-indigo.signup-page{ class: "#{client_class_list}", data: { page: body_data_page, qa_selector: 'signup_page' } } + = render "layouts/header/logo_with_title" = render "layouts/init_client_detection_flags" .page-wrap - .container.signup-box-container.navless-container.mt-0 + .container.signup-box-container.navless-container = render "layouts/broadcast" .content = render "layouts/flash" - .row.mb-6 - .col-sm-8.offset-sm-2.col-md-6.offset-md-3.new-session-forms-container - = render_if_exists 'layouts/devise_help_text' - .text-center.signup-heading.mb-3 - = image_tag(image_url('logo.svg'), class: 'gitlab-logo', alt: 'GitLab Logo') - - if content_for?(:page_title) - %h2= yield :page_title - = yield + = yield %hr.footer-fixed .footer-container .container diff --git a/app/views/layouts/header/_logo_with_title.html.haml b/app/views/layouts/header/_logo_with_title.html.haml new file mode 100644 index 00000000000..1ea6168fc9a --- /dev/null +++ b/app/views/layouts/header/_logo_with_title.html.haml @@ -0,0 +1,4 @@ +%header.navbar.fixed-top.navbar-gitlab.justify-content-center + = render 'shared/logo.svg' + %span.logo-text.d-none.d-lg-block.prepend-left-8.pt-1 + = render 'shared/logo_type.svg' diff --git a/changelogs/unreleased/37725-request-test-reports-on-demand.yml b/changelogs/unreleased/37725-request-test-reports-on-demand.yml new file mode 100644 index 00000000000..89eb7fda336 --- /dev/null +++ b/changelogs/unreleased/37725-request-test-reports-on-demand.yml @@ -0,0 +1,6 @@ +--- +title: Test reports in the pipeline details page will now load when clicking the tests + tab. +merge_request: 24577 +author: +type: changed diff --git a/changelogs/unreleased/ak-fix-alert.yml b/changelogs/unreleased/ak-fix-alert.yml new file mode 100644 index 00000000000..b4e687f5ca7 --- /dev/null +++ b/changelogs/unreleased/ak-fix-alert.yml @@ -0,0 +1,5 @@ +--- +title: Fix k8s logs alert display state +merge_request: 24802 +author: +type: fixed diff --git a/changelogs/unreleased/fix_avatar_not_rendered_properly.yml b/changelogs/unreleased/fix_avatar_not_rendered_properly.yml new file mode 100644 index 00000000000..1427aed114c --- /dev/null +++ b/changelogs/unreleased/fix_avatar_not_rendered_properly.yml @@ -0,0 +1,5 @@ +--- +title: dragoon20 +merge_request: 24958 +author: Jordan Fernando +type: fixed diff --git a/changelogs/unreleased/georgekoltsov-add-board-lists.yml b/changelogs/unreleased/georgekoltsov-add-board-lists.yml new file mode 100644 index 00000000000..a5b864fa785 --- /dev/null +++ b/changelogs/unreleased/georgekoltsov-add-board-lists.yml @@ -0,0 +1,5 @@ +--- +title: Add Board Lists to Group Export +merge_request: 24863 +author: +type: changed diff --git a/doc/administration/audit_events.md b/doc/administration/audit_events.md index f1c9fdcb876..a086a26a370 100644 --- a/doc/administration/audit_events.md +++ b/doc/administration/audit_events.md @@ -105,8 +105,8 @@ recorded: - Ask for password reset - Grant OAuth access - Started/stopped user impersonation -- Changed username -- User was deleted +- Changed username ([introduced](https://gitlab.com/gitlab-org/gitlab/issues/7797) in GitLab 12.8) +- User was deleted ([introduced](https://gitlab.com/gitlab-org/gitlab/issues/251) in GitLab 12.8) It is possible to filter particular actions by choosing an audit data type from the filter dropdown box. You can further filter by specific group, project or user diff --git a/doc/api/epic_links.md b/doc/api/epic_links.md index 84034ee1b96..0e2fb2653c4 100644 --- a/doc/api/epic_links.md +++ b/doc/api/epic_links.md @@ -3,7 +3,7 @@ >**Note:** > This endpoint was [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/9188) in GitLab 11.8. -Manages parent-child [epic relationships](../user/group/epics/index.md#multi-level-child-epics). +Manages parent-child [epic relationships](../user/group/epics/index.md#multi-level-child-epics-ultimate). Every API call to `epic_links` must be authenticated. diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md index 1c0e6545bda..ba64194472f 100644 --- a/doc/ci/yaml/README.md +++ b/doc/ci/yaml/README.md @@ -2663,6 +2663,8 @@ upstream_bridge: #### `trigger` syntax for child pipeline +> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/16094) in GitLab 12.7. + To create a [child pipeline](../parent_child_pipelines.md), specify the path to the YAML file containing the CI config of the child pipeline: diff --git a/doc/user/group/epics/index.md b/doc/user/group/epics/index.md index cb9c58e28ae..d8e4b0d8934 100644 --- a/doc/user/group/epics/index.md +++ b/doc/user/group/epics/index.md @@ -2,9 +2,10 @@ type: reference, howto --- -# Epics **(ULTIMATE)** +# Epics **(PREMIUM)** > Introduced in [GitLab Ultimate](https://about.gitlab.com/pricing/) 10.2. +> In [GitLab 12.8](https://gitlab.com/gitlab-org/gitlab/issues/37081), single-level Epics were moved to **(PREMIUM)**. Epics let you manage your portfolio of projects more efficiently and with less effort by tracking groups of issues that share a theme, across projects and @@ -15,7 +16,7 @@ milestones. The possible relationships between epics and issues are: - An epic is the parent of one or more issues. -- An epic is the parent of one or more child epics. For details see [Multi-level child epics](#multi-level-child-epics). +- An epic is the parent of one or more child epics. For details see [Multi-level child epics](#multi-level-child-epics-ultimate). **(ULTIMATE)** ```mermaid graph TD @@ -100,7 +101,7 @@ To remove an issue from an epic: 1. Click on the <kbd>x</kbd> button in the epic's issue list. 1. Click **Remove** in the **Remove issue** warning message. -## Multi-level child epics +## Multi-level child epics **(ULTIMATE)** > [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/8333) in GitLab Ultimate 11.7. @@ -175,7 +176,7 @@ then the parent epic's start date will reflect the change and this will propagat > [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/7327) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 11.10. -If your epic contains one or more [child epics](#multi-level-child-epics) which +If your epic contains one or more [child epics](#multi-level-child-epics-ultimate) which have a [start or due date](#start-date-and-due-date), a [roadmap](../roadmap/index.md) view of the child epics is listed under the parent epic. diff --git a/lib/gitlab/import_export/group_import_export.yml b/lib/gitlab/import_export/group_import_export.yml index 1184174e073..d7fbbbe0422 100644 --- a/lib/gitlab/import_export/group_import_export.yml +++ b/lib/gitlab/import_export/group_import_export.yml @@ -8,10 +8,14 @@ tree: - :milestones - :badges - labels: - - :priorities - - :boards + - :priorities + - boards: + - lists: + - label: + - :priorities + - :board - members: - - :user + - :user included_attributes: user: @@ -30,12 +34,16 @@ excluded_attributes: methods: labels: - :type + label: + - :type badges: - :type notes: - :type events: - :action + lists: + - :list_type preloads: @@ -45,16 +53,20 @@ ee: tree: group: - epics: - - :parent + - :parent + - :award_emoji + - events: + - :push_event_payload + - notes: + - :author - :award_emoji - events: - - :push_event_payload - - notes: - - :author - - :award_emoji - - events: - - :push_event_payload + - :push_event_payload - boards: - - :board_assignee - - labels: - - :priorities + - :board_assignee + - labels: + - :priorities + - lists: + - milestone: + - events: + - :push_event_payload diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 9edcf28e93e..0bd535d44a4 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -9156,6 +9156,9 @@ msgstr "" msgid "GitLab for Slack" msgstr "" +msgid "GitLab is a single application for the entire software development lifecycle. From project planning and source code management to CI/CD, monitoring, and security." +msgstr "" + msgid "GitLab is obtaining a Let's Encrypt SSL certificate for this domain. This process can take some time. Please try again later." msgstr "" @@ -13360,9 +13363,6 @@ msgstr "" msgid "PackageRegistry|NuGet Command" msgstr "" -msgid "PackageRegistry|Package installation" -msgstr "" - msgid "PackageRegistry|Registry Setup" msgstr "" @@ -18059,6 +18059,9 @@ msgstr "" msgid "Specify the following URL during the Runner setup:" msgstr "" +msgid "Speed up your DevOps<br>with GitLab" +msgstr "" + msgid "Squash commit message" msgstr "" diff --git a/spec/features/projects/pipelines/pipeline_spec.rb b/spec/features/projects/pipelines/pipeline_spec.rb index 8d9a397de9a..63c0695fe95 100644 --- a/spec/features/projects/pipelines/pipeline_spec.rb +++ b/spec/features/projects/pipelines/pipeline_spec.rb @@ -359,13 +359,27 @@ describe 'Pipeline', :js do context 'test tabs' do let(:pipeline) { create(:ci_pipeline, :with_test_reports, project: project) } - it 'shows badge counter in Tests tab' do + before do visit_pipeline wait_for_requests + end + it 'shows badge counter in Tests tab' do expect(pipeline.test_reports.total_count).to eq(4) expect(page.find('.js-test-report-badge-counter').text).to eq(pipeline.test_reports.total_count.to_s) end + + it 'does not call test_report.json endpoint by default', :js do + expect(page).to have_selector('.js-no-tests-to-show', visible: :all) + end + + it 'does call test_report.json endpoint when tab is selected', :js do + find('.js-tests-tab-link').click + wait_for_requests + + expect(page).to have_content('Test suites') + expect(page).to have_selector('.js-tests-detail', visible: :all) + end end context 'retrying jobs' do diff --git a/spec/fixtures/lib/gitlab/import_export/group_exports/complex/group.json b/spec/fixtures/lib/gitlab/import_export/group_exports/complex/group.json index 6403b5fa080..7cd91ff225b 100644 --- a/spec/fixtures/lib/gitlab/import_export/group_exports/complex/group.json +++ b/spec/fixtures/lib/gitlab/import_export/group_exports/complex/group.json @@ -260,25 +260,101 @@ ], "boards": [ { - "id": 56, + "id": 173, "project_id": null, - "created_at": "2019-11-20T17:27:16.808Z", - "updated_at": "2019-11-20T17:27:16.808Z", - "name": "Development", + "created_at": "2020-02-11T14:35:51.561Z", + "updated_at": "2020-02-11T14:35:51.561Z", + "name": "first board", "milestone_id": null, "group_id": 4351, "weight": null, - "labels": [] - }, - { - "id": 57, - "project_id": null, - "created_at": "2019-11-20T17:27:41.118Z", - "updated_at": "2019-11-20T17:27:41.118Z", - "name": "Board!", - "milestone_id": 7638, - "group_id": 4351, - "weight": null, + "lists": [ + { + "id": 189, + "board_id": 173, + "label_id": 271, + "list_type": "label", + "position": 0, + "created_at": "2020-02-11T14:35:57.131Z", + "updated_at": "2020-02-11T14:35:57.131Z", + "user_id": null, + "milestone_id": null, + "max_issue_count": 0, + "max_issue_weight": 0, + "label": { + "id": 271, + "title": "TSL", + "color": "#58796f", + "project_id": null, + "created_at": "2019-11-20T17:02:20.541Z", + "updated_at": "2020-02-06T15:44:52.048Z", + "template": false, + "description": null, + "group_id": 4351, + "type": "GroupLabel", + "priorities": [] + }, + "board": { + "id": 173, + "project_id": null, + "created_at": "2020-02-11T14:35:51.561Z", + "updated_at": "2020-02-11T14:35:51.561Z", + "name": "hi", + "milestone_id": null, + "group_id": 4351, + "weight": null + } + }, + { + "id": 190, + "board_id": 173, + "label_id": 272, + "list_type": "label", + "position": 1, + "created_at": "2020-02-11T14:35:57.868Z", + "updated_at": "2020-02-11T14:35:57.868Z", + "user_id": null, + "milestone_id": null, + "max_issue_count": 0, + "max_issue_weight": 0, + "label": { + "id": 272, + "title": "Sosync", + "color": "#110320", + "project_id": null, + "created_at": "2019-11-20T17:02:20.532Z", + "updated_at": "2020-02-06T15:44:52.057Z", + "template": false, + "description": null, + "group_id": 4351, + "type": "GroupLabel", + "priorities": [] + }, + "board": { + "id": 173, + "project_id": null, + "created_at": "2020-02-11T14:35:51.561Z", + "updated_at": "2020-02-11T14:35:51.561Z", + "name": "hi", + "milestone_id": null, + "group_id": 4351, + "weight": null + } + }, + { + "id": 188, + "board_id": 173, + "label_id": null, + "list_type": "closed", + "position": null, + "created_at": "2020-02-11T14:35:51.593Z", + "updated_at": "2020-02-11T14:35:51.593Z", + "user_id": null, + "milestone_id": null, + "max_issue_count": 0, + "max_issue_weight": 0 + } + ], "labels": [] } ], diff --git a/spec/lib/gitlab/import_export/group_tree_restorer_spec.rb b/spec/lib/gitlab/import_export/group_tree_restorer_spec.rb index 0d9b07ffaf0..4d52f1fdda3 100644 --- a/spec/lib/gitlab/import_export/group_tree_restorer_spec.rb +++ b/spec/lib/gitlab/import_export/group_tree_restorer_spec.rb @@ -39,8 +39,18 @@ describe Gitlab::ImportExport::GroupTreeRestorer do expect(@group.labels.count).to eq(10) end - it 'has issue boards' do - expect(@group.boards.count).to eq(2) + context 'issue boards' do + it 'has issue boards' do + expect(@group.boards.count).to eq(1) + end + + it 'has board label lists' do + lists = @group.boards.find_by(name: 'first board').lists + + expect(lists.count).to eq(3) + expect(lists.first.label.title).to eq('TSL') + expect(lists.second.label.title).to eq('Sosync') + end end it 'has badges' do diff --git a/spec/lib/gitlab/import_export/group_tree_saver_spec.rb b/spec/lib/gitlab/import_export/group_tree_saver_spec.rb index b856441981a..17538db3c68 100644 --- a/spec/lib/gitlab/import_export/group_tree_saver_spec.rb +++ b/spec/lib/gitlab/import_export/group_tree_saver_spec.rb @@ -95,6 +95,10 @@ describe Gitlab::ImportExport::GroupTreeSaver do expect(saved_group_json['boards']).not_to be_empty end + it 'has board label list' do + expect(saved_group_json['boards'].first['lists']).not_to be_empty + end + it 'has group members' do expect(saved_group_json['members']).not_to be_empty end @@ -168,7 +172,8 @@ describe Gitlab::ImportExport::GroupTreeSaver do create(:group_badge, group: group) group_label = create(:group_label, group: group) create(:label_priority, label: group_label, priority: 1) - create(:board, group: group) + board = create(:board, group: group) + create(:list, board: board, label: group_label) create(:group_badge, group: group) group |