From 351586876ffc217f757032d477f871da4ece3b77 Mon Sep 17 00:00:00 2001 From: David Planella Date: Sun, 16 Dec 2018 17:50:43 +0100 Subject: [PATCH 001/319] Fix leading whitespace in translatable string --- app/views/import/bitbucket_server/status.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/import/bitbucket_server/status.html.haml b/app/views/import/bitbucket_server/status.html.haml index ef69197e453..c4e27efc76f 100644 --- a/app/views/import/bitbucket_server/status.html.haml +++ b/app/views/import/bitbucket_server/status.html.haml @@ -29,7 +29,7 @@ %tr %th= _('From Bitbucket Server') %th= _('To GitLab') - %th= _(' Status') + %th= _('Status') %tbody - @already_added_projects.each do |project| %tr{ id: "project_#{project.id}", class: "#{project_status_css_class(project.import_status)}" } From 38e55d6b96e2bee43e7773182679fbcfe6f41ff3 Mon Sep 17 00:00:00 2001 From: David Planella Date: Sun, 16 Dec 2018 17:59:02 +0100 Subject: [PATCH 002/319] Update .pot file with changed strings --- locale/gitlab.pot | 3 --- 1 file changed, 3 deletions(-) diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 0584d2006f7..902cf366dc0 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -16,9 +16,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -msgid " Status" -msgstr "" - msgid "%d addition" msgid_plural "%d additions" msgstr[0] "" From f5646b416e5ab821048d13034ff8bd8d0ff499d3 Mon Sep 17 00:00:00 2001 From: Nick Thomas Date: Wed, 1 May 2019 16:19:54 +0100 Subject: [PATCH 003/319] First pass at a graphql vision --- doc/api/graphql/index.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/doc/api/graphql/index.md b/doc/api/graphql/index.md index cf02bbd9c92..10e1ef0e533 100644 --- a/doc/api/graphql/index.md +++ b/doc/api/graphql/index.md @@ -16,6 +16,20 @@ added to the API without creating breaking changes. This allows us to have a versionless API as described in [the GraphQL documentation](https://graphql.org/learn/best-practices/#versioning). +## Vision + +We want the GraphQL API to be the **primary** means of interacting +programmatically with GitLab. To achieve this, it needs full coverage - anything +possible in the REST API should also be possible in the GraphQL API. + +To help us meet this vision, the frontend should use GraphQL in preference to +the REST API for new features, although the alpha status of GraphQL may prevent +this from being a possibility at times. + +There are no plans to deprecate the REST API. To reduce the technical burden of +supporting two APIs in parallel, they should share implementations as much as +possible. + ## Enabling the GraphQL feature The GraphQL API itself is currently in Alpha, and therefore hidden behind a @@ -32,7 +46,6 @@ curl --data "value=100" --header "PRIVATE-TOKEN: " https://gi A first iteration of a GraphQL API includes the following queries 1. `project` : Within a project it is also possible to fetch a `mergeRequest` by IID. - 1. `group` : Only basic group information is currently supported. ## GraphiQL From f665f25d49a2ff4b7b8e9207e2bb1b95089059c0 Mon Sep 17 00:00:00 2001 From: luisdiogo2071317 Date: Fri, 3 May 2019 18:42:24 +0000 Subject: [PATCH 004/319] Update proofreader.md --- doc/development/i18n/proofreader.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/development/i18n/proofreader.md b/doc/development/i18n/proofreader.md index ac04a21b37a..afe0ecf6416 100644 --- a/doc/development/i18n/proofreader.md +++ b/doc/development/i18n/proofreader.md @@ -71,6 +71,7 @@ are very appreciative of the work done by translators and proofreaders! - Maksymilian Roman - [GitLab](https://gitlab.com/villaincandle), [Crowdin](https://crowdin.com/profile/villaincandle) - Portuguese - Proofreaders needed. + - Diogo Trindade - [GitLab](https://gitlab.com/luisdiogo2071317), [Crowdin](https://crowdin.com/profile/ldiogotrindade) - Portuguese, Brazilian - Paulo George Gomes Bezerra - [GitLab](https://gitlab.com/paulobezerra), [Crowdin](https://crowdin.com/profile/paulogomes.rep) - André Gama - [GitLab](https://gitlab.com/andregamma), [Crowdin](https://crowdin.com/profile/ToeOficial) From 63cbaa5e8e2830d16f8a0a3d56d66202fdcd2653 Mon Sep 17 00:00:00 2001 From: ddavison Date: Tue, 30 Apr 2019 16:06:40 -0700 Subject: [PATCH 005/319] Delegate CiVariable delegation to API Instead of Resource::CiVariable fabricating via the browser_ui, let's delegate to the API instead. (will shave off roughly 3-4s every use) Override resource_web_url to catch ResourceURLMissingError as there is no "show" action for a CI/CD var Signed-off-by: ddavison --- qa/qa/resource/ci_variable.rb | 27 +++++++++++++++++++++++++++ qa/qa/resource/project.rb | 1 + 2 files changed, 28 insertions(+) diff --git a/qa/qa/resource/ci_variable.rb b/qa/qa/resource/ci_variable.rb index d82de4cb816..341d3c1ed7e 100644 --- a/qa/qa/resource/ci_variable.rb +++ b/qa/qa/resource/ci_variable.rb @@ -25,6 +25,33 @@ module QA end end end + + def fabricate_via_api! + resource_web_url(api_get) + rescue ResourceNotFoundError + super + end + + def resource_web_url(resource) + super + rescue ResourceURLMissingError + # this particular resource does not expose a web_url property + end + + def api_get_path + "/projects/#{project.id}/variables/#{key}" + end + + def api_post_path + "/projects/#{project.id}/variables" + end + + def api_post_body + { + key: key, + value: value + } + end end end end diff --git a/qa/qa/resource/project.rb b/qa/qa/resource/project.rb index de1e9f04c36..c1a0cff86d8 100644 --- a/qa/qa/resource/project.rb +++ b/qa/qa/resource/project.rb @@ -7,6 +7,7 @@ module QA class Project < Base include Events::Project + attribute :id attribute :name attribute :description From 6429ef77fff7a47484c6b7b43ed7719e0357ee16 Mon Sep 17 00:00:00 2001 From: ddavison Date: Tue, 7 May 2019 13:32:07 -0700 Subject: [PATCH 006/319] Don't fabricate a default project for the CI/CD test Convert 'user adds a CI variable' to a :smoke test Adjust support for API and UI fabrication Signed-off-by: ddavison --- .../4_verify/ci_variable/add_ci_variable_spec.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/qa/qa/specs/features/browser_ui/4_verify/ci_variable/add_ci_variable_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/ci_variable/add_ci_variable_spec.rb index 33f342edb08..561a8895329 100644 --- a/qa/qa/specs/features/browser_ui/4_verify/ci_variable/add_ci_variable_spec.rb +++ b/qa/qa/specs/features/browser_ui/4_verify/ci_variable/add_ci_variable_spec.rb @@ -3,15 +3,25 @@ module QA context 'Verify' do describe 'CI variable support' do - it 'user adds a CI variable' do + it 'user adds a CI variable', :smoke do Runtime::Browser.visit(:gitlab, Page::Main::Login) - Page::Main::Login.act { sign_in_using_credentials } + Page::Main::Login.perform(&:sign_in_using_credentials) + + project = Resource::Project.fabricate! do |project| + project.name = 'project-with-ci-variables' + project.description = 'project with CI variables' + end Resource::CiVariable.fabricate! do |resource| + resource.project = project resource.key = 'VARIABLE_KEY' resource.value = 'some_CI_variable' end + project.visit! + + Page::Project::Menu.perform(&:go_to_ci_cd_settings) + Page::Project::Settings::CICD.perform do |settings| settings.expand_ci_variables do |page| expect(page).to have_field(with: 'VARIABLE_KEY') From 7796ee78fc431bad65ad91e5f67446773e7d10ff Mon Sep 17 00:00:00 2001 From: Winnie Hellmann Date: Fri, 10 May 2019 07:19:55 +0000 Subject: [PATCH 007/319] Apply review turnaround time to community contributions --- doc/development/contributing/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/development/contributing/index.md b/doc/development/contributing/index.md index 8b1d014e101..59cf5014da4 100644 --- a/doc/development/contributing/index.md +++ b/doc/development/contributing/index.md @@ -87,7 +87,7 @@ Sometimes style guides will be followed but the code will lack structural integr GitLab will do its best to review community contributions as quickly as possible. Specially appointed developers review community contributions daily. You may take a look at the [team page](https://about.gitlab.com/team/) for the merge request coach who specializes in the type of code you have written and mention them in the merge request. For example, if you have written some JavaScript in your code then you should mention the frontend merge request coach. If your code has multiple disciplines you may mention multiple merge request coaches. -GitLab receives a lot of community contributions, so if your code has not been reviewed within 4 days of its initial submission feel free to re-mention the appropriate merge request coach. +GitLab receives a lot of community contributions, so if your code has not been reviewed within two days (excluding weekend and public holidays) of its initial submission feel free to re-mention the appropriate merge request coach. When submitting code to GitLab, you may feel that your contribution requires the aid of an external library. If your code includes an external library please provide a link to the library, as well as reasons for including it. From c2674c2d37a55ad489392e4dd62feefad7bc8fae Mon Sep 17 00:00:00 2001 From: Lukas Eipert Date: Mon, 6 May 2019 18:37:13 -0500 Subject: [PATCH 008/319] Move to pdf.js distributed with npm pdf.js is available on npm. Importing the dependency from there instead of vendoring it has certain benefits, e.g. the discoverability of updates (especially security fixes). --- app/assets/javascripts/pdf/index.vue | 4 +- package.json | 1 + spec/javascripts/pdf/index_spec.js | 4 +- spec/javascripts/pdf/page_spec.js | 4 +- vendor/assets/javascripts/pdf.js | 19365 ------- vendor/assets/javascripts/pdf.min.js | 1 - vendor/assets/javascripts/pdf.worker.js | 47057 ------------------ vendor/assets/javascripts/pdf.worker.min.js | 1 - yarn.lock | 13 + 9 files changed, 20 insertions(+), 66430 deletions(-) delete mode 100644 vendor/assets/javascripts/pdf.js delete mode 100644 vendor/assets/javascripts/pdf.min.js delete mode 100644 vendor/assets/javascripts/pdf.worker.js delete mode 100644 vendor/assets/javascripts/pdf.worker.min.js diff --git a/app/assets/javascripts/pdf/index.vue b/app/assets/javascripts/pdf/index.vue index dc5f9ba9607..6d39abd4a1f 100644 --- a/app/assets/javascripts/pdf/index.vue +++ b/app/assets/javascripts/pdf/index.vue @@ -1,6 +1,6 @@ + + diff --git a/app/assets/javascripts/repository/graphql.js b/app/assets/javascripts/repository/graphql.js index febfcce780c..0aedc73fc12 100644 --- a/app/assets/javascripts/repository/graphql.js +++ b/app/assets/javascripts/repository/graphql.js @@ -4,7 +4,13 @@ import createDefaultClient from '~/lib/graphql'; Vue.use(VueApollo); -const defaultClient = createDefaultClient({}); +const defaultClient = createDefaultClient({ + Query: { + files() { + return []; + }, + }, +}); export default new VueApollo({ defaultClient, diff --git a/app/assets/javascripts/repository/mixins/get_ref.js b/app/assets/javascripts/repository/mixins/get_ref.js new file mode 100644 index 00000000000..b06087d6f42 --- /dev/null +++ b/app/assets/javascripts/repository/mixins/get_ref.js @@ -0,0 +1,14 @@ +import getRef from '../queries/getRef.graphql'; + +export default { + apollo: { + ref: { + query: getRef, + }, + }, + data() { + return { + ref: '', + }; + }, +}; diff --git a/app/assets/javascripts/repository/pages/index.vue b/app/assets/javascripts/repository/pages/index.vue index fdbf195f0f6..2d92e9174ca 100644 --- a/app/assets/javascripts/repository/pages/index.vue +++ b/app/assets/javascripts/repository/pages/index.vue @@ -1,11 +1,9 @@ diff --git a/app/assets/javascripts/repository/pages/tree.vue b/app/assets/javascripts/repository/pages/tree.vue index f51aafee775..413102b2cd3 100644 --- a/app/assets/javascripts/repository/pages/tree.vue +++ b/app/assets/javascripts/repository/pages/tree.vue @@ -1,5 +1,10 @@ diff --git a/app/assets/javascripts/repository/queries/getFiles.graphql b/app/assets/javascripts/repository/queries/getFiles.graphql new file mode 100644 index 00000000000..5ceaf67ea82 --- /dev/null +++ b/app/assets/javascripts/repository/queries/getFiles.graphql @@ -0,0 +1,8 @@ +query getFiles($path: String!, $ref: String!) { + files(path: $path, ref: $ref) @client { + id + name + fullPath + type + } +} diff --git a/locale/gitlab.pot b/locale/gitlab.pot index b7aea0254a9..68cfb5c8b3b 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -4327,6 +4327,9 @@ msgstr "" msgid "Files" msgstr "" +msgid "Files, directories, and submodules in the path %{path} for commit reference %{ref}" +msgstr "" + msgid "Filter" msgstr "" diff --git a/spec/frontend/repository/components/table/index_spec.js b/spec/frontend/repository/components/table/index_spec.js new file mode 100644 index 00000000000..6f52cffe077 --- /dev/null +++ b/spec/frontend/repository/components/table/index_spec.js @@ -0,0 +1,47 @@ +import { shallowMount } from '@vue/test-utils'; +import { GlLoadingIcon } from '@gitlab/ui'; +import Table from '~/repository/components/table/index.vue'; + +let vm; + +function factory(path, loading = false) { + vm = shallowMount(Table, { + propsData: { + path, + }, + mocks: { + $apollo: { + queries: { + files: { loading }, + }, + }, + }, + }); +} + +describe('Repository table component', () => { + afterEach(() => { + vm.destroy(); + }); + + it.each` + path | ref + ${'/'} | ${'master'} + ${'app/assets'} | ${'master'} + ${'/'} | ${'test'} + `('renders table caption for $ref in $path', ({ path, ref }) => { + factory(path); + + vm.setData({ ref }); + + expect(vm.find('caption').text()).toEqual( + `Files, directories, and submodules in the path ${path} for commit reference ${ref}`, + ); + }); + + it('renders loading icon', () => { + factory('/', true); + + expect(vm.find(GlLoadingIcon).exists()).toBe(true); + }); +}); From 271769a9524dff93a7ba8d2d5e429d60ceeb160a Mon Sep 17 00:00:00 2001 From: Heinrich Lee Yu Date: Mon, 20 May 2019 18:09:08 +0800 Subject: [PATCH 032/319] Fix MR widget padding Align elements horizontally and add missing bottom padding --- .../source_branch_removal_status.vue | 2 +- .../mr_widget_options.vue | 66 ++++++++++--------- .../stylesheets/pages/merge_requests.scss | 14 ++-- .../58632-fix-mr-widget-padding.yml | 5 ++ 4 files changed, 50 insertions(+), 37 deletions(-) create mode 100644 changelogs/unreleased/58632-fix-mr-widget-padding.yml diff --git a/app/assets/javascripts/vue_merge_request_widget/components/source_branch_removal_status.vue b/app/assets/javascripts/vue_merge_request_widget/components/source_branch_removal_status.vue index 780ecdcdac4..6aad2a26a53 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/source_branch_removal_status.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/source_branch_removal_status.vue @@ -14,7 +14,7 @@ export default { diff --git a/locale/gitlab.pot b/locale/gitlab.pot index a4fb9ec927a..199a2dc5435 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -6040,7 +6040,10 @@ msgstr "" msgid "Milestones|Promote Milestone" msgstr "" -msgid "Milestones|Promoting %{milestoneTitle} will make it available for all projects inside %{groupName}. Existing project milestones with the same title will be merged. This action cannot be reversed." +msgid "Milestones|Promoting %{milestoneTitle} will make it available for all projects inside %{groupName}. Existing project milestones with the same title will be merged." +msgstr "" + +msgid "Milestones|This action cannot be reversed." msgstr "" msgid "Mirror a repository" From a5ab4658352c643114485df19d7a2673e0e6a78e Mon Sep 17 00:00:00 2001 From: Brandon Labuschagne Date: Tue, 21 May 2019 10:34:37 +0000 Subject: [PATCH 073/319] Internationalisation of import_projects directory This is one of many MRs opened in order to improve the overall internationalisation of the GitLab codebase. i18n documentation https://docs.gitlab.com/ee/development/i18n/externalization.html --- app/assets/javascripts/import_projects/store/getters.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/import_projects/store/getters.js b/app/assets/javascripts/import_projects/store/getters.js index f03474a8404..727b80765bd 100644 --- a/app/assets/javascripts/import_projects/store/getters.js +++ b/app/assets/javascripts/import_projects/store/getters.js @@ -1,3 +1,5 @@ +import { __ } from '~/locale'; + export const namespaceSelectOptions = state => { const serializedNamespaces = state.namespaces.map(({ fullPath }) => ({ id: fullPath, @@ -5,9 +7,9 @@ export const namespaceSelectOptions = state => { })); return [ - { text: 'Groups', children: serializedNamespaces }, + { text: __('Groups'), children: serializedNamespaces }, { - text: 'Users', + text: __('Users'), children: [{ id: state.defaultTargetNamespace, text: state.defaultTargetNamespace }], }, ]; From 5ebb42cb8b9f163e32a50784b7d380bccea194eb Mon Sep 17 00:00:00 2001 From: Brandon Labuschagne Date: Tue, 21 May 2019 10:40:24 +0000 Subject: [PATCH 074/319] I18N of js files starting with c or d This is one of many MRs opened in order to improve the overall internationalisation of the GitLab codebase. This commit only targets Vanilla JS files. i18n documentation https://docs.gitlab.com/ee/development/i18n/externalization.html --- .../create_merge_request_dropdown.js | 6 +++--- app/assets/javascripts/dropzone_input.js | 15 ++++----------- locale/gitlab.pot | 17 +++++++++++++++++ 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/app/assets/javascripts/create_merge_request_dropdown.js b/app/assets/javascripts/create_merge_request_dropdown.js index 02aa507ba03..8f5cece0788 100644 --- a/app/assets/javascripts/create_merge_request_dropdown.js +++ b/app/assets/javascripts/create_merge_request_dropdown.js @@ -118,7 +118,7 @@ export default class CreateMergeRequestDropdown { this.branchCreated = true; window.location.href = data.url; }) - .catch(() => Flash('Failed to create a branch for this issue. Please try again.')); + .catch(() => Flash(__('Failed to create a branch for this issue. Please try again.'))); } createMergeRequest() { @@ -130,7 +130,7 @@ export default class CreateMergeRequestDropdown { this.mergeRequestCreated = true; window.location.href = data.url; }) - .catch(() => Flash('Failed to create Merge Request. Please try again.')); + .catch(() => Flash(__('Failed to create Merge Request. Please try again.'))); } disable() { @@ -227,7 +227,7 @@ export default class CreateMergeRequestDropdown { .catch(() => { this.unavailable(); this.disable(); - new Flash('Failed to get ref.'); + new Flash(__('Failed to get ref.')); this.isGettingRef = false; diff --git a/app/assets/javascripts/dropzone_input.js b/app/assets/javascripts/dropzone_input.js index 9987fbcb6a7..0ff26445a6a 100644 --- a/app/assets/javascripts/dropzone_input.js +++ b/app/assets/javascripts/dropzone_input.js @@ -4,6 +4,7 @@ import _ from 'underscore'; import './behaviors/preview_markdown'; import csrf from './lib/utils/csrf'; import axios from './lib/utils/axios_utils'; +import { n__, __ } from '~/locale'; Dropzone.autoDiscover = false; @@ -90,7 +91,7 @@ export default function dropzoneInput(form) { if (!processingFileCount) $attachButton.removeClass('hide'); addFileToForm(response.link.url); }, - error: (file, errorMessage = 'Attaching the file failed.', xhr) => { + error: (file, errorMessage = __('Attaching the file failed.'), xhr) => { // If 'error' event is fired by dropzone, the second parameter is error message. // If the 'errorMessage' parameter is empty, the default error message is set. // If the 'error' event is fired by backend (xhr) error response, the third parameter is @@ -273,19 +274,11 @@ export default function dropzoneInput(form) { }; updateAttachingMessage = (files, messageContainer) => { - let attachingMessage; const filesCount = files.filter(file => file.status === 'uploading' || file.status === 'queued') .length; + const attachingMessage = n__('Attaching a file', 'Attaching %d files', filesCount); - // Dinamycally change uploading files text depending on files number in - // dropzone files queue. - if (filesCount > 1) { - attachingMessage = `Attaching ${filesCount} files -`; - } else { - attachingMessage = 'Attaching a file -'; - } - - messageContainer.text(attachingMessage); + messageContainer.text(`${attachingMessage} -`); }; form.find('.markdown-selector').click(function onMarkdownClick(e) { diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 199a2dc5435..413fd5c3875 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -1186,6 +1186,14 @@ msgstr "" msgid "Attach a file by drag & drop or %{upload_link}" msgstr "" +msgid "Attaching a file" +msgid_plural "Attaching %d files" +msgstr[0] "" +msgstr[1] "" + +msgid "Attaching the file failed." +msgstr "" + msgid "Aug" msgstr "" @@ -4205,6 +4213,12 @@ msgstr "" msgid "Failed to connect to the prometheus server" msgstr "" +msgid "Failed to create Merge Request. Please try again." +msgstr "" + +msgid "Failed to create a branch for this issue. Please try again." +msgstr "" + msgid "Failed to create repository via gitlab-shell" msgstr "" @@ -4214,6 +4228,9 @@ msgstr "" msgid "Failed to deploy to" msgstr "" +msgid "Failed to get ref." +msgstr "" + msgid "Failed to install." msgstr "" From 6359c0e8625a2ea891fd33dfc9997a0e88f9e1f0 Mon Sep 17 00:00:00 2001 From: Luke Picciau Date: Tue, 21 May 2019 12:19:35 +0000 Subject: [PATCH 075/319] Set attempt project search optimizations flag to default_enabled --- app/finders/issuable_finder.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/finders/issuable_finder.rb b/app/finders/issuable_finder.rb index 52b6e828cfa..50e9418677c 100644 --- a/app/finders/issuable_finder.rb +++ b/app/finders/issuable_finder.rb @@ -346,7 +346,7 @@ class IssuableFinder def attempt_project_search_optimizations? params[:attempt_project_search_optimizations] && - Feature.enabled?(:attempt_project_search_optimizations) + Feature.enabled?(:attempt_project_search_optimizations, default_enabled: true) end def count_key(value) From a4954961d98aa82c250686f3e3e6744ea49a91c4 Mon Sep 17 00:00:00 2001 From: Luke Bennett Date: Tue, 21 May 2019 03:00:57 +0100 Subject: [PATCH 076/319] Resolve CE/EE diffs in admin users form Part of single codebase changes. --- app/views/admin/users/_form.html.haml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/views/admin/users/_form.html.haml b/app/views/admin/users/_form.html.haml index 296ef073144..0656feb79cb 100644 --- a/app/views/admin/users/_form.html.haml +++ b/app/views/admin/users/_form.html.haml @@ -48,6 +48,10 @@ = render partial: 'access_levels', locals: { f: f } + = render_if_exists 'admin/users/namespace_plan_fieldset', f: f + + = render_if_exists 'admin/users/limits', f: f + %fieldset %legend Profile .form-group.row @@ -73,6 +77,8 @@ = f.label :website_url, 'Website', class: 'col-form-label' .col-sm-10= f.text_field :website_url, class: 'form-control' + = render_if_exists 'admin/users/admin_notes', f: f + .form-actions - if @user.new_record? = f.submit 'Create user', class: "btn btn-success" From 9bb2f02db63daf6901298564475da82533748f56 Mon Sep 17 00:00:00 2001 From: Mayra Cabrera Date: Tue, 21 May 2019 12:33:42 +0000 Subject: [PATCH 077/319] Makes 'diff/content' partial use instance method There's a method defined on viewer that does the conditional. --- app/views/projects/diffs/_content.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/projects/diffs/_content.html.haml b/app/views/projects/diffs/_content.html.haml index 68f74f702ea..590fcdb0234 100644 --- a/app/views/projects/diffs/_content.html.haml +++ b/app/views/projects/diffs/_content.html.haml @@ -1,2 +1,2 @@ .diff-content - = render 'projects/diffs/viewer', viewer: diff_file.rich_viewer || diff_file.simple_viewer + = render 'projects/diffs/viewer', viewer: diff_file.viewer From 5ddedb6b8bf3f47c400e3d38e415462abefa3b50 Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Tue, 21 May 2019 14:26:18 +0100 Subject: [PATCH 078/319] Added tree list row component --- .../repository/components/table/index.vue | 12 ++- .../repository/components/table/row.vue | 60 +++++++++++ app/assets/javascripts/repository/graphql.js | 31 +++++- .../javascripts/repository/pages/tree.vue | 2 +- .../repository/queries/getFiles.graphql | 3 +- .../javascripts/repository/utils/icon.js | 99 +++++++++++++++++++ .../table/__snapshots__/row_spec.js.snap | 33 +++++++ .../repository/components/table/row_spec.js | 85 ++++++++++++++++ spec/frontend/repository/utils/icon_spec.js | 23 +++++ 9 files changed, 343 insertions(+), 5 deletions(-) create mode 100644 app/assets/javascripts/repository/components/table/row.vue create mode 100644 app/assets/javascripts/repository/utils/icon.js create mode 100644 spec/frontend/repository/components/table/__snapshots__/row_spec.js.snap create mode 100644 spec/frontend/repository/components/table/row_spec.js create mode 100644 spec/frontend/repository/utils/icon_spec.js diff --git a/app/assets/javascripts/repository/components/table/index.vue b/app/assets/javascripts/repository/components/table/index.vue index 7119861c7b3..ad3d8f9329d 100644 --- a/app/assets/javascripts/repository/components/table/index.vue +++ b/app/assets/javascripts/repository/components/table/index.vue @@ -4,11 +4,13 @@ import { sprintf, __ } from '../../../locale'; import getRefMixin from '../../mixins/get_ref'; import getFiles from '../../queries/getFiles.graphql'; import TableHeader from './header.vue'; +import TableRow from './row.vue'; export default { components: { GlLoadingIcon, TableHeader, + TableRow, }, mixins: [getRefMixin], apollo: { @@ -57,7 +59,15 @@ export default { }} - + + + diff --git a/app/assets/javascripts/repository/components/table/row.vue b/app/assets/javascripts/repository/components/table/row.vue new file mode 100644 index 00000000000..0ad0fdbd605 --- /dev/null +++ b/app/assets/javascripts/repository/components/table/row.vue @@ -0,0 +1,60 @@ + + + diff --git a/app/assets/javascripts/repository/graphql.js b/app/assets/javascripts/repository/graphql.js index 0aedc73fc12..c85db5c01e5 100644 --- a/app/assets/javascripts/repository/graphql.js +++ b/app/assets/javascripts/repository/graphql.js @@ -7,7 +7,36 @@ Vue.use(VueApollo); const defaultClient = createDefaultClient({ Query: { files() { - return []; + return [ + { + __typename: 'file', + id: 1, + name: 'app', + flatPath: 'app', + type: 'folder', + }, + { + __typename: 'file', + id: 2, + name: 'gitlab-svg', + flatPath: 'gitlab-svg', + type: 'commit', + }, + { + __typename: 'file', + id: 3, + name: 'index.js', + flatPath: 'index.js', + type: 'blob', + }, + { + __typename: 'file', + id: 4, + name: 'test.pdf', + flatPath: 'fixtures/test.pdf', + type: 'blob', + }, + ]; }, }, }); diff --git a/app/assets/javascripts/repository/pages/tree.vue b/app/assets/javascripts/repository/pages/tree.vue index 413102b2cd3..3b898d1aa91 100644 --- a/app/assets/javascripts/repository/pages/tree.vue +++ b/app/assets/javascripts/repository/pages/tree.vue @@ -2,7 +2,7 @@ import FileTable from '../components/table/index.vue'; export default { - component: { + components: { FileTable, }, props: { diff --git a/app/assets/javascripts/repository/queries/getFiles.graphql b/app/assets/javascripts/repository/queries/getFiles.graphql index 5ceaf67ea82..fb446780ed1 100644 --- a/app/assets/javascripts/repository/queries/getFiles.graphql +++ b/app/assets/javascripts/repository/queries/getFiles.graphql @@ -1,8 +1,7 @@ query getFiles($path: String!, $ref: String!) { files(path: $path, ref: $ref) @client { id - name - fullPath + flatPath type } } diff --git a/app/assets/javascripts/repository/utils/icon.js b/app/assets/javascripts/repository/utils/icon.js new file mode 100644 index 00000000000..3e93ff0ec39 --- /dev/null +++ b/app/assets/javascripts/repository/utils/icon.js @@ -0,0 +1,99 @@ +const entryTypeIcons = { + folder: 'folder', + commit: 'archive', +}; + +const fileTypeIcons = [ + { extensions: ['pdf'], name: 'file-pdf-o' }, + { + extensions: [ + 'jpg', + 'jpeg', + 'jif', + 'jfif', + 'jp2', + 'jpx', + 'j2k', + 'j2c', + 'png', + 'gif', + 'tif', + 'tiff', + 'svg', + 'ico', + 'bmp', + ], + name: 'file-image-o', + }, + { + extensions: ['zip', 'zipx', 'tar', 'gz', 'bz', 'bzip', 'xz', 'rar', '7z'], + name: 'file-archive-o', + }, + { extensions: ['mp3', 'wma', 'ogg', 'oga', 'wav', 'flac', 'aac'], name: 'file-audio-o' }, + { + extensions: [ + 'mp4', + 'm4p', + 'm4v', + 'mpg', + 'mp2', + 'mpeg', + 'mpe', + 'mpv', + 'm2v', + 'avi', + 'mkv', + 'flv', + 'ogv', + 'mov', + '3gp', + '3g2', + ], + name: 'file-video-o', + }, + { extensions: ['doc', 'dot', 'docx', 'docm', 'dotx', 'dotm', 'docb'], name: 'file-word-o' }, + { + extensions: [ + 'xls', + 'xlt', + 'xlm', + 'xlsx', + 'xlsm', + 'xltx', + 'xltm', + 'xlsb', + 'xla', + 'xlam', + 'xll', + 'xlw', + ], + name: 'file-excel-o', + }, + { + extensions: [ + 'ppt', + 'pot', + 'pps', + 'pptx', + 'pptm', + 'potx', + 'potm', + 'ppam', + 'ppsx', + 'ppsm', + 'sldx', + 'sldm', + ], + name: 'file-powerpoint-o', + }, +]; + +// eslint-disable-next-line import/prefer-default-export +export const getIconName = (type, path) => { + if (entryTypeIcons[type]) return entryTypeIcons[type]; + + const extension = path.split('.').pop(); + const file = fileTypeIcons.find(t => t.extensions.some(ext => ext === extension)); + + return file ? file.name : 'file-text-o'; +}; diff --git a/spec/frontend/repository/components/table/__snapshots__/row_spec.js.snap b/spec/frontend/repository/components/table/__snapshots__/row_spec.js.snap new file mode 100644 index 00000000000..f0b72343b6e --- /dev/null +++ b/spec/frontend/repository/components/table/__snapshots__/row_spec.js.snap @@ -0,0 +1,33 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Repository table row component renders table row 1`] = ` + + + + + + test + + + + + + + + + +`; diff --git a/spec/frontend/repository/components/table/row_spec.js b/spec/frontend/repository/components/table/row_spec.js new file mode 100644 index 00000000000..216128dce25 --- /dev/null +++ b/spec/frontend/repository/components/table/row_spec.js @@ -0,0 +1,85 @@ +import { shallowMount, RouterLinkStub } from '@vue/test-utils'; +import TableRow from '~/repository/components/table/row.vue'; + +let vm; +let $router; + +function factory(propsData = {}) { + $router = { + push: jest.fn(), + }; + + vm = shallowMount(TableRow, { + propsData, + mocks: { + $router, + }, + stubs: { + RouterLink: RouterLinkStub, + }, + }); + + vm.setData({ ref: 'master' }); +} + +describe('Repository table row component', () => { + afterEach(() => { + vm.destroy(); + }); + + it('renders table row', () => { + factory({ + id: 1, + path: 'test', + type: 'file', + }); + + expect(vm.element).toMatchSnapshot(); + }); + + it.each` + type | component | componentName + ${'folder'} | ${RouterLinkStub} | ${'RouterLink'} + ${'file'} | ${'a'} | ${'hyperlink'} + ${'commit'} | ${'a'} | ${'hyperlink'} + `('renders a $componentName for type $type', ({ type, component }) => { + factory({ + id: 1, + path: 'test', + type, + }); + + expect(vm.find(component).exists()).toBe(true); + }); + + it.each` + type | pushes + ${'folder'} | ${true} + ${'file'} | ${false} + ${'commit'} | ${false} + `('pushes new router if type $type is folder', ({ type, pushes }) => { + factory({ + id: 1, + path: 'test', + type, + }); + + vm.trigger('click'); + + if (pushes) { + expect($router.push).toHaveBeenCalledWith({ path: '/tree/master/test' }); + } else { + expect($router.push).not.toHaveBeenCalled(); + } + }); + + it('renders commit ID for submodule', () => { + factory({ + id: 1, + path: 'test', + type: 'commit', + }); + + expect(vm.find('.commit-sha').text()).toContain('1'); + }); +}); diff --git a/spec/frontend/repository/utils/icon_spec.js b/spec/frontend/repository/utils/icon_spec.js new file mode 100644 index 00000000000..52787327bef --- /dev/null +++ b/spec/frontend/repository/utils/icon_spec.js @@ -0,0 +1,23 @@ +import { getIconName } from '~/repository/utils/icon'; + +describe('getIconName', () => { + // Tests the returning font awesome icon name + // We only test one for each file type to save testing a lot of different + // file types + it.each` + type | path | icon + ${'folder'} | ${''} | ${'folder'} + ${'commit'} | ${''} | ${'archive'} + ${'file'} | ${'test.pdf'} | ${'file-pdf-o'} + ${'file'} | ${'test.jpg'} | ${'file-image-o'} + ${'file'} | ${'test.zip'} | ${'file-archive-o'} + ${'file'} | ${'test.mp3'} | ${'file-audio-o'} + ${'file'} | ${'test.flv'} | ${'file-video-o'} + ${'file'} | ${'test.dotx'} | ${'file-word-o'} + ${'file'} | ${'test.xlsb'} | ${'file-excel-o'} + ${'file'} | ${'test.ppam'} | ${'file-powerpoint-o'} + ${'file'} | ${'test.js'} | ${'file-text-o'} + `('returns $icon for $type with path $path', ({ type, path, icon }) => { + expect(getIconName(type, path)).toEqual(icon); + }); +}); From 96200113f0fad8e003c958000f34bc4b808dc556 Mon Sep 17 00:00:00 2001 From: Luca Orlandi Date: Tue, 21 May 2019 14:09:49 +0000 Subject: [PATCH 079/319] Jobs should be better isolated to avoid interference with other `image` or `before_script` statements. --- changelogs/unreleased/patch-55.yml | 5 +++++ lib/gitlab/ci/templates/Docker.gitlab-ci.yml | 21 +++++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) create mode 100644 changelogs/unreleased/patch-55.yml diff --git a/changelogs/unreleased/patch-55.yml b/changelogs/unreleased/patch-55.yml new file mode 100644 index 00000000000..7a6d6bfed2f --- /dev/null +++ b/changelogs/unreleased/patch-55.yml @@ -0,0 +1,5 @@ +--- +title: Better isolated `Docker.gitlab-ci.yml` to avoid interference with other job configurations. +merge_request: 28213 +author: lrkwz +type: changed diff --git a/lib/gitlab/ci/templates/Docker.gitlab-ci.yml b/lib/gitlab/ci/templates/Docker.gitlab-ci.yml index eeefadaa019..f6d240b7b6d 100644 --- a/lib/gitlab/ci/templates/Docker.gitlab-ci.yml +++ b/lib/gitlab/ci/templates/Docker.gitlab-ci.yml @@ -1,14 +1,11 @@ -# Official docker image. -image: docker:latest - -services: - - docker:dind - -before_script: - - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY - build-master: + # Official docker image. + image: docker:latest stage: build + services: + - docker:dind + before_script: + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY script: - docker build --pull -t "$CI_REGISTRY_IMAGE" . - docker push "$CI_REGISTRY_IMAGE" @@ -16,7 +13,13 @@ build-master: - master build: + # Official docker image. + image: docker:latest stage: build + services: + - docker:dind + before_script: + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY script: - docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" . - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" From 404a541dbc21b500cbf09c479ee3d2f341106863 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= Date: Tue, 21 May 2019 02:31:03 +0200 Subject: [PATCH 080/319] Expire pipeline cache on finish --- app/workers/build_finished_worker.rb | 1 + spec/workers/build_finished_worker_spec.rb | 1 + 2 files changed, 2 insertions(+) diff --git a/app/workers/build_finished_worker.rb b/app/workers/build_finished_worker.rb index adc38226405..8e2a18a8fd8 100644 --- a/app/workers/build_finished_worker.rb +++ b/app/workers/build_finished_worker.rb @@ -30,6 +30,7 @@ class BuildFinishedWorker # We execute these async as these are independent operations. BuildHooksWorker.perform_async(build.id) ArchiveTraceWorker.perform_async(build.id) + ExpirePipelineCacheWorker.perform_async(build.pipeline_id) ChatNotificationWorker.perform_async(build.id) if build.pipeline.chat? end end diff --git a/spec/workers/build_finished_worker_spec.rb b/spec/workers/build_finished_worker_spec.rb index 33f327d4a0c..4adb795b1d6 100644 --- a/spec/workers/build_finished_worker_spec.rb +++ b/spec/workers/build_finished_worker_spec.rb @@ -17,6 +17,7 @@ describe BuildFinishedWorker do expect_any_instance_of(BuildCoverageWorker).to receive(:perform) expect(BuildHooksWorker).to receive(:perform_async) expect(ArchiveTraceWorker).to receive(:perform_async) + expect(ExpirePipelineCacheWorker).to receive(:perform_async) described_class.new.perform(build.id) end From 4f2426f51e31980ba4d4e5ac1d41873b61201fc6 Mon Sep 17 00:00:00 2001 From: Jarek Ostrowski Date: Mon, 20 May 2019 14:43:44 -0400 Subject: [PATCH 081/319] Update broadcast message icons Add icons from gitlab-svgs Remove btn-sm class for better sizing Add changelog Update mr number changelog Change to sprite_icon --- app/views/admin/broadcast_messages/index.html.haml | 4 ++-- changelogs/unreleased/39304-broadcast-message-buttons.yml | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 changelogs/unreleased/39304-broadcast-message-buttons.yml diff --git a/app/views/admin/broadcast_messages/index.html.haml b/app/views/admin/broadcast_messages/index.html.haml index 9ef58faf8cc..eb4dfdf2858 100644 --- a/app/views/admin/broadcast_messages/index.html.haml +++ b/app/views/admin/broadcast_messages/index.html.haml @@ -32,7 +32,7 @@ %td = message.ends_at %td - = link_to icon('pencil-square-o'), edit_admin_broadcast_message_path(message), title: 'Edit', class: 'btn btn-sm' - = link_to icon('times'), admin_broadcast_message_path(message), method: :delete, remote: true, title: 'Remove', class: 'js-remove-tr btn btn-sm btn-danger' + = link_to sprite_icon('pencil-square'), edit_admin_broadcast_message_path(message), title: 'Edit', class: 'btn' + = link_to sprite_icon('remove'), admin_broadcast_message_path(message), method: :delete, remote: true, title: 'Remove', class: 'js-remove-tr btn btn-danger' = paginate @broadcast_messages, theme: 'gitlab' diff --git a/changelogs/unreleased/39304-broadcast-message-buttons.yml b/changelogs/unreleased/39304-broadcast-message-buttons.yml new file mode 100644 index 00000000000..7eb289fca1f --- /dev/null +++ b/changelogs/unreleased/39304-broadcast-message-buttons.yml @@ -0,0 +1,5 @@ +--- +title: Update broadcast message action icons +merge_request: 28496 +author: Jarek Ostrowski @jareko +type: fixed From 8274f15dc0f932b808cc06a6f2afa3e8538d766c Mon Sep 17 00:00:00 2001 From: Jason Goodman Date: Tue, 21 May 2019 16:28:26 +0000 Subject: [PATCH 082/319] Update documentation for chat notifications on deployment events Update configuration screenshots for Slack and Mattermost Update list of events for Mattermost --- .../img/mattermost_configuration.png | Bin 101151 -> 67672 bytes .../integrations/img/slack_configuration.png | Bin 92179 -> 64873 bytes doc/user/project/integrations/mattermost.md | 2 ++ 3 files changed, 2 insertions(+) diff --git a/doc/user/project/integrations/img/mattermost_configuration.png b/doc/user/project/integrations/img/mattermost_configuration.png index e0b55b23520f135a2e68499487a361d06c51393d..75ef0310f2d9215db072da883b5c22ae0355645c 100644 GIT binary patch literal 67672 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

xId^g!hMFz=VSh?`=R+T#@vzB-eBsT__GjyZ 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

YW0Zgiz}U3t<3Qhc%hb*(dy*Q+h$D> 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 aU*COPTq0{b;T-}3ey2`aoG3o-67xR{2#O>C literal 101151 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�oj>a=&9zKS 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

4bHD?)c$ymRD=Xfa2JwDLDa$gQ?b!s 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

)Rvr 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 diff --git a/doc/user/project/integrations/mattermost.md b/doc/user/project/integrations/mattermost.md index 8c5461de42f..d7fd75fd728 100644 --- a/doc/user/project/integrations/mattermost.md +++ b/doc/user/project/integrations/mattermost.md @@ -27,9 +27,11 @@ There, you will see a checkbox with the following events that can be triggered: - Confidential issue - Merge request - Note +- Confidential note - Tag push - Pipeline - Wiki page +- Deployment Below each of these event checkboxes, you have an input field to enter which Mattermost channel you want to send that event message. Enter your preferred channel handle (the hash sign `#` is optional). From d69cb6583013632aeecca2b2096daa05215e32bb Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Tue, 21 May 2019 16:31:24 +0000 Subject: [PATCH 083/319] Add CI variable types usage example Update documentation with example how to use CI variable types. Related to https://gitlab.com/gitlab-org/gitlab-ce/issues/46806. --- doc/ci/variables/README.md | 25 ++++++++++++++++-- .../img/new_custom_variables_example.png | Bin 70758 -> 216497 bytes .../img/variable_types_usage_example.png | Bin 0 -> 67003 bytes 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 doc/ci/variables/img/variable_types_usage_example.png diff --git a/doc/ci/variables/README.md b/doc/ci/variables/README.md index 1ba22070abe..67e1d316f02 100644 --- a/doc/ci/variables/README.md +++ b/doc/ci/variables/README.md @@ -58,8 +58,29 @@ the need to specify the value itself. There are two types of variables supported by GitLab: -- `env_var`: the runner will create environment variable named same as the variable key and set its value to the variable value. -- `file`: the runner will write the variable value to a temporary file and set the path to this file as the value of an environment variable named same as the variable key. +- "Variable": the Runner will create an environment variable named same as the variable key and set its value to the variable value. +- "File": the Runner will write the variable value to a temporary file and set the path to this file as the value of an environment variable named same as the variable key. + +Many tools (like [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html) and [kubectl](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/#the-kubeconfig-environment-variable)) provide the ability to customise configuration using files by either providing the file path as a command line argument or an environment variable. Prior to the introduction of variable types, the common pattern was to use the value of a CI variable, save it in a file, and then use the newly created file in your script: + +```bash +# Save the content of variable in a file +echo "$KUBE_CA_PEM" > "$(pwd)/kube.ca.pem" + # Use the newly created file +kubectl config set-cluster e2e --server="$KUBE_URL" --certificate-authority="$(pwd)/kube.ca.pem" +``` + +This can be simplified by creating a variable of type "File" and using it directly. For example, let's say we have the following variables. + +![CI/CD settings - variable types usage example](img/variable_types_usage_example.png) + +We can then call them from `.gitlab-ci.yml` like this: + +```bash +kubectl config set-cluster e2e --server="$KUBE_URL" --certificate-authority="$KUBE_CA_PEM" +``` + +Variable types can be set via the [UI](#via-the-ui) or the [API](../../api/project_level_variables.md#create-variable), but not in `.gitlab-ci.yml`. #### Masked variables diff --git a/doc/ci/variables/img/new_custom_variables_example.png b/doc/ci/variables/img/new_custom_variables_example.png index 4b78e0ff58712e063a8980d18b1b61c87328e993..efe104efe4c63971ea2d6d649afd9432bc54d78b 100644 GIT binary patch literal 216497 zcmeFZby(D2+dYaRDy?)#DBUStihxLiz|bWi(j_1zA|S2A(4ZhC2nt1VZLe*6j@NuYcFfcIi6(2v+#K5=# z#lXP)dGk7Wha=4GJq8AzqK&Mqx}vNsy}FB|m5rSx2FByic-J-yck4a-*iA+HPpyf!9&L1%;uIM@k}(?4zAZO;wNoFKAO}N*++*ihH~${o zokG&@-iVq(^`d^%UrM_6`afBo>B0D@)e`%}Rl^7a$#`6P^zPQrx5I*D`NXELui#yw z^xQjgVH4-(rjntoyEK}a!FY%C8wr)W*EFYUm5hl&HWuw{cfK|DN2l zmtE6S-78MOE-F)k4x8`+4Ma`If;^RO0{DBhLdwd!^y${ZF- zRQd3ZSl~H>Rx8I|Wx$vkYv@glJqs;<%lTa@Z@qM%5@Wj$k9#5q=Dzr7n12qoX35Cy zp1rwX_33SzU?)SI+B@1pIeI*NtfMaQrl^BaaH=U%HfUBwaMZxVcu-)b+ZBDtd| zNlf4=bG`KSt*YmOfwXL2D6#99U*FqddGwH;4vDMr1Lwh&VSn1eFU8#STK5e;B0I0B z(f49%(34AXJT;E_^t@}1Z}{Ei?KDEyA3?IBC^Z`D7n%2|+UR+dtovgqx?R%8PN{K9l*wjn`X0>te zB_uRNXTV~FohpK?xSQn$5)39fH#C3a^Hljv`Q$!KJyly z#`kUUI|@;z)wMOpS3jQ7Y53w-rPIWHQM#XxT<;M`gH=|5xEwW+ob?To}`KU z;Q>Z}G=|gRjfRIhAAinw<6cn@An?hG2oNo~PEbPYF^6^bfcGY*#RJaA*YZtqHcD?6 zSyLunu?occND>!_FvZWiO8wocgl6Na_XA>)Yf*tib62bIiUMn$4%`A(K9bjAo!@-( z{+3v?OvG*6Rx)S#soQjnx3Fb1KX@{dDk_xT!p@YjV!-|2@{CC{$nN3Vdy@}=oz6>l z2BW6rY41&Uax5`~eG(kTxG%feuaQUCEuYo@$c;ZaNL3-cpU90(KlEp&_<;Pr$g3;$ zQ7=FC4M^dc>QfMxwHor$MFh5)+d!C^Tb9i&Ay_)$_f5HWJQ~8>O(n-}q`nhyBHOyE z>%^G;c5ip}$j}GdILNVsdN=k+`|R#axc}XL?3`=XZ|DM)5@kB?_0Y!=vEMYnzHu{m zZgN=8Q;Cr%>5+G)un)CX=yvXF{>q~PMSoEWNl(DIbS3X0CqT|%qnZ7b? zGSV;^-F5#k6IKys_!&<}M!=w88`a1dz`iteQ`g`T<<%iGHMqcF|1mvi> zW;#EQeU3AsIUzK`H(@_vE0*Sb_6Be`6mtfw%c#!q7h8P-64Nru-(y z1dki5ScRBf8k?A$7^&E)8~5t|FHN^iH_;l2>FS!1nj7wpYlo|R`&0Yo2grTsug!k( zT$FOgXUAN+9G-rjf!RX;hmElTe1(*Eu4lmB!-AZ{1}tR+ON8gBo>9k9Z}2}C_;r6+ z_>O&|9ppL0-gB%ZFqCgI(a?(9mC}`G@A}>%Z<*PKS+iMq$bGz8{*AN&rz}&3PZ~)B z4q5B+bdh@PX6>Tw91$rI+bMI*s?3WjR*81JqLzaKQ>ImyP8U0+^WGt|d~zyj%8M%2 zNe)8w&nK*{9LUU=?;BXZY%c6bwV}03w{Ms@d*@Y&)pD=@p&e{uA+L>&QJ>-t_wsxOIDruPj z&4W|;Y@2k4f5>GS-=W1@i;9RWeeV+|GiL zPX$H~rLJW^^h@=f+OL{zC+_HoET+9=oZ<3&d6sldzIpg94Ynh(EKvf}jEc)+O~!KO zbw;%(MM{1NM9HQ6*%r-t*sjcmkMApz<_hJ07>pUJ$T?8KOR2IlA7$)Q%#L+XuE;PH zIi4bkWvkXAP#a0=PO0HZd!HWDz;I5?1J#AE!{@AqpY0<>&&tnM-k5%W@t~4drb_cj zP=Mama=EPVb)mN2bSAwO_WYmKT!L!kfeWl7jjc`d*~ji+X?G2yq>A75X8!Y}I3*W-VF#%y{(d-SH&3 zI{6akQTw&qumSU&Uf{8O zQ@V#JLXaXdpgRevmtC8=-5J-RR^0Xm%jI@0E(F5JwED6%uQE^|1pQPa-+vOaQmq}Ep1mTa`nfCu7lDZ3LK z9BD-j7xp{TJKOuJayx~}cJl>?5V0`1onI-F7d*+t$1i{KMQORu`igywJ*3k1?Mbolq5P)(^h#N=S>xtK zGG+v(W#r??c96^hMLly=9zbo1$OepzmdT82oAl^Yo2erXnb>7GbaA2ay@$k z(Nw@x9BJa{EpVb@YhpMXSn1_>IvZav?ALf6*cT!|rzIt|nXwzXpN}kCT!Hdvm~7!M z;p08_;!l6U@%np!mDSaq7t~WMpRYDm;h_kLM^+@_>DS8gaRM&ij#xj4_q@`N;n=+? zwnBm7Jy()KSUq3nQjku8r%o9C>CZf z$Pzc~F``s-GkD@3zO@d_2#o(#GqCh7A^o*b_Bquu=q<3F9_zVcV30AP|6Wnl zWZc2PxRP%36ygR^Q5LgswC6T^=4fuo?P>1>zKww);VA}Q+FQDr(RO5XeZ z4KeT<{Wi}%`rlu1vz5FDQBkLtb#$?$zt1hm&3jJ@hn}8Z!sVHjnC2t-e;p3~CwcF= zo12pu508h32e*d+x1)zbhU7? zadNY9bf8C{*Ua3}-A(e|J@keC{pX+iwDh$3&y^fp|1~TyKpylbJbc`|JpVp7I8*}t zu9&)wr==a_k&V5jgDbd(6rZRdzr^nY{*RCTbIJd9sNR1L6&3lv9r@or`PY#WJm?Yp zw-Nm_UBBN2^Cg8N!SnCAm%=e``tcDwjypDw)SiN$SHWNK=gK~}RG*pDT<$6Vn5 zga%!cyGr!_^)*KNE7*@^{`68^)>MoXe*c*p^#9Gb=>s0iw3T8#_|qBxbIA!Jb=VYH zG&$3M-ulxGwUt`_@mBwHmj6BRzaQ)WPR0LD#s9g&|2HcBH!A-B6&3x`0oLhW%o6AO zL-TFqCL7YXw&P^*19lfXLiDWD?)UJ+IqypauN0bld2-?_{=I&EXle~5ZefU)$b2}C z>*A^*AUe(5XF2Kn)jdtMjED|Gp!HkYvd z-uxhppSy&T`|3}*`|gh#G8m8}Hz&6Pv`1_GKA>E9Q|uOwNg^A0HsM23n`hUTX< zx%Nqt(|T{fKIn55K+myuaSkwS7f_xPoJWwV&a9_X8EXt^LG3E*TEBzKSab{*H2#dkB*v@ba5JuY8&_w#kkkTy1JhFmzF@S_tDvZuUA~H=z?6 ze-_JJX@huXZWiaW&*MO7BD%f2v%Q5EC!R?ueC}oztpX*O{95}=q4Cw90j}xB?Z+p{ zLFC4s8*;rAD&^=Xx~{`14Q|D3+Ip^{0=I@MVo;&+TNm{LIOd?NH^MIWH@eY^4U!mR9vkgW^#(vrdK ziH^weQf$f_886@d2RH6ltKhPzN$hEkA%<;R+D0V>W0o3hgN|Fw=nVLJ`1bG^uxDld z42~)A12i~}WqDdts6`PSV0-dkhGBTs3tXGVKvwnZ@_ia_Lq~oSI)Yw#AUYt@7Jowa0G!H(v zZLuG|!46eWIg*~YNWBcTxSWd5M%t1mbNQGa$hABP@1rypMfI4akDJ`4^+O&z8GL## zb=ijs$uK^b@m#A;n2`6WCndkhVt3kJ;aA7{Zy4}DrPZdfySy*3X2%rs`6!jp;Srn( z@mmOGS@7%TsUI$+H}E|eY0*%i86ocDs+{7V0?A(m#aX=+Ge70pXYWF7%fcDr+j%#n zwTh>FSktUe5|z3X=0pmQ&3SsqeRp$yj&649&e{@hdJk5wrE_5hvPU>}}X@cq1r4h1ywt|tQa%@ z?{~Q^c2qgv?tQ6Ey}v+gg-yOy{VLHnhw{bwQzKKaO`Z&IEs?_nkEcda4safRg{tSp zBeuof|KD%ztVf{ltw-G=O~84u>x29Vmul+cB^GJQqMEfY%*9|zeMA-`1d^xLRMY)0 zjxkDf>lR4Oz;N&u+anA1CMr**FOU0pVf|NoB~i~g73jQ{J~RoCK}-X9PdCa?Bz?vt z@REDQ%c-ut>FK*)9ep`ceUM!$D7$Y1^79`930}CYFTbrz22){S?7rA&ARR4r^4xO+ z)?r>%&u@o{keZs)ZlZakJ6Qfr-=_57n@8%#A#nKi65ZLpMgc3KE?l>#iQ$n~FpYVzwq zCme`b5GmE@7XrVFy^IjLv$-282|^%imK-mqgoMz(V!Z?4#e8NsH_qkBsDGihG^)BU zDB5?!V&GCsO_DU>s$)&H$Z@-H!|i2&O-fydj*UE~NmWJW--665{PuLKwpfubdeGy8 z99gKL)Y&{?2>4p{>I_nmr46}RIZGSA-*_@od=2eOAO8N^`0jN=>Enl0XO4s+ zx#`|)g{LQ2%^WNFQ5}TERl+`7-lMv~0gG0S#v*rMBVpyE_5YzZ{>MDE#DdOKOKP9^ zD8hf|sV|U*{XwM`?%IvP=H0xkD4c@g89!{3xE6HYP1#Cws9DX-d4f@i0*mqp0IrQkPI;SO;f?t`i@pSAql_I)#Z zBbHXuHomZBu~h}w8MsFKH=+>LH}RsUHnBR)H@*=U7Il@C^+}2EM5yx5`s@Yu`78^} z`)+%iuoQERYTz|mZYu$-G`hE#!=-D)cxV3tf%y}zsM>H=RMJQ2$jLb!t8_EN$g!)W zgSq%Tqs2ek!FMjd`Ngp?*H)L=S=DN@_Kjki<&^r`^OPaqizk1EIjg^6&Z_1@Y!2hq zEN%~3ZO+D>X54`qGTa%%k`peD$i4MDS^I6t_Y>lEjYU&E7ecGGB#Ja2R(gJMl6erR z?GjJwoMwK!?SJWg^utk~)Hje7swZ@oMR)%E+r-y*RtC8=9#eci3&a_D`&zjWzn$+l zS_Ty8jJ(vwZ^MzkhvO`ErCrPjrQJH+He{N|3}wSk5YJms7xVe+#1smlILWfDS@BE?U-=XI41hiSohV{d7x^lF zCkkyCo>*KAr&=2PEjDp8kKbqbf9BMf40AN11z6%{m+iboS^|SHFY8?}YeaFSsGi6Fxk-q)O;P^FF@kCISH$h#fu_rOd4XyqoV2er!fhB* z761BjdkS5>O+!;~yQMi3SCVaurbP8mjJ-F@RUC?6jTAHkd`Fousj6f&`*PCWIeKyS ze9J?{Pt**14LLZX9fmk-A8j}+=evOPO92qNo9OHP!5G@y0I+p)uJrk;#4pc?t5C_D z*|TNgj`}#*1-eGS=81*&lSLuvWBF50fM`1sWgtuzsZzRPokv&XXBbVp4$ z7Cr}ht)x}XpZ&^;4z53(;Mi)Ma^fVIIjpE`%N};EeAzL1$HTp9C;0`IXYFbCXrck^ zV3M2%`rTNp=Pb+_0iRd!ui`<&5U#E2mg^i`x1uhGsa;v3|ALuie_#ry0Q??4YY z-A@XK5M|x;Ios_>;Vt!X)$>Y~*r=TK(+ExOJvOq4yx;86u$MN)R?>P1W}VVy-2hrH zwO&}38SfaovT!Y2?@)o8r=^FsVbZbDHx|Xt#7e8~R2C-y9daid1=BH3oM??G1?^9J zy}xUvTaVNa&^H)}MK-o#V_ifD^o}jfsKR;#)Q=K|b}Adsxt4K%)?1owFO1eL-&g6K zW{1*&N?5YnPTe5^$873Olqe)R{9)y_Zm7PLW!g8?eKBllxyNC0-0cKV$5N$G)a603 ze-OU#6fb*8>>^lmvqvA;+qO~<>nCA@niOF3&Lgm z24t;Mi{xfT+1WkUx8a8`8m+w$m~L@@4&9hrAasjU9+iY`)uU#pBSm6iCc-HEg_S=4 z3)iW3x11y^oZ77#TP=0KaHv*+VPJCfl`a(V`}`}=1LpwB!I1_PI^}suAwN!Ysd^sh z7&pn}1kKPONM)uN98bofbo{17d83|DIag*vF%|9rh#>zkdG=&Iow37qcor~_T` zV!Z7|x8z`Tpitd7v{!wD#e?HUlIH#<+u3V&jU9JKtc@RMhR6RH?*9FTF%q;wH3+d& zPIN4*Y=OBRr#s#sQgf^!FR)|2{Vf&%=uehOP7A73F@|1<_$zW=+-QV~NvfIVb2>Ro zpljr=J!IL91$XvffcsvM&v#iDB$#Y3UuZ*;8w^0cvu($F5ENndAbhMc7JBLPlYj7rPZ!V`Yr6+y= zpfo}>pdDsOGP;uHVGOZ@wIL@BqBK5Uf;Q8}#eaI;cr^3QmJTeUG$RzFy2M8q?pYZd z&RxU00Wzoq_@BGF6r)G_U8oj6so-oyvqpM~~jIFp??HDG32>nMp+KM~~ zt|mgk8DlYKN#kzgP1Fw%3qg+>TR8bvZOzs65s0) z=qQ1-*QQOmj~ZQpFB|>@9AgvFf?}uc;bU&y2+$aW<5)wx{1&Na$DAL^;1s9KK7ck` zNk2Q3DU!jfc^Soqe>xw9yt6ykSzI!kv5I^%9$mkw!AT%3;sry>_Q zimL9R*;o7(2Ttg^r{LAq-H$JlY@zks9L;;CFrgKx?kVb-o#4E8w9l4*2z40Is9!}f zjQZK9HC=RDilV;wzok)Y5PC{7P&%698aK>ZK>FuJ)y|AwRLG~Zuhze6e27rB3&0|~ z8A9jhX?Q4xYT=t4q6H1w{99txcL`%LP|Jc4Hg;%;Vi~Fg5CHNy5c&CVO#$*aUo;N= zsUBt1)MH5}ui}K6Ag7nEiyJR431f8_hRT+Ut7oDcI@sV^&Cn7%e7H`Tol@=G8{FjtgDBL5ZShW7#yRIl@net>#``DBJvUk& zw7Jmr2YbRno$Vxn^U4Ht47OKq)NVK6TOyr1Xvjfj-Cjy)X{UC)({P615w1qCY($=A z^Z4fT1i9c?yRbuHkF2CE;?@EmSB4=#g%Jm7hm3~qpkI~{3rf!er?gJJ4K?vQ4t5m| zvlOzp?6H;_sPkaraV#~ zHYg}9CYdv#dxU;Ff%CW~M-OYBo`!D`(9kx2skD^UnBt3hr10p7GwU2c&yIL=lhcXO z;2%Phg^C_;FB#GO!7AzvF89rq41d3>m2~d~0lqmyw*k2pG`<_7u6fdb{GR!&#EAX+ z7d!XU5b3kKYm5E3nd=Xwg)h(cbg^zvr-Kx`6G(SPZ}@68dw#2Sn;^B!o;x_4;wg6p zq~0O83eBs07*!FTCP@d$5~Bd!`#KOyj2gO*NO>fZqXYd5L~1QBs~OfoJJ|{l(9h?r zv21w|p_OJy0Nh_~4U5QESAm;uZAK%uL=6~N!mU>$@9zV&F>{nfpM4)OBpIs&>mkDI zp*r4l^iRngJW2x!jQRWmqI0p2Pl+s!bRU#kFU4+eWntQ6nqfUk@DLGqc{Zk5pJJtrd6C4XpF3L)>AB14~_JZrV%z?9!UGhL8-OyLJDx zhLzl3jS>D&9ne(zg=hbSS@WF(vh%E074v^?_WEhic|nsiN@U^P&h)mQa1U<_o<`Dy zs&n$zJo)*ZZuN@Wa>DVr29;Z2R=C9KmO`xUE2m%n?t{f@mUi8K1K|er)MkDvqWlE(Wcsl30s8zM=kTXKWE@qCFhmhWE>NX^3GVVa+Q^z?KzcfD?4L&~w?AIeXfo_-X2~f;* zkKdi6W~F<-CXUlh8BLUBrAJtn+=$Ojf5lEkX#Oc;<^^c+a2#I^rDST7!7WKTewp0T zDF$4WeG2V(u{ovfI=U^4v^Hmo*xCkC5?-NI&){??hZCeOtczX+FFzr5JK%*@_lN(Z z6QuZ&A1e!N=Y-#9k)Cmn-^pQGDXRWb_9sqX=Bh=&?;IDYc()ed$)K!gDKSyhd5W7J ztGpUu-b$KrI0S=&h{&dK#Igb1CdzFfY1aHUIKz(w{wo&pf@&NzeAEVOLRYy6q|khx z5_dHtC%{khAj*1p+Oq40aJtaA95L+YrTyVlsC>%p_Q zb^?T=R^FQ|ilr0^bRGN?mT62l*83X2j?wy%(_Fxf90LWUI8Ys2+K>RFP&5EMEBt-j zG!Q@2{5abG%p&$wktOY^?e$)}t5$ML51F;OIMPlZXq=}2rX zu18&m25>7?hFNY+`kiiOjr)s6xb=$dk}M;U1GdHWFJ(TYqCYkEIh5{2fD&kD*iP@k zLAUn?cHNh|=dq&g`C?RQN`goNXv#`{zM%2fMtsb8a%gnpQV6ZTAr(9%Xrbm_)pAyZ zq-NrvnOTD@#+OJYiZ9G_Z~HrW;cIrGxf3B#Rnu zzJ1b{KHq5NN8>-!wYk((PV?xre#fE9XWC%60T3x*aZtOz1dc-Sm5LHhzxIPM_z&kM0mrbFcS_f-k9x)naYYmM?D8r z5hI8rA;~J4jqC|jS@q%a2WR)wU!~WCl*|%>#!w4tVeeta-3&ZOleKtE8qVb+St_C1UJ|OCz zBsuaNQ06vCUq76hyTGG^Mp!3=J?)+0>E7u4sq!G=-&Q~o)!5u@(Ouj&w9g$DP zs*yiCn#n@W@1E6$e1(R5f~5P^m_vJd9q|h|@7Hwa#64B}GyM4#`+EWCJNm90WRY^i zWmj-!-0BldbY5F#m|Zi%Klvs$ulMT!!b}ZcX3Wy$MAtNpj5b%u7S*(F%x6fu{xRTA zm3p}vJ*M4tTi)L;u+n)V??S_9P+wZ-S^F*bb#e7_@(wK8mowcMknQ+#?ltLtu0}TE z43kU#?`Qut&l1b)HuVQ$6t6oX>Q&VrmZgj8UmALvmB{}Ut4-ur_sJrCS0Ov-7Ld>B?z1~kM} z>S|>rZeu;6+h+`XT#CaSfo2F)UKO}h*Mp!Ce*wRN!3&9k9>(s?{Q#`9Cw z7yc-f3%=KKj-jTeUF^-jV_Gp2A_c^qX3#8;R75}s)7%Fpv7zNXkMoFn29rnwkUKdk z4mfCE#eTc~G7z;*hPXiT@B!Gp_5K)~Z1|BwJEe6*5G5A7ZC4qY1lAo~2O%6ath-E~ zLH)&Qu-olPM)gUZ+TnabCb%EzvDa_{!U(MzAGyS_VBT837tTopHGZ}F+&-!ikaTMC z&L^D;QbaF-LY?#c)(pUe4`ov*%%!Lj`jET&9w&N5{``l7ql2N!I?W#K(g(B z)C%(_AU8o}@c&%BfFBwO)LDJM{E_Bk=JPK zp9?{3lFZ;bXWdRSLu8k#_$CRu39jPdeKP%EDbXS-^i;4+de_l!FQwvv8EYp_+09pZ zpFKBqVG-#!17!}yw;0{SEDxn-%tB};W}-f^On&vNE9sfBOfaJI8(@G%9OmbyPxSNU zg#U_xq#X-n94j}y=2u*Z@2x$a2H5B~U+GYHh_D_;IK%+NY?~Ir&VeGjT^KpA=0U{& zDx9n0=0?k8fv2EUpot-!AB189>l zJ9BtczwPVzjlBpt9B!U;+6T-EBH~Lx?a#w0`bsSzL?ANvx*IW&#MvajIt>jvd+-#4 zCBw%>7f!K+LUjCA@{jswLni5b#5`zEc4KgRsCsAZ%XwEgzY3TIU+`l7g-T=n9rquU zPp?}%efLJxghu#y^-!2CC>H>Brx9)4`*CgBs4Q=D>cLVXu^>Kx2e2v%e^>$#8h%m) zn8VF^z_Pzw90Y1Kk-HQHSqy<&m=ag{Q*@tdaU_A6H7H9U$~Xgr28YUXPGR$-F3r(j zg%CMWE{o}Ro&M(~j3NdNnHyHswuhS0DaF1*Ppdyx3l!67z*Fm* zYVD{#46w@S0vKwb(md(@0x&uqKR-}n>Q_xvxoQxHavv-(PjYeq__>Mb>U0nP_e&r$ zVy@5cX=-_mV9$S#v23X&1#BB$-EO4g#vxSSpEbcl^kAZhE5R1?OZDq)WTjM1<`V>! zl-M5~EbZ*S!F~-7h~PYhg*$Cr@?L4zusFQWGfgdRhrf;Pfa*wD0br)*DHgfmEeL6q z>fx;arPEgRO8e=aZ{(>4XPFBZ+$QU>yfgeunWfp}(+X2LKtpmG`2uYg>S&)@w&px> zuY7V-lP{e~)y^Z_w7N$J>}nimUbk52E1ioq0DTs7lKC;HVxd2CwPj#0EN5pOg35>4 zC_sZBtq)aW9xAD_G_e-ilFt`~lEB#_S;yJF^^|mC$*ob@7T$(jP1YlRoc#U6>H1G| zQG2Q0(uu;^-k3#8xecGaALJl6RPThU`P?h9@(~AWo3f__9fz5*5AyR1FFUJG?>#uB z`#0esq!K(FJc0uHYfB@=e(uV%pgW*Lr4;Rr7Kp>m>CVF^TXcIlpp)EDA$J#ZGPr%_ zC6z)pe;N%UibJjp^ZqfD$0q(RmZB7b=K0}Umd$UmuLSXuecOC%Z$0iuW>&leoM-~H z(mPFO?_hNvDA&doOGi`J4r&H7qg8ZmNbi}w^r}}p!O;MRd5kb%o)mo+EYjk% zsCs;|?xqZUPAKXp^FT4I&5gI$pwD`2WjphYT)-0X`kEDWLX`k6dd zP^x68s8!l4{y3G=ToSWl3zGT`frvK=N54IB;ZmurPtPP#Q?AZG&TGi+o_>&_^Z~Ao z)*nkrj7@$(Bp@a{jN8&p_gYSppMVIZW%nnkw9qMWM`#w+9l%Pq^@M||x6emqqV*g; zjJE`&@Q~~1y+{ve-nIHOCB;nlo05uyT@&J%yXWXVIk`~ULt&zWJy~2zzAH;8Ns{og z-IHfCI>P^u2CeL79q^KMx%P@$EAdhgnZJ8y`UBowt#|@rGHes*Y?UQ|%e)RfTL zc7bzI7f_C}L92@kf2o>%if*p@Py!ht3*Tg9{i=76kXW_;AMA5{p@e@8P_rkC5}@ZWCx< z!>`Qn%x3Bq#pY?yqGp<0m`Q{+Q^B1NgDwUW8c3jeR!NCuo}c!uSM7?5fuueUED(-U z;$fgc6eopeb>44DUB;F`7Lzw)`Lh+S()o!^o&GAD-%?1&M@gJy;5ZI=S!0L)5O#$; zn@MURBDTV(F8pSi$g6N_$(G~w@#_CDb^j5wl^^`3gtKG9Xu?))a7Zv3{g0f*6C3~FLbnGs}_$9Cn25CW89#1yc)yM0nfVOcG zG9=*1{*f^FEdyLK0n394%`cM+WWoSDl&Kj0=1t;xMCG_uN>#nx@hd++pqaE;e)^53 zhqct&lvu6CC*tbgqfw-SoV_1m$2lvsI{K?4Y}qpU8E5?MxSy;g;~q&zC3l2?U7-$b zWzkX|#oY_}P!P-w9GB)vX@$A4R8@Fr!nt-@7KsAik21j1&sRCR#y4tI zN7hUM`?7W~WznAjAkq6KL0~twPU=lo}`6qwIrlhMT? zR!q|3*oz%{nIQgqW-dD>82+3r(G>?z8GYpd1`$%MkLJhzNup?9?XiEM%=6brYlqHp_~H%0!tS^JInF(fSnKXzkCXpxNRf}R5p1UbzFUw;EI3;t zqyGA+;#ANR#+DKVqa*$2xU6o`mOq;kz-%QlW21e(Di7}u(4g(5`H-zdtiSkb(UUBL zLQnF#6!S^yZ~s_6Bpv!B*5`_di$`H!_SF~iuU0Y=P>#WG#dW_Q$ zM5fQGEIjR|^(ZxRDNbb$IQ0k!rH)LMTY+;$BBm8+qu4r_e|4e7Mk*Z)TZ`#S^ND!J!-G#|1UGq&)) zDG&SO({!*S<1uPq2PUy*DCqO|`++tI^hpq>zglA>?HRJerm%0;VC@4oTn2*+vFQ3R zL~3xy-%|~`B=kR&`G2_y1nn54XZdI@nmZ5sdt{>L;M*-={(bZ4#@~kXPtCmT9SUKg|M0^U}#ZCxJ*&g^+&}Qz8rPo`4iFE=V zzm65ZE!Pa(GO(l>qg%cmHEE2v4&754no>3`O!)fpz|8fDL~PUCHBQGsfz;u`=GcUIKcf5H4U7$5Hz+Onr`a z8K4gK~qM`>;5VaJ}QNne>?;N5oevB9$p)&R+#nJwTG&}~nKGJ=86ym7sg zr*g{042X+s6PI}s7i+qWIDiUr#q;}de-uyQj&o}stz{Lu_J48lJl(7e0YWIJ6be{= zAD~@1FBa83t}x9#xIsf=1sIT>+S&7>-jpq(=l9fg9ccZ}c1wE2*59JHc=bq~Zp;H~ z9j-tRuk28LmQ*#eo1>*-(t(<;rB=94VlU$4L$Jv$3T;UiLu|B|YnEX2GL-(OzU@~h zkdUI;Sbh9KDxZU_oF7&;(r7sg@LL3;H>NGV7MgAMdj^CH0zid9>PC=13BPxFM|%l* z9jn3Ba<`7b_7K`4kXrN3K69_?{MSYnVRWHDYcU%I8RMH}IfDL9)4)#J0(Q*Znc0o< zc-ulCZudl~S@5IZFh2+D= z;oWQ)RJI+6fE1+YX@-SKoczkFjavCqP&85UdE+GKwkH~GH#4W$5j}tE01P(xOnWzJ zE#G6_lDYd`8ICSsKEGt?sOUe#yw>x&KZPM+NwY%_3jy1Lm)r=Pn*^v?e}7N(_8>q- zep8IHP;cXh(f~KIljmN_>>YJ;w&~ko5=W8Uhm547k$?&^w(HLBG!8-}>s^17Y{j z*~Cj_r}X3wVsBP{Bkwe#c8T^UceFV@j0*RG)koRVI!L+czkV0MwcsKMt+0b(YW`5@ z5SkB0yW~}8n7a-DBO=TlRNu{B@D@muelZe5A^Y-k=nWHwHHYrS-bNPKlQRz~P8$?7 z2(&q)&wVoVEg-oN=6aw?H#TeQ8j&WNK4S6HgntY}0IR#i6d((n>ACe3Ro4WS^ZTgf zB!#m}DGGK~XD7Sv?`D~B#}?QbxpXlFFdb-YX;hZjKhnF?&q2If7uMtfp2H5XIoBeH zEH}`cINGCjGV!U57EiWr`H}9hhM1Rvq56Lh8@A-N#31wq8PEvU2+s4>r8Sysc=O`s~uK|A~ zk5;i~V0P9()4gA67{IZVl0n#aB%=@_oQ`9gYI7MHhsz;M{n+wYmW4h}Bzb6X3 z%Vle!Xk$Q*f{`eY!riMs*Me5EoR~r&41wNYh2Fto)<&v}mvO#f-GcTfRCRQr*Q!$o zjmKM{_z8Y|It4_|mb$&($xiY^yE9}$O;`BLbq8*8!CxYMS1A~nz$62h z8WVu7QAM}{d|0DP!fA#;5SxF;5cN)}nbz-Ueje!NIAEC?({G~580BqSYQRX92Cy#Ph7GDaBeuQz)S~ zb}1v>6Qx55X5Z~sqqWVztCXft;B2@&W*qCm!_nU9zG%kfG>J)V5ChUGKAVI_0Z=WEToxl9R!H?w&+ccuQ^UxHMw>5ZL(#? z%|e??gR5TKD-4shxoC z?73QvTMb7G;m)DRMqr16*}b}TK3q`<%fdV4{|rb_s{;sZ7S z5d1E1XkSP4SmJjW;ZKC^Li$#}oz6-Ra!Xhbul7d&3 z@jaTl?K)XUpG9hhS@d=%1ik(m$;>BoNbUM1Hb?T#01~p}RTk6h=1)e|zc=Z?yC#9L zn1n>LrU<9aA<$ZQetr_3@w7;^uNYsLiMK6;$wREu+|9+%#QQHAZgihfQ+|j7 z6rY2S@H=X+@0E=4YDh~U57<^;g2!VZ0&Z#X)DPI?+xR(1!Te=1EZHK`SsJu5c8z4`65-ZE(g6tcoqZ}Fa*l=@LU)tZEDL1!`0-Ykl@ zHC?r5{5%C!LNsQa2u>RucrSfWXg|boXP>2bE9s&|{Q@YC;Rl>sh%5EL2P#;xH?|%r zgmrqnJM*)A?scjfG8as}^|@;EI>ZjZgz5eBJ^9p4DiPL>hoj4M@u zlH)VJ?AC1<9Ih;=XRB@UPH6B&mtn()soQ+#O=@5(NxVJM&0E^O#bpLHn4s8ak1{A? zcy7^u@p;qhU_`gWBg#@=7$B%IA$#(ltP|M?kIIafW=Up7lCim8NB!J+4qPr$(dHKz z;bZZzi>n7T?ntnm=i(^kl#33fPj(u*_|fZ$*EvwpNIG1-LHtv=edPUI6Uf*I)qJ} zuxt~foq%|(JMV5-2u4d^ctSv-!SuyFsX-h{xO;%zAeuR~2`4FzhiH%MxO(4?E|bqJ zWvuCX5PFwMq>x$?sUJ6xb3`2EsY9hW5K*N)?I!mt}y>J-+C8~w7TmA&8W zsyB>ASTO$dncdr+NL3i&L!hDM7aFy~wb@$)7TCY>lU+EU_>4yb?l9$&uw^wJ<-R0a zg5pHWH`2LB{%@S4fNuAh?L~cqnwNiL0$;RWw;Zj;j6u8Q5kXn~?Ss|=KtS&JU!wfE zHq-qU$CT0%J0cfV7nMM*Yn1?Wdk*PU3wc-%1}VNDi6~zCfXqsZ9@+J>D9OXIypjc~ z$RKq2o(CrFa5@?)U+w0QIht)x1y5ub%i>21&AK^Zwyf2>TRJfks&30*`{6G)wu?bi zqZj$v3w++eF49k0#6H0uVfp};-Vyn*BUzpUCjf2xX4hB03B|(tKI6Sj1GY({?i+P) zuN<=y&uNfdw_laGy=@3fKh5Gp{&4gY@CfU0V)j?}X(@ej^lK>K;W1RH7nV@R6fvS> zz=i&`4PH(v9l#&uxL~RjYte>1wJP{gCijCr%Mzvp8}Vo1E`We&QI?7;2oq#fyJUBb zA+pX4BQ=;S5K|GoX-e=AUceD@w23;lY~xQmCsq}?E7`D`aPIJbQTEnhQN8Wjun2+@ zf^>HcUDBZ-AdNKAAmAw7LyDAi#|Q(GBMpLdHv@vw(lwOi(CNG8_w47}`}>Y}fA4<( znq$o{!@chNx~_HQd7_5^`!M!z8W{E_axXiggbZ(_|qjq+U?W z{kMuKj^T1Z`SZtTf(qu$K>wqi`Va;V?ay@%n1FG_IV{eD57HQh5i;8%r{DF3^i=1v z)!EQV`{pOeUTff+kXJ%e_=OB=fW>Os%sZB@v*ZF5H%_&yU#$-P;xO@O>Hf|Xt49*h z47h#>JMf3sjhF)QhxMhMWeJ1TMt=$ zSfQ*cPeJDfD)jLse|kdBV?@c42)6_i>Q1Lj`h!bQtu7&$AqM*L0mG+F-q{B{OT#EB z3o?WKwCP94Gd}QhrWbVm>yooV>U~y+a8=9WZLJ{5$K zO90@bSE3C5^exjZ$+n&A%gaT(8D<}IAw;=bz&*C2}7=h38TG)r%T!61RuqDhA6!s{&7HOrHlW!)MEGuIh?~RoU8!qs=`iOK^yz?hjS07OZ zKhKE}4dhQkykGE6KKKnZF)!scFji)G{AlhG2Bc|Y_K2h{euBn-F3BYbZ6XUY?ay_C z;O7yNq%2{mz;6F@bV(~?Ddtf*5bOyy+8RvopVUw?aN}V!*Rp7r7^t*gDjKP0z{?E{ zy;mb5*ZgtZa!2g4;s;eAtxC7g8Vmi8Vb%^`D>Qva{T6jiWZz2tS}Nj6e_(qGj1n-k ze~-cRx_;axjWm={9~n9|yNlhfH+$C5{Z=lQcB9giLr?;foV%<_-a&0*a;U{{kGV@)|n1|stf-hZ9Sn@o;iQbvEjOMtzh!u zsF5pIL#a9ZjL8-^1nPuOQPMT0fzJP@C|M4J(x5*s&@F_|1tmwKDd_y|KK)9touXuT zkisPL^J{Hlew-v1S7vbw^tb8cFS~np=oXZdc&0N2@1)^ z|MsOt1;#>6VHC`a|5hmD(`wWRBSYH6%YY%1MPeHD?cX=-Y>#1vW8vST4ll%yXzg-- z%>)2b8F}A{tOV6WR08F2NhH?_Qhk#5(Vlp9Fc$x+mcoY%SM`YCK9UuVXc|de&I|Y4 znjU=pP)#gca!R2;RN0__hH;`HHrHJaXQ;jsOV*9umj`DacS#-5eP$fFA&ER6j~`)N z1{~U^amJcrmnE?Y5_}VR5*++qvVB-6j6?XsN;!n@hqdBh7Aum#^+l&DJk15jFZ`Yn z_-OUbw~{*|L|V>}$A&IShqTlY`x+uD3<1~bDm^KqMaSGlTm4I3xboB=@o^LQBy&@w zB$HEYQE?b5)YhDIAeP4a$=`mw!9pjSpIL<&LKapLo_>}>t>As*|UC)m6oF(W74 z4azOn(Jhb8@TSL_m-p-{j5H6fxk}53MHf8AzfwM9>WTR|;S<3fq6uk*B6wrH5qJ<~ z<#eGJ=7R3&zN}9xpu1fi-h6uq4Im(7^we0iV&NOE}$JjFZ}DSZY^Ep*^2x)Lw4Amrp1SK^IFTDUnIIYUx7+L&5GQm)NIZ~h)e$k95l zm~AYqT~62(#6k~3wKn5BLtECQUjAcvNjkr-6-^%SBBPoLbr*izdvf}s-czh*uX+YK zhX??#n%|jgM+mDVh_5e!7jJ=rG=ifI6Skw<_SERv#wqx27bUn2Z$+F(d667#wB|c7 z7D#=6GX8;nNq&|Wo&Io0J`6-T>2MTy(K|jYBm8>pp4*zpPW;_(v)G<;d35PgI;&(& zkHh2L0jiZM+`6%%HQG7^!+b|j{1AqiYfis46kIsCEeIfrTW~9}p0A{_ZMFb52wA@5 z?0QEp4ElyBiSSN5&sZ|Y{$!OAbZtZsAsO=g?Uif_;jCC~uJ(PH$C!!+w~XhUXxZmC znW(nRHvA?39par(C$>tKx86FHKhL^_qD67Zr9&Y=DYK7pn?vXW6z|{%(5yFKt)b}` z=FJVvQ?BUI!M&XmysWHeinDWv$BVX$EC?8O7Fb&+hNN-WNHJH}$sD;**-h!PuJ7Kv z$Lg0+R*e=eeVb9E#rdIoAe!in(E z8e_4>V8PSbHT?kJ#RsI~>zD_RmKvPG0&&+=9xf4&jf!PgX{-Mut&3%W$2x3n$?Xd8x2RAkJpj2uy#fbDR6zHsb!?Un?`p ze(We1ZKw4s{8ebalFMqQ(<&%K(XsJODEDA+d$0Ch;H=T~JXn!RWiK(5Yy9m=dGP3f zDVZ)o#6S_&LrHHlnZg#A7`Ox%*?8^`<(UBw+a!2B9eoBGx}cSBRq)No8o2KB#<0P{ z@+STHveI?8UUS`89lOhgTSJ7Aey=b6E1n*Yf+mo7Euy-wXe&z!qShyg#_sB|K3nO@ zJDxkL)D9Gpso$#Vy?&IxwXVST$~gCUX^Ld;$fx(y}rGqvMpjwT^-vnhZRqXr`m$w|nwB zCp=)utKGAQx*qlz5YS>Ixjs1N%$U{nEucP}s#&5GoLj*{ol~hl3ji{cQ@sl#e zz7Io!$G>~%h(xWmDn>Y1|7y@2ITG8PdB0fn!G{l`=Rc9GtJSU;VriXA8)HS9)|+}x zPB7sE6EeluetJVnP!idTk|x3H{n?XO{o6$gC+r(&QTb*d8t_#?DN`hPh30{c+YJ@8 zk5M;y-AkWnRw$TW9q@hOtWf?j}kN6d>tj%-kYRGVx^O2ou}Dt z@vG6fDJ$Kii&JtHeJ)%!&aKLquPt+!*iM;^*>OKR|#Bw7WZckv>ejBaxaJ~Lj2^yP@K?vPj< z5{s2=er+ntrB>j&e4O;qBeCua2X`aVOhAC3LONNM_nR?G<+N&bCHRHXouq~xw zywS>w4f)(Q-ZIxf0(Ud1$jBi5GcIqXZJa}ndH($rEa9lX*&Eu|S5vyExDO(2{YB`? zgDuRVqm^Dr2_SWVf=X2^d^hos%19{-o*%zIDPO|)dhRXASCi#D_bbx; z^geet`VO%aFxxJ$TuGTy>~K)zu?(MIq&vBLF5xv)9H$|--vh0~myU{zHG3fV7BX~= z1)IICg&up!?Gem6_0&_otcYiOF6ua^g}iIY`P}7vp1Db-UV2qCK@(=p)0Zd; zX>8A!EvyYHy`rhr(8+AcDErAL$vchmjz7`=jtBlz;AI8BvuyS)%9y7de`!8(TB=Kv z)<9JM%|n-;0#T_HNI^o3c-~WIlG_m<$SGCpmyEANu1mSlBmu2Uvw2G4^oZx#4(b^Qh;+Sr% z-S&E{^W2B_8jdvjv~t(q?HnieLvpIBcAXj-8r14WMS5$1Hwv@|o?gi!eSLo3kL7?>%Eb^>-9Ho((JH_#tTq{8f>6G>U}TkF5 zik|1WdK~lp?g&K2&0Uj{!8=yhApQO*dm-(vQ)_I0UD7C9gFLB_51t`K0-6My->fA! zXS5cHp%X;AhSlnnVW*br$_pK)s(&}-{z6*LS$lWqDZPv_K5uHkgUx4-4f*C4UKH$K zHd;fUKcR-|%d<#$zT0Bl)PXau2Ne9$$byQ$;^-Y-*@DjxAW}bEetBai-tA#8AaulM z=PvpHwx}zau1{imDE)RelYVAXh5Bt#a+X?!5uXA5SA8NEE!Fpe!eWHXnh7uc5wP`n zmXMTUeA1epV>OaL2!d>&78Ek|wD`DN%G_|OxO=RF3%moOA;00O>D#(V9c3AU;ObrG)|J60r+FP1y3QnKsEYf7~T7b2UFhN>G?Tk;>rkSM zaO{>o_;V%1NjY}Aw`xe1n_@q2;RM(Oyy)USsRZsLAFp@u-`^)6FCOBju(s9)p}Z?+ zirC_H#sve0N#orl-NHRj@sTX2rQr9j=4=gcQ3tD)>D5Br*5TXYHpl6MA+isbVnLL) z)w+OpH7yl{@MJv~LH(=_x&f5z1d&^!(g89*9LJG01B1_=gAz@HV0~xvf zc3nlFE<={Dz-Tk-N0_bgS}Rgq#k`MlZGeNERqiIwpDj?D!}-`f2xbjQ*`}|(V|VIx z+Y;1>ArKhEwtc*vzi7Go&e+Z1!sfm;On`~nTwQg9Lkj=1#fi$J^!BE+=Vn=B;&xKK zZjEMX5vhH}i1U0}4cq*RJ!NtA59+Q5r*!LgH)fUBc5r9>OI->Il;C7E@?^u)TyF1Y z%U$Ia07qjT_F*7cu#~G)>vMxy;c{schqv0L-gG;tEG0jY6!OY}Az^9OBP(e0VT}n@ zpI;Kt2dzOwa}vO;(NjO3(a(tdc&H0u8U53@Ksjga|JjS~K$Q<|A|(Y0bK1ZQ7sMoP z;}^sSM*38vYkTNEjNszPjtpHMiXm7na>!Hm%xGXEiTcfO6R+U~n4L7_9Qk`8G?Cg3 z`TWDgy{?Z%nm*(R%r46_4=I%>^3_Cd&9R6afgS31p(Z?)q&dmn11_Tn03}0Du_AyQ zBa3?`sZ!Hfg+0J#oQ=jWX>=cQrOx2xW+&+nJWj(Y3}0r9vb75>YT2i;YpBQbo@X zsr>clO*ulkBgt;!-O{6}mFutgBH3U&l2jslo-1do*^At(nQGZ}*3g3+ogvo}vB8KI zme1)XDH(gL1VrglU{7Rt6m;O=KzAV2NhsX*TagYJPdvS(Kxrk; zEttJRT6-;`W;XZnTq~(-M`f%dZ zRKc02TolrLh-Or6X%+QiN?Hceg1AkR`gYz>X8EN&xR(-Q#1jO?`F$i_9{0kcXny*S zk2?kZ*au!$?s@{SdzK`B!VIuXr|XUUz;x z3s~s6NZ~*(r6~JX4)jX~YgCH_#V9xl_RAD&WwgIXy69wn`t~B5ZRHM#PXm<_ow6m~ z-fGNWI2Dk+*&>7wntPUNua_YXWLA)F%4Y!sf0C@$DNcov84bdB$}LTaClx7V-P@VZ zGWOVa3&==);@wn|%Q9$xX=Z%wRh7PN2??Dm=Ihid;RnHiG+RTE(H^|1jT_R72p9P3 zw{)l=^-!*APk+qE+UzfT`PqYfHwM-q@*~c(x!5C1^?Z|+Ha+;sb#{S}3N83}dhp8u z$qMn3rVV{aO7saGyWF;Pm;XDmv26p;+DD5`T;i*b+Ex6%>l zddB{!zDQq^`#8TJK1GdDKFu|GYl4@zyWs9cYFn#zxN5^n0^q+iXIdb;r-u7S zFQ{zd_0N*6gP2CfEq*29_o{zy_-pkm(jjzCW07^#6DeQ@q~*g_OR6KZ;iy6Lr@hOz z{thN^RJqL5c*M#E_!IM`h+$< zac@9H$=R%GVDlwgPSoR|4+_6JqOV1}5^o_h-ZUUdb`8HMim0%L2wYpX(V-hi_e(!| z^95JI4&ou&BYtd58f5tvk4~$@b~zThs*=!Gza3EW4e0_}aZ|B|+N(o390p zsLwS@P==cZ_*Fe_y?18dgQj_BRh(;~J)q8gSy*I)O2487vG2d2*Pwr=iCY@iAjj;< z>o+_32q}kD$&LqHgcgO~viSxr$gkWOKdVCVf`gQ$InZCfA=#K-*4UKqu@*ZXh-JuTf@&i>kUXPW^IoriWl-`f{W;#){hXU>8Yl4nk zXZq{EYmaB}DtKzk-`f0=Rl5#PyLB%U!I?%HTjtjqM2WUkt5Pvb(u=!uKknvW zZ+@Z-@Ndp0_R)CDYj>YO<~C;U)cv<&5bv?<_3gzbi!Sw3O|u0( zZ|C2wx^oFAW1fY%2~l+jkUkvhY108RzL6|`!rvIICg}(C&spnJ?4>gUN`8BPQ}t2G zJ&Z?M0(}6n*Trk`x2nY)O^(UOv~AP9i~*B2ujc_jM0X)+HVoY*vfRe{k2MQ;4+`pu zuQP29JS8(UeR2-%<6p|3sN8_Sc918uH{=FT$GPC$R3jsW@UA>AQttd-e|jb3UDE#N zs1!GOhUf!3_&FPYee3Q4uGCdeEwXvAa>Bcde~qpUZD%si1()ZQU5eJG-P}e5;6%sViO~WYPIpJpu z>4*cC+hSI9BNmTVSeMwo;b_}{{unsk7U3XhEJaE}RN@qWK((iP^C~Vu`Y+@TJ(&)1 zMh#_;de6HmYx(iO?@3LvU8pT(3{F1Y)BD?9YShbGM*!*$>vd5zU!#zVk$80=koMuP zIcqG()MRAw2phwn+2d`a;_9DJKp< zaRmrZF4zUq44!Tz%E5E)RH&PoczX@P9Q&PgW)bcGxHE}ov`b-5s~K0t7oPD*H%$nD z#iTxo6@~EOOtQPGzR{OUvJ*@%KR{Snm3Nl0XB(#F9nn`JYaFBd-rJms*OZrr9$s+E zVr!%~N0J!WZQpqb4?hymnan)k*Yjwiu@b;5*Q}ylHs;w&QxiMqh_+4J`kI`_Le@RX zn+EM2Dl1Lta|%4lQ4^y*TH;D1+eA5;-C(yi`1nv4|BX9*xm(IDJ*P(T5S5#(gO6N@*m&)1S-l)G>)M<-S!H-4$ zLJ7>&L%pE^-hN~}LK%CXBMiNVuanh2tGpf=njaMy%Z@Pg99BQ8m4=wjyYf#%fnOEe zG9dHl=B;0~2j#OuVDfacnn|Zzu7l;-Kult#Z_GmoBtb|XP+$IN+uUQVtiOi7nsqvJ z%8t{VqUjO*QPCgOWU@l@vqD|Ztb2!LP+;dxdp);$S?M@D?Z9y%CJ^!KD_~DFJ#qXx z*sS^>%?BdWpz~Te#FBQ`R-G)}_gTzIt8@(*3bu+DmRIKaI^;nGDl6R;_@| zxQ3jBfM$OI*fvA;t(}cDa=G31d5yV*lk~apg>@NMhv{^1r1nOF&-a>7nv2mGGZ*yh zX*u~$=^F>;a4)NGJ)t&>e7oUR?}l8R;ek&BQuP?tZ{LY~ep^->Eq=#8*;p-)BNX%P zr8sO={AD(AzqOmq`uKLh;COO;E>XW`QlIERWy^t)Cj%q}#eF_>oP27LTje~jDisn) zWL0m1Xm(ZbN`M!S?>xWIIF-+p28Vw16AO?xc=&QVFDNnedd`@~Jz!>=-r!b)`jf@g zSptsd5C=zlq&|n5PFL?o3OleG)4YxpeCbAYetWbi@bw*^jmGd9p8lz-@AM8&no7`R zWB}4eHdkPZ^~+>oM{oR^7P{HuyG<&Gnr9gRAPCMY zrzbZBGQXr!Ytl0DB1E!{rrTAJUlwrVL8d%2k=)z6CmQPKM1P+zl62+nWoDZgvLD}2 zuLm$^o$wWUKP?Pfx{=sJ$OrQBQ*2Acn82$uZyGOM0pIO4N72zQK=a`6oTEZ%vwxbR zGm;+0NJJz3&pcC=+DELZ+Kr5@!=ffZ!skW6pm2hnu<-lO#;C?HHQe?K?Vj#Hp0sM# zH{ncOWlzhvcd$wgcxDphsYvVt-Lgz@ri^LV_>Dhmyo*L!KPuMVl_0iXu_>I2UB4T{ z?|qIE{UJa*VNInbWtT}#(2>9+0=-nGuJ*DQ<(PWdNE$mA&V~){$V)RmLJuR>)@uVLTpCTQLAAzHi7g4PLbhv)T|6 zMl?SubG+bIdj$@+hHSr8H1&{Qb+AA^TnXs=7!6HWcu3xCL`QL*r+8rGAtdYx;2g$~ z3$0HB!@)M@E4d8ONUNe&E{zn8vgX9g%^bOrbqk=)%?8SHcaz9Je8=Bz2q%*8ZG52<=LElB0u@-erSsw>AgG%+-{@ zOL9xWFw&4hM_&CgnM-HDM(t!+%fF~C=zLeK88xDPV@C?h*2b@kuwGS%O|yG1>Mk0h z+Kd*9w_h))RLAHpOMSx6*F5v1$wO{e89t<1r=v7jEJADfozbVe>q@hQA7Y_oN=@a> zx(!B0Kf{+>zm)f=;`TmMU7P!XD}+1{Ir>^-#ExG!oS=CMmQrgXZAUrtr!gB1Sr+Sa z3`&+#hJuZZ66>rFAz!@P_925ZlaF9ya_Yc36H3k_#0$@yq@t1L2MpN#P7-Vt-4|?& zgQx<-Xk_3J%~I9#+1rBV83xfhGoN^nSnX2uZQPolDJPABAO=TU&4SQJ%snfE7dvlm z^~u;B19-w_zY}b;Sc7A~tNbSZn%Tk;7xJ2iB*NN7=rz4zA!dDTm!3KOSBmPxt}$qx zg_zDXdu3BSWrtH4`7@f5Os^H5nqlJW6;O*4G}=~8AvY%KQlGPi28d;* zi_J&oV#>r5O{Cx#X+g%&h;L$Vjn!AYqShE8sP;8% zHW7bA+BmS5%6m~?P8mj-+h9CtI3S9a{IarsvEZgK-(16O_PCIV$X?d3Muf!5C}|6_ z@3hk*X;BuuX+s|WwEnyUN-WZ(D#9)7@LnO|q^bd115)Aegg2)j$X>zZsbDJOi#vGKg(?^%>>Wrfl#KCh+lYcEGoh!+ijQEtOpwhqy#&= z3Qbgm-Jr%s9-Q3H+}P?gt{gzgH2}+Q`mr=sZ|Z1i zG-k}J#vAfhP=Ic2%qhp|hK(C%HSs{W@4J`0S&z&F^mgE%XLNVH5j#H)1g9a05|Y_g z?!^Fgs{nzw^7d zBVg?}WRCAVvrX;RD2hnacXMb;(tj~ABrZETAcZ^*g@ltBV64dQyjL)e|yKS~zPfMY;(sx*8 zy{n((`DAL+(^0`-K;`shqvMRmV)BMp0MyG>(-X_ns9N2<+%P+_tZ61*=n+`emBA}B z%YOa9seZ4^EntD5+Zy$}tbgTa@sf^ug+oE3>3PvNC2{2Y0*)ZfyC2K1#e`l0n&}+{ zv;{_mQQ3aHwVQin8`Z`Th*NE}pJLIg({V(lzeLD$7uESU<9tv^^t<8}UC_(ZfM%K2 z75OV;2aX;50~^?PAH$BBKvAa~3?Le+JPe^Ie%03@HWca_xE3omRh0baCRHk} z7(>rsJ_VEOY&_&MMAmHgQh*V^@1>D-Gu)DPA9Uc!RE34NPuL3ZjRU4CwEMj@@W zP-!Q~$DB_-VPbYQPJkX#U8uU+x!9A+Z>HFvj2ZFrz*c2|8rW)T+IOa1)UuUW$isYf zza1BndZ4NAE7#Sp*f`lh#HsGPd+xE12t~gBVI{cQ7y_+|@z<-17n2|YUysC8xfOGZ zT@>r0JzxRtXHC(m+^Da$v=rnIe=!99S^SfhDHJg=m}g#+)YZfjZef&T@c3W8}vuOR*0R9&n2i=}pY^Vq2@-d-ePY$pgh_QPfC9?HARCD8rV&$FRe> zVPS9koB*%$#sl6>f7$bW+2$JEKw*H!QNrDhaWMQag}BhKvPbVRY%r zi{~qm{`|MZdo?dYlLH3{hS*YW8d;Vf@)%%|!>p(`S1r2DoByg|00rxHu$&DEmqCf6XL(Br*<|L&=*^b zTU)4odbID)lr_8Dz}=_fBYwLD%z;I%iCh-bz$2qYw#P%YY$Z^YZRV@+UGgt?uXTK$ zBE?Q!65#suZI$wbZ56UPH1Ef1CpKRN76ix==z3Rr30K?zlMxzW?qG*sQ2{Q>(Bve* z-(FB!q?@&AUZ-vuuj#a7OY0H-^rK|_ONllus6e_xo3;nE7`Ffjk@8xv&Mwp-Lw%k1e7+cE!*^VKKI zBi8N2mE&Cu8@$C1O0!97g0*qUgT^mDBi12-sHL6e^>~QxXD@1lTLygh#wvpFo5(fGIt(I=cNMR_q8qtoHP*SX$HR zgH9}2rPndl{w&O9R>`9WWZ~~Ex=}xo`$O$$YL;P3ZETXGpo@GjW(feq(%uSc-RsR} zL(^$M3g*zx4b5G4p{6OqV6n%FBz|Y*>zQ@eCV>idCQE=b*E#?x-z%% z$jU?&U&@=wDVfQZ$Iu||y{803{#TODyB=`<+aa>=j&11}U!!rzATj{*GqaLo!5)9%NdnX@1yf~N=K5>#7^bd@9Ul(l%zyK>wprk4>-A1t0t|ZvG%W52I_sP3vl@mKRyyT#@pD3fTV0Hy}}K{*i`rQ z8u93T#$H)W(114)3P$Jo&sDsvxbN zpD$p~PUL1A<3t&6O}8bnvx%2-6MuQS z%C&!X&P}~fR|6{lldXwNRrs`!!ArXj>25s_-NIv*kAGCnQ}m09gR7Yw1)sh^X4Kzm z&}6^w76RANMT6}5&f&JnOnTTW^BD=@j_x^pj}`a;yra&Cm{igGwaplgDY7i8?KB)T zIz^_U4!Y;dMb%YKeEBUCX1y%S$^(IvOakNs7s1ua{Zg;$TAZJ7^qCLNdkRT_w*r#I zT+Hs?4iyYp&@>X6XXw)4Ut&uXgUx^3JU`~!;Js}5EIxZ^Tb0TajzKPAc!S><7beg1 z;>)nZ9KvTuIC=cAtW8nsy$2f&C@PU?1?w3BR4U|K=*7b(-e4=4bI{GHxwU5Z|YSk?12?ZzXWDa+e1(a{1ohw`2Ud*Dp`i z4(s^)Cm zC%XNp4k6S6bWK-e*IzE;<8_X_#-(wreN{yUo2=g^K#DPmtv)v^cp;%4Osn1y6>kV| zV^slAMh}GVVP`TLjH+)xall(W8UIP%U)1!SETpq;9gqF3o+}!vtCN&&h0nWD?X+w! z7L@m~yrul(T&Q5iwBxB%D+V5d@ij0}*M;USQE$LswnV@z5fPTEUoGu@LMd97AK=b5 zIbD94czj*poV;O~T$;h4TNi=Gb(-;dd*r<+iyoE?N7pxjp-TFr);lPZG+G(A&Eg*{!vwj$)R$RQ0;l@29@urjg z7aH_TT`pR>hP#r9IkTf*_N{6s*JACwsKlc>YKbXfjAf>loX`O&TcY400Pj*r$g8vF z?GiW#&3$8?soOfHwal>HkT2eEwk;RK5#!B#(X7#6P3?=_SCDv?!{qaA_58@|%%}Bd zzsXfS3@ItJSn&^5lCZ#NOIMU4A)wg;%M+!-VZ?6FE6ty~-jIy2a4fh)! zp9;uJ?wK;~o0$}@PEwvu{1cXg>yyjGPwxUhanyp^%MtOYFL}lQ*=C;l8@!a&e2UgB zMGUGT(%02==#Fk&Y9wo){SL{ZxaQ*b2lAbD59oLOn0G?f#IxSwp;;5Y{CHlJ5$_&y zk-sLlTDwN}k@q1Unzg7ZjLyb}IrH(56qu4Fi*xY<4~zimhwcAaGU zlB$D09dFL^Yb{vpFsTS~YGC3>)=#;)byZLot_Awu;AHy(Eb#DR4ig=&N z!tp|0uEjdYt}c8a^pH^aBlqu_>@EHln=*O14*zfgNPDp?*L+5<HgvkBQjB2_@b*y$qrwuh`pYK#Jl-9}Go;sgayUU+o z46yeM`h;a;ulmgj_;Q+L5N*z=^0z-W+poBxxy1SNJ6HJMSO9mJOSw71)9NZhxO?GM zC!U=B?|_+3!n&^#Z3_Fr4B&lC&AJ)s8RoSM+1qJ&+ouTW_Kl~N#d)Fqxh7RGoRSkX zK$>Ovm&C@LlZ@J@S06uBcaUHAH2vtu3R{Va3p)z`W(LeRZkPJR-^DaKmQd(1noJO% zsvr8d!DNf1~93+sSWb zJz1;52kRE&mfYR%$raWW?wW!L^IwqG_L$aeoeJuOui0e|;>BE{V`RqoUelin7WYC~ zx2H!sIa|LPqkcjQeDd2vw9vQ|xH@KY>($&^ddyp612)Nlj~YK+g%JwaS0w);&9R`v zQ0{nQr1x;yzxczm8v(e$tmUu&qWdgj$h-*JsK5 zT|I{`wae=4u9*wV$sAc8)!lT~+4XcIUYEb%33!(rLsgfi+f>F^SnjsS_~H_hUisF^ zq`oJ&;n-`Sxneu>gF)~6WN5=_0qAsfYEm^`|HFEF?Oryh*_zhpRmvy*rHNSShooZM z%Z^W8RPWWiqa%E0z_>$WW;{8fIy8nj(=qqav?(Kz()m%1H=*r40IR49gBb zczq@k*W_1sSrdlK((qIHFkA?uZI(-56Ixb68lDoH3OmfHy zrjHo6Q;XDL22-mf;Ph$G5A{r@PIEG>Q;cHmm|liCL%%&;eGc1}SW~31j`kion&R@f zP|=(q$v&^Oy(kzf*b@{@Jse#FUul>n*7ZpjK5u4>UuS~n`Uo9e`DEtLE!jXRo6mxC zcSISS!R^~VQoM_>Je9dgae@OdHT;p<97m3)&6arJJG_R~^EGL&@teYPAHk{;i#6QK z`B)viX{yV7 zfV%|5d%oPe()?x+dlJpv&+;arV8q{3A;_hq^mu8mupf-1FF zlAqUIhnfhC`y0qeDLOKW@!nco^)vUICx%s ze|~_^@fEoKhs}~?m>B%n`v>M>6nx=xmvmjVN-G<(T0Li5a+H+Z6dH{v&E_?VV6LMH zcdp3~-%0m-V=M5L#RV+PvHPc5eRiDlyx_(Ux|dx5Au)$~V*O3?mhy?Bn6$F(n;WyL4fu)5XMp4q@|()EW(X4rFAMiQ(*v zpa z;-C-!X%X>-j;M5bvv)-)7!0Mgm=&c`NY@(Y#;3EJ54me76pilqxA+)e0{#XMf4gA& zmf45RF(6ow{iP~%72|kHkzcS>)z!!ky+_sh_-$oblU?t2?N_benJBC@ABUh}iHK>yhXBnIUucB945?G2 zJ}e-vex1|u_S7F_I=xwx@rgTNd+0>Qz<{3&b>!9bRK}?VhJBE25Xp{&o1rj9yM!Yq z&&CTbe{OJm77$N2QJg$ZaA%Mbl&RqH<6Nxh@-p01{B3|{a*v=-?$I5`Ao+GV;> zZ#J%W&MJv=@X!~#Gttz66m%(dU-VbgIm1+t8B9nW;aWrbp=~EjcQ%SMy3IM1?S}EN z;^FJQd>9?otWJ7eM&AN^e83;QwWrxdhhM=u=@53CTB?gRN`#YC-G%*69wAZm^jb`| z|8Njofa!TZs!l#TG7=pDqYXuKoP>vz*-HG5U4 zGkZ7xPvC#~=>tvLrcJp|HsI}dJlXp6EZM5jF@>$$ZSFuO>mR|2`|!^TtyU*_4kg2` z=}3p@h$bFkaFP{dCAG(0I_HVc+}t90eWN|o0~7apV@{!*p>a`Xyw-UQ?3y|tqu|0L zG%kALP?+P)TOpL`ZR6>II~P00XXA^URt)`co~)<`H75oBIXV%6iy_8isC^OpFOg;d zuJ~^xPl(0u|Hmru=rE-H#WP3iuqtK5{BzTtLC7V7A+_SVbS>k(uXzp47<~-@^CWY2 zWShU6P<=69xLb2)S=)~f(T;!Vysu}0yxdx2?d1qb)^Eh+Viw7eJgyWr&wiRVL%y8Z zz(XH7_D>v?8Y2f+GqBc zll*q0a7F^&{QJZdmu<3cU}2RbnRpRkB3&Z70X{YxUs4D3( zV|Aogh;ieCfTL&&d-S{$hzB7KgTIS}P*Ba6 zCx?OGzLbs%9{`FE?2Pua4uYWvmN(V^+O{VcBPo)=5V*}0^vfbZL6+G-nN^A=Wb8i} zk^6hYRztSX^XwAmKeiNj5%}0K$dN-k0^l-S#0aARXSksX0Pu_rJz~Ja!x+(*1@bs~ zM{7WHpL?T=mHtx858m)JH2QhApE~^k*V?gZy9mI%_j*`b(ey6D=!OLN*a-KbDL@jj z0>G0I`f#E73|x;sru%^yt7;KGXiOe7M+!Yba4;1ivb=7V3yr_F0wBi(83B%3Iys~H z>wgL2KaLRT!v-tJE4_S*|5(?5S;YT#W&eINcpEJ^+g5)BrT#6q|GC#_Tm9c%RdEuz zbffaVD)EQ@SJnIP{`|lE)VKm50ps0MHeUY{-T&{V{d;Nu+QR?5vV6q|ELHJUtog(L zyz&3hmy03*b$~~d_wWAy+|Ykn;lFR9BM&XC(RtLZME`#4Uk2v?c%@DVh=mrRN&N4B ziOK)?I241?nydKKm+3!m{D1W24Ep;{M%nar^fmvN#}R!WZMmY}oyh<9hyB0V8$c6f zu;#0zWgKMe{x6S%`~k33bJEGJu>aBN{pUtl`l6-WcgA=4|9AlZ?|b3F1(w>vS@H{S z<^NIwPKYRntNa0+({KQ(j&Bz*D`<)Xn0Xw9&oG+iq8p8O=+c3K6Y95gy@=N$k{zJ@ zg({doU|VekpbaMglIX7D0HNAvOp3*{)e8U#i`X21-ikmcw$ME1Rse?scaL_UKN>m< z%{FU=#_mJ&OiC=@_d7-dq+|j3&Q|DPkKd;gPsy#F2;!*=QNrDnW4^Dk*Cc{{3lMz~ zq7g=J?!a1puV>yQYrM{HB%0Iv)AeKR!!g}C@qrU2xENM<>D3krL6b3}>7iWW{pML{ zJ$^pd9h^dU-SPq8Q{s;+0L*nDrRSqG15k1lB~7s=j-1y?s2CTKc?s4Yfvsv<*7i)q zG;CbvzMUc&0KO)R?ox}}os4;a*m_G-$Zf9WG2K1@%jJ_|#cepdzlm;HW4UO8I6gtso-u1 z00JGwchf9g^i}myzYnDV5M9ue0h!G`GHm~d9XZK;Va!A-e!II3=R3PTd}++y2J!sM z>-N9bpT^N-?7ha%_$NQUSO&Q0u7?wq=_PDbx1ngl-YOx02HH7t@AgT&&x=iQHCHs* zo}kmkNKN)>ndXt)S#^B*Y6I|ulC<*j-+XE-^X@+r;=A&84Gr)B3(;*(fE4x+V^6M(zFUqGisBvCr1t!hV zm#Oc(Ti;I@<9`T1BzBCxya(X>M*is@r*C||uEbKI%F)Yh;N3joEcb6I1=iuv7d-RA zeJiH<%k_7Hbyxf{UGF5`sAB&6%fS1Sd*wTMdbE=kZ|33kAb)_MeT2;&qAB2 zd8YeV=;g4plH6NUZf8#+h zpx4|&73~RCC3p`QLanc||EZKj2Z8!X;3U{*8Os95aIk=~x&&YaPmyx$Km7%?uRw&0 zW|nPLRiF*XLg2?qxBQRL1`Yk?vgehTTar`0I_RK9myP)tz+A{ZS!OdG4z2D5Jx1F_ zpSs`wbq51DO(HaFpXQx@fN}H|U~dSP0G#oH5nFEuNK_vmN|lNo{{oB?iO^`cv)^HX zHGns;%Tv6+^zI3!-wutz$IXj`z^7=cIx4sh^~(A1`uUXF#*M1dr%I~~_$Qh-ZA>7* zL^yUmhe_@?P0|JkFVKR&CBg?c(=?w?I)Y4A@ZXjUXb}uj=Z#y=-`mIRnoumgh|P^7y}9 zW`>w1+zi(S_<7?_c6$(MffH38QJjeZjkVzQphLGTB1$(jMMsJ&{tE4V6~cRy&GU%p z_<#54X*c$d2V&SRY2|)A;{6BoxD%K7h`(s(x#sKf*iuEM_KGb5Weorot2+hT6~^Lr zXGjorEaD3{jMsU?X>t;Wq^z*%#~_E5m7tiy zu5dm@!>@dC3V#|v?|HT4x~}+qfM&ACe(Lf;+sW?OKPC`i&M0$!q<9f8t_!Zz-U-~- z5^yu`j@lygMMKks_O5cggVB3{_bpDBW@v}}p4e+n1hbWEk@&{G@B>fC6k7QJYykSY zf&8Kt83!PlqV}qO1k@Z!6Jc1pmL-A`0-nT7w+Dg=zFM?CYiDKR3uS7QBSxCO<#Fw= z6oKZzv*%QwO3JfhVDn;+1AkBjiQQIvZlkvQT{32_re7(yZjcw-Xx)v)Kh3_H^yw15 zint5=U#yl7d$1M|k{IeCj$Xv*5+_(VbOo*_sw5S|7LPtc9>EtS95P(iz(Kk9hEH11 zl|cRR@kZqrCDPwXC(iT|jJ;M4Ab(UUI7~41;?;)b-q+QIG#^8ZQtuAE*H}Ax>osmU zqtWkj!)$jeSD(7IchZzoy4pjn_^22-XT)|eio@36Si!Dq%EAnXPS|%1i3DS)T7CS) z!ghhw31w;wdBHvX>4MezRl>i(p9+ap_Do9fj)YdUU^g8&L$y}+6qcS3za?Ya7D z&t5ZPvGrHEcGYnkUR`M}$u~`043xZQVzM~wcwE0>6*)|o5y1a%`Z)(raS7POZaqi_ z&200 z_$5T{D%#tyx1}`NIqBQq<~q77z`e_HLy_TH52pJew^UPV*Mn*tPq@1K?wV!e$^+o3 z4SBA+;dPx>JIioe0+t$xo6l(KV$kJf02(NXP7o-4bn>Wb`_PD9w|}vxKm_JoJ+Jj4 zK${!Xk7yoW$&?fn(4fsL9Bs_iWRr4zUGoDdDVF1t0nivTc-4Yez|4NDyH8 z5dq2G^0yvk)czU5QAd$C{=YC7B5z|q1bYK)tsi9oXZV!40J_6%LnVQA?UCST`2+CF zdvvpjPW(=(ub=GcoB)g2(2ef)c&QILpFO;&rfGh0!0Df5Qb`DpjshHri12dLaQ?L1n5$&F4NUB}1J z=3f#mJ*|?aP~dqOvrZ4>q9k)?_Bp@8_JH)Dx5Xac=`ps`fVxe>>iuHittk}1d65+e zn#9q_Rp?F%M@aa%146|3ivzi9j`ME76C)grn)D|>(Kd_P+P%M-x_`XPe2nw@_2L!f zQ@Q#;#ry`)!DSuj?Xhr6DWc@U)W+Xy+cVe41wLtOu|Fid-VJ=;Pms7LzsA3X5XrV( z$2N|LV)kPEO3M8Q-7kzVvDYBKoXkP$nHzy?%(Fo0c4elBvHdj^I&~o6cAjCm5OOdCQmgmu?oy?=2*O7Pcft^>*m;dVg z8)*1w7v=U|>ic|WeYb(GNfZxn8FpGmT>uc_?dpaHT}D18rCgDA_wqVTHG6hOO`;>8 ziF}6@?Y?TxQTn(KnJH0)UUIIZ+je8R{|aF)E5lodQZ0Lk{R>v$O1_ERY0oB_PM|cD z^t*_2huMQr#*S)r+ewYRF2%Xhs($&Q9m9*-o(~VH%{dG3&NjeaJ5)t)L@?(TSuJ*4 z2zuotx~Z0u+kT;dL|kT*>dSa*h0Wzmn{YZuQj}46Xa4ngDY^59QmZ~90N?y?$hUG$ zux$B7)g_tLLnMteYmw_mECKi3aqrP7+SdljmY7b%9yD(C3XrE~Uc2|>e!rw+QKv$e zT&M!6qT@1W9>a89|3gFLwGHF(jS(L@o7x!R!1VH@?mZuyE>$^)HI2NGXVAGnXfw46 zIfZjyIUaR*#7HvSgtf!bgv%iz zk3Ztq#Re;S-#eN};+UGAT+2sE+|%4DklDPM)fLdmMpT)|CAAjHqG~|*DdYdb$A?%! zgpx;EeWC9pdiJ2b93UHU1+fe(vFu`6WXdDsHD^UUj&dy>`#+!g9d1q46c z9&vYb<*Q#Gu-LTwH5d6h z+y+I}yJyAQe>+N@Pu`{RW}?g?v2-NjbwIG4Xf6#2!bg>4Bn_I z=?$q3ln?~P!k7oPL-p?CeL7imkVv0x@(^6iO422YriZ|>yC;7RidPtN9ouGo_ zW;$MMs3R#JoRj$on}sUG-rBqG4#2_3j}|^%5h0ANPvxyE5Yalg1GrrHKpe9aw9&fk zrB$wv{T9t#^NjsFrG()N->-8z(xnMbKa1Vu<+(_XBfMD;m%}gVgL1@12WsN~06`!e z_zB+U*u>9CUJ6*2vKG5u^L$fvxkINsd|%WGhCh};$!AZ_5BEK@CF_O^uBROw9|S59$3YiRZd_V1$mB*k`fMVcFY(7rxCzwVBRk+?)}rT^az)Ke#sv+#zL6M zyCxhMIbsD)jo7y(^;Mv9TX;Xdlf(oIL{0}N^ZSly+R3S^!w0&QD3A5z!9QBk{+8M< zc%s;&H4LFRxZ_f6oY7L(&op$PG?-_pJ-+~#S2x&W{@J2WW!`!53c3Nvl+XL&LOecH z_i0hG_BopsUxVq6;}EG*1GcIbQ#b+PLHP)k@Me$}U(CKtOs84mU*K0(NKmPb^&Qad z9;rNPTXir~p^BUhjuL}y0w(4c!<$dGDdF|^mkIa7jbwqvP}Tta1F!iEpT)r}S-)j*Sxn#z#@x|>hrv_K6S<@mYlqG;S{qcY@3BaJ%zz9K@h_nXU9lq`&s7(8~Qyo zK#XCf!!sRZ!^ARAB1G%*2|I#Q4)=z%mt!~s-~H5uVr9Bj^Kn9wfihTN-!^q(YtGNA zS%7yh&MR85E9hQ~YwRH7bfzT~9C6B1UCHwFejWpY;Il==}o!ZKDsA4Z*|L!NKkpKSU zGl3~Zu__jdzFz4}(-0ce4vg@HWD-MVgw&cwr`Cm3h9;I z3@3b3RpwBiCFZcgb9XTnCttgOd&E)uiyId|WqA^RQ~}ideI6-ZSZ{MGJ2*>D7;~oF zP=mmc=Z`#lubz=A&*m@xj`|8d%R3(J5CmI!7cAkX&-3V#{Wi`UEDau%q}rNp-^-Uy zegf51ms64-9fQ@z5ZbX8N(b7)1`7+7#yvK;h>vyfiuUEkV_X)y?{80>{U>u{+UcUh~?=xt0EpwNLLga zOEz;Wc(_UF=oje5=Y} z9#Nj+$BvGa(cYb6r#CMO`(y?N)Yc}T94uxjgdvX(7=IVXE^6!=Q58RogDrb|>4S$J zzp+5=D)gwdDNeIYRZ}~BVqQyC%K^zlnUi%xbxoR(GAZE5s3g$rCdNMw#{+<1e$v*F z9mW4bB*m27zNBV^ajhTPSr*Fpaq(%2)MHY1Sx%?S>B4ca8 zD%*wx=ip!>5`9KBXemGHS2yCe^Xl(yA5+{=g$61^QC&oS_ z^os8d1tq#8vuKQGPuj~Z=eZnvp^t&e&Pnu-x4M?m#kw@ie6dm40(0@bFXry|O!>twu2ocz`2Ku@8{V0?5qBqEKk_f|7Qi*r!~A@ z?L5c;JA_U}21&%w7nyMJjU8*00b(ElxKd!O56vZ>8uXo7`lq<-mn2a<4%GREv8DJ= zRZbq~;|r`oqZH@Hu8rtLjF@M?7_OLEOe)Y;tF^(!HzP9OVIq62H$PlnFH(oR!aBTX z6$%BnA6@ER`@_Y$+?lD;sW>X-wu#|PZ;J!#D?1W%A2A6>C4~Fv2tD zhl5F;DH5FPezpIt!meYn5&)k+aJDTV51^yTcnluohpqBL*=al!Kjw> zr_Sv>q37M9_HHVZ>Mq!8d2mxe)E;e$35#e6+wee>pEamct0>7SIX28W<=bEIyn1n0 z;>N@H`KWQ8+(m2IIjZ2N^^cJUFW^CPdh3)~NuG&bF5>gNo%CCxnpho}v{VtKcWE(_7CLVmaA( z{hVFh0{4Re{FF%0y3d`9<(SBBbxwlN>1;$ysXN%zFfjHTJ06EM zJ=LaOw1q@N+}!s=hv1Hr0e9a;5!K>1nXdB_Gw_KgoETes67(u`T^j`MnS=d@$QozG z`8fD5seUB!4TkT7HO$_1y^np|uR?5tVNnK@){ijT5s@byqe`&Pk`_7bBAp}&yvUjG z9)|p72Qzm1-LT>Bv0i6PmvURr>_w#>&)Qd)#kI1Hw83&{(np@bvL&epGN;;bbRC1R z&Yw#rd&JzOB;z{{H=Kfy@zwHXaFRC$S-8Gc>R7#eTEn&}`;12Lo6*aU8H`>LvD$Z; zF%55VgT;lMUWCrHm3nL6m%1lC+g9oPx9=0`$oIm()LwI4tgkJ;>r(>Qm-O~=M{BNl z1wq=b#Tm&p(GHo&)d<2?u z8Z9g2Ow<3)RK_|wYyE%s^*%{`uOsoSFLCa|>yYVKt^}t+SF$=PLp`{#2Pt-o-&+xyq2yH?qx13C>9Ln*`BsSnN3L(`WOdGPt4L{7|Vsml}7CG`W#5MwJ zU5O*t*i#pz$*NV?4kCOX8iSE16PJ45go$+gh2Dv72!;!W>{Q<@u}XFchxNv4BUQS# zB5=5b%c`TnJzQ)ncI6r?kEhOzJH^8WVryO%2rBr%pN=)IiOUEmFu@`4c`C!|N!-`L zhp{#9;=z#xO$HiAgHNr6#g^1XbWkx94!VakDO*^rG+|r|cw`1wT*uR(#`7AYRAJ81 zsZ_!xv7LJnHS&3aQ$Hv%tp~)p5L#Elb(LqvUhdIZl;N^T0qzza6F-VlhWFf>UCCv? z3GS$n2To!^UeK>EZHwNruEm%F=D6E*H|AH(Bk*DA+xih@e0xk?nL~ewq3&~{t72Y3 z>um>(#^?7fD+9x>hMiL%p8%C~@9n&R%y%qZ<=Qz01_}1xdY)ZT$eOCQ_*=n1)8ZNa7 zqU{GrID^^V79Qw3g}V`WTu+>v;?Ni}40^4ymXpNy*BEYXVFq;m8JbL+nGC7pJ5Pl9 z7SA1#TwO}$N6?I#qPkIy`>`m&iPUAmSgKm5I1k0sKcI=5)@3fQ@M;rr!sVja*SVrw zX5>$9451m<)l{Q)SNkU^XXXwn!gg?X7vUCvXj<)?@izT)VPwIDF7z80hCQv*d>t>% z*7J2{q8xoaeN)p*$`h*c!^peX-0=dc6Q?IkL{78`9+^Sj+cFR{7sGT?CJxeg*#c6J z&yepU5|BwoovqJb#g#3!a%7$H{G6UBn20NS-UwspoaeU`Hsm#w)CQhv`D44yHnc}q zY?NtVMH)hKrD}7Ch*eMz9gbjK%=zkcixXIh`XUVVd8R7w@TZFYWI8j}?I{TpCNuM-J zd=qjddX5=>#*g};n-Y03E(zt&MMfDOw->YwQ5c@euvd0lL;Q@n+rL1x}qB@XY2zDWw) zwT5M+z-5-bq*{n;-Dwo~I3VzF(j*RHgTc2~owh*HH7y|cx@ybs)Do#9W$C&0NvuSw zI>$ZBLoz@&6V_!s>T_-B$v#_`a*Vwq&fpJS6>%I+jS#F|c{Ker`^WAyZxC-_Y`7oqF^cgBrO9VOHj%16q@n|?H9$eN?@P~zd_uuqJH4jmw{iv<%r zlGb(pYj*P(KQ{A{#4Zi_RMWx@&!WaQ2%_yZeqqGN`HaOC3SR3I>{^x2CVWL{aEQ$o zgG{EWE=hc`l+Eq?^qGdMg(E1WPr!6vJt>t2b;fII;b>V}u$u(STJ(lFeCdNhV zu>sAOg&q=Bi(au{clsbmqxnXj?y7*vEF8NLgk74GXGMXswYFg~m#;56PVAP#V1eK| zf=(cK1xfC64B4y1eBwMrBv>va;(@+$J61W~j5{`O%yiN)C>b?EH`RRW7y4OxSrcdD z57{ps@6z}e;5M<4kOv6p&$Ln+8r^lm%2yjqr5xp zzmi#tZa1=~lNrmRK*u#Z9o#;4x$fgO<}ngj9=>A`_(rC3IR=9SDAaNdh;yuaR<<7a+DI5s~+l##0RL*9#aUy=N z@>K*Gh8-(Gp8-V7glYd53UQIRI&+ULUBsi&^p+z~HQcFh$KH=#>|Ul4yaYm^IIGrO zEY$ZfN|<~*Tx1zBgjCwz%QEI`Ubzj$KbQIW>9+|mh{()knZXVD%4*}vC*P&v`LOF5 zQKMB}w7G45v5?4u7yUy-%>DaHn$0=NT$=QVUkr!;#=m9@^zBz8_dJP5lz4j7ubiTv zphAb3ICI3MOya$Z@ff--)) zOB=^NRwr;AXVG-{3LAW{=4w!!Hw*Nyfb)-6v7fSC*<==jv~3DnM1LeJwaf@f1b$@* z=SHS%xiz~WPrn5Ot3@RGklsJ7{$qD^_$!uVnqP8k%ybh(@BFjQ$c7cUx^=fU{SG)d zRVQiY!=a|x?j#Y=w}x_BbJ{0{vSyod{-~LZA#KfYErRkZOG8R^ECssMZ7s=%(>FYnvVA(AXu$V#?Mxp(l3hY0qUrkaMO~Fqd#1p>bq|CW-5fw4-h5&MRht=L!ZY! z%X$8%BP(PUXag^`S2P<2R_wyERefX9@0{JUoUGR+zjemgDn|ct-&$e&&e+g5l!F9xJ`!! zT`YXyAV#Iqk`E0v)^kI7e?*53zt4u2Y7dl(l^7SbIGWgtaPeIY5I9m^**}^bFnZ)@ zABxeX^`v>#FV~@h0jcW0!^#wU;q`fP?iBfQl3+}6KtXCds9UP{o3?Z!l3$!>%#XaE z?vYCrG{RZjm$5c=J|H_*+@+x8o7M}isd0iBp#h!OW=>4_jtX39crylVGftY}t?J0S zddQ*r4wF0QfF`RVJ|;4?BvcYHKsGnj_{Z@kM6N8A`lIQwNc&2bt_DBb9%Z1?(IfU^YR^}L?IcM_M+apDtLO+6t}8haSY{Jv`<3_U4Sx!4(#SZX#g z+&>gJIPhP>hF+us%_p6CwojH?85NPFLr26t_<7I&C>%P#@vgrt-)Dzm zTN`=hnUA7%Z2w!8$JN7?#viFDr2mH`S4Bx;LzXzFpIdQT%t$O&!N}5aFo1#re?PV$)mZ`}lPY z7IB`79Y5q-mXqOrHs%v#8}PkU_QDLz%Tuja_O@Mfdt(HsTan5SU8F+olb%B!ZWX_Z z6q_BY*Xk-M_}D70zdUKU)+7E}ao)?NOZjECyWmtossWvny6zkY!*(5if`u3xl|i`S zY0XL;CQow;3D}@rY*144K{>3f?&f=WLGZt}fb{gjKLN{^^QBpG+#~Q%S3?zq#cql= zfTytaIWeunY&C36}%cO0dLjnG3B+ z;Ko1obEuc^x%2-bve9EqIs2@}R0)={C<);Kb~l8j+$46WRucV`=H}Yt^CT3WuZe1| z=;)GU8F7L$9AOa%U$xI=cfg_n1hJ4(2q+_=u|lG?QK<|+(iu_WOq=A4B=q=`328RI z?!3%J?Me_$U{*r;G_2&wwnK1O5afFUOOFNDJXNx5bmI0zvLChonY$dPwg(kNGVJP8 zPbnGL8j>10%Ol2Pl@OLvIS+5jaz%MK-QV^ilV^+i1Ia@1j_xIQd{Jwv|+WDl|+&cm#w|^{L5xGDf7>2nJsoD07JQ zvc)}t^4XF@amC9LqxXV5-$Zh?JD2vf`*0M%-hnQ#L0;Z$4uE;qs%H~Mn8Wh{O#x%{METtPhF@D05Z0z{wlURl;z`pEz)5GMttm8U+w zGO4EC$Zo|7KbIYlHVhaN4&P8cE&X4DkXzt3I%_vOYH#iC)EVdO zm(5%urCY;CnlnBmTq|)u0a8~D7D)f$t=Bl&FV+tQaiq$=Fn@3IV|a)_PC_vcxm3cD zS;QW`?FO1;6vY5s>A6tL+Wj#3E4(a~U!UA5*OWac-Fd#;|0Iuv|99!iB4vW(OJt)VFbQl9(Wc7*X=e@yu^m(x*k}qFZBWn#1C7F6wKkvyC zKYcaX%#k};I@LdatKuW?w4R%V_3{z9+pC;Wwip}r!(NG9@jW1r+BbS443;S+A7!W zhub@(E?uIv+6(@5zGMf*sugoI=Ob8VXFDDPf=&216kJ5baZ8)I=EQ=}lzkq^#-8VH z<)`pQ&Lv>{xXaYxR+lF0QrIES{o!BVFCP+HPOUtJt5e^(W8v7zV- zyK>(SI5Td_QQvVN{oZP$?)@qmF$+TLht`#M-8|v%Qt0{98Z*fRu{{1aDZib#F)dkAUVpJZEm8Ly`VN&?buX*kz398 z%*B{&N^+nhvUOy{MtG8MqzHE3Ncat&s!+?IS{wmtGul_K{ z)A;m(_EC^uXQElDI6+asj{0DdU`ZWlXQkcqPWa>%|CSnr<-&}fnQ+#GKH{%g zy6UimyCjnF1O;30cJX3ekJMtU8GR6_j-$&mSo1EuR&uHd$2Zo;Ai;6AHR|=v_ottX zz0KOW^7WU~KjVTnv~%v3jq*h#^B!vdBQL$J54E|=mCa8(s0#WD_{gl@Y|@Cx1snQ zcek&M$n9=UOX>%n^8BoW3#1ubvr|bbqifRs>UZN*?X{X=*Acv}cI(S_E$G{-q8P94 z^P%naw16!ccIs#!?ygzml;8>+eOxun*$unc6!nal;+mkfWXwkb;P_?f?qHD~dESrbah17QcEAgo#AJ&f1ulubTVfH4Q={L{D?h`urLytrkKabUT6D2$ZPy)|H0b=G^Yeetotez^4?JYYV4>B8uSi%4J%_ zM&Z2Da#(1+lgQ`b*Pz!(q=~KJ<gt(g9-0VJov-~rHZf)5w`!Ix7sVcRGZ9|uMyc7XwK?@v1()7-aJw^p z=@2twOJ04I-xsfuVnD+`AbX|OKukpAGvQ0?Xh0vH%oHVjKFo`#Kg->kC46}LzPZ(C z@_@TLX{h$LNn4KPjy+pUw&bU=*zSsl%T`G4=&VAUj$f zCUnVPL6>*ScL!n@D?2r1nr5~d>=UoSwL_X?8yEjei@YCWUYOOQ@<)09mdPiqkyT$h zoQpYxyl_o$l%^?rDH&(lhgKH1F+VV_P8mBTzabcKUT7X!w*T zFLgVt|9Sts1y7vn8X>50#B!(b(?Sk(vEHDG00QWrg1U37!B{H+A|F6sUdE9BWY2`# zLItvd#eQkeg>OqPI3VuZ37t4&&jWE5b?8YhKD1~*!g_NHW9WdYi+pH)(U>kPo!@@zwwe>_bwE> zH3pSUVn}Nna_^&z`^rjiT8!VG<%5+2X-4~dGkh@%Ku6V$kF1Nln-m$}9O5OI8frB~ zePG33H|Q1v$E-yGhHKV6U!#o&q1*;Ur>@J-)?DX_zCJ#saW@ct6`lu}M6&AmYVPD; zK7Jmjpa|vhp}UWuT~Ybih8h9}KoN%yKE#nfB`R`&Rlh}4PW*)EpAB5h+6%chHSc)n(LO7rCUUUNMRlgVg z*kJ@zrX_9fa2EsWKTAXza%vp}pzP6#oDXX)yy6?2i-7&*x`b+ouHc1hcCn~$<8*mb zqw+I)v04!D%(@iC+@l}+FJ+MaPU|(VKeN?oMBn#|Kvi1n8z~n9s6IifMAE`gCTUVc zCS7wa;Floq@xZm~O9B~>QX|`GJ;nQ&3wnK+MkG&}FLA#Tq^f-_o_0o9GJiVX|Nkt2 zH<}tDvf`ZMdbe0i1> zH-c&tLekT*e9dPHL=O@2k~jaAT#vEw*-&gwVkgSrwV)VZVu{!F-X2lva6<%Ik$PWRTAx;*D~j z%h(D9y}p!bE*(ivoCo{yv$D+Ud>cRptz@q0R2{v6w4znBfp})qk2Pm~iGbq2yW?@( z;!j%)yKO`Ln18g>5XU zuH{Vf*K(6hZP%#h+FGfW2)>E`zTM!4hhuj)Z2yejB%}Pye7%E-FRs^@;bcs1IESv7 z?5LX8{c-tw!WXpuj?5EF*@sc@DPo4+E$@y`=ZIyPU$lIzKFm1)7+;nJ9~AdUKGN*v z&qZV^YQNB6IXBz=*98NN*6p$KNRxcvtVrv<2Fq){46ktkL)_&9$*b&^AtW(GiGFNX zK%a-hQE5?Rv~kJ#0?Ps0B}gtCpc&=IE6tc+t; z*Wf~;d1#SUzqKsO6Mi8qN2 z5%2X$(OnrJt6`s#|iL zX+&lKf`HM^go)iDqMG~GaAjdHe1~b1QK9*()Xrv`ch7~v-43P%S2(a14YfG58^3?+ z7gbjzfR{{ehQ92y87Hm8<;|F+1*!qqunM`NHV5WHNImMg^p2)tS%-Yj20lTGtRa`q*0een{nsnP_^Gk{P3_5c?en!!^&*(1orRyl zSs*W}`*N9<%C%ve*YcVV|GYM9vBIhf_%X2OczP@ZPlG#-SXGje3?^K2Z}DD@;V3ei z{b-N5`rObRvH5e0)Ii#iTW`Ccv{0{*hm$Tb@7=5kDwWFmd+U^4iO~l)Q?sI`2|)PM zLT5s&jTvsR3Sw|JORvr@&x3RAJo{048!T3GvlLHyz_B1>R%P`UD5l?+D>PBHKuT#3 zf{UL1D{G*m=fp=g_*(|B^@q4t!hV&Dtqs;!KT#{0ah8>r{iQyDAvWg5#Iggg55kw= zVyeS!ou!Ry?`e}VS6@zBr0`=_1mG+=AK zJM;2xMk31ad0B&gp_7t=dODrxYaArktK&ue&LGmr-kLaai6-vpA)JIJ^=;Fa`QM*du?G#a7aW)|M$zDof@k%DrDCM!#rF zo6bOkAB!ckITsyKkoABC6>l|EDs}o1R5{w~S=JoE7}xTD5iMTc=W&^x*{&Na$obt1 z%I_K`p(i3*7X9z4s{2t*@#wKQ&P%*4k9Cz>A<0^ zZ|>erG2>8MrT+1KS&7vQ;+qrjU(u5~z?$knj;a+R%QWboj=+WrCiS#YLo%4I{yF?Q z@|O-phNPd6ZL{kw&8D##>MkiSG}iZNO|Q8hm8$JY&*bY%%#+|k(h4W#rIcu+y8)?K zEnT8B*ZsSGp&!E%_7)9rR5()T9cB{fi{P(qc!F%W<0XY7hRy5<&Q`_bA&cc?Og4T) zcD)GKkc3YJR9|PrkjWjxH^1ZVjiD|O=;qRjSS~i_s0LFj-#c-qm;+F%kt=VnflM~~ z_(udg(jM`s)w&pN|FS2zP^M4Q%#%02S=fy@WAuzP8!TVa8oXXCsl3^P#})!QBzPcl z!P#x=AG?Nc0C4oWNv6v9Gb(_mtWWnpt7`s3d}TAb4XemU2?AG?i_VsO=Z^UKP{w5X zHP-fLq8j*X4HD5UrmCEvA3uZddY~z@#GTS{b$_gnQ(??=3nb1K>b)R+LzOKirKw%Qi}My>=_lN1xrh<9_p+P${Okv-Y;BpAj zSh4v)pVUS+e^Yv4>;+F|-vcAn&EuwHAZst=Q$u8-54Pf|46l)`K49~zp3|QRv=+m6 zJiZVfD@$R6+#^^wWq;TA+pV2m*0J=7#93U2zXkM%YZnlf<)APz6J)He7nfu~nYPPs zr+BmS0=4eCEdrpQg*>XdGI^HZcx<3_?e&3rc0VVf3#79{`!YPYY$FvkC%b^zG3@St z?UEC~ZmGHGvZ;7?Jq+*jq2*T?inhe(XRVHfyJRITIc$d)L=M~A$dooYLTES8xQ7ZgMjklE(=Z{uMp2$%zK~C$RfPm&smf%y?55rn9y@Fy97LGJ zR5Y1-dzhW{qi!zm$6W@#~xL`u6Lk!`;% zldHbX?h5|+@|tk9iPS9REi#GQi}mfSjyZ^NP!2-n?#SCCAC%{Q`>qWF*3R`-`K1Kk zF`9X4&{rwEkK>PD)UGmU(tR^N z@Y<{Oo&u5+@l+Yg+%(x3^>?$|YmMSG#7e$Y6i~LXTnV)e^xpLVR zWgweQJw5B*L7g6@IBJwSsMX^bSp+F;a@PDX^5nm3;mzR~)VxZjoIYne0~RGN3{P|( z(WjLC!LGluF=vewe1*NHEt{=&Y;-kX$Y9SIYB|_eDXUnZa`#++&6&eWB4a4$xzo~J zZkHm1Q!i0xh?EL_@qi;GH5yFK8_3YkJw<3zwUD zeq7#W^}dqZV9;tl0Pf6 zUMyhzuk2*@jdJW%lkb{g3+!1~)07w0N}A5Wav3aCpXS8Qj2$w{<=g#6_M@HkNea_n9`4;`0cBSn^G%e2s7u+5C=qAZDvnt*t#C)U zHq|46Wnp;q$=k3xwF~)gWU_2jqls9F3q_I13Erzu#k8F4`?^ za)#S16!Ly#k`R#USQ|f>praSF01ZSK*oQFI zBsZj?dO@{)(cHCWGL2~#-~#`@QQZ?5Oh2|uKV+byyx09NY`K^Efg-epOtGw160uvU$GIC|l7{`crsd@)E#{p1 z$26C!hpH#pwF7==SkEEpO8_2#;j8H(sKEBaf%U&BS^egkjHCqWfXpxKne}>MW{zpb zz{)&w47qM%QhrT#XuG2Gglzh(q9c2jBXiHX9>*5u1Ru1u-d*rRapILtSJxL2qWPiq zZcATmqgN>7op)tO-8N1ARr6N1ziFVF=5+AHuBz9>f5MJkZSb5DV-?0(8eiLMuj`2| z^FU@N2k=^sZOK>JuX^zh8wyZ~*JTW(6kkT{+5lZX^~xbY^yL#k6GDuRqE!1hUGdhdykU% zTo-8DR!Ovx)Rq054$ydfU-UEjm$ZfZx8?v7Q{h=mVW|iptB}d;Wv=cxtXlZmBEE$l zvv;9B^T=Tg12&2qxqe0mTV!A9rBE0cn%{EDfl&O)ahk8l&$8qH@gnkUF3ArSAH9`J zKg+RC<3EDW_As`vvySVHMVrBbxfK<8EgHGN2!CMs7|uDK2skQxnJSC_trA=Cx-orZ zH6-S5(=nScUQcS1!z_-b5vi-5RsG~ z5RmRhLb@BIr9`@GXc&<0mWH9bMSMQv@78nIUF+WOe=HV<^*OcA-e>RgdQ;S<4U!ef zi$L8c!s9?pFIPRc(k(+|D)YG#U|A0rC*mFO;!pAL8fsdE1eVLfsOF1IU#3eM=RtN{-)UeL2Nl@y7FDk z1?Rt_88yfPjTsfc*64NXR#VzGB?+_S(IyZ(6U9xrJm5SApDqzRQd6kZa#$>Q!LoxX zq&Ay>2#1d+dp}TA`3>A83}Q(^Q{u!Idctci5urW;ulhyJvPNOZjR@QqMaB1Bv_40K zJ0Y%;@gFlG3zf1?V|^~3Ht3>tc_bR>?(dtkFg`ZZz$xD&IyA}h1%8Fr@p#}!4We9 z&KZDUd>Covksx)Vre_jjGST9DRfZ)N~;fcGQ&)0Yv?vUc4^ScOVG}!)_AHRGmCG(Jd6n2vwQRL~lNK*j@xVL_ zFQ^9faf&Yv5=?&4MsbRK8LJfGV6DTrX-Q3z%MjzVMYcvXMz#v=2wOoveN(DV#gK!| z-Aq5GMFImJ0F%Jx1|$U0HSF{Kzr*Yr7oU%+K@?#_ z)B(J^=EV2mNY@E#4_BH~bo1lM1OF~hQ({=yn4AN+uD)NH@5Oh`ljXhdABUmKp69a% z_TY-zE~zJRQ)T3KwA&RApG^PD$E5zt$FTT?wV?b7mkg=IWi(tq|5#3ozl>Zng1*e&L+XA;NJi*XBs1C)$9%A`Q_gDEPa+){Le|j^+sb~ov^hl5 z#pjz8_9|(h_QH0kot4)|kuO+RL*Z}DwYiducO)fBTJH-<9t^Oi@ zY!Ce{89g2(@eE|rkk{k1^Rg^n1@>}_Mm2rvM%4Og%EybP`kjBG=$u#QOetI66szR| zG`&K!VJNG$*kR)j-eMnbYQ-2>kMKG|wt3czllX75JAGB6Xq?5)IL?KDr$r$o+Gi-D zNhZQm{mGd&Ih5ryJ961`O|#5r7il+6kY{_hOV9QGaKbWrvTsEqbY6P#p5vBn?Rc4E zyIxrRSktG7LHE$1)cF^>&R{(xlIN=KZEEN0yKx^`H?4QuBig;@@Dp)~J!TA}hajZn zX6dl`-^KJ4F1H=DSN=mfb;pr3v1yQKm6a{MpFfvUEj(OEg(j>`OT8D;?wu!uWb!82 zhg3A5MHc3=(o~+2HaZE(e{PUB%RZWPGax%D>UaaWaJC$I?U7Bt_VG)2PVOh-Au;g* zl63*<~!A=<>`TpRum{swNPj%K=ulv>&m4d ze?6TnR3kCt#mO=5NzNboj&@@_#T`kVK1VbWT{U9X3ZcmK?Ex&M)pIDL-P4)TPVweNwFJA? zuW^HYz=a+i)H;$twLipK(nNVeSLlFMic;|&6l7Uz6Ijh*$5VN=WRSUSGlVzJ*lr*> zWf0(PE$io{Ye)%y6lAh1$$T&@6;Ehqs(9tE^^0N6Wrfg%FD1B9^Cdciv7yB`p=-H^ zt=%cNg)*{oeI&B%oaA54}{E8~Wg@WOAazMo@B$uXjuk9%3>gzn@Iql(>6QrQe z0ZJz|BW;zncy_PA{e@yb5-P*_QtrR+mLH8gW5oUW-jg^r+%b{GInKgwx*=xI$DK3* zR=dRKj3gd>HA#4uWfSrBia1(5@+Az{Zi&G9Q^zbIYC>G91~9e7yuq{MLioh+>=0PfTLwi`2s$7;9R)a<|3)DC$HS_;y#G zM}zI0!sKso)9nS-N@Meo;}j-AmS<*od~u$0mA~UB~nBQS3!EyOOA(;4d?~iIOI4q!1PGr%oi$uzautf^Hue$qXH zPN!y6D)uw4ve^Q@u?V>!I!>#JTc;QQwvIdY8=g6lWOGL5;W1g=Dch;=7o5 zZH6pN%;|++T1W8b?%(Hlvi9j5U&+?MiZ9$jd=@?hEM-d)J2WN1CM)w}xE~#}tQ50F z#WQpgB)#Jro#hP0?Q*WInfBhEN&W&*S7<4iXTs(KI7?o?)IfGaFU-^LB~LROaYUY_ zdKmyu%#co$QI)4vA3nv?+zsSP6NDUV+ru5Pr^K;q`YGLo(K?5AS?{+y& z_s9Q>@*Ros=2ta@MCO{G#~uaHF!2poNNqJAX-a8wiZbuX(0Rv4eVR=jcpr)o#jwzW z*^j-9JgXX%PG7@Cqd?dwYDxIhti&~w=h7M1R&Q?`NGM*CBZ~0|*%w3*&5pgimK6J3 zHssPsO(1POrX4WYK&{i;e7cRnDUafcf`e@kf8EMWq946r2;kwI5DB8jU0wBz)OJyJ zcSy-IcRxUOO#TS zVv5)q#hc#b!*}^pu=eF#Hbe1uYZ(6LyWWB{R4A-pt$eS6OS@pI+_iDvY@llxhQav^ zQQ_5Wn1e0lqAKLM9LkX2eDBy?XIjg~Z&yA?Q8PJ9?@nRx@6zMs{M`a**0Ip=|aRQCxJ=d)K*-4xSV7Dw+Dx-16yg`S}QD+?3odTkT3VjeOQ zoNE-EO+nLXUM5H~2QU#8t6idkvNK7~v_B@sq`?#=FA}Ql!j4(Q%!j3%P`nvTEGgvnKpzI>DBTh&webnY69BcHuKD&VG_lrnMND3df7=W?s zdX%L z*m$ya^EQ@qKJy#W%pnrqjW|yhInD7op@_3z2gUs3w35rox%*oQ16At-&_$uHL!;YP z;WX%XTUct-A6unRo3dP8n~H`WIM;4ookTxkIR1Y?aR1wipa7_tV+iNDvC6j2 z&H&b{)Z=;F=kh-&4!bY_>*us-NYzCrigbyC2#M36m4TC*gzvYLkYS;zdw`OZrFbqj z4?g6MoFlLo;NucU4G0CmK^|}{5t)rsyFqMMkYd;GqoAr+JY6J&Ca`Q*oaN7d|7>km zGmPKlnB7QxQZ(U3;pLRtz*G;1sW_){wOtkZfvdle$;feLK}|-GW<+~*y#T&bKTTVx zXj}S&$i*NNoP>3g?`=7ona;s=H$h228@%4f%kq9qAbDklYQ;a=ffNv zIh9P+D}>S~hJM$xX+Dx<%4n4x4+oC@q&i=Ku=oXc?MGTckN}^zJ`|pNhhHyK2?%o%BzjW;XBZn5SGtw+T!xc=Szk~nl_WQqobzo62KyFJ@GxSmVpZ)%S zLecJh0UC;R@6!DPNB-{}`Dgn6kH4&Th14H1SRt`{51IwX0mHa1|SNnlvK7C{s*n#lkNHnXqats8TUVN zxc^U+p(_e!=I+llq|N+?^REUpY$3LNO85^aLj@fU6wYqFNfiB0h9-b%0uyNH5i}~L zZ-fEhL_cG~*-5=X8lNOq;%1>5F1A)x?%5hE4S#kc4Ai|b5&_k#mpy>S(f;>;)4=P7 z;>(#O+Lt4ZjZ!>|_xb5EHw>-@wY&a5$hg}d1qTV7qM^bbogY7b>;W!X$SVOcr85B9 z^{l)GO1Ys`<*lXbHme2WCeE2klwAit!p8Hu%$R2Q&z_>x5=>X65S7#1s73CFm0INf zv5A_=joiOENvA}D<@ne)pR^wKjES96<4Igiloo9f{(Au*&j@UL65P(*TMPq0p?m|5 zL>+-4)1C!5KJ1r_{}%T_Bj-Uf{=GEcqoGJciv4 ziQM~P^&(Y<{|P|V(u*Hx#9?uiSHHRgx3W;sa1*!vw~JnVts?^tdnEz5Inzw*Uv^gu&Tl=WJ0JyLDZMp*!Ul&`0xE zF2Fe!0_T3hiNe^q_al~@eZ~8Az}IranaedaSwP(%98Bwgb#h7_$Q&3D7lK{zRS)3| zj%BuOT>QA9r0zY{GkAs40s&&LUMAY}@NSD*29g!oK0ZW}U{s4NA2=Owt8Kphgp~GS zA}nEzzGwm+S0k32$K~2E3m>4HfU3UX>6##krwnsDPBKgzHWcQZaw}7Ab$^>Ioyi)G-;}%_kQ#zBT`-;=R z8Gzj?Z$==*x6E<@(A{ft$bz9(I8$m-{|r`6>s2DK#{SJmJ>})2D3YcEU~-QU-FuyV z%BSM>O@{@dxj=@_W?~Zq;=6q3)Q4P6EBuZhM?RHRq@rK0{WItzA5c<*OuZ=A@$=Vd z8Dp)JE7;VMU%>%iy>L~9ln~EkVG$%3_=Lc)_BW;|dOT|gymlNhyx+Vs@%o28eg4=A zA^-)wZ0g0Iq$mAXeu;SqYO>cyoI#!7o8R;liyu9lv!dbx&inKQF@7E^Y@LE5V@u z`hJ5g2+7ok)#I*#&Z3E-R5gmQ^-;TtZ)<0jZag71H*aL_X(+T%(=G;OoAHh-h zkfofzk1%w!tAFg!s;H=nUELk|2OyngW3n>`x7M_O?*;~J9!A~f4as@!rO|0z-#)6W z9XN5$wO(TbDdGrSrU=VB_YL(mp59DvHAh!1|WKcJ`+3LH~RD}PQr z;)0(5tmBV8ed8*)qX}5}uorW>O#gV}7NVz+OEXbhHdjF9B5XkNriSUM;b-E9w`*~6iNOMO6ws>sUHuw-bWlwi>W&64a5g*s!2lm5Z?Pmb!lIiVS!@QB$ zZbZdyS3!lT*H=J?4c+7qK(D61KsX>k67%HaFxvk-{mnIm>k+eqBZzJ~6hv;ND1!gC znY;N%Hk=!WIKEHRJ=}fcf7@ofl2}1fxi11qc|vcjw_X|-TDB!#e!jzXjsGAiPO$na z^W$&!=Mh(2F*R=cyO4c2yt?^nN(KCz8P8L|F70w(uSOgbx4TU#P6_{hGmB-+vIzH` z5R_mnuW0@Wzc>q{-+pWeDWGYA60QMNgsMK%tM#{o6R+&sTV3#!O>n4)2dQjW@Tlo(-ozhYx%9y!xU-UNYc*J z)U!VXpv9BNTjU!;sr910h8~hW)J^lfE#QAlxL5li3D9nrKQZEiaYJ*vKL{r!yufQm zcv9L4EkrCFzAbPzQi1Li=flZ;sD~ zd?TFhE+a%^`FrgVt7vA$xY5gvlrzx-6z7KpR-1CeW%von`g`$a;Sf#+B(TED!`5v# z_n&06vo4d0Q6`^B2|8d|FwE;Di5IDsK?K|)V}qnALCY*Bg_U-zV@@`jY9Xd1_$AqS zoYNM?008rxFF4>GR9Z(JtoS^L-BRTd%~<#0s|~vgY@2OqLE$54pt&sD9N02gKs*mp z{n>Nev_=~@v(Egm3ixjGX_ce;!O;blmqImbrs%5kIUNe=R99Q@v-BL(#=KSNVl!D& zEkg871ljt}L8igb1)ie>gn}ui>mr*&x#j8ab=bTxy8Tob0odkhBT2NJDiqyzCN`$ z3Dy*BEi(BIX*7lTH~CSV@_KfA&+LNN#L%dbvFXsDySmWVv3Ws+II==&f~aIv)DBpj zSnyNiP1X3(DX>_{P;sa$*t&2C$9S7z2n>3YRT4(#$<+1lH8FS!YGvi|5{(bPCGRD%OP=s!46y zEVxjWhc{vbg(Q+^f%tO0D7T!V!by(OOt#wr>JuG+4?K=V3*rF5fCI&jp5r>#_u}Vd zUZ4h&BARjp5?0G*iu!V@WN#1xCLSMN{-dsR0y=@D2M`$?%(4nwsUW{Eu2*xVHwkIF zlYW}CM`Cf5J8HjOO(}T4b{X|{;Qo2bI6_l46I%t}7^u(r>>{lb@^0HRZt~eY`Dm0W zw&*((Ur-6r1dkP>tPb(Sy_WJYr0aEY*VrekycwyfW8fIqXn{ruvrDf<^L6uxe@B8=6M=Mxfu;rxTgUFt^@~j!qfE3?A&2nu zY^Yx0=NKYENzvyyjLsvKGq{UXb9=!~+w>D@o}7`0mg!qojR?Osc%LnlprF+A>hO8% zRzo7ZN@T=^aOXjxY7*Bo&8bDF%C}qVzW~0sqic`eJ$(hf{Qi0{z8ak(vS+57PhMUR zGIc6wQ~46nl2Ac4OM>jEHF)}*%fU;<{YV!Z9+p_ePe0CtaSCW=6-;7FK4 zwqY2O*iUamIm~wK!Tienv^lc|_!XOOX)QBFr|<1Adk6Hu_JAwA!2KKFKOjHcz07pD z1NOB+hQ{TF#)VKnOeb~MOlh^oa|Q6#xAbFc*icFQknp=-NN0o8dC#^3yrPmCw$G-- zlY@KlC>iK+S_IGwWp|Nth4c5SkbE&Rs!;~()}N;|Y31xlpmoBkno>MT#K}E9UTWU=B{57^>PV2$qO}7O2Z-s*&2bx*R z9QC%$uBKX(wF*-`b{2h_*_$y$&tUrrdCq82e_`$ToqdkLsnVygNtz7GfH7W_;yf2Z zYTXh>G$$m%1axKbNPddbdOCNU_?LN>DoKM_pN@)bcliV5MY_5bY4*yl1Yo-MQKtre z1>#h05ZlFQ+y_pfNNQf%v$$mRPx{oE<+CE$X@Y}Q6YaQzp*%!q?`osE%5;%Qmg*B; z7!7C-*L0SSeOxP=@AWL2;=adNQ5@6AtE#sk$wcyUwd>V*zu8?lEdbLq-VngLj3O(| zt?8ZAOC;YA6MlO4$NGKiL`QMw-rQMK2I?Z=K*EI?wemzK>QZ;B%3Bh5k~#LSDa2;z zN3BFLN3)%*Okp2Pp|WXH$0NqHE=z?P`Jq&_a1rFSExzW9Dn=+{W!z} zPPO+%_`Kk(w;WHAVEWEW-R=ESn1oF5#nJ?mU7Zbw3nHz~f%+#F5Q{^jC#8GE4X&dj z;Faniq87pQjmW*;&4<2Mn616Hc$~)KFc2rQysD}Rw<9Eo_>*A+q#FpUe=|MaD6GEkO? zeuy%d9_<}t!@|!l7OjXzh1W%uS>TLc%ov57kSvQ(86r!eNolzMZzje{7ZM}?IuJwp zo8aPo3MHS@UQKVTI~=ONA5~sICh3k_x3_`7B4HQybIU-60ExhpaLKu?pq^{LiqdK^ z;+1h1kK1{M9%F%??|Te$LPlpC>G)oXZXfqrlNId}iSb1xE5!WRbJ@EBZX7PTR)N&@ zEJI{DKhyWj-(38KQ#04|xNrlo-Bu?YvSLAU`RIGdEW(kLcqF?B_4r17<@PN*se}#? z#l2_Vspm3IbrTk`y86AsU-+V}cHxd%ETLd*QlJPH@0uV&P)$+A%s2$)t@x~0AcJZO z=!;DeZnQOPgs{;<;GlTlV5}o@Mc#@aqPxqA-|erOQ4lM_Zo$dArID_DP`K9t(%WbX z65q%lAC@c zl2%?^Ghri?hnz`4k2`*!MBVj-qw@?jhxB%x!~(aSl7t|Iw**%|eS6~7>B+>?Y8`KS z)6!iK@POMc+wAu99pb-(Vcoe8eD=#cajXt%!R7IWy5RNs3EV)6?clJf=W}Q~MTWcY z(mJLkGIQx^qN&z%++|B9P!5rNl`L59#OKQuA;?YTHVB6bp9YT^Pg!X(`%LV5q%nWJ zVj2uQ^EFqS!=|=Gv7FRK_-Yn2uouLHwIVx@HG$>g3nHk9O-OZ4pm{;xwJW>G!Y@%o z*w16_^weWx&0RPB>eNS%ydJH{-A^I&=gi0) zHKnN(d8HJbBlJBm^AMgO;uB7J0a84E(=Bzs5mJ6FZJ#~QzsKWD=As|y&Xk5bjXJ18 z5I2k3B_N3Lr~5+!Vut3K(;YW>><&C*F#`H++69_2TIz2_rwjZH9z^XT6hw{>^_r4< zGF5!}IQ(k5roqd3elW6?SQ%!SZI4_PHdbyw9iotjI48b`O@aC=>R}_p*8;7Vy_Mh! zw}N%eUci4l5Puq$wUOCC3VVhynm4@|APmI`qaN1`i$TgalWw#eRg}v2-xZukh&9{BMevV`R*^VE*hTbvn~^G67`xMW7fb4XH~$e* zFKUIj=$t-^C_zCZ-XNm8i164OHMyf(maZ7h(n@EHEvv0if(&w)WpFi6c28)uGhdll z9IWDZQL@zZP4++ZEE*cw1}gt>kv_FSml|S3ucBxhV@B-eg#0T;#5%1K8uM?N&=K4o zh+V>4Y_3Z*_87I_-gyAmUh?<3qK?!*-Y7XAOpI?j=PsFgh6WQt80QJfOJw+z(F+5~ zyFOPlUBGXmuG56TZgLkI32xMbAoYA>f}?LYl2dMaHqWPO-elfK z(zWu5N(q`E{?fBUoS;E`w;$`Zqbc+@#Cdsw$!)p8EnOl;DF1WeO}*3E$EYyV`912r z+65ZD#IdotNN4>94OBK{xvnc`8qF5OFb)CPxx~ zrcoWfM*U0k4=%=$t0KbgdT$miP?OrV z2vOy*ma44^cP0F?VdbBV8V;(`E#Ra5MK-^r|wk#{3t@E4xK9!DOpw1dk`}7pyDO}{l`@J+e|LyXmc$} zCj|59WLo97aw$3_HG$@5FZmd?t*v+u%pON}!Y_QXN8GAk(;7={ft*2YR=xuQ37^>&wu|TU_f^{k5zL#}$P7eyKgr$eHl{{EpSPi{`keMW9Uw2jW{=vS5@ zuX3@Mmi-%x$gp~j9Th__cQV4=d|`-LTROQ&4%67TyBt2^t-7C!hl_5CS?Us)oZf-SzTD^%}DKAwBtk!(CWh-*m00Fep)ArTxobrEasb0|y z7;^=CSpV5fu2{;RM(s1v+(()yo_*Q3_$iSQt{ns-zmFgatkuXLUg%B3s64c3MTN8DY`rc zqjS_#NI~W2jjrgiA;D4s$ga|k$BP)Q-C>fT~SZZQlBzSg?7*-5O=e)cKq^hZ!CxgAuc?42K$ zWOAJd{o#*MnU3{>#Z8{ANa`P3?A=~|r!5Hx@vL?6XkO}p5N%o;Gji)`g#+2sVt;6P zVV!lGawoG$&imu%bRH|eM@gq?Ya?ZNXH6os31vH{l$JlVe~aY30Ro>I1dm|}*GHsywgj)-*MUyomGHeQe%A2A9< z+pMrDy7NIhln9(7J3R5#!CWRQHG1r>hBoo}$>ZC5uMRbS)7WgV=Cz8rN02=8WS&#a zsAm``>z|}uV+dn)%^z^J8(o}UZ$GnJGQaPflfqjqw|MaT*n>3vZ7di z3`y%yQaSbvY84xzYnf2WOr!Bo!FUA(%dYT&^S1X&?xDgxK`olc+xc!D>)Mw8?9D<*Fa*%g)tk= z$@NE$a1>Du|HbRc)MOS_SE}XMKrKe+N7dh-LcA79i{l2KhQ0H*Q1DUHPzaR1I5$>S zdTN3f{;#_XU#ZM`^ZZ8a~^o~Q2c2y#=$Ise`0<|{>~XSw=y zzYa?w!RMmnywYaWA|hU49+8T7M9!voXL%RWW_vZeGDK89MBDnwo#q7FL+mWSL9}?`= zDX@mtbjJ_pz|=$A10uE-s$yuRHHL@lI`;(kDmF;XP=eC>?1OQ;bGzlq-PU8zK-hC3 zbX+tj1sEXa7c_t0vO@te4HNbiA>yU(PQo_GVv@o0d5L4i*D3xkkazCh(5K+w zcL-6HHEu#7tuM4`{-PuoBjD`_+}7ZhJCW^@bNv|U`D!+gvMf}oHTFDvHuvk4yuOjQ zgHzHH*gVZCL?HXtI`0RXQC+I;TTzn{l`;RRVeSQ8^esvDK^Akc(e6i4o;{sk4~mBF zMyclRLmC-0V!)%(3z8kT1d73`Lnj)k>SIpB59l6h1IgniijSL*O@YdW^Is#}Ima^u zSQ;}$z%+U5cz#(hl-$dx5z9cqy(uYC2&*6Eeyin{^!JkosV(CRQ}-H5CC`f}KSzZLB=U#I8H7r&ytYH_SpC z>E)IG>V<`FKL|ZR!L|U(nGA~gG@LH$J% zXm?w_$brS5KIylLpO?7Bb`9t3xOo1|?mc9gP8Vy1NkaN4dyhPmqYaV^Ca+2_qj+ip zh@Yk&2PxU>2nZ5`c2(wIxrGP8h;$*1I|YWn?Jw7WO0dP^12xopYUdjX{Mo_i=S0G*taet{;#t4o_%2ZLmJA?{DhnfN|{EVycZ~nLy;uf{Bd-tJCf~ z6#KEJhrZ=WY;4G)g-^+Nc7{bZ{Z83|nKV^y^p>hnAznPPnb&H|<=~9_GU2i^*y)hnVQB*a*Ac@AETymb&wenzz+nWw8topLTMK!D8jdb7%VcbqzRfL;Pd~dqUeh zli@=(>p?t&y5Rb`%-?om{y#FO&^bDyIH8Qox*jjgrr;-p%^Z|ZrO4)Dulet)|_~wg#RtB6*{*_@>)k9 z3`=i_$#ca%!*sQVs*gq0SM5@9v8xiimhDtVXy3jnDR$LhpO@6hNd7fRcK3k075Y>b zn54~;hkM}JRpZb-73dbeENEcEiv|YIrwSULtX4{u;>j)_%t;MtW=N2O91bA}96o!TTMI#>dst5)WGJBBABp{g;(CqjF-Y)=V-v>kE|< z3k@Jyp-bK>j7^4^23huBiLqA&(h;<7b{5>Ti_`JFuX|f_dxSk*^gkx~EL94=T2?j= z&}@CK`oYVYpJtd@BEd_V?j23nrt-BMNATjU+dMNx{is2CnPswva_$JKt2OFw!o}?j z-mG@2*(zVt*9j%6wz9@wpJ|X|150B9YjSHiqjbcVnQ!|Y7q1D%N7sG1#@M+7^8|BL zpgxP|6yqUVUoTCBS(LsMc#dI?J4;heA>Bktpr}a^{S*tawA}pcRMMO zoHrgjCECCp@b&GZ@MZLT597HfK5KuBeG{^q$J^}|?Mjdk6aymJwc*fD(=N=J>n7BK^k@_GNbcfmie#spSi&&XTr%R8j5sehiZJu4m_lKDC7B@1EtIi_WRK7pk|{CHKLqFHrCr5)v%=_aS{SOn_F zk#xe}OhIl0veM$yW5slUG%-u=P^6x->&Jokx*TD^2{1dut|eygAS>|Dwaj)?Rw{#; znMYa*UFOYvR<%869a8GoeBK%}v*wQDYVVwy3yQAiSTr7U*cAUbR{gO<^_g_sdXkG( zKH^xpiYc|{tV{aygJ=sUITQ{5O$uA(0c)wRD*_#lKVzFc6^JeqrS^y=u?itZUP;0= zn-pR#-ogOAR~hl%z&$?uU5h#LIADzW3CNz&m$3W5!FI3`_O)tD#ZQcYRhqZsntnR) zHL2L*oF{VB=Ci@+(wp#Jg&2AWm+;S{U+mpaty4ihNZW6Y2z!!R8nUr|-Z*lPn4uL; zYN{twj{hJI&bUk$Hs(ertFpVdn(tVCWaF~QyoNZB5hUj^`K{byI}lk21>ldRqQ#F2 zt4I3_rFaNOX)(5z)sn_#9V_08>;37+7hVyd@4ITTWRdGIY^){5WW?mYEVK)2E&wM19xlAqzx`z-?2 zH1(fgw3GL@XwUE5d^@>|^O%_068eOqZeoYxx%!104QoWaOQHY%YqXdsu`}aN)D~Bc zQ#5CvkidFrms0^@w2bTe%*VGJ5h)Z-dQzQK3Rvbz`##=KAo1wAwoW z`?0NRfxV>N^mJ}CkXJgQCNVh0UZ)v4Wx(!|w#{bfv2XAp!_;6)jp`XaeJsr(wrE8V zig^Fcq~ad&Dyrj}TSdb9CVe-5!fLhp*w+^-Wyil~U9!4gwob8ji6`Wx>c%a7HxKi! zzh^Y=%4Ke58v0TW9^pf{rf6MNw`w~~ zweyv)CseI%s&2J`y2xe5;+Zqv1px$2OcyUt%3QhZ#X6hq(hN zGlB}hTrA3R!pkcy$(LR2%->$b0a=P{)yjmQ6X+AU>1&&BV@0#5+epVXERV{M&?{9e zIWH??IA7rT$Ru@mQ^Mo0PhgXGfFm+t4qJW=(quMZbo^GMK=C~El4zlRt|nT*6Uei( zSqw|2sb8afDWv``^VNgZg}I>K?dGS5)8t(;N1P?bI;c9pRIMU?FXFQ*PCXfqki)MA z(qxbrlz@dX$cSdb{Yxk6XpJ}?OdxMi5yRGhPd;b^cj;)u7jHz>`HdU!in zn@@a$AfS;mZ^VREcAthcR3!BnWR|xAdyuHN z@hB?_O)zsV)s$w~J*LVg$uEtPbK|<48HK;lkE!_!y;_hQh6yEVmu0r8;WD1lI+fc+ z+|g!)45ZKk=lzqlXk+h^9d6ZNSkhF5H7s%OH7=EQm;$5i*3!ij((IiwD| zeC1V?TG|On@UD0tR+Pm3FfJl}SR$Evk?MOuq7PJE79hu4CjWfw5m9y&x=AH@o=L`~ zx^5sR$%<&5usD&6k(Es2#>Y0EIU!$a@H?w^T^1$gXKd@<+b>dGEb+vSoC#RD-YmawEy8xH zbZB21yW+wj5bd&3ip@eSqjohaI;xeHF5>c$-b%iEY_`#6)Lb~VrhtB$ah{$W;bJzI z^>f_~(MW$W`7Xf)jysJbhoX9)D(`mxjd?zogpl5cQcD>(P7dyT!o_yFyac2Fy$pt;k1+(1gPjw-gyVHsn7NmI%&pUK)J2RZTu~-MuCPFVjFrdp=uJ zK7_1Mf`O%K0^mgP9}(p=h+Aa8=o|JmyvX`6P>VH^EdRb-;nc-Ah*VpbfgN?<2M6V- zb(dT^K&~sWyTl~h@1mvg)4c1~SRZ#T({<$Sx@V?ve$i8>lYjO2YM+Y*M4tT|az{s-C|qJh~FI2GhXVq(}`Qz^r@wZ5otd7=}{ zvXBwz@&l8=Dj%<)*v0|aXUJ?&X~yDf6=u*2-Kxb>Xlq^@m)&n*YY*_HwcfNV`MXWk zFV>XDrVCx*c^bu250Bt`M)`VIIM)-kRJtZn2J&%#H_hpgUK?Z{YzL}5eOL72rlln{ zC_PA3zkoAdq#0&)!Aoc638O#ER6XJ#^N4jFP!E@C2$NYo)#TJvGJLM9!}Z5xJza0< zk2BnAJ3v~`FhQA9x&w)6rw~SqT%yTFgDm z+GnN@NH8?3N6q>U&t%yeqNr6Dp#4H=iL1h5TVFub5y`fgIR}q2nn>fW{cxC~a}|>I zDnr{Y)uizw5+S6)%Cp}Uyr63H!YJfMj72op*zI(~5#;mN#J9l|Gnk_Bw)QJDJ+{aK z?q*ci$kx7g9-p#q6^U}Ru}!vT1}ss3SIj1z<69`inTqd>K(0}tYT(*(=d9zF1}|90 zt4?e=(H0t4psxuM#b15*Q-h#^?d1I%`_nl(#JGn?>3)g1VVkklVL!$tWZA3 z+^|}0uh`Xe_($8^FXsu$t06p%Ils2wAC9qv%`sQr!@z1)b%#-g0@Fg@Pq1^Vf$Ifl zCY70e-m{OpOkT^vsk5eQ+8;}J3WhWdEkd2*#CGyIF5F~(wG0c~iEVWY3#?*64qNBm zgn~1!qiJr+JqFnZBT))#>Qa3?iDUV8NxzByDCF*kIaSvpYZk`!8?Rsr&j}i^#ndk}=*C zJv(p7VUv}($-*Oa-D;s0Czr`SkbcWd_g$5|KT?VhM2XGLHfk@Vll0l^rI!&xz? zF9|_lry?z8>-Ql7^eI;Pt3F zTVUC>q6v4BDlQYF<4MbXf%uiU*WkqMSU}<>6?O6$QR3dLuB2Nbqyy8z?08m$LE&!c zW+4rzd1@5*;R@}hg}h5HSrFp$)T%m8_b_ZKdo>y|7G?@-$l&x#Q=OyXuig#v*iNV3 zTNt)1-LhE>A(-w}QOVm%-;^H@4x&{yIbTYRb3gV;dK?1xvuYnGt0OHkR>nJ!tOpxz z(+p{dEAwWMiJhrPOyGeN#G?GE0r_~g>q5bAhr*Ub#a)Ym%5)Q+c&wU|K9ti%wQa&( zn=Y6}pml*p&Y?WoDLv8c7UA!kVwko2N&#O+wGD@1`(|HB2FwO4hG-OWy*s`NkCi#M zR9iSo<{>?X-W1!--5UCfz;wK@JPE;nU-t(#wF*49TMpZhr@kS@t9YDtwGDfbb**S^ zn{Hq5h?4~rbEYU9ETR7?%Tb`}_x%63d&{^ezjp7N2Bkq^Xaz}W1cnAtkQR|{2BdT7 z?hqJ2S{ejIknRp)=#=gly1Thg{`=b3-k&?3=W{ig43Y;@(;s3>43j?7zSX2KXjyM?6UN-v9NIhy{$)|qj8aE~ z$^KuZjO?HB{SHbQkpGr&KRwox30ZEm+Ge!<)$vgZh?Kc#qa4G+w>@!&t8Nlf)* z#urn^=kBabar(u_=kLj{{3Yb++6tNklv2lR&ZLN9i?RPP??BZ;r9hDV;d*6%-bJ}g z4mpQi9ID);H9|%NA`stV?G+I;^BL5joEg^mOHf=EwVHaII2rS4Wnp-FHX?$Xlvin< z;~s6D?}Uu(C8mXR@P5&*bcU=c>qhU0sZ;r1@GiPm)PvyTDS!hb^cNNO8^WYlE3DkI zN%R;|$`a08su610u3x9QjFd5bfRfD24yZs*Zj#RwHt$4tUG0bjyO4!ZGLgbUUsa#r z4d+VRsa$4n{JY)wZ^jw?T*KdD(9`bw@Y2)YVVd@_i2Shqs(!7561H?8^Tt*_MKFQT zvkE6Lo#?|~6Zu4yg*QGdbNrnW>f~l`cdV%ZaakuY4$dE0eSjXUa4E!T z(*mS1cIfB%@1R4IL$-|f6UL}57Q3%>E#l1EQ)UDc;B5_f~Bx3BJn;5&ZZcan*%aKBVySULl9Z z?rz{Dpdy^7s1&ZUR>uG{xzZ^fnAp}jqR$YIa4@Ed)R5Mz=QBru;_bX8qyby_I-_kf zrgvFOtaeO1^%>k^DbE^>CBc__t=n%ZByOP!XT~6MZB2P5@x(&zeT}!`6-!6^m^AY7 z1lff3EWYqztI^00l`BSET1%s!uSu-*elEvz(IN#4LR+EZ)|@NMj=6+v`KRH+tfuVJ zGa&k;g!6>1D3@WnH$g=#LZH>E-R^x$3`?-NT`Pf3YnA8sN)B9;vOGUA|DK|g7LKgB zpGOG}Rt6<75&KDAO{!!0-A>p{X)1{y>Z%A%67mxRPv}@hK z?Wfb<+`aagFjhDXhK4U6Zw$P?I;OtpB>VTE+Dg0{gB)u9W=?ULwbj!~T?scL&t!-3 ztK^A-t&ls#XKdUdPTqgFl#2Mj4{j?dY#C`hoQfc8gB>&NugG=rL)fdC9YN^Z?}}gH z4x*lF7ekM2!tg3t@7M$qq(=gP+oqiihJEYuLPH)Lr_{vvA94`f2sJ?ISb> zqBl|vpF-%Zx86o6OsJ8M|1FzK;JEZ;NMLu_UbY5jLRPLnnycJhT)Ih|QiN>j{^TzU0$M(ENgb^UD2sy? z9elrqc7*bkW@^>~?Gf%^941K@rq#^x53ICVYsBn)azlbQ-RfVT#ts?49b_Omi#JbS z&;9h3U-bll#mj~g0NNbh`e ztjR@ePO`hX9xmyQ!I*qlexcjS;-aP+kz#}=0>irbmCB-sZ*rp*Ck2B7v3*vN%*O&f zI^Vjrf9gMcTD^N$UDgL`bs4vZ`Mp7?J0_SOB3%b(q14Oz*$1h^u)hl?G^_wj1DIwQ z>8z9SXLz}%)-T44)(EE`gXEphyC`s*W0XR-S9=L$;+*g_@VRg-Z&dUa1NjSR-;?F+ zYUGLZPR<rf|o|9L^mqPNnTidWuYC*w5@YDxnQ`_$Pm=aJ-{K=>+EnS3sLy9dzf5 zh93`tDf{Xhq+B=>y2^W?6JN{%&&Z@n-n^|7AeV3s68(VP($fYsov0sui&LMzWzHxw z;UcZ1mJ8t%R}d{QulPKPHucyn@=_-F~YJIzUC=>g402j;e z{AxC}nyt5VOHVYD?G0cEBmpTCs`+@S`r_66%fz9&t`e&yRwV=z!urt5Y31 z-lAmMyOx?9_5RVNPlei>IY{&ZzOB(y*F0^!i$^E^-7(JeY=ixBP>rv>qk1*hI!_Eu z9j8Jd6Rw?t3e}D**gW5UQ>~CM@1!?X68_PJ*saKt!aRIlA#QBi%0q6FUhj#nqedCHF!7Hy%B^tdYJhR(|qL{MAMuaE`?W`Rgj7;l3R{`HG`W)Z#2F;hr1!wX_2wQ(k)>!pa+)MCbKF4;_3f58v+J-XAv`psFrKL&(`-NcYl;Yn`Fod$}Nv$=D z0%hNl9D>YlN-DilUx2yCcbL(!chP@MW1lu4uad7DprjsK$Z9;ru4^@pAg1d9*Z74blKkB6Mkq( z*KM9Z(T4Y=Z`VG!eXa+NVuAcJY2(%!z*TTjVW2s^d)Y{!@Ee7K@Ejy0jm&HGQJUpv zK7!Kou&s=3Npmo$IF8yb;A3cc-rjqHDg)eiON5Z175p5uk((JMZz#+p@?BRQe(~q6 zmBdVx!{V>A@4yKS!$`FsJDGX^XbA&RIeS)@WV(cjqD;ftE~hj|^2KAj^a|K0B8!p= zvVd%1m6ZVsX=4@_bne~8qg_u*ljItS_91V>zvEoY?0NQ6I#K}C9*Sjpk8(S6^~Z+W zT3<_XiyF{hZ1FrlyjgtkRuxrVW=iU(LC{yKZd4=)j9Bk-V>l-=^fC>8yd)Fe2l_a} zgd8@BeNIKtccNQAh~SxRYwUkjH$!fIyU2;9efa9&-;*R-^m=z67I4d48u16#HcV<<&p$RUN7J-5HjEj9rvrA7Cik> zf~UNhg;zhA`%hdk971+&!E(U4@ySj4C`nL+O|d`{{<@|?Hh>=Vno?OnvX0Gm%1M?E zR0>7HEo2>Vk0?t&!qDh2!}e0sq>ndEimFV018g;CBR&eIThSZuW={a!yBC&)MR3pc zF?%#~7BM;dA`F}3ioy0+#BHMmRaYsK>6w~P@p9yhm~}>i1kEl`l>s>%I}^&sCit6I zkJO?DYjc%qxC~&_GJQ5EiR08=(-^uQOMNmMUZwlKkbe#I{1!3=Z3c# zvVZ-9^;A8Vu`6kn|F#nCZvdVA5xVV|d#1In&q!0{yqeFxzwOMs z7nhF=$p@)+u_K!T@WCs_au^;!<3)(v_yPfcS3_LL|=sOtrNw~m3E4a_bBb&FjYmw)z9lO zCP%{?9T!~OF%krC0v>P1{Jhl6sLhg~;BfinfIxy79(4)3pi(UL&7hm>BGAN#aC@_%Z_7;uXq6?mRFZn6m01?@~+-3jvJsBF|~ zC)N)AC$EAqE(2HR-$1`J_X z{%mmd+y3adUi41B7!(JLLBftBpChyiX3&awD}lo=F*y6Aeb^#A?mf8Mh~^zv_*McS zZC3jClN>r%_vb4~@d&F306i2sJ^~$zd}0;&3ev+4sf}GUlSIAT2{2u!faJh0 z7oE^dYW#+L;ZYl)H~6Rt1oCHs9BHL8N<>Ua1m3!~0L`lC_I!UV?}4s%hcZg8(a%HQ zb-GR81Tb}S73})r_OVvTb5Wdy*@0dOvgal9S!-!P2YBi3O_qPAhbc3Jq8emUa>b!f zzZC!Y)>GOiQOBX@1xAi52ew}Hhl3Zg@23Esg+KW2x)0lYUrO)a>y$fIa~RGx<8jc2z7;rtM&}28|Dj(X>@Pi%nrxk`iAy| zGIZ!wG;Qcxs-O58K+?-AWb$h@vx?r9#Ko^=1VA?Z`c~3H8e56j>8!(D%4hktoDj~_@D*_lK z63?<{R_a$&1JA!E6kw${15L>4!Z?DYs73^+pQ490gXv)4>}ruMIpq(i(8cqBD*4ox zUNTwc%H6+A8%@)Drj5sW%ru-|NqGx+obP^s-t0HndS)D7Gc?LjDoQ+?Ptq3^Ao&xj zGtRr4{rcd`e4y=X-&mkw`E~bTtA&U@(CkO2%RTw8?usfVqZp+Z+Dwm}0m6-lT$CM> zRf`SDF(+wJ>*tf+hqwz+q=7KhZ1?zB{a=X=S&h89*qs7|#)&R#9^JG~!zS!bkMW;w z!fua<5T^a<;$a^%Y|mj^Y@;bGBENar1!ZB{s9u<ZRy7EZlGEF|wp`Q+YOt-KY*gBXrw=*q{hZdoSwnHXHMINkfg#Q8Gv zjCgU`@-h#d1cYNRC$*C!c;7njszE6PP&A1(wIf0ZZM%Dl-ZR5GU5OCyu9;vznMz96 zk)5g5z0bzgqf8!Q9&>62eFng(k?q3^37v**M?ZkO!qxj$EjV+}=ypF=VHwgbvGVHI zFYyEuJZ*2~CRQC^C08V2Wt@BoX9;7KY}+!$@g6Y%OQTq{Se@4X9cEo^bV8u1C zRgo~h#W!4!#uNDY@hG{;z3K54YG$$;$&c4BFd=|`_)1ZtDYA0Xc{iySB)$U*T%aYz@7V8Np_Kr0||7kkSqL@@+^Q2V1|Tc))}12E}avZ}#9i(t-F! z&ot$5$g7_sE1~P$B$YBa$ErKY6%kn|s~q~GmR6)>(iA(6eAen)E})XQl8>DNf$3sE zN{FejA{`0X<7cT|$+?SA_>hc?Df>CJey~MYYdSb*U|N2Q6J&aQa-Q;s&jwPS=o zOXc;Agi?275h~F$3S-oCk`ayb&WW#kZ^m`&r?7uXT?RdNPz)OxG=me`81R^qgo9~S z&t36W-;qhywIZpZJcC4RgHr5`vVZgrwwtBCB`krmsxb5t%2w>6>_B(3Imx^x z7B6^f|D*VuAJRIEjwAphm@@ShX!MgQ4IcBhRHoW8MHXew&s0AmPK?N>Ktj4&o`fxs z8%M(8^Qs66Rxf6kIIq^Mr@O)|*SXPf7Aq3!OOzKFlne2ceLv7Mu+jkv%t37=QnP)j z5n9&~T>~LQf0=wx&S-0+nj#F6TtCwv6E^|GjR>Rdyt`pLn}4%`r`7%y1)@ZbCd=!6 zg!dhO83Y9}DpMHXErX;v)!=w|g}TnSG*?i`~=6^U`(YziJb*jM~jyt44W7e|4(6#$!=hq$g@W zl3<#Th}+kcMqGx}7Hg(=xx?he36LC(06%#4Pnmq31KI~i7C+R~sBn(v+TXr!^rX4+lbPfrQ#gCNdNl-j8Lman~xBcpQwrMDlH6V6vgGHc^#uW}9gx&;zs z78CMYX|TS(if$8hVTJ;flW-sz{wDI6VCcI))gqAkMO3BLD8QXHQdBxDwdeELB8NqB zwn1@ESPfa(#3|6kvnle1oo=!CVk@Xt-SINML@N4K(db59DMp(VQ+*GyPt?6FqZuZ? zK=PYB1d6@W#&O5En0jut@ZU(Lm{kbU*|8HJ2Fiz1Gc447iPE-dt#P|$LW2u>12k6OiwwNi;c3>dmT<2^mSpzKrukSuFIKMWAqF5$b zGDl;0fl`fZjab|4pDJwn3ey9T)@a^gY&k)kK^ZI0!}q6tb5dA*&$>y^+5uz<1%lt0 zA&VIY^i5E~2R479|!Q)dMw?U^Fp?-^VY8O+lM zrGQw3&5lMMwOI&nl<3Ql{A!v}0#D2qB)d|=qUeC?(A3?2Lg&aDb1Wca80 zsp~qZhgSYfQ~k&`PgZ;tfxt9#P9f`fyrNk^z~jDSXJlXn^ww=kv`U0YeU!{naAB@u zPW+&j?TB<$WX{JjmJlxav<=nt8O)mY_a|S%!d3Jvo%n(`ROX*+O^^)?e?!m9pn8yAMjBoj} z{Cdo!i(z3&ban2sL!r?DQk zRC9e}$3mHqp8!f^h0rfH`Og#$Fl1r5vf3C^!Q`wy76Briz|O^eFE!HHlTImJ9&aiQK>My z9g&h#>BjP7k2^8%?L&RH(CQ}5Ee50cV3Hv0Sk8n~A4@Bl*HSItpzzaGM>^eV$B>4Y zblQ&jG}>e<&2spvj?c{Tv-JqU{TQ(#*3@dR?EMXR<8PkE>JjVuVJsM%@kcXC@83e* zDN7y_AhB7+38^)OyX+7z{z1!iLZ>$3VO42A<)hyila81JOimUv?5pFd8J~20^-+xL z(TXj6Mi+~%Df23F&mwP{_sHd1?8Qr$eK}ALg8~>h#mr;Qt41=upIZLPCkw&r5Qa2Y z$8wWN{=w4@)j}J8D^cY4M6Yb$&@EK*I3o5d(_Wi9~Pf9_P>!V7r78q$O}=Ih8w* zlm+P-E2TbtE3OQWc8Ns?qC7no9mbPmf6IiY_l~bAQGq&lU*K&^KyDWdWM^Q0=b)cZ z)*6m+D7zJ?)v$ZeUevx%U4821<`U=wS1V~;Cb2)IU0hFcnfbTD3&rp>IRiy@b zT}QEy=&Jmh`_`C%q#gJ9l_6r)BT@^Ce!9Cl)#8Spwdi~>XwSytJ&zu z7pHrN2SW}=ZeDAvtM^o^chvi(uy{UWUdFaAyyzc{EZQ@~1*Yt2 zUv9jH0xp?Mt8+)b!SwG&peWGnTiLxJ8|-^jw1-g5Qzk;m;Dp%<6YguY6iNrfS_Bwdt9t-qi(K@w4ZmxC@7jB= zMKOG}>t`bWGzffmI@S>)dYYxNMBi7Gt8cjaQv@x;Xj9+^a|(j%FsE7 zy}XGmAVVjLXrvNB&rgIKSmYQ7O<(uVhx3M#A{4N$>KNfp5&O4X-gH{96s|KZKtTuZ@{q=Ro3p`U`5&nC>UN;1$isF-hf6V`8D*iLcS~a+aJx)gsr>K1JCA@(h zNreP8oSi(cq){u0&ufHv7Tvb?-xuu)1I8LfoT8WT?;ri|XKE`Kr)~Z*>V*&ka6xL+ zu>?H^d3_0IcA@{aJP78>cHjNmxcnc#b_6bJlQhkfsJpxMviJ>j0gQEijJ%TSFGQ2(IH5pQ z=`9mB9ZdZPr?;{Tup^Z;04BC{*Wx1h7|Hv~3RN5{BOgTpl zi-O#C2~4VIY8r;ZgpQ=Tj>_QG2%h$Da_nRa05h~|8(?=o+}QzP%8*F@1#sheRf)A~ zmw(b$^{fpxW4f!6)eL}VoG88CF60OuIOS77#u2{1TwVT|0|Od9^L?)KOM4hn{3keGP0QRkj?!h$ei`7EJ)y8Fl>m&EH>blrI&Vk5=vjei{tXaz=Ss-S z{y_;?K11ME;I`bKm1xI@<=g;R54R~G@7YlXr=I;4fzCDd$Pv{8*t+mMubbILyb9AH zJ%W@i>+dL_)~QfrqSmYc$X`PORF?%eQ`co|eGqW%vPX-CjuJ!y;MrJ~0odoWeE`Y} z(y0JKgz7^LIuVfcsDLQvt&Yziik0qdyWZmDd+!Sz7;ZcUp|vz-&;A68j?l zRog3-l0T2rV>!OWGgs+^_Q!v+0Ib-z9_8B#9k|8LIJtb>b-4GrsexhHJsyZwC(XS9 zI%*KW>i52X!(H&4j<2D2LI*l<_(&9X>yyewuh~P5RG=Pqc8R0^a5PJck(u}nay4UF zf?MJ~UYN&fYfYB;=9YnYU{laYCns!wu6ESES_dLLN(%3?DPeQX^*_ZvRvXZc|` zdf!B@pIW$${VDTY%qYRSShTZFs-7}39N#$5DKg)$@_7O+xq^DO>`GO1jP9Jyno)ln zvRU+A&|LOQvB8O2@Nm&Esu~A=RZOGiwSe7G*_p_c&=j;?5T$FnN9j*10!{PTjSam{Q;{qAD=(j`irYKp{-$fCEJpoLsJ4B!%}yHL za!))H#ifJlpv8F54V~PY6YqRBq67_dMCqSx%V2snT@m?|d*fjjpLT-%SkVQa4*fCs z^bMkBN~>3!PMBo_x@f<=NuiU+(Il^NRR<_pP{TXy1rmlDwqb`e5cW_7E#nx1!JAE( z;a+@##oV9Qw)Gslw`EWxcd6|Nd}|s$eN(B`+w@02=0A+AE+=r%VxQ7(J-&aGQ^>&d zd1QcBCq#A(i#@06yIAnBbzL|~Cq23Z5Zq<;)uFlslzk7!91leIw;N*8bP4hhKD*V*Hb2cUC^(6P`8nO2#iI{o6B!Wdpwqv+Ot{1D#BZY&~uckFDI(wbH8#v z%^iRe#G#~vCw{y{c_E#e`;pP(hq-hU4dAE+St?$6)?T%=5R>TINVyJ9Dh;XGFX|WL zBzj%yE|=XLVE5S`^_Ol*!|=jckA75K*4w5N+1$4AcdX*$r*A|AICQvpic|iXHSTNP zS;21SWu&IVLr|0-$iv=^MxCVv*6G^vr{l`#n!=Ex8|8W;Llc~c! z%(Eu%)AWXRblZjB2bx=7l9Mai)!^yhz3!IS_=8`Id4EXq*c+d|03&Kd_j|;Hc3SSn zk<#USB|YaS_sP^|-6oL+uO+&!)*$TzVprY|tGn}+oHwY_f$=r7Tyq?4Xe~Y)oB9wP z_q}Ap9gcI%EYm`ZD?3`szBdTpL@NT(%ib^NI?k_sE@ypk^6xDc)RE`P<{UUhQvP*X zsq6y$RqdSpf*57H!6b@_LVEQ5jx>I?hm$6E+<`;Ze!mpO8(*6qLg)^Oc+ zse^mFc-w`}SeQxb;O>Xw04Kc$>7=qPo_0x}7G@o<+kDJ#qMoyhtF?#z<)5U_zxl^% zVtU%WSgfU%kAt|4BS`Q`DeF`;JV%!OnxHhEtin4>JRM&6qT~$-7{WfXIC1q~YhU5f z$;wM||C$GdJ76_Ku9#(SW2dZvQ#0oDz6SN59H9hE`xPai)|DGLtTq}%!h{k?i;gsg zwO3ǵ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

9?vxUB-zm0xEi0_}L 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 literal 70758 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 diff --git a/doc/ci/variables/img/variable_types_usage_example.png b/doc/ci/variables/img/variable_types_usage_example.png new file mode 100644 index 0000000000000000000000000000000000000000..0e8bde891fe7a6cbb59bf22b57f539dcb1ff0237 GIT binary patch literal 67003 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�?pE54{<5RiOMQ7Ap;jaT%p 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 h{~u?-|J~#Cr(cn18wfkyp+E Date: Tue, 21 May 2019 09:34:41 -0700 Subject: [PATCH 084/319] Port elasticsearch.md changes to EE --- doc/integration/elasticsearch.md | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/doc/integration/elasticsearch.md b/doc/integration/elasticsearch.md index d1d12dfd064..15176ede733 100644 --- a/doc/integration/elasticsearch.md +++ b/doc/integration/elasticsearch.md @@ -340,10 +340,30 @@ curl --request PUT localhost:9200/gitlab-production/_settings --data '{ } }' ``` -A force merge should be called after enabling the refreshing above: +A force merge should be called after enabling the refreshing above. + +For Elasticsearch 6.x, before proceeding with the force merge, the index should be in read-only mode: ```bash -curl --request POST 'http://localhost:9200/_forcemerge?max_num_segments=5' +curl --request PUT localhost:9200/gitlab-production/_settings --data '{ + "settings": { + "index.blocks.write": true + } }' +``` + +Then, initiate the force merge: + +```bash +curl --request POST 'http://localhost:9200/gitlab-production/_forcemerge?max_num_segments=5' +``` + +After this, if your index is in read-only, switch back to read-write: + +```bash +curl --request PUT localhost:9200/gitlab-production/_settings --data '{ + "settings": { + "index.blocks.write": false + } }' ``` Enable Elasticsearch search in **Admin > Settings > Integrations**. That's it. Enjoy it! From 101c4480b32044682e453753c6bb18c2a296b044 Mon Sep 17 00:00:00 2001 From: Tiger Date: Thu, 16 May 2019 17:49:12 -0500 Subject: [PATCH 085/319] Remove legacy Kubernetes #actual_namespace When Kubernetes clusters were originally built they could only exist at the project level, and so there was logic included that assumed there would only ever be a single Kubernetes namespace per cluster. We now support clusters at the group and instance level, which allows multiple namespaces. This change consolidates various project-specific fallbacks to generate namespaces, and hands all responsibility to the Clusters::KubernetesNamespace model. There is now no concept of a single namespace for a Clusters::Platforms::Kubernetes; to retrieve a namespace a project must now be supplied in all cases. This simplifies upcoming work to use a separate Kubernetes namespace per project environment (instead of a namespace per project). --- .../projects/serverless/functions_finder.rb | 12 ++-- app/models/clusters/cluster.rb | 21 ++++--- app/models/clusters/platforms/kubernetes.rb | 60 +++++++------------ app/models/clusters/project.rb | 1 - .../project_services/kubernetes_service.rb | 18 +++--- lib/gitlab/prometheus/query_variables.rb | 3 +- .../gitlab/prometheus/query_variables_spec.rb | 2 +- spec/models/clusters/cluster_spec.rb | 1 - .../clusters/platforms/kubernetes_spec.rb | 29 +++++---- spec/models/clusters/project_spec.rb | 1 - .../kubernetes_service_spec.rb | 22 +++---- spec/requests/api/project_clusters_spec.rb | 2 +- ...create_or_update_namespace_service_spec.rb | 2 +- spec/support/helpers/kubernetes_helpers.rb | 24 +++++--- .../additional_metrics_shared_examples.rb | 2 +- 15 files changed, 94 insertions(+), 106 deletions(-) diff --git a/app/finders/projects/serverless/functions_finder.rb b/app/finders/projects/serverless/functions_finder.rb index d9802598c64..e5bffccabfe 100644 --- a/app/finders/projects/serverless/functions_finder.rb +++ b/app/finders/projects/serverless/functions_finder.rb @@ -3,6 +3,8 @@ module Projects module Serverless class FunctionsFinder + attr_reader :project + def initialize(project) @clusters = project.clusters @project = project @@ -27,7 +29,7 @@ module Projects environment_scope == c.environment_scope end - func = ::Serverless::Function.new(@project, name, cluster.platform_kubernetes&.actual_namespace) + func = ::Serverless::Function.new(project, name, cluster.kubernetes_namespace_for(project)) prometheus_adapter.query(:knative_invocation, func) end @@ -43,7 +45,7 @@ module Projects clusters_with_knative_installed.preload_knative.map do |cluster| next if environment_scope != cluster.environment_scope - services = cluster.application_knative.services_for(ns: cluster.platform_kubernetes&.actual_namespace) + services = cluster.application_knative.services_for(ns: cluster.kubernetes_namespace_for(project)) .select { |svc| svc["metadata"]["name"] == name } add_metadata(cluster, services).first unless services.nil? @@ -52,7 +54,7 @@ module Projects def knative_services clusters_with_knative_installed.preload_knative.map do |cluster| - services = cluster.application_knative.services_for(ns: cluster.platform_kubernetes&.actual_namespace) + services = cluster.application_knative.services_for(ns: cluster.kubernetes_namespace_for(project)) add_metadata(cluster, services) unless services.nil? end end @@ -64,7 +66,7 @@ module Projects if services.length == 1 s["podcount"] = cluster.application_knative.service_pod_details( - cluster.platform_kubernetes&.actual_namespace, + cluster.kubernetes_namespace_for(project), s["metadata"]["name"]).length end end @@ -76,7 +78,7 @@ module Projects # rubocop: disable CodeReuse/ServiceClass def prometheus_adapter - @prometheus_adapter ||= ::Prometheus::AdapterService.new(@project).prometheus_adapter + @prometheus_adapter ||= ::Prometheus::AdapterService.new(project).prometheus_adapter end # rubocop: enable CodeReuse/ServiceClass end diff --git a/app/models/clusters/cluster.rb b/app/models/clusters/cluster.rb index 9299e61dad3..f7ea7accab2 100644 --- a/app/models/clusters/cluster.rb +++ b/app/models/clusters/cluster.rb @@ -45,7 +45,6 @@ module Clusters has_one :application_knative, class_name: 'Clusters::Applications::Knative' has_many :kubernetes_namespaces - has_one :kubernetes_namespace, -> { order(id: :desc) }, class_name: 'Clusters::KubernetesNamespace' accepts_nested_attributes_for :provider_gcp, update_only: true accepts_nested_attributes_for :platform_kubernetes, update_only: true @@ -108,7 +107,7 @@ module Clusters scope :preload_knative, -> { preload( - :kubernetes_namespace, + :kubernetes_namespaces, :platform_kubernetes, :application_knative ) @@ -187,16 +186,16 @@ module Clusters platform_kubernetes.kubeclient if kubernetes? end + def kubernetes_namespace_for(project) + find_or_initialize_kubernetes_namespace_for_project(project).namespace + end + def find_or_initialize_kubernetes_namespace_for_project(project) - if project_type? - kubernetes_namespaces.find_or_initialize_by( - project: project, - cluster_project: cluster_project - ) - else - kubernetes_namespaces.find_or_initialize_by( - project: project - ) + attributes = { project: project } + attributes[:cluster_project] = cluster_project if project_type? + + kubernetes_namespaces.find_or_initialize_by(attributes).tap do |namespace| + namespace.set_defaults end end diff --git a/app/models/clusters/platforms/kubernetes.rb b/app/models/clusters/platforms/kubernetes.rb index 3b7b93e7631..9b951578aee 100644 --- a/app/models/clusters/platforms/kubernetes.rb +++ b/app/models/clusters/platforms/kubernetes.rb @@ -52,11 +52,14 @@ module Clusters alias_attribute :ca_pem, :ca_cert - delegate :project, to: :cluster, allow_nil: true delegate :enabled?, to: :cluster, allow_nil: true delegate :provided_by_user?, to: :cluster, allow_nil: true delegate :allow_user_defined_namespace?, to: :cluster, allow_nil: true - delegate :kubernetes_namespace, to: :cluster + + # This is just to maintain compatibility with KubernetesService, which + # will be removed in https://gitlab.com/gitlab-org/gitlab-ce/issues/39217. + # It can be removed once KubernetesService is gone. + delegate :kubernetes_namespace_for, to: :cluster, allow_nil: true alias_method :active?, :enabled? @@ -68,18 +71,6 @@ module Clusters default_value_for :authorization_type, :rbac - def actual_namespace - if namespace.present? - namespace - else - default_namespace - end - end - - def namespace_for(project) - cluster.find_or_initialize_kubernetes_namespace_for_project(project).namespace - end - def predefined_variables(project:) Gitlab::Ci::Variables::Collection.new.tap do |variables| variables.append(key: 'KUBE_URL', value: api_url) @@ -98,11 +89,13 @@ module Clusters # Once we have marked all project-level clusters that make use of this # behaviour as "unmanaged", we can remove the `cluster.project_type?` # check here. + project_namespace = cluster.kubernetes_namespace_for(project) + variables .append(key: 'KUBE_URL', value: api_url) .append(key: 'KUBE_TOKEN', value: token, public: false, masked: true) - .append(key: 'KUBE_NAMESPACE', value: actual_namespace) - .append(key: 'KUBECONFIG', value: kubeconfig, public: false, file: true) + .append(key: 'KUBE_NAMESPACE', value: project_namespace) + .append(key: 'KUBECONFIG', value: kubeconfig(project_namespace), public: false, file: true) end variables.concat(cluster.predefined_variables) @@ -115,8 +108,10 @@ module Clusters # short time later def terminals(environment) with_reactive_cache do |data| + project = environment.project + pods = filter_by_project_environment(data[:pods], project.full_path_slug, environment.slug) - terminals = pods.flat_map { |pod| terminals_for_pod(api_url, actual_namespace, pod) }.compact + terminals = pods.flat_map { |pod| terminals_for_pod(api_url, cluster.kubernetes_namespace_for(project), pod) }.compact terminals.each { |terminal| add_terminal_auth(terminal, terminal_auth) } end end @@ -124,7 +119,7 @@ module Clusters # Caches resources in the namespace so other calls don't need to block on # network access def calculate_reactive_cache - return unless enabled? && project && !project.pending_delete? + return unless enabled? # We may want to cache extra things in the future { pods: read_pods } @@ -136,33 +131,16 @@ module Clusters private - def kubeconfig + def kubeconfig(namespace) to_kubeconfig( url: api_url, - namespace: actual_namespace, + namespace: namespace, token: token, ca_pem: ca_pem) end - def default_namespace - kubernetes_namespace&.namespace.presence || fallback_default_namespace - end - - # DEPRECATED - # - # On 11.4 Clusters::KubernetesNamespace was introduced, this model will allow to - # have multiple namespaces per project. This method will be removed after migration - # has been completed. - def fallback_default_namespace - return unless project - - slug = "#{project.path}-#{project.id}".downcase - Gitlab::NamespaceSanitizer.sanitize(slug) - end - def build_kube_client! raise "Incomplete settings" unless api_url - raise "No namespace" if cluster.project_type? && actual_namespace.empty? # can probably remove this line once we remove #actual_namespace unless (username && password) || token raise "Either username/password or token is required to access API" @@ -178,9 +156,13 @@ module Clusters # Returns a hash of all pods in the namespace def read_pods - kubeclient = build_kube_client! + # TODO: The project lookup here should be moved (to environment?), + # which will enable reading pods from the correct namespace for group + # and instance clusters. + # This will be done in https://gitlab.com/gitlab-org/gitlab-ce/issues/61156 + return [] unless cluster.project_type? - kubeclient.get_pods(namespace: actual_namespace).as_json + kubeclient.get_pods(namespace: cluster.kubernetes_namespace_for(cluster.first_project)).as_json rescue Kubeclient::ResourceNotFoundError [] end diff --git a/app/models/clusters/project.rb b/app/models/clusters/project.rb index d2b68b3f117..e0bf60164ba 100644 --- a/app/models/clusters/project.rb +++ b/app/models/clusters/project.rb @@ -8,6 +8,5 @@ module Clusters belongs_to :project, class_name: '::Project' has_many :kubernetes_namespaces, class_name: 'Clusters::KubernetesNamespace', foreign_key: :cluster_project_id - has_one :kubernetes_namespace, -> { order(id: :desc) }, class_name: 'Clusters::KubernetesNamespace', foreign_key: :cluster_project_id end end diff --git a/app/models/project_services/kubernetes_service.rb b/app/models/project_services/kubernetes_service.rb index fc8afa9bead..aa6b4aa1d5e 100644 --- a/app/models/project_services/kubernetes_service.rb +++ b/app/models/project_services/kubernetes_service.rb @@ -86,7 +86,7 @@ class KubernetesService < DeploymentService ] end - def actual_namespace + def kubernetes_namespace_for(project) if namespace.present? namespace else @@ -94,10 +94,6 @@ class KubernetesService < DeploymentService end end - def namespace_for(project) - actual_namespace - end - # Check we can connect to the Kubernetes API def test(*args) kubeclient = build_kube_client! @@ -118,7 +114,7 @@ class KubernetesService < DeploymentService variables .append(key: 'KUBE_URL', value: api_url) .append(key: 'KUBE_TOKEN', value: token, public: false, masked: true) - .append(key: 'KUBE_NAMESPACE', value: actual_namespace) + .append(key: 'KUBE_NAMESPACE', value: kubernetes_namespace_for(project)) .append(key: 'KUBECONFIG', value: kubeconfig, public: false, file: true) if ca_pem.present? @@ -135,8 +131,10 @@ class KubernetesService < DeploymentService # short time later def terminals(environment) with_reactive_cache do |data| + project = environment.project + pods = filter_by_project_environment(data[:pods], project.full_path_slug, environment.slug) - terminals = pods.flat_map { |pod| terminals_for_pod(api_url, actual_namespace, pod) }.compact + terminals = pods.flat_map { |pod| terminals_for_pod(api_url, kubernetes_namespace_for(project), pod) }.compact terminals.each { |terminal| add_terminal_auth(terminal, terminal_auth) } end end @@ -173,7 +171,7 @@ class KubernetesService < DeploymentService def kubeconfig to_kubeconfig( url: api_url, - namespace: actual_namespace, + namespace: kubernetes_namespace_for(project), token: token, ca_pem: ca_pem) end @@ -190,7 +188,7 @@ class KubernetesService < DeploymentService end def build_kube_client! - raise "Incomplete settings" unless api_url && actual_namespace && token + raise "Incomplete settings" unless api_url && kubernetes_namespace_for(project) && token Gitlab::Kubernetes::KubeClient.new( api_url, @@ -204,7 +202,7 @@ class KubernetesService < DeploymentService def read_pods kubeclient = build_kube_client! - kubeclient.get_pods(namespace: actual_namespace).as_json + kubeclient.get_pods(namespace: kubernetes_namespace_for(project)).as_json rescue Kubeclient::ResourceNotFoundError [] end diff --git a/lib/gitlab/prometheus/query_variables.rb b/lib/gitlab/prometheus/query_variables.rb index dca09aef47d..9cc21129547 100644 --- a/lib/gitlab/prometheus/query_variables.rb +++ b/lib/gitlab/prometheus/query_variables.rb @@ -5,8 +5,7 @@ module Gitlab module QueryVariables def self.call(environment) deployment_platform = environment.deployment_platform - namespace = deployment_platform&.namespace_for(environment.project) || - deployment_platform&.actual_namespace || '' + namespace = deployment_platform&.kubernetes_namespace_for(environment.project) || '' { ci_environment_slug: environment.slug, diff --git a/spec/lib/gitlab/prometheus/query_variables_spec.rb b/spec/lib/gitlab/prometheus/query_variables_spec.rb index 048f4af6020..6dc99ef26ec 100644 --- a/spec/lib/gitlab/prometheus/query_variables_spec.rb +++ b/spec/lib/gitlab/prometheus/query_variables_spec.rb @@ -23,7 +23,7 @@ describe Gitlab::Prometheus::QueryVariables do context 'with deployment platform' do context 'with project cluster' do - let(:kube_namespace) { environment.deployment_platform.actual_namespace } + let(:kube_namespace) { environment.deployment_platform.cluster.kubernetes_namespace_for(project) } before do create(:cluster, :project, :provided_by_user, projects: [project]) diff --git a/spec/models/clusters/cluster_spec.rb b/spec/models/clusters/cluster_spec.rb index 58203da5b22..60065ff22af 100644 --- a/spec/models/clusters/cluster_spec.rb +++ b/spec/models/clusters/cluster_spec.rb @@ -17,7 +17,6 @@ describe Clusters::Cluster do it { is_expected.to have_one(:application_prometheus) } it { is_expected.to have_one(:application_runner) } it { is_expected.to have_many(:kubernetes_namespaces) } - it { is_expected.to have_one(:kubernetes_namespace) } it { is_expected.to have_one(:cluster_project) } it { is_expected.to delegate_method(:status).to(:provider) } diff --git a/spec/models/clusters/platforms/kubernetes_spec.rb b/spec/models/clusters/platforms/kubernetes_spec.rb index e35d14f2282..c485850c16e 100644 --- a/spec/models/clusters/platforms/kubernetes_spec.rb +++ b/spec/models/clusters/platforms/kubernetes_spec.rb @@ -15,10 +15,8 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching it { is_expected.to validate_presence_of(:api_url) } it { is_expected.to validate_presence_of(:token) } - it { is_expected.to delegate_method(:project).to(:cluster) } it { is_expected.to delegate_method(:enabled?).to(:cluster) } it { is_expected.to delegate_method(:provided_by_user?).to(:cluster) } - it { is_expected.to delegate_method(:kubernetes_namespace).to(:cluster) } it_behaves_like 'having unique enum values' @@ -209,7 +207,7 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching it { is_expected.to be_truthy } end - describe '#actual_namespace' do + describe '#kubernetes_namespace_for' do let(:cluster) { create(:cluster, :project) } let(:project) { cluster.project } @@ -219,7 +217,7 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching namespace: namespace) end - subject { platform.actual_namespace } + subject { platform.kubernetes_namespace_for(project) } context 'with a namespace assigned' do let(:namespace) { 'namespace-123' } @@ -305,8 +303,6 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching end context 'no namespace provided' do - let(:namespace) { kubernetes.actual_namespace } - it_behaves_like 'setting variables' it 'sets KUBE_TOKEN' do @@ -389,7 +385,7 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching end context 'with valid pods' do - let(:pod) { kube_pod(environment_slug: environment.slug, project_slug: project.full_path_slug) } + let(:pod) { kube_pod(environment_slug: environment.slug, namespace: cluster.kubernetes_namespace_for(project), project_slug: project.full_path_slug) } let(:pod_with_no_terminal) { kube_pod(environment_slug: environment.slug, project_slug: project.full_path_slug, status: "Pending") } let(:terminals) { kube_terminals(service, pod) } @@ -419,6 +415,7 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching let!(:cluster) { create(:cluster, :project, enabled: enabled, platform_kubernetes: service) } let(:service) { create(:cluster_platform_kubernetes, :configured) } let(:enabled) { true } + let(:namespace) { cluster.kubernetes_namespace_for(cluster.project) } context 'when cluster is disabled' do let(:enabled) { false } @@ -428,8 +425,8 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching context 'when kubernetes responds with valid pods and deployments' do before do - stub_kubeclient_pods - stub_kubeclient_deployments + stub_kubeclient_pods(namespace) + stub_kubeclient_deployments(namespace) end it { is_expected.to include(pods: [kube_pod]) } @@ -437,8 +434,8 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching context 'when kubernetes responds with 500s' do before do - stub_kubeclient_pods(status: 500) - stub_kubeclient_deployments(status: 500) + stub_kubeclient_pods(namespace, status: 500) + stub_kubeclient_deployments(namespace, status: 500) end it { expect { subject }.to raise_error(Kubeclient::HttpError) } @@ -446,12 +443,18 @@ describe Clusters::Platforms::Kubernetes, :use_clean_rails_memory_store_caching context 'when kubernetes responds with 404s' do before do - stub_kubeclient_pods(status: 404) - stub_kubeclient_deployments(status: 404) + stub_kubeclient_pods(namespace, status: 404) + stub_kubeclient_deployments(namespace, status: 404) end it { is_expected.to include(pods: []) } end + + context 'when the cluster is not project level' do + let(:cluster) { create(:cluster, :group, platform_kubernetes: service) } + + it { is_expected.to include(pods: []) } + end end describe '#update_kubernetes_namespace' do diff --git a/spec/models/clusters/project_spec.rb b/spec/models/clusters/project_spec.rb index 2f017e69251..671af085d10 100644 --- a/spec/models/clusters/project_spec.rb +++ b/spec/models/clusters/project_spec.rb @@ -6,5 +6,4 @@ describe Clusters::Project do it { is_expected.to belong_to(:cluster) } it { is_expected.to belong_to(:project) } it { is_expected.to have_many(:kubernetes_namespaces) } - it { is_expected.to have_one(:kubernetes_namespace) } end diff --git a/spec/models/project_services/kubernetes_service_spec.rb b/spec/models/project_services/kubernetes_service_spec.rb index 3a381cb405d..2fce120381b 100644 --- a/spec/models/project_services/kubernetes_service_spec.rb +++ b/spec/models/project_services/kubernetes_service_spec.rb @@ -161,8 +161,8 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do end end - describe '#actual_namespace' do - subject { service.actual_namespace } + describe '#kubernetes_namespace_for' do + subject { service.kubernetes_namespace_for(project) } shared_examples 'a correctly formatted namespace' do it 'returns a valid Kubernetes namespace name' do @@ -298,7 +298,7 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do end context 'no namespace provided' do - let(:namespace) { subject.actual_namespace } + let(:namespace) { subject.kubernetes_namespace_for(project) } it_behaves_like 'setting variables' @@ -325,7 +325,7 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do end context 'with valid pods' do - let(:pod) { kube_pod(environment_slug: environment.slug, project_slug: project.full_path_slug) } + let(:pod) { kube_pod(environment_slug: environment.slug, namespace: service.kubernetes_namespace_for(project), project_slug: project.full_path_slug) } let(:pod_with_no_terminal) { kube_pod(environment_slug: environment.slug, project_slug: project.full_path_slug, status: "Pending") } let(:terminals) { kube_terminals(service, pod) } @@ -352,6 +352,8 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do describe '#calculate_reactive_cache' do subject { service.calculate_reactive_cache } + let(:namespace) { service.kubernetes_namespace_for(project) } + context 'when service is inactive' do before do service.active = false @@ -362,8 +364,8 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do context 'when kubernetes responds with valid pods' do before do - stub_kubeclient_pods - stub_kubeclient_deployments # Used by EE + stub_kubeclient_pods(namespace) + stub_kubeclient_deployments(namespace) # Used by EE end it { is_expected.to include(pods: [kube_pod]) } @@ -371,8 +373,8 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do context 'when kubernetes responds with 500s' do before do - stub_kubeclient_pods(status: 500) - stub_kubeclient_deployments(status: 500) # Used by EE + stub_kubeclient_pods(namespace, status: 500) + stub_kubeclient_deployments(namespace, status: 500) # Used by EE end it { expect { subject }.to raise_error(Kubeclient::HttpError) } @@ -380,8 +382,8 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do context 'when kubernetes responds with 404s' do before do - stub_kubeclient_pods(status: 404) - stub_kubeclient_deployments(status: 404) # Used by EE + stub_kubeclient_pods(namespace, status: 404) + stub_kubeclient_deployments(namespace, status: 404) # Used by EE end it { is_expected.to include(pods: []) } diff --git a/spec/requests/api/project_clusters_spec.rb b/spec/requests/api/project_clusters_spec.rb index 5357be3cdee..fc0381159dd 100644 --- a/spec/requests/api/project_clusters_spec.rb +++ b/spec/requests/api/project_clusters_spec.rb @@ -351,7 +351,7 @@ describe API::ProjectClusters do it 'does not update cluster attributes' do expect(cluster.domain).not_to eq('new_domain.com') expect(cluster.platform_kubernetes.namespace).not_to eq('invalid_namespace') - expect(cluster.kubernetes_namespace.namespace).not_to eq('invalid_namespace') + expect(cluster.kubernetes_namespace_for(project)).not_to eq('invalid_namespace') end it 'returns validation errors' do diff --git a/spec/services/clusters/gcp/kubernetes/create_or_update_namespace_service_spec.rb b/spec/services/clusters/gcp/kubernetes/create_or_update_namespace_service_spec.rb index 18f218fc236..be052a07da7 100644 --- a/spec/services/clusters/gcp/kubernetes/create_or_update_namespace_service_spec.rb +++ b/spec/services/clusters/gcp/kubernetes/create_or_update_namespace_service_spec.rb @@ -113,7 +113,7 @@ describe Clusters::Gcp::Kubernetes::CreateOrUpdateNamespaceService, '#execute' d it 'does not create any Clusters::KubernetesNamespace' do subject - expect(cluster.kubernetes_namespace).to eq(kubernetes_namespace) + expect(cluster.kubernetes_namespaces).to eq([kubernetes_namespace]) end it 'creates project service account' do diff --git a/spec/support/helpers/kubernetes_helpers.rb b/spec/support/helpers/kubernetes_helpers.rb index ac52acb6570..78b7ae9c00c 100644 --- a/spec/support/helpers/kubernetes_helpers.rb +++ b/spec/support/helpers/kubernetes_helpers.rb @@ -24,30 +24,34 @@ module KubernetesHelpers WebMock.stub_request(:get, api_url + '/apis/serving.knative.dev/v1alpha1').to_return(kube_response(kube_v1alpha1_serving_knative_discovery_body)) end - def stub_kubeclient_service_pods(response = nil) + def stub_kubeclient_service_pods(status: nil) stub_kubeclient_discover(service.api_url) pods_url = service.api_url + "/api/v1/pods" + response = { status: status } if status WebMock.stub_request(:get, pods_url).to_return(response || kube_pods_response) end - def stub_kubeclient_pods(response = nil) + def stub_kubeclient_pods(namespace, status: nil) stub_kubeclient_discover(service.api_url) - pods_url = service.api_url + "/api/v1/namespaces/#{service.actual_namespace}/pods" + pods_url = service.api_url + "/api/v1/namespaces/#{namespace}/pods" + response = { status: status } if status WebMock.stub_request(:get, pods_url).to_return(response || kube_pods_response) end - def stub_kubeclient_logs(pod_name, response = nil) + def stub_kubeclient_logs(pod_name, namespace, status: nil) stub_kubeclient_discover(service.api_url) - logs_url = service.api_url + "/api/v1/namespaces/#{service.actual_namespace}/pods/#{pod_name}/log?tailLines=#{Clusters::Platforms::Kubernetes::LOGS_LIMIT}" + logs_url = service.api_url + "/api/v1/namespaces/#{namespace}/pods/#{pod_name}/log?tailLines=#{Clusters::Platforms::Kubernetes::LOGS_LIMIT}" + response = { status: status } if status WebMock.stub_request(:get, logs_url).to_return(response || kube_logs_response) end - def stub_kubeclient_deployments(response = nil) + def stub_kubeclient_deployments(namespace, status: nil) stub_kubeclient_discover(service.api_url) - deployments_url = service.api_url + "/apis/extensions/v1beta1/namespaces/#{service.actual_namespace}/deployments" + deployments_url = service.api_url + "/apis/extensions/v1beta1/namespaces/#{namespace}/deployments" + response = { status: status } if status WebMock.stub_request(:get, deployments_url).to_return(response || kube_deployments_response) end @@ -250,10 +254,11 @@ module KubernetesHelpers # This is a partial response, it will have many more elements in reality but # these are the ones we care about at the moment - def kube_pod(name: "kube-pod", environment_slug: "production", project_slug: "project-path-slug", status: "Running", track: nil) + def kube_pod(name: "kube-pod", environment_slug: "production", namespace: "project-namespace", project_slug: "project-path-slug", status: "Running", track: nil) { "metadata" => { "name" => name, + "namespace" => namespace, "generate_name" => "generated-name-with-suffix", "creationTimestamp" => "2016-11-25T19:55:19Z", "annotations" => { @@ -369,12 +374,13 @@ module KubernetesHelpers def kube_terminals(service, pod) pod_name = pod['metadata']['name'] + pod_namespace = pod['metadata']['namespace'] containers = pod['spec']['containers'] containers.map do |container| terminal = { selectors: { pod: pod_name, container: container['name'] }, - url: container_exec_url(service.api_url, service.actual_namespace, pod_name, container['name']), + url: container_exec_url(service.api_url, pod_namespace, pod_name, container['name']), subprotocols: ['channel.k8s.io'], headers: { 'Authorization' => ["Bearer #{service.token}"] }, created_at: DateTime.parse(pod['metadata']['creationTimestamp']), diff --git a/spec/support/prometheus/additional_metrics_shared_examples.rb b/spec/support/prometheus/additional_metrics_shared_examples.rb index 0fd67531c3b..8044b061ca5 100644 --- a/spec/support/prometheus/additional_metrics_shared_examples.rb +++ b/spec/support/prometheus/additional_metrics_shared_examples.rb @@ -46,7 +46,7 @@ RSpec.shared_examples 'additional metrics query' do describe 'project has Kubernetes service' do shared_examples 'same behavior between KubernetesService and Platform::Kubernetes' do let(:environment) { create(:environment, slug: 'environment-slug', project: project) } - let(:kube_namespace) { project.deployment_platform.actual_namespace } + let(:kube_namespace) { project.deployment_platform.kubernetes_namespace_for(project) } it_behaves_like 'query context containing environment slug and filter' From 3f025c540553e7145f174345a81d7eb930146a66 Mon Sep 17 00:00:00 2001 From: Christie Lenneville Date: Mon, 20 May 2019 22:09:14 +0000 Subject: [PATCH 086/319] Update doc/user/group/index.md file --- doc/user/group/index.md | 194 ++++++++++++++++++---------------------- 1 file changed, 88 insertions(+), 106 deletions(-) diff --git a/doc/user/group/index.md b/doc/user/group/index.md index a5e3bfda70e..d412a356ff6 100644 --- a/doc/user/group/index.md +++ b/doc/user/group/index.md @@ -5,33 +5,29 @@ and grant members access to several projects at once. Groups can also be nested in [subgroups](subgroups/index.md). -Find your groups by clicking **Groups** in the top navigation. +Find your groups by clicking **Groups** and then selecting **Your Groups** in the top navigation. ![GitLab Groups](img/groups.png) > The groups dropdown in the top navigation was [introduced][ce-36234] in [GitLab 11.1](https://about.gitlab.com/2018/07/22/gitlab-11-1-released/#groups-dropdown-in-navigation). -The Groups page displays all groups you are a member of, how many projects it holds, -how many members it has, the group visibility, and, if you have enough permissions, -a link to the group settings. By clicking the last button you can leave that group. +The Groups page displays all groups you are a member of, how many projects each group contains, +how many members a group has, the group visibility, and, if you have enough permissions, +a link to the group settings. By clicking the last button, you can leave that group. ## Use cases -You can create groups for numerous reasons. To name a few: +You can create groups for numerous reasons. To name a couple: -- Organize related projects under the same [namespace](#namespaces), add members to that - group and grant access to all their projects at once -- Create a group, include members of your team, and make it easier to - `@mention` all the team at once in issues and merge requests - - Create a group for your company members, and create [subgroups](subgroups/index.md) - for each individual team. Let's say you create a group called `company-team`, and among others, - you created subgroups in this group for each individual team `backend-team`, - `frontend-team`, and `production-team`: - 1. When you start a new implementation from an issue, you add a comment: +- Grant access to multiple projects and multiple team members in fewer steps by organizing related projects under the same [namespace](#namespaces) and adding members to the top-level group. +- Make it easier to `@mention` all of your team at once in issues and merge requests by creating a group and including the appropriate members. + +For example, you could create a group for your company members, and create a [subgroup](subgroups/index.md) for each individual team. Let's say you create a group called `company-team`, and you create subgroups in this group for the individual teams `backend-team`, `frontend-team`, and `production-team`. + - When you start a new implementation from an issue, you add a comment: _"`@company-team`, let's do it! `@company-team/backend-team` you're good to go!"_ - 1. When your backend team needs help from frontend, they add a comment: + - When your backend team needs help from frontend, they add a comment: _"`@company-team/frontend-team` could you help us here please?"_ - 1. When the frontend team completes their implementation, they comment: + - When the frontend team completes their implementation, they comment: _"`@company-team/backend-team`, it's done! Let's ship it `@company-team/production-team`!"_ ## Namespaces @@ -59,8 +55,8 @@ By doing so: ## Issues and merge requests within a group -Issues and merge requests are part of projects. For a given group, view all the -[issues](../project/issues/index.md#issues-list) and [merge requests](../project/merge_requests/index.md#merge-requests-per-group) across all the projects in that group, +Issues and merge requests are part of projects. For a given group, you can view all of the +[issues](../project/issues/index.md#issues-list) and [merge requests](../project/merge_requests/index.md#merge-requests-per-group) across all projects in that group, together in a single list view. ## Create a new group @@ -68,13 +64,13 @@ together in a single list view. > For a list of words that are not allowed to be used as group names see the > [reserved names](../reserved_names.md). -You can create a group in GitLab from: +To create a new Group: -1. The Groups page: from the top menu, click **Groups**, and click the green button **New group**: +- In the top menu, click **Groups** and then **Your Groups**, and click the green button **New group**. ![new group from groups page](img/new_group_from_groups.png) -1. Elsewhere: expand the `plus` sign button on the top navbar and choose **New group**: +- Or, in the top menu, expand the `plus` sign and choose **New group**. ![new group from elsewhere](img/new_group_from_other_pages.png) @@ -82,18 +78,18 @@ Add the following information: ![new group info](img/create_new_group_info.png) -1. The **Group name** will populate the URL automatically. Optionally, you can change it. - This is the name that is displayed in the group views. +1. The **Group name** will automatically populate the URL. Optionally, you can change it. + This is the name that displays in group views. The name can contain only: - - Alphanumeric characters. - - Underscores. - - Dashes and dots. - - Spaces. -1. The **Group URL**, which will be the namespace under which your projects will be hosted. + - Alphanumeric characters + - Underscores + - Dashes and dots + - Spaces +1. The **Group URL** is the namespace under which your projects will be hosted. The URL can contain only: - - Alphanumeric characters. - - Underscores. - - Dashes and dots. It cannot start with dashes or end in dot. + - Alphanumeric characters + - Underscores + - Dashes and dots (it cannot start with dashes or end in a dot) 1. Optionally, you can add a brief description to tell others what this group is about. 1. Optionally, choose an avatar for your group. @@ -101,45 +97,39 @@ Add the following information: ## Add users to a group -Add members to a group by navigating to the group's dashboard, and clicking **Members**: +A benefit of putting multiple projects in one group is that you can +give a user to access to all projects in the group with one action. + +Add members to a group by navigating to the group's dashboard and clicking **Members**. ![add members to group](img/add_new_members.png) -Select the [permission level](../permissions.md#permissions) and add the new member. You can also set the expiring -date for that user, from which they will no longer have access to your group. +Select the [permission level](../permissions.md#permissions), and add the new member. You can also set the expiring date for that user; this is the date on which they will no longer have access to your group. -One of the benefits of putting multiple projects in one group is that you can -give a user to access to all projects in the group with one action. +Consider a group with two projects: -Consider we have a group with two projects: - -- On the **Group Members** page we can now add a new user to the group. -- Now because this user is a **Developer** member of the group, he automatically +- On the **Group Members** page, you can now add a new user to the group. +- Now, because this user is a **Developer** member of the group, he automatically gets **Developer** access to **all projects** within that group. -If necessary, you can increase the access level of an individual user for a specific project, -by adding them again as a new member to the project with the new permission levels. +To increase the access level of an existing user for a specific project, +add them again as a new member to the project with the desired permission level. ## Request access to a group -As a group owner you can enable or disable non members to request access to -your group. Go to the group settings and click on **Allow users to request access**. +As a group owner, you can enable or disable the ability for non members to request access to +your group. Go to the group settings, and click **Allow users to request access**. -As a user, you can request to be a member of a group. Go to the group you'd -like to be a member of, and click the **Request Access** button on the right +As a user, you can request to be a member of a group, if that setting is enabled. Go to the group for which you'd like to be a member, and click the **Request Access** button on the right side of your screen. ![Request access button](img/request_access_button.png) ---- - Group owners and maintainers will be notified of your request and will be able to approve or decline it on the members page. ![Manage access requests](img/access_requests_management.png) ---- - If you change your mind before your request is approved, just click the **Withdraw Access Request** button. @@ -149,29 +139,27 @@ If you change your mind before your request is approved, just click the There are two different ways to add a new project to a group: -- Select a group and then click on the **New project** button. +- Select a group, and then click **New project**. You can then continue [creating your project](../../gitlab-basics/create-project.md). ![New project](img/create_new_project_from_group.png) - You can then continue on [creating a project](../../gitlab-basics/create-project.md). - - While you are creating a project, select a group namespace you've already created from the dropdown menu. ![Select group](img/select_group_dropdown.png) -### Default project creation level +### Default project-creation level > [Introduced][ee-2534] in [GitLab Premium][ee] 10.5. > Brought to [GitLab Starter][ee] in 10.7. > [Moved](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/25975) to [GitLab Core](https://about.gitlab.com/pricing/) in 11.10. -Group owners or administrators can allow users with the +Group owners and administrators can allow users with the Developer role to create projects under groups. -By default, [Developers and Maintainers](../permissions.md#group-members-permissions) can create projects under a group, but this can be changed either within the group settings for a group, or -be set globally by a GitLab administrator in the Admin area -at **Settings > General > Visibility and access controls**. +By default, [Developers and Maintainers](../permissions.md#group-members-permissions) can create projects under a group. You can change this setting for a specific group within the group settings, or +you can set this option globally in the Admin area +at **Settings > General > Visibility and access controls** (you must be a GitLab administrator). Available settings are `No one`, `Maintainers`, or `Developers + Maintainers`. @@ -182,13 +170,13 @@ Learn how to [transfer a project into a group](../project/settings/index.md#tran ## Sharing a project with a group You can [share your projects with a group](../project/members/share_project_with_groups.md) -and give your group members access to the project all at once. +and give all group members access to the project at once. Alternatively, you can [lock the sharing with group feature](#share-with-group-lock). ## Manage group memberships via LDAP -In GitLab Enterprise Edition it is possible to manage GitLab group memberships using LDAP groups. +In GitLab Enterprise Edition, it is possible to manage GitLab group memberships using LDAP groups. See [the GitLab Enterprise Edition documentation](../../integration/ldap.md) for more information. ## Epics **[ULTIMATE]** @@ -211,38 +199,38 @@ Get an overview of the vulnerabilities of all the projects in a group and its su > Introduced in [GitLab Ultimate][ee] 11.9 behind the `insights` feature flag. -Configure the Insights that matter for your groups or projects to explore data -such as triage hygiene, issues created/closed per a given period, average time -for merge requests to be merged and much more. +Configure the Insights that matter for your groups or projects, allowing users to explore data +such as: triage hygiene, issues created/closed per a given period, average time +for merge requests to be merged, and much more. [Learn more about Insights](insights/index.md). ## Transferring groups -From GitLab 10.5, groups can be transferred in the following ways: +From GitLab 10.5, you can transfer groups in the following ways: -- Top-level groups can be transferred to a group, converting them into subgroups. -- Subgroups can be transferred to a new parent group. -- Subgroups can be transferred out from a parent group, converting them into top-level groups. +- Transfer a subgroup to a new parent group. +- Convert a top-level group into a subgroup by transfering it to the desired group. +- Convert a subgroup into a top-level group by transfering it out of its current group. When transferring groups, note: -- Changing a group's parent can have unintended side effects. See [Redirects when changing repository paths](../project/index.md#redirects-when-changing-repository-paths). +- Changing a group's parent can have unintended side effects. See [redirects when changing repository paths](../project/index.md#redirects-when-changing-repository-paths). - You can only transfer groups to groups you manage. -- You will need to update your local repositories to point to the new location. -- If the parent group's visibility is lower than the group's current visibility, visibility levels for subgroups and projects will be changed to match the new parent group's visibility. -- Only explicit group membership is transferred, not inherited membership. If the group's owners have only inherited membership, this would leave the group without an owner. In this case, the user transferring the group becomes the group's owner. +- You must update your local repositories to point to the new location. +- If the parent group's visibility is lower than the group's current visibility, visibility levels for subgroups and projects will change to match the new parent group's visibility. +- Only explicit group membership is transferred, not inherited membership. If the group's owners have only inherited membership, this leaves the group without an owner. In this case, the user transferring the group becomes the group's owner. ## Group settings -Once you have created a group, you can manage its settings by navigating to +After creating a group, you can manage its settings by navigating to the group's dashboard, and clicking **Settings**. ![group settings](img/group_settings.png) ### General settings -Besides giving you the option to edit any settings you've previously +In addition to editing any settings you previously set when [creating the group](#create-a-new-group), you can also access further configurations for your group. @@ -253,14 +241,14 @@ Changing a group's path can have unintended side effects. Read before proceeding. If you are vacating the path so it can be claimed by another group or user, -you may need to rename the group name as well since both names and paths must +you may need to rename the group, too, since both names and paths must be unique. To change your group path: 1. Navigate to your group's **Settings > General**. -1. Enter a new name under "Group path". -1. Hit **Save group**. +1. Enter a new name under **Group path**. +1. Click **Save group**. CAUTION: **Caution:** It is currently not possible to rename a namespace if it contains a @@ -276,20 +264,17 @@ username, you can create a new group and transfer projects to it. Add a security layer to your group by [enforcing two-factor authentication (2FA)](../../security/two_factor_authentication.md#enforcing-2fa-for-all-users-in-a-group) -to all group members. +for all group members. #### Share with group lock Prevent projects in a group from [sharing -a project with another group](../project/members/share_project_with_groups.md). -This allows for tighter control over project access. +a project with another group](../project/members/share_project_with_groups.md) to enable tighter control over project access. -For example, consider you have two distinct teams (Group A and Group B) -working together in a project. -To inherit the group membership, you share the project between the +For example, let's say you have two distinct teams (Group A and Group B) working together in a project, and to inherit the group membership, you share the project between the two groups A and B. **Share with group lock** prevents any project within -the group from being shared with another group. By doing so, you -guarantee only the right group members have access to those projects. +the group from being shared with another group, +guaranteeing that only the right group members have access to those projects. To enable this feature, navigate to the group settings page. Select **Share with group lock** and **Save the group**. @@ -298,25 +283,22 @@ To enable this feature, navigate to the group settings page. Select #### Member Lock **[STARTER]** -With Member lock, it is possible to lock membership in a project to the -level of members in the group. +Member lock lets a group owner prevent any new project membership to all of the +projects within a group, allowing tighter control over project membership. -Member lock lets a group owner lock down any new project membership to all the -projects within the group, allowing tighter control over project membership. - -For instance, if you want to lock the group for an [Audit Event](https://docs.gitlab.com/ee/administration/audit_events.html), -you enable Member lock to guarantee that membership of a project cannot be modified during that audit. +For example, if you want to lock the group for an [Audit Event](https://docs.gitlab.com/ee/administration/audit_events.html), +enable Member lock to guarantee that project membership cannot be modified during that audit. To enable this feature: 1. Navigate to the group's **Settings > General** page. -1. Expand the **Permissions, LFS, 2FA** section and select **Member lock**. -1. Click the **Save changes** button. +1. Expand the **Permissions, LFS, 2FA** section, and select **Member lock**. +1. Click **Save changes**. ![Checkbox for membership lock](img/member_lock.png) This will disable the option for all users who previously had permissions to -operate project memberships so no new users can be added. Furthermore, any +operate project memberships, so no new users can be added. Furthermore, any request to add a new user to a project through API will not be possible. #### Group file templates **[PREMIUM]** @@ -327,11 +309,11 @@ types with every project in a group. It is analogous to the feature, and the selected project should follow the same naming conventions as are documented on that page. -Only projects that are in the group may be chosen as the source of templates. -This includes projects shared with the group, but **excludes** projects in +You can only choose projects in the group as the template source. +This includes projects shared with the group, but it **excludes** projects in subgroups or parent groups of the group being configured. -This feature may be configured for subgroups as well as parent groups. A project +You can configure this feature for both subgroups and parent groups. A project in a subgroup will have access to the templates for that subgroup, as well as any parent groups. @@ -345,28 +327,28 @@ To enable this feature, navigate to the group settings page, expand the #### Group-level project templates **[PREMIUM]** -Define project templates at a group-level by setting a group as a template source. +Define project templates at a group level by setting a group as the template source. [Learn more about group-level project templates](custom_project_templates.md). ### Advanced settings -- **Projects**: view all projects within that group, add members to each project, - access each project's settings, and remove any project from the same screen. -- **Webhooks**: configure [webhooks](../project/integrations/webhooks.md) to your group. -- **Kubernetes cluster integration**: connect your GitLab group with [Kubernetes clusters](clusters/index.md). -- **Audit Events**: view [Audit Events](https://docs.gitlab.com/ee/administration/audit_events.html) +- **Projects**: View all projects within that group, add members to each project, + access each project's settings, and remove any project—all from the same screen. +- **Webhooks**: Configure [webhooks](../project/integrations/webhooks.md) for your group. +- **Kubernetes cluster integration**: Connect your GitLab group with [Kubernetes clusters](clusters/index.md). +- **Audit Events**: View [Audit Events](https://docs.gitlab.com/ee/administration/audit_events.html) for the group. **[STARTER ONLY]** -- **Pipelines quota**: keep track of the [pipeline quota](../admin_area/settings/continuous_integration.md) for the group. +- **Pipelines quota**: Keep track of the [pipeline quota](../admin_area/settings/continuous_integration.md) for the group. ## User contribution analysis **[STARTER]** -With [GitLab Contribution Analytics](contribution_analytics/index.md) +With [GitLab Contribution Analytics](contribution_analytics/index.md), you have an overview of the contributions (pushes, merge requests, and issues) performed by your group members. ## Issues analytics **[PREMIUM]** -With [GitLab Issues Analytics](issues_analytics/index.md), in groups, you can see a bar chart of the number of issues created each month. +With [GitLab Issues Analytics](issues_analytics/index.md), you can see a bar chart of the number of issues created each month in your groups. ## Dependency Proxy **[PREMIUM]** From 3d7a0bf7a6f0ed2b10e09a5a32302f12870e82e6 Mon Sep 17 00:00:00 2001 From: Christie Lenneville Date: Mon, 20 May 2019 22:18:07 +0000 Subject: [PATCH 087/319] Removed "select", since the dropdown functions more like a modal --- doc/user/group/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/user/group/index.md b/doc/user/group/index.md index d412a356ff6..b9c59815e31 100644 --- a/doc/user/group/index.md +++ b/doc/user/group/index.md @@ -5,7 +5,7 @@ and grant members access to several projects at once. Groups can also be nested in [subgroups](subgroups/index.md). -Find your groups by clicking **Groups** and then selecting **Your Groups** in the top navigation. +Find your groups by clicking **Groups** and then **Your Groups** in the top navigation. ![GitLab Groups](img/groups.png) From 1a2d05c3a675a08760caeacbc983903a2a4c14ac Mon Sep 17 00:00:00 2001 From: Utkarsh Gupta Date: Tue, 21 May 2019 16:56:27 +0000 Subject: [PATCH 088/319] Bump devise to 4.6 Signed-off-by: Utkarsh Gupta --- Gemfile | 2 +- Gemfile.lock | 4 ++-- app/models/user.rb | 9 --------- app/views/devise/confirmations/new.html.haml | 2 +- app/views/devise/passwords/edit.html.haml | 2 +- app/views/devise/passwords/new.html.haml | 2 +- app/views/devise/registrations/edit.html.erb | 2 +- app/views/devise/shared/_signup_box.html.haml | 2 +- app/views/devise/unlocks/new.html.haml | 2 +- config/initializers/8_devise.rb | 5 +++++ 10 files changed, 14 insertions(+), 18 deletions(-) diff --git a/Gemfile b/Gemfile index 0b9e5000c7c..b6804a94971 100644 --- a/Gemfile +++ b/Gemfile @@ -23,7 +23,7 @@ gem 'grape-path-helpers', '~> 1.1' gem 'faraday', '~> 0.12' # Authentication libraries -gem 'devise', '~> 4.4' +gem 'devise', '~> 4.6' gem 'doorkeeper', '~> 4.3' gem 'doorkeeper-openid_connect', '~> 1.5' gem 'omniauth', '~> 1.8' diff --git a/Gemfile.lock b/Gemfile.lock index be722b89a40..2dbff1674df 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -158,7 +158,7 @@ GEM descendants_tracker (0.0.4) thread_safe (~> 0.3, >= 0.3.1) device_detector (1.0.0) - devise (4.4.3) + devise (4.6.2) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0, < 6.0) @@ -1035,7 +1035,7 @@ DEPENDENCIES database_cleaner (~> 1.7.0) deckar01-task_list (= 2.2.0) device_detector - devise (~> 4.4) + devise (~> 4.6) devise-two-factor (~> 3.0.0) diffy (~> 3.1.0) discordrb-webhooks-blackst0ne (~> 3.3) diff --git a/app/models/user.rb b/app/models/user.rb index 60f69659a6b..2eb5c63a4cc 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1497,15 +1497,6 @@ class User < ApplicationRecord devise_mailer.__send__(notification, self, *args).deliver_later # rubocop:disable GitlabSecurity/PublicSend end - # This works around a bug in Devise 4.2.0 that erroneously causes a user to - # be considered active in MySQL specs due to a sub-second comparison - # issue. For more details, see: https://gitlab.com/gitlab-org/gitlab-ee/issues/2362#note_29004709 - def confirmation_period_valid? - return false if self.class.allow_unconfirmed_access_for == 0.days - - super - end - def ensure_user_rights_and_limits if external? self.can_create_group = false diff --git a/app/views/devise/confirmations/new.html.haml b/app/views/devise/confirmations/new.html.haml index 73e70dc63e5..f8aa3cf98dc 100644 --- a/app/views/devise/confirmations/new.html.haml +++ b/app/views/devise/confirmations/new.html.haml @@ -3,7 +3,7 @@ .login-body = form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post, class: 'gl-show-field-errors' }) do |f| .devise-errors - = devise_error_messages! + = render "devise/shared/error_messages", resource: resource .form-group = f.label :email = f.email_field :email, class: "form-control", required: true, title: 'Please provide a valid email address.' diff --git a/app/views/devise/passwords/edit.html.haml b/app/views/devise/passwords/edit.html.haml index dd1edb5fdc9..09ea7716a47 100644 --- a/app/views/devise/passwords/edit.html.haml +++ b/app/views/devise/passwords/edit.html.haml @@ -3,7 +3,7 @@ .login-body = form_for(resource, as: resource_name, url: password_path(:user), html: { method: :put, class: 'gl-show-field-errors' }) do |f| .devise-errors - = devise_error_messages! + = render "devise/shared/error_messages", resource: resource = f.hidden_field :reset_password_token .form-group = f.label 'New password', for: "user_password" diff --git a/app/views/devise/passwords/new.html.haml b/app/views/devise/passwords/new.html.haml index 99ce13adf74..fe999851605 100644 --- a/app/views/devise/passwords/new.html.haml +++ b/app/views/devise/passwords/new.html.haml @@ -3,7 +3,7 @@ .login-body = form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post, class: 'gl-show-field-errors' }) do |f| .devise-errors - = devise_error_messages! + = render "devise/shared/error_messages", resource: resource .form-group = f.label :email = f.email_field :email, class: "form-control", required: true, value: params[:user_email], autofocus: true, title: 'Please provide a valid email address.' diff --git a/app/views/devise/registrations/edit.html.erb b/app/views/devise/registrations/edit.html.erb index f379e71ae5b..5a1388ac7a1 100644 --- a/app/views/devise/registrations/edit.html.erb +++ b/app/views/devise/registrations/edit.html.erb @@ -1,7 +1,7 @@

Edit <%= resource_name.to_s.humanize %>

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> - <%= devise_error_messages! %> + <%= render "devise/shared/error_messages", resource: resource %>
<%= f.label :email %>
<%= f.email_field :email %>
diff --git a/app/views/devise/shared/_signup_box.html.haml b/app/views/devise/shared/_signup_box.html.haml index 427db070253..a7434059de4 100644 --- a/app/views/devise/shared/_signup_box.html.haml +++ b/app/views/devise/shared/_signup_box.html.haml @@ -2,7 +2,7 @@ .login-body = form_for(resource, as: "new_#{resource_name}", url: registration_path(resource_name), html: { class: "new_new_user gl-show-field-errors", "aria-live" => "assertive" }) do |f| .devise-errors - = devise_error_messages! + = render "devise/shared/error_messages", resource: resource .name.form-group = f.label :name, 'Full name', class: 'label-bold' = f.text_field :name, class: "form-control top qa-new-user-name js-block-emoji", required: true, title: _("This field is required.") diff --git a/app/views/devise/unlocks/new.html.haml b/app/views/devise/unlocks/new.html.haml index b2f48a4e0bf..1167f1718d6 100644 --- a/app/views/devise/unlocks/new.html.haml +++ b/app/views/devise/unlocks/new.html.haml @@ -3,7 +3,7 @@ .login-body = form_for(resource, as: resource_name, url: unlock_path(resource_name), html: { method: :post, class: 'gl-show-field-errors' }) do |f| .devise-errors - = devise_error_messages! + = render "devise/shared/error_messages", resource: resource .form-group.append-bottom-20 = f.label :email = f.email_field :email, class: 'form-control', autofocus: 'autofocus', autocapitalize: 'off', autocorrect: 'off', title: 'Please provide a valid email address.' diff --git a/config/initializers/8_devise.rb b/config/initializers/8_devise.rb index 4683b02f300..3dd12c7e64d 100644 --- a/config/initializers/8_devise.rb +++ b/config/initializers/8_devise.rb @@ -100,6 +100,11 @@ Devise.setup do |config| # secure: true in order to force SSL only cookies. # config.cookie_options = {} + # When set to false, does not sign a user in automatically after their password is + # changed. Defaults to true, so a user is signed in automatically after a password + # is changed. + config.sign_in_after_change_password = false + # Send a notification email when the user's password is changed config.send_password_change_notification = true From bfddf9b65e1d4f04a2b5f8926c726bc22b36493e Mon Sep 17 00:00:00 2001 From: Annabel Dunstone Gray Date: Mon, 20 May 2019 11:34:14 -0500 Subject: [PATCH 089/319] Fix border radius of discussions --- app/assets/stylesheets/framework/timeline.scss | 1 + app/assets/stylesheets/pages/notes.scss | 1 + changelogs/unreleased/58538-discussion-top-radius.yml | 5 +++++ 3 files changed, 7 insertions(+) create mode 100644 changelogs/unreleased/58538-discussion-top-radius.yml diff --git a/app/assets/stylesheets/framework/timeline.scss b/app/assets/stylesheets/framework/timeline.scss index 3d5208c3db5..e8176e59c19 100644 --- a/app/assets/stylesheets/framework/timeline.scss +++ b/app/assets/stylesheets/framework/timeline.scss @@ -55,4 +55,5 @@ .discussion .timeline-entry { margin: 0; border-right: 0; + border-radius: $border-radius-default $border-radius-default 0 0; } diff --git a/app/assets/stylesheets/pages/notes.scss b/app/assets/stylesheets/pages/notes.scss index f2b67a693c3..fcb57db590a 100644 --- a/app/assets/stylesheets/pages/notes.scss +++ b/app/assets/stylesheets/pages/notes.scss @@ -107,6 +107,7 @@ $note-form-margin-left: 72px; &.collapsed { color: $gl-text-color-secondary; + border-radius: 0 0 $border-radius-default $border-radius-default; svg { float: left; diff --git a/changelogs/unreleased/58538-discussion-top-radius.yml b/changelogs/unreleased/58538-discussion-top-radius.yml new file mode 100644 index 00000000000..0fb16055623 --- /dev/null +++ b/changelogs/unreleased/58538-discussion-top-radius.yml @@ -0,0 +1,5 @@ +--- +title: Fix border radius of discussions +merge_request: 28490 +author: +type: fixed From cf3bb66c8140b0593ec44b30be9594671bcdd1e9 Mon Sep 17 00:00:00 2001 From: Christie Lenneville Date: Tue, 21 May 2019 17:31:30 +0000 Subject: [PATCH 090/319] Apply suggestion to doc/user/group/index.md --- doc/user/group/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/user/group/index.md b/doc/user/group/index.md index b9c59815e31..3828865aa19 100644 --- a/doc/user/group/index.md +++ b/doc/user/group/index.md @@ -5,7 +5,7 @@ and grant members access to several projects at once. Groups can also be nested in [subgroups](subgroups/index.md). -Find your groups by clicking **Groups** and then **Your Groups** in the top navigation. +Find your groups by clicking **Groups > Your Groups** in the top navigation. ![GitLab Groups](img/groups.png) From 7ff10c0aa9b716c2129f84a1097915d99b278531 Mon Sep 17 00:00:00 2001 From: Christie Lenneville Date: Tue, 21 May 2019 17:32:15 +0000 Subject: [PATCH 091/319] Apply suggestion to doc/user/group/index.md --- doc/user/group/index.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/doc/user/group/index.md b/doc/user/group/index.md index 3828865aa19..1fe745f3cd4 100644 --- a/doc/user/group/index.md +++ b/doc/user/group/index.md @@ -11,9 +11,15 @@ Find your groups by clicking **Groups > Your Groups** in the top navigation. > The groups dropdown in the top navigation was [introduced][ce-36234] in [GitLab 11.1](https://about.gitlab.com/2018/07/22/gitlab-11-1-released/#groups-dropdown-in-navigation). -The Groups page displays all groups you are a member of, how many projects each group contains, -how many members a group has, the group visibility, and, if you have enough permissions, -a link to the group settings. By clicking the last button, you can leave that group. +The Groups page displays: + +- All groups you are a member of. +- How many projects each group contains. +- How many members a group has. +- The group visibility. +- A link to the group settings if you have sufficient permissions. + +By clicking the last button, you can leave that group. ## Use cases From d40fd9963a381cc55b2dd2c43ab474f10e6b63fe Mon Sep 17 00:00:00 2001 From: Christie Lenneville Date: Tue, 21 May 2019 17:32:25 +0000 Subject: [PATCH 092/319] Apply suggestion to doc/user/group/index.md --- doc/user/group/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/user/group/index.md b/doc/user/group/index.md index 1fe745f3cd4..19bff9318bc 100644 --- a/doc/user/group/index.md +++ b/doc/user/group/index.md @@ -70,7 +70,7 @@ together in a single list view. > For a list of words that are not allowed to be used as group names see the > [reserved names](../reserved_names.md). -To create a new Group: +To create a new Group, either: - In the top menu, click **Groups** and then **Your Groups**, and click the green button **New group**. From a2ca378411d2fccd005277a19c22e9f0fab4f04a Mon Sep 17 00:00:00 2001 From: Christie Lenneville Date: Tue, 21 May 2019 17:32:42 +0000 Subject: [PATCH 093/319] Apply suggestion to doc/user/group/index.md --- doc/user/group/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/user/group/index.md b/doc/user/group/index.md index 19bff9318bc..38184664842 100644 --- a/doc/user/group/index.md +++ b/doc/user/group/index.md @@ -115,7 +115,7 @@ Select the [permission level](../permissions.md#permissions), and add the new me Consider a group with two projects: - On the **Group Members** page, you can now add a new user to the group. -- Now, because this user is a **Developer** member of the group, he automatically +- Now, because this user is a **Developer** member of the group, they automatically gets **Developer** access to **all projects** within that group. To increase the access level of an existing user for a specific project, From f0d0f24375a9e72e03aefebdac481a4781631317 Mon Sep 17 00:00:00 2001 From: Christie Lenneville Date: Tue, 21 May 2019 17:32:57 +0000 Subject: [PATCH 094/319] Apply suggestion to doc/user/group/index.md --- doc/user/group/index.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/user/group/index.md b/doc/user/group/index.md index 38184664842..12d0f96a1c6 100644 --- a/doc/user/group/index.md +++ b/doc/user/group/index.md @@ -206,8 +206,12 @@ Get an overview of the vulnerabilities of all the projects in a group and its su > Introduced in [GitLab Ultimate][ee] 11.9 behind the `insights` feature flag. Configure the Insights that matter for your groups or projects, allowing users to explore data -such as: triage hygiene, issues created/closed per a given period, average time -for merge requests to be merged, and much more. +such as: + +- Triage hygiene +- Issues created/closed per a given period +- Average time for merge requests to be merged +- Much more [Learn more about Insights](insights/index.md). From e97ec02b23cc82b738e94bc0c26b372857ed7357 Mon Sep 17 00:00:00 2001 From: Christie Lenneville Date: Tue, 21 May 2019 17:33:16 +0000 Subject: [PATCH 095/319] Apply suggestion to doc/user/group/index.md --- doc/user/group/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/user/group/index.md b/doc/user/group/index.md index 12d0f96a1c6..ea2ec683845 100644 --- a/doc/user/group/index.md +++ b/doc/user/group/index.md @@ -225,7 +225,7 @@ From GitLab 10.5, you can transfer groups in the following ways: When transferring groups, note: -- Changing a group's parent can have unintended side effects. See [redirects when changing repository paths](../project/index.md#redirects-when-changing-repository-paths). +- Changing a group's parent can have unintended side effects. See [Redirects when changing repository paths](../project/index.md#redirects-when-changing-repository-paths). - You can only transfer groups to groups you manage. - You must update your local repositories to point to the new location. - If the parent group's visibility is lower than the group's current visibility, visibility levels for subgroups and projects will change to match the new parent group's visibility. From 457561cb2e3a4972ef4464f3b36ceac3f269d78a Mon Sep 17 00:00:00 2001 From: Christie Lenneville Date: Tue, 21 May 2019 17:36:25 +0000 Subject: [PATCH 096/319] Replaced mdash with comma --- doc/user/group/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/user/group/index.md b/doc/user/group/index.md index ea2ec683845..7493e65e237 100644 --- a/doc/user/group/index.md +++ b/doc/user/group/index.md @@ -343,7 +343,7 @@ Define project templates at a group level by setting a group as the template sou ### Advanced settings - **Projects**: View all projects within that group, add members to each project, - access each project's settings, and remove any project—all from the same screen. + access each project's settings, and remove any project, all from the same screen. - **Webhooks**: Configure [webhooks](../project/integrations/webhooks.md) for your group. - **Kubernetes cluster integration**: Connect your GitLab group with [Kubernetes clusters](clusters/index.md). - **Audit Events**: View [Audit Events](https://docs.gitlab.com/ee/administration/audit_events.html) From f794bded6834768cb339b58ad40946457a989da2 Mon Sep 17 00:00:00 2001 From: Luke Bennett Date: Tue, 21 May 2019 18:53:47 +0100 Subject: [PATCH 097/319] Resolve CE/EE diffs in label row Part of single codebase changes. --- app/views/shared/_label_row.html.haml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/shared/_label_row.html.haml b/app/views/shared/_label_row.html.haml index a1aab2e6a08..af11ce94ec5 100644 --- a/app/views/shared/_label_row.html.haml +++ b/app/views/shared/_label_row.html.haml @@ -22,3 +22,4 @@ · %li.label-link-item.priority-badge.js-priority-badge.inline.prepend-left-10 .label-badge.label-badge-blue= _('Prioritized label') + = render_if_exists 'shared/label_row_epics_link', label: label From 7b0e93fe2e4cd27fd24a7bf66d0d23233116ae8d Mon Sep 17 00:00:00 2001 From: Luke Bennett Date: Tue, 21 May 2019 19:00:30 +0100 Subject: [PATCH 098/319] Resolve CE/EE diffs in signin box Part of single codebase changes. --- app/views/devise/shared/_signin_box.html.haml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/views/devise/shared/_signin_box.html.haml b/app/views/devise/shared/_signin_box.html.haml index ec968e435cd..f8f36a8bfff 100644 --- a/app/views/devise/shared/_signin_box.html.haml +++ b/app/views/devise/shared/_signin_box.html.haml @@ -3,17 +3,21 @@ .login-box.tab-pane{ id: "crowd", role: 'tabpanel', class: active_when(form_based_auth_provider_has_active_class?(:crowd)) } .login-body = render 'devise/sessions/new_crowd' + + = render_if_exists 'devise/sessions/new_kerberos_tab' + - @ldap_servers.each_with_index do |server, i| .login-box.tab-pane{ id: "#{server['provider_name']}", role: 'tabpanel', class: active_when(i.zero? && form_based_auth_provider_has_active_class?(:ldapmain)) } .login-body = render 'devise/sessions/new_ldap', server: server + + = render_if_exists 'devise/sessions/new_smartcard' + - if password_authentication_enabled_for_web? .login-box.tab-pane{ id: 'login-pane', role: 'tabpanel' } .login-body = render 'devise/sessions/new_base' - = render_if_exists 'devise/sessions/new_smartcard' - - elsif password_authentication_enabled_for_web? .login-box.tab-pane.active{ id: 'login-pane', role: 'tabpanel' } .login-body From e1b31627396f12e84bd663efcd890d5f8e4cf195 Mon Sep 17 00:00:00 2001 From: Winnie Hellmann Date: Tue, 21 May 2019 18:38:27 +0000 Subject: [PATCH 099/319] Document the differences between Karma and Jest setup --- .../testing_guide/frontend_testing.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/doc/development/testing_guide/frontend_testing.md b/doc/development/testing_guide/frontend_testing.md index 9bd99e80357..58d6f08954d 100644 --- a/doc/development/testing_guide/frontend_testing.md +++ b/doc/development/testing_guide/frontend_testing.md @@ -15,10 +15,8 @@ information on general testing practices at GitLab. ## Jest -GitLab has started to migrate tests to the [Jest](https://jestjs.io) -testing framework. You can read a [detailed evaluation](https://gitlab.com/gitlab-org/gitlab-ce/issues/49171) -of Jest compared to our use of Karma and Jasmine. In summary, it will allow us -to improve the performance and consistency of our frontend tests. +We have started to migrate frontend tests to the [Jest](https://jestjs.io) testing framework (see also the corresponding +[epic](https://gitlab.com/groups/gitlab-org/-/epics/895)). Jest tests can be found in `/spec/frontend` and `/ee/spec/frontend` in EE. @@ -26,6 +24,17 @@ It is not yet a requirement to use Jest. You can view the [epic](https://gitlab.com/groups/gitlab-org/-/epics/873) of issues we need to solve before being able to use Jest for all our needs. +### Differences to Karma + +- Jest runs in a Node.js environment, not in a browser. Support for running Jest tests in a browser [is planned](https://gitlab.com/gitlab-org/gitlab-ce/issues/58205). +- Because Jest runs in a Node.js environment, it uses [jsdom](https://github.com/jsdom/jsdom) by default. +- All calls to `setTimeout` and `setInterval` are mocked away. See also [Jest Timer Mocks](https://jestjs.io/docs/en/timer-mocks). +- `rewire` is not required because Jest supports mocking modules. See also [Manual Mocks](https://jestjs.io/docs/en/manual-mocks). +- The following will cause tests to fail in Jest: + - Unmocked requests. + - Unhandled Promise rejections. + - Calls to `console.warn`, including warnings from libraries like Vue. + ### Debugging Jest tests Running `yarn jest-debug` will run Jest in debug mode, allowing you to debug/inspect as described in the [Jest docs](https://jestjs.io/docs/en/troubleshooting#tests-are-failing-and-you-don-t-know-why). From 49940ce33576fb91a62309d46ad4d5c280e40040 Mon Sep 17 00:00:00 2001 From: Evan Read Date: Tue, 21 May 2019 18:48:33 +0000 Subject: [PATCH 100/319] Add timing of repo size reporting --- doc/user/admin_area/index.md | 28 ++++++++++++++++++++++------ doc/user/project/repository/index.md | 12 ++++++++---- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/doc/user/admin_area/index.md b/doc/user/admin_area/index.md index dd4e96c1f4a..d2995d48833 100644 --- a/doc/user/admin_area/index.md +++ b/doc/user/admin_area/index.md @@ -61,16 +61,32 @@ Click the **All**, **Private**, **Internal**, or **Public** tab to list only pro criteria. By default, all projects are listed, in reverse order of when they were last updated. For each -project, the name, namespace, description, and size is listed, also options to **Edit** or -**Delete** it. +project, the following information is listed: -Sort projects by **Name**, **Last created**, **Oldest created**, **Last updated**, **Oldest -updated**, **Owner**, and choose to hide or show archived projects. +- Name. +- Namespace. +- Description. +- Size, updated every 15 minutes at most. + +Projects can be edited or deleted. + +The list of projects can be sorted by: + +- Name. +- Last created. +- Oldest created. +- Last updated. +- Oldest updated. +- Owner. + +A user can choose to hide or show archived projects in the list. In the **Filter by name** field, type the project name you want to find, and GitLab will filter them as you type. Select from the **Namespace** dropdown to filter only projects in that namespace. -You can combine the filter options. For example, click the **Public** tab, and enter `score` in -the **Filter by name...** input box to list only public projects with `score` in their name. +You can combine the filter options. For example, to list only public projects with `score` in their name: + +1. Click the **Public** tab. +1. Enter `score` in the **Filter by name...** input box. diff --git a/doc/user/project/repository/index.md b/doc/user/project/repository/index.md index 97ecc4c0d65..cb514b76a4e 100644 --- a/doc/user/project/repository/index.md +++ b/doc/user/project/repository/index.md @@ -173,11 +173,15 @@ Via command line, you can commit multiple times before pushing. ## Repository size -On GitLab.com, your [repository size limit is 10GB](../../gitlab_com/index.md#repository-size-limit) -(including LFS). For other instances, the repository size is limited by your -system administrators. +A project's repository size is reported on the project's **Details** page. The reported size is +updated every 15 minutes at most, so may not reflect recent activity. -You can also [reduce a repository size using Git](reducing_the_repo_size_using_git.md). +The repository size for: + +- GitLab.com [is set by GitLab](../../gitlab_com/index.md#repository-size-limit). +- Self-managed instances is set by your GitLab administrators. + +You can [reduce a repository's size using Git](reducing_the_repo_size_using_git.md). ## Contributors From 6c35fb59b79e7abc321cee65fc1730ce67908b6b Mon Sep 17 00:00:00 2001 From: John Cai Date: Tue, 23 Apr 2019 10:32:06 -0700 Subject: [PATCH 101/319] Add GitDeduplicationService for deduplication housekeeping GitDeduplicationService performs idempotent operations on deduplicated projects. --- .../projects/git_deduplication_service.rb | 64 +++++++++++++ app/workers/git_garbage_collect_worker.rb | 4 +- .../git_deduplication_service_spec.rb | 90 +++++++++++++++++++ 3 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 app/services/projects/git_deduplication_service.rb create mode 100644 spec/services/projects/git_deduplication_service_spec.rb diff --git a/app/services/projects/git_deduplication_service.rb b/app/services/projects/git_deduplication_service.rb new file mode 100644 index 00000000000..74d469ecf37 --- /dev/null +++ b/app/services/projects/git_deduplication_service.rb @@ -0,0 +1,64 @@ +# frozen_string_literal: true + +module Projects + class GitDeduplicationService < BaseService + include ExclusiveLeaseGuard + + LEASE_TIMEOUT = 86400 + + delegate :pool_repository, to: :project + attr_reader :project + + def initialize(project) + @project = project + end + + def execute + try_obtain_lease do + unless project.has_pool_repository? + disconnect_git_alternates + break + end + + if source_project? && pool_can_fetch_from_source? + fetch_from_source + end + + project.link_pool_repository if same_storage_as_pool?(project.repository) + end + end + + private + + def disconnect_git_alternates + project.repository.disconnect_alternates + end + + def pool_can_fetch_from_source? + project.git_objects_poolable? && + same_storage_as_pool?(pool_repository.source_project.repository) + end + + def same_storage_as_pool?(repository) + pool_repository.object_pool.repository.storage == repository.storage + end + + def fetch_from_source + project.pool_repository.object_pool.fetch + end + + def source_project? + return unless project.has_pool_repository? + + project.pool_repository.source_project == project + end + + def lease_timeout + LEASE_TIMEOUT + end + + def lease_key + "git_deduplication:#{project.id}" + end + end +end diff --git a/app/workers/git_garbage_collect_worker.rb b/app/workers/git_garbage_collect_worker.rb index d4a6f53dae5..489d6215774 100644 --- a/app/workers/git_garbage_collect_worker.rb +++ b/app/workers/git_garbage_collect_worker.rb @@ -23,7 +23,9 @@ class GitGarbageCollectWorker end task = task.to_sym - project.link_pool_repository + + ::Projects::GitDeduplicationService.new(project).execute + gitaly_call(task, project.repository.raw_repository) # Refresh the branch cache in case garbage collection caused a ref lookup to fail diff --git a/spec/services/projects/git_deduplication_service_spec.rb b/spec/services/projects/git_deduplication_service_spec.rb new file mode 100644 index 00000000000..3acbc46b473 --- /dev/null +++ b/spec/services/projects/git_deduplication_service_spec.rb @@ -0,0 +1,90 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Projects::GitDeduplicationService do + include ExclusiveLeaseHelpers + + let(:pool) { create(:pool_repository, :ready) } + let(:project) { create(:project, :repository) } + let(:lease_key) { "git_deduplication:#{project.id}" } + let(:lease_timeout) { Projects::GitDeduplicationService::LEASE_TIMEOUT } + + subject(:service) { described_class.new(project) } + + describe '#execute' do + context 'when there is not already a lease' do + context 'when the project does not have a pool repository' do + it 'calls disconnect_git_alternates' do + stub_exclusive_lease(lease_key, timeout: lease_timeout) + + expect(project.repository).to receive(:disconnect_alternates) + + service.execute + end + end + + context 'when the project has a pool repository' do + let(:project) { create(:project, :repository, pool_repository: pool) } + + context 'when the project is a source project' do + let(:lease_key) { "git_deduplication:#{pool.source_project.id}" } + + subject(:service) { described_class.new(pool.source_project) } + + it 'calls fetch' do + stub_exclusive_lease(lease_key, timeout: lease_timeout) + allow(pool.source_project).to receive(:git_objects_poolable?).and_return(true) + + expect(pool.object_pool).to receive(:fetch) + + service.execute + end + + it 'does not call fetch if git objects are not poolable' do + stub_exclusive_lease(lease_key, timeout: lease_timeout) + allow(pool.source_project).to receive(:git_objects_poolable?).and_return(false) + + expect(pool.object_pool).not_to receive(:fetch) + + service.execute + end + + it 'does not call fetch if pool and project are not on the same storage' do + stub_exclusive_lease(lease_key, timeout: lease_timeout) + allow(pool.source_project.repository).to receive(:storage).and_return('special_storage_001') + + expect(pool.object_pool).not_to receive(:fetch) + + service.execute + end + end + + it 'links the repository to the object pool' do + expect(project).to receive(:link_pool_repository) + + service.execute + end + + it 'does not link the repository to the object pool if they are not on the same storage' do + allow(project.repository).to receive(:storage).and_return('special_storage_001') + expect(project).not_to receive(:link_pool_repository) + + service.execute + end + end + + context 'when a lease is already out' do + before do + stub_exclusive_lease_taken(lease_key, timeout: lease_timeout) + end + + it 'fails when a lease is already out' do + expect(service).to receive(:log_error).with('Cannot obtain an exclusive lease. There must be another instance already in execution.') + + service.execute + end + end + end + end +end From 3783c23457adaa4a1f97ffd0891a1a5a8d02f188 Mon Sep 17 00:00:00 2001 From: Luke Duncalfe Date: Mon, 20 May 2019 17:13:29 +1200 Subject: [PATCH 102/319] Link to issue in CodeReuse/ActiveRecord message This provides the user with some context as to why certain ActiveRecord methods are blacklisted. --- rubocop/cop/code_reuse/active_record.rb | 3 ++- spec/rubocop/cop/code_reuse/active_record_spec.rb | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/rubocop/cop/code_reuse/active_record.rb b/rubocop/cop/code_reuse/active_record.rb index 2be8f7c11aa..1e650abfceb 100644 --- a/rubocop/cop/code_reuse/active_record.rb +++ b/rubocop/cop/code_reuse/active_record.rb @@ -9,7 +9,8 @@ module RuboCop class ActiveRecord < RuboCop::Cop::Cop include CodeReuseHelpers - MSG = 'This method can only be used inside an ActiveRecord model' + MSG = 'This method can only be used inside an ActiveRecord model: ' \ + 'https://gitlab.com/gitlab-org/gitlab-ce/issues/49653' # Various methods from ActiveRecord::Querying that are blacklisted. We # exclude some generic ones such as `any?` and `first`, as these may diff --git a/spec/rubocop/cop/code_reuse/active_record_spec.rb b/spec/rubocop/cop/code_reuse/active_record_spec.rb index a30fc52d26f..8f3a3690d88 100644 --- a/spec/rubocop/cop/code_reuse/active_record_spec.rb +++ b/spec/rubocop/cop/code_reuse/active_record_spec.rb @@ -14,7 +14,7 @@ describe RuboCop::Cop::CodeReuse::ActiveRecord do expect_offense(<<~SOURCE) def foo User.where - ^^^^^ This method can only be used inside an ActiveRecord model + ^^^^^ This method can only be used inside an ActiveRecord model: https://gitlab.com/gitlab-org/gitlab-ce/issues/49653 end SOURCE end @@ -23,7 +23,7 @@ describe RuboCop::Cop::CodeReuse::ActiveRecord do expect_offense(<<~SOURCE) def foo User.where(id: 10) - ^^^^^ This method can only be used inside an ActiveRecord model + ^^^^^ This method can only be used inside an ActiveRecord model: https://gitlab.com/gitlab-org/gitlab-ce/issues/49653 end SOURCE end @@ -40,7 +40,7 @@ describe RuboCop::Cop::CodeReuse::ActiveRecord do expect_offense(<<~SOURCE) def foo project.group(:name) - ^^^^^ This method can only be used inside an ActiveRecord model + ^^^^^ This method can only be used inside an ActiveRecord model: https://gitlab.com/gitlab-org/gitlab-ce/issues/49653 end SOURCE end From 20ebd603bc1b9bf5707c3bdfacaf34ed44e8df0e Mon Sep 17 00:00:00 2001 From: Luke Duncalfe Date: Wed, 22 May 2019 11:58:04 +1200 Subject: [PATCH 103/319] Update path to Usage Statistics in Admin Settings --- doc/user/admin_area/settings/usage_statistics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/user/admin_area/settings/usage_statistics.md b/doc/user/admin_area/settings/usage_statistics.md index 8b5d80efb0d..01d1eb1cd0e 100644 --- a/doc/user/admin_area/settings/usage_statistics.md +++ b/doc/user/admin_area/settings/usage_statistics.md @@ -4,7 +4,7 @@ GitLab Inc. will periodically collect information about your instance in order to perform various actions. All statistics are opt-out, you can enable/disable them from the admin panel -under **Admin area > Settings > Usage statistics**. +under **Admin area > Settings > Metrics and profiling > Usage statistics**. ## Version check **[CORE ONLY]** From 0ded86570c10d24ad4fff7e4fcd4b562bcd397fd Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Tue, 21 May 2019 17:28:28 -0700 Subject: [PATCH 104/319] Fix uninitialized constant with HamlLint::LinterRegistry The migration pod for the GitLab Helm Chart was failing because of the NameError: uninitialized constant HamlLint::Linter::NoPlainNodes::LinterRegistry We now explicitly specify ::HamlLint::LinterRegistry to avoid resolution errors. Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/62125 --- lib/haml_lint/inline_javascript.rb | 2 +- lib/haml_lint/linter/no_plain_nodes.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/haml_lint/inline_javascript.rb b/lib/haml_lint/inline_javascript.rb index 1b17162f71d..da6af92e82b 100644 --- a/lib/haml_lint/inline_javascript.rb +++ b/lib/haml_lint/inline_javascript.rb @@ -7,7 +7,7 @@ unless Rails.env.production? module HamlLint class Linter::InlineJavaScript < Linter - include LinterRegistry + include ::HamlLint::LinterRegistry def visit_filter(node) return unless node.filter_type == 'javascript' diff --git a/lib/haml_lint/linter/no_plain_nodes.rb b/lib/haml_lint/linter/no_plain_nodes.rb index d5cea0d07cf..c39f61fa80d 100644 --- a/lib/haml_lint/linter/no_plain_nodes.rb +++ b/lib/haml_lint/linter/no_plain_nodes.rb @@ -5,7 +5,7 @@ require 'active_support/core_ext/array/grouping' module HamlLint class Linter class NoPlainNodes < Linter - include LinterRegistry + include ::HamlLint::LinterRegistry def visit_tag(node) if inline_plain_node?(node) From 27381e22a92453b23f1ed75406970b37d926f1ec Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Tue, 21 May 2019 19:49:14 -0700 Subject: [PATCH 105/319] Move files from lib/haml_lint to haml_lint Files in lib will be eager loaded and hence will require haml_lint to be loaded. Since this is only a development dependency, we can't assume this gem will be available in production, so it should never be loaded in production. --- .haml-lint.yml | 2 +- {lib/haml_lint => haml_lint}/inline_javascript.rb | 0 {lib/haml_lint => haml_lint}/linter/no_plain_nodes.rb | 0 lib/tasks/haml-lint.rake | 2 +- spec/{lib => }/haml_lint/linter/no_plain_nodes_spec.rb | 1 + 5 files changed, 3 insertions(+), 2 deletions(-) rename {lib/haml_lint => haml_lint}/inline_javascript.rb (100%) rename {lib/haml_lint => haml_lint}/linter/no_plain_nodes.rb (100%) rename spec/{lib => }/haml_lint/linter/no_plain_nodes_spec.rb (95%) diff --git a/.haml-lint.yml b/.haml-lint.yml index 9f3676fa080..0412b24a48c 100644 --- a/.haml-lint.yml +++ b/.haml-lint.yml @@ -7,7 +7,7 @@ exclude: - 'vendor/**/*' - 'spec/**/*' require: - - './lib/haml_lint/linter/no_plain_nodes.rb' + - './haml_lint/linter/no_plain_nodes.rb' linters: AltText: diff --git a/lib/haml_lint/inline_javascript.rb b/haml_lint/inline_javascript.rb similarity index 100% rename from lib/haml_lint/inline_javascript.rb rename to haml_lint/inline_javascript.rb diff --git a/lib/haml_lint/linter/no_plain_nodes.rb b/haml_lint/linter/no_plain_nodes.rb similarity index 100% rename from lib/haml_lint/linter/no_plain_nodes.rb rename to haml_lint/linter/no_plain_nodes.rb diff --git a/lib/tasks/haml-lint.rake b/lib/tasks/haml-lint.rake index 786efd14b1a..305e15d69d5 100644 --- a/lib/tasks/haml-lint.rake +++ b/lib/tasks/haml-lint.rake @@ -1,6 +1,6 @@ unless Rails.env.production? require 'haml_lint/rake_task' - require 'haml_lint/inline_javascript' + require Rails.root.join('haml_lint/inline_javascript') # Workaround for warnings from parser/current # Keep it even if it no longer emits any warnings, diff --git a/spec/lib/haml_lint/linter/no_plain_nodes_spec.rb b/spec/haml_lint/linter/no_plain_nodes_spec.rb similarity index 95% rename from spec/lib/haml_lint/linter/no_plain_nodes_spec.rb rename to spec/haml_lint/linter/no_plain_nodes_spec.rb index 99cc9b9bc8d..08deb5a4e9e 100644 --- a/spec/lib/haml_lint/linter/no_plain_nodes_spec.rb +++ b/spec/haml_lint/linter/no_plain_nodes_spec.rb @@ -3,6 +3,7 @@ require 'spec_helper' require 'haml_lint' require 'haml_lint/spec' +require Rails.root.join('haml_lint/linter/no_plain_nodes') describe HamlLint::Linter::NoPlainNodes do include_context 'linter' From 44b4a31b40336c7bed36031ff24d092ab421a041 Mon Sep 17 00:00:00 2001 From: Luke Bennett Date: Wed, 22 May 2019 03:56:29 +0100 Subject: [PATCH 106/319] Resolve CE/EE diffs in import form Part of single codebase changes. --- app/views/shared/_import_form.html.haml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/views/shared/_import_form.html.haml b/app/views/shared/_import_form.html.haml index 7b593ca4f76..3ee713cf499 100644 --- a/app/views/shared/_import_form.html.haml +++ b/app/views/shared/_import_form.html.haml @@ -18,3 +18,6 @@ = import_will_timeout_message(ci_cd_only) %li = import_svn_message(ci_cd_only) + = render_if_exists 'shared/ci_cd_only_link', ci_cd_only: ci_cd_only + += render_if_exists 'shared/ee/import_form', f: f, ci_cd_only: ci_cd_only From 19b6c8100b20271a24ec4d63cbc1b8da42300e43 Mon Sep 17 00:00:00 2001 From: Luke Bennett Date: Wed, 22 May 2019 04:03:11 +0100 Subject: [PATCH 107/319] Resolve CE/EE diffs in api_spec Part of single codebase changes. --- spec/javascripts/api_spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/javascripts/api_spec.js b/spec/javascripts/api_spec.js index 494b3b934a8..805bb10bda6 100644 --- a/spec/javascripts/api_spec.js +++ b/spec/javascripts/api_spec.js @@ -288,7 +288,7 @@ describe('Api', () => { it('creates a group label', done => { const namespace = 'group/subgroup'; const labelData = { some: 'data' }; - const expectedUrl = `${dummyUrlRoot}/groups/${namespace}/-/labels`; + const expectedUrl = Api.buildUrl(Api.groupLabelsPath).replace(':namespace_path', namespace); const expectedData = { label: labelData, }; From d0bb69c02aa9bfb67308b367f105c85eacd47c78 Mon Sep 17 00:00:00 2001 From: Luke Bennett Date: Wed, 22 May 2019 04:08:30 +0100 Subject: [PATCH 108/319] Resolve CE/EE diffs in dropdown_user Part of single codebase changes. --- .../javascripts/filtered_search/dropdown_user.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/app/assets/javascripts/filtered_search/dropdown_user.js b/app/assets/javascripts/filtered_search/dropdown_user.js index f1e7be6bde1..a65c0012b4d 100644 --- a/app/assets/javascripts/filtered_search/dropdown_user.js +++ b/app/assets/javascripts/filtered_search/dropdown_user.js @@ -18,6 +18,7 @@ export default class DropdownUser extends DropdownAjaxFilter { group_id: this.getGroupId(), project_id: this.getProjectId(), current_user: true, + ...this.projectOrGroupId(), }, onLoadingFinished: () => { this.hideCurrentUser(); @@ -36,4 +37,17 @@ export default class DropdownUser extends DropdownAjaxFilter { getProjectId() { return this.input.getAttribute('data-project-id'); } + + projectOrGroupId() { + const projectId = this.getProjectId(); + const groupId = this.getGroupId(); + if (groupId) { + return { + group_id: groupId, + }; + } + return { + project_id: projectId, + }; + } } From 00c851384e8bc957f601d27c25c36c2ca80b60c1 Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Thu, 16 May 2019 22:07:42 +0200 Subject: [PATCH 109/319] API: Allow to get and set "masked" attribute for variables --- changelogs/unreleased/api_masked_variables.yml | 5 +++++ doc/api/project_level_variables.md | 12 +++++++++--- lib/api/entities.rb | 1 + lib/api/variables.rb | 2 ++ spec/requests/api/variables_spec.rb | 5 ++++- 5 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 changelogs/unreleased/api_masked_variables.yml diff --git a/changelogs/unreleased/api_masked_variables.yml b/changelogs/unreleased/api_masked_variables.yml new file mode 100644 index 00000000000..3605339cb91 --- /dev/null +++ b/changelogs/unreleased/api_masked_variables.yml @@ -0,0 +1,5 @@ +--- +title: 'API: Allow to get and set "masked" attribute for variables' +merge_request: 28381 +author: Mathieu Parent +type: added diff --git a/doc/api/project_level_variables.md b/doc/api/project_level_variables.md index 4a6f5624394..3b00f6f140e 100644 --- a/doc/api/project_level_variables.md +++ b/doc/api/project_level_variables.md @@ -52,7 +52,9 @@ curl --header "PRIVATE-TOKEN: " "https://gitlab.example.com/a { "key": "TEST_VARIABLE_1", "variable_type": "env_var", - "value": "TEST_1" + "value": "TEST_1", + "protected": false, + "masked": true } ``` @@ -71,6 +73,7 @@ POST /projects/:id/variables | `value` | string | yes | The `value` of a variable | | `variable_type` | string | no | The type of a variable. Available types are: `env_var` (default) and `file` | | `protected` | boolean | no | Whether the variable is protected | +| `masked` | boolean | no | Whether the variable is masked | ``` curl --request POST --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/projects/1/variables" --form "key=NEW_VARIABLE" --form "value=new value" @@ -81,7 +84,8 @@ curl --request POST --header "PRIVATE-TOKEN: " "https://gitla "key": "NEW_VARIABLE", "value": "new value", "variable_type": "env_var", - "protected": false + "protected": false, + "masked": false } ``` @@ -100,6 +104,7 @@ PUT /projects/:id/variables/:key | `value` | string | yes | The `value` of a variable | | `variable_type` | string | no | The type of a variable. Available types are: `env_var` (default) and `file` | | `protected` | boolean | no | Whether the variable is protected | +| `masked` | boolean | no | Whether the variable is masked | ``` curl --request PUT --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/projects/1/variables/NEW_VARIABLE" --form "value=updated value" @@ -110,7 +115,8 @@ curl --request PUT --header "PRIVATE-TOKEN: " "https://gitlab "key": "NEW_VARIABLE", "value": "updated value", "variable_type": "env_var", - "protected": true + "protected": true, + "masked": false } ``` diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 1a3318fe849..96a1ccefbe5 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -1303,6 +1303,7 @@ module API class Variable < Grape::Entity expose :variable_type, :key, :value expose :protected?, as: :protected, if: -> (entity, _) { entity.respond_to?(:protected?) } + expose :masked?, as: :masked, if: -> (entity, _) { entity.respond_to?(:masked?) } end class Pipeline < PipelineBasic diff --git a/lib/api/variables.rb b/lib/api/variables.rb index a1bb21b3a06..b07dd1bab79 100644 --- a/lib/api/variables.rb +++ b/lib/api/variables.rb @@ -55,6 +55,7 @@ module API requires :key, type: String, desc: 'The key of the variable' requires :value, type: String, desc: 'The value of the variable' optional :protected, type: String, desc: 'Whether the variable is protected' + optional :masked, type: String, desc: 'Whether the variable is masked' optional :variable_type, type: String, values: Ci::Variable.variable_types.keys, desc: 'The type of variable, must be one of env_var or file. Defaults to env_var' if Gitlab.ee? @@ -81,6 +82,7 @@ module API optional :key, type: String, desc: 'The key of the variable' optional :value, type: String, desc: 'The value of the variable' optional :protected, type: String, desc: 'Whether the variable is protected' + optional :masked, type: String, desc: 'Whether the variable is masked' optional :variable_type, type: String, values: Ci::Variable.variable_types.keys, desc: 'The type of variable, must be one of env_var or file' if Gitlab.ee? diff --git a/spec/requests/api/variables_spec.rb b/spec/requests/api/variables_spec.rb index cc07869a744..55b1419a004 100644 --- a/spec/requests/api/variables_spec.rb +++ b/spec/requests/api/variables_spec.rb @@ -43,6 +43,7 @@ describe API::Variables do expect(response).to have_gitlab_http_status(200) expect(json_response['value']).to eq(variable.value) expect(json_response['protected']).to eq(variable.protected?) + expect(json_response['masked']).to eq(variable.masked?) expect(json_response['variable_type']).to eq('env_var') end @@ -74,13 +75,14 @@ describe API::Variables do context 'authorized user with proper permissions' do it 'creates variable' do expect do - post api("/projects/#{project.id}/variables", user), params: { key: 'TEST_VARIABLE_2', value: 'PROTECTED_VALUE_2', protected: true } + post api("/projects/#{project.id}/variables", user), params: { key: 'TEST_VARIABLE_2', value: 'PROTECTED_VALUE_2', protected: true, masked: true } end.to change {project.variables.count}.by(1) expect(response).to have_gitlab_http_status(201) expect(json_response['key']).to eq('TEST_VARIABLE_2') expect(json_response['value']).to eq('PROTECTED_VALUE_2') expect(json_response['protected']).to be_truthy + expect(json_response['masked']).to be_truthy expect(json_response['variable_type']).to eq('env_var') end @@ -93,6 +95,7 @@ describe API::Variables do expect(json_response['key']).to eq('TEST_VARIABLE_2') expect(json_response['value']).to eq('VALUE_2') expect(json_response['protected']).to be_falsey + expect(json_response['masked']).to be_falsey expect(json_response['variable_type']).to eq('file') end From 07a353259424cd225368ca4af59883eebf10066d Mon Sep 17 00:00:00 2001 From: Valery Sizov Date: Tue, 21 May 2019 18:04:09 +0300 Subject: [PATCH 110/319] Geo: Remove Gitlab::LfsToken::LegacyRedisDeviseToken implementation We kept it for smooth update only --- ...visetoken-implementation-and-usage-geo.yml | 5 + lib/gitlab/lfs_token.rb | 42 +------- spec/lib/gitlab/lfs_token_spec.rb | 100 ++++-------------- 3 files changed, 29 insertions(+), 118 deletions(-) create mode 100644 changelogs/unreleased/8723-geo-remove-gitlab-lfstoken-legacyredisdevisetoken-implementation-and-usage-geo.yml diff --git a/changelogs/unreleased/8723-geo-remove-gitlab-lfstoken-legacyredisdevisetoken-implementation-and-usage-geo.yml b/changelogs/unreleased/8723-geo-remove-gitlab-lfstoken-legacyredisdevisetoken-implementation-and-usage-geo.yml new file mode 100644 index 00000000000..173c7d9383e --- /dev/null +++ b/changelogs/unreleased/8723-geo-remove-gitlab-lfstoken-legacyredisdevisetoken-implementation-and-usage-geo.yml @@ -0,0 +1,5 @@ +--- +title: 'Geo: Remove Gitlab::LfsToken::LegacyRedisDeviseToken implementation and usage' +merge_request: 28546 +author: +type: changed diff --git a/lib/gitlab/lfs_token.rb b/lib/gitlab/lfs_token.rb index 31e6fc9d8c7..124e34562c1 100644 --- a/lib/gitlab/lfs_token.rb +++ b/lib/gitlab/lfs_token.rb @@ -35,8 +35,7 @@ module Gitlab end def token_valid?(token_to_check) - HMACToken.new(actor).token_valid?(token_to_check) || - LegacyRedisDeviseToken.new(actor).token_valid?(token_to_check) + HMACToken.new(actor).token_valid?(token_to_check) end def deploy_key_pushable?(project) @@ -103,44 +102,5 @@ module Gitlab Settings.attr_encrypted_db_key_base.first(16) end end - - # TODO: LegacyRedisDeviseToken and references need to be removed after - # next released milestone - # - class LegacyRedisDeviseToken - TOKEN_LENGTH = 50 - DEFAULT_EXPIRY_TIME = 1800 * 1000 # 30 mins - - def initialize(actor) - @actor = actor - end - - def token_valid?(token_to_check) - Devise.secure_compare(stored_token, token_to_check) - end - - def stored_token - Gitlab::Redis::SharedState.with { |redis| redis.get(state_key) } - end - - # This method exists purely to facilitate legacy testing to ensure the - # same redis key is used. - # - def store_new_token(expiry_time_in_ms = DEFAULT_EXPIRY_TIME) - Gitlab::Redis::SharedState.with do |redis| - new_token = Devise.friendly_token(TOKEN_LENGTH) - redis.set(state_key, new_token, px: expiry_time_in_ms) - new_token - end - end - - private - - attr_reader :actor - - def state_key - "gitlab:lfs_token:#{actor.class.name.underscore}_#{actor.id}" - end - end end end diff --git a/spec/lib/gitlab/lfs_token_spec.rb b/spec/lib/gitlab/lfs_token_spec.rb index 8961ecc4be0..701ed1f3a1b 100644 --- a/spec/lib/gitlab/lfs_token_spec.rb +++ b/spec/lib/gitlab/lfs_token_spec.rb @@ -77,42 +77,35 @@ describe Gitlab::LfsToken, :clean_gitlab_redis_shared_state do let(:actor) { create(:user, username: 'test_user_lfs_1') } let(:lfs_token) { described_class.new(actor) } - context 'for an HMAC token' do - before do - # We're not interested in testing LegacyRedisDeviseToken here - allow(Gitlab::LfsToken::LegacyRedisDeviseToken).to receive_message_chain(:new, :token_valid?).and_return(false) + context 'where the token is invalid' do + context "because it's junk" do + it 'returns false' do + expect(lfs_token.token_valid?('junk')).to be_falsey + end end - context 'where the token is invalid' do - context "because it's junk" do - it 'returns false' do - expect(lfs_token.token_valid?('junk')).to be_falsey - end + context "because it's been fiddled with" do + it 'returns false' do + fiddled_token = lfs_token.token.tap { |token| token[0] = 'E' } + expect(lfs_token.token_valid?(fiddled_token)).to be_falsey end + end - context "because it's been fiddled with" do - it 'returns false' do - fiddled_token = lfs_token.token.tap { |token| token[0] = 'E' } - expect(lfs_token.token_valid?(fiddled_token)).to be_falsey - end + context "because it was generated with a different secret" do + it 'returns false' do + different_actor = create(:user, username: 'test_user_lfs_2') + different_secret_token = described_class.new(different_actor).token + expect(lfs_token.token_valid?(different_secret_token)).to be_falsey end + end - context "because it was generated with a different secret" do - it 'returns false' do - different_actor = create(:user, username: 'test_user_lfs_2') - different_secret_token = described_class.new(different_actor).token - expect(lfs_token.token_valid?(different_secret_token)).to be_falsey - end - end - - context "because it's expired" do - it 'returns false' do - expired_token = lfs_token.token - # Needs to be at least 1860 seconds, because the default expiry is - # 1800 seconds with an additional 60 second leeway. - Timecop.freeze(Time.now + 1865) do - expect(lfs_token.token_valid?(expired_token)).to be_falsey - end + context "because it's expired" do + it 'returns false' do + expired_token = lfs_token.token + # Needs to be at least 1860 seconds, because the default expiry is + # 1800 seconds with an additional 60 second leeway. + Timecop.freeze(Time.now + 1865) do + expect(lfs_token.token_valid?(expired_token)).to be_falsey end end end @@ -123,53 +116,6 @@ describe Gitlab::LfsToken, :clean_gitlab_redis_shared_state do end end end - - context 'for a LegacyRedisDevise token' do - before do - # We're not interested in testing HMACToken here - allow_any_instance_of(Gitlab::LfsToken::HMACToken).to receive(:token_valid?).and_return(false) - end - - context 'where the token is invalid' do - context "because it's junk" do - it 'returns false' do - expect(lfs_token.token_valid?('junk')).to be_falsey - end - end - - context "because it's been fiddled with" do - it 'returns false' do - generated_token = Gitlab::LfsToken::LegacyRedisDeviseToken.new(actor).store_new_token - fiddled_token = generated_token.tap { |token| token[0] = 'E' } - expect(lfs_token.token_valid?(fiddled_token)).to be_falsey - end - end - - context "because it was generated with a different secret" do - it 'returns false' do - different_actor = create(:user, username: 'test_user_lfs_2') - different_secret_token = described_class.new(different_actor).token - expect(lfs_token.token_valid?(different_secret_token)).to be_falsey - end - end - - context "because it's expired" do - it 'returns false' do - generated_token = Gitlab::LfsToken::LegacyRedisDeviseToken.new(actor).store_new_token(1) - # We need a real sleep here because we need to wait for redis to expire the key. - sleep(0.01) - expect(lfs_token.token_valid?(generated_token)).to be_falsey - end - end - end - - context 'where the token is valid' do - it 'returns true' do - generated_token = Gitlab::LfsToken::LegacyRedisDeviseToken.new(actor).store_new_token - expect(lfs_token.token_valid?(generated_token)).to be_truthy - end - end - end end describe '#deploy_key_pushable?' do From 52d24e66cec1fa6c0100adb64effd2073869cd8b Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Sat, 18 May 2019 21:58:21 -0700 Subject: [PATCH 111/319] Bump shoulda-matchers to 4.0.1 This removes the warning when using Ruby 2.6: BigDecimal.new is deprecated; use BigDecimal() method instead. This also adds Rails 5 support, which eliminates the need for the monkey patch to handle https://github.com/thoughtbot/shoulda-matchers/issues/913. --- Gemfile | 2 +- Gemfile.lock | 6 ++--- spec/support/shoulda/matchers/rails_shim.rb | 27 --------------------- 3 files changed, 4 insertions(+), 31 deletions(-) delete mode 100644 spec/support/shoulda/matchers/rails_shim.rb diff --git a/Gemfile b/Gemfile index b6804a94971..e2842ca27db 100644 --- a/Gemfile +++ b/Gemfile @@ -379,7 +379,7 @@ group :development, :test do end group :test do - gem 'shoulda-matchers', '~> 3.1.2', require: false + gem 'shoulda-matchers', '~> 4.0.1', require: false gem 'email_spec', '~> 2.2.0' gem 'json-schema', '~> 2.8.0' gem 'webmock', '~> 3.5.1' diff --git a/Gemfile.lock b/Gemfile.lock index 2dbff1674df..a63b7cc84aa 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -857,8 +857,8 @@ GEM sexp_processor (4.12.0) sham_rack (1.3.6) rack - shoulda-matchers (3.1.2) - activesupport (>= 4.0.0) + shoulda-matchers (4.0.1) + activesupport (>= 4.2.0) sidekiq (5.2.7) connection_pool (~> 2.2, >= 2.2.2) rack (>= 1.5.0) @@ -1199,7 +1199,7 @@ DEPENDENCIES sentry-raven (~> 2.7) settingslogic (~> 2.0.9) sham_rack (~> 1.3.6) - shoulda-matchers (~> 3.1.2) + shoulda-matchers (~> 4.0.1) sidekiq (~> 5.2.7) sidekiq-cron (~> 1.0) simple_po_parser (~> 1.1.2) diff --git a/spec/support/shoulda/matchers/rails_shim.rb b/spec/support/shoulda/matchers/rails_shim.rb deleted file mode 100644 index 8d70598beb5..00000000000 --- a/spec/support/shoulda/matchers/rails_shim.rb +++ /dev/null @@ -1,27 +0,0 @@ -# monkey patch which fixes serialization matcher in Rails 5 -# https://github.com/thoughtbot/shoulda-matchers/issues/913 -# This can be removed when a new version of shoulda-matchers -# is released -module Shoulda - module Matchers - class RailsShim - def self.serialized_attributes_for(model) - if defined?(::ActiveRecord::Type::Serialized) - # Rails 5+ - serialized_columns = model.columns.select do |column| - model.type_for_attribute(column.name).is_a?( - ::ActiveRecord::Type::Serialized - ) - end - - serialized_columns.inject({}) do |hash, column| # rubocop:disable Style/EachWithObject - hash[column.name.to_s] = model.type_for_attribute(column.name).coder - hash - end - else - model.serialized_attributes - end - end - end - end -end From d707e2a49f2efe4670b5ebe62fb61554640ca7e9 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Sun, 19 May 2019 04:01:16 -0700 Subject: [PATCH 112/319] Ensure subject passes validations Rails 5 requires that belongs_to associations have the associated record present. These tests were failing because they had nil values. --- spec/models/ci/pipeline_schedule_spec.rb | 2 ++ spec/models/clusters/cluster_spec.rb | 2 ++ 2 files changed, 4 insertions(+) diff --git a/spec/models/ci/pipeline_schedule_spec.rb b/spec/models/ci/pipeline_schedule_spec.rb index 1bfc14d2839..42d4769a921 100644 --- a/spec/models/ci/pipeline_schedule_spec.rb +++ b/spec/models/ci/pipeline_schedule_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' describe Ci::PipelineSchedule do + subject { build(:ci_pipeline_schedule) } + it { is_expected.to belong_to(:project) } it { is_expected.to belong_to(:owner) } diff --git a/spec/models/clusters/cluster_spec.rb b/spec/models/clusters/cluster_spec.rb index 58203da5b22..f9d8ffd06e0 100644 --- a/spec/models/clusters/cluster_spec.rb +++ b/spec/models/clusters/cluster_spec.rb @@ -5,6 +5,8 @@ require 'spec_helper' describe Clusters::Cluster do it_behaves_like 'having unique enum values' + subject { build(:cluster) } + it { is_expected.to belong_to(:user) } it { is_expected.to have_many(:cluster_projects) } it { is_expected.to have_many(:projects) } From 37a335e60edd4f4c8b61fd2f9ffe0f1d27e3bfb8 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Tue, 21 May 2019 14:07:37 -0700 Subject: [PATCH 113/319] Fix remaining failures in shoulda-matcher Starting with Rails 5, belongs_to now adds a presence validation to the association, and so as of shoulda-matchers 4.0.0 the belong_to matcher follows suit and tests that this validation is there by setting the association to nil and asserting that there are validation errors. This exposed an error with the `validate_branches` method: we need to check the source and target project exist. --- app/models/merge_request.rb | 2 ++ spec/models/deployment_spec.rb | 4 ++-- spec/models/environment_spec.rb | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index df162e4844c..311ba1ce6bd 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -581,6 +581,8 @@ class MergeRequest < ApplicationRecord end def validate_branches + return unless target_project && source_project + if target_project == source_project && target_branch == source_branch errors.add :branch_conflict, "You can't use same project/branch for source and target" return diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb index f51322e1404..1dceef3fc00 100644 --- a/spec/models/deployment_spec.rb +++ b/spec/models/deployment_spec.rb @@ -5,8 +5,8 @@ require 'spec_helper' describe Deployment do subject { build(:deployment) } - it { is_expected.to belong_to(:project) } - it { is_expected.to belong_to(:environment) } + it { is_expected.to belong_to(:project).required } + it { is_expected.to belong_to(:environment).required } it { is_expected.to belong_to(:user) } it { is_expected.to belong_to(:deployable) } diff --git a/spec/models/environment_spec.rb b/spec/models/environment_spec.rb index 17246f238e0..7233d2454c6 100644 --- a/spec/models/environment_spec.rb +++ b/spec/models/environment_spec.rb @@ -6,7 +6,7 @@ describe Environment do let(:project) { create(:project, :stubbed_repository) } subject(:environment) { create(:environment, project: project) } - it { is_expected.to belong_to(:project) } + it { is_expected.to belong_to(:project).required } it { is_expected.to have_many(:deployments) } it { is_expected.to delegate_method(:stop_action).to(:last_deployment) } From fa3aa0c5a7e8910a658572dce3ad5291e1112db1 Mon Sep 17 00:00:00 2001 From: Kartikey Tanna Date: Wed, 22 May 2019 07:59:15 +0000 Subject: [PATCH 114/319] #61441 Allow user to set email ID before setting up 2FA --- .../enforces_two_factor_authentication.rb | 2 +- changelogs/unreleased/61441.yml | 5 +++++ .../application_controller_spec.rb | 21 ++++++++++++++++--- 3 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 changelogs/unreleased/61441.yml diff --git a/app/controllers/concerns/enforces_two_factor_authentication.rb b/app/controllers/concerns/enforces_two_factor_authentication.rb index 71bdef8ce03..0fddf15d197 100644 --- a/app/controllers/concerns/enforces_two_factor_authentication.rb +++ b/app/controllers/concerns/enforces_two_factor_authentication.rb @@ -16,7 +16,7 @@ module EnforcesTwoFactorAuthentication end def check_two_factor_requirement - if two_factor_authentication_required? && current_user && !current_user.two_factor_enabled? && !skip_two_factor? + if two_factor_authentication_required? && current_user && !current_user.temp_oauth_email? && !current_user.two_factor_enabled? && !skip_two_factor? redirect_to profile_two_factor_auth_path end end diff --git a/changelogs/unreleased/61441.yml b/changelogs/unreleased/61441.yml new file mode 100644 index 00000000000..2ad0c6f62d3 --- /dev/null +++ b/changelogs/unreleased/61441.yml @@ -0,0 +1,5 @@ +--- +title: Allow user to set primary email first when 2FA is required +merge_request: 28097 +author: Kartikey Tanna +type: fixed diff --git a/spec/controllers/application_controller_spec.rb b/spec/controllers/application_controller_spec.rb index 7296a4b4526..5ecd1b6b7c8 100644 --- a/spec/controllers/application_controller_spec.rb +++ b/spec/controllers/application_controller_spec.rb @@ -206,8 +206,19 @@ describe ApplicationController do describe '#check_two_factor_requirement' do subject { controller.send :check_two_factor_requirement } + it 'does not redirect if user has temporary oauth email' do + oauth_user = create(:user, email: 'temp-email-for-oauth@email.com') + allow(controller).to receive(:two_factor_authentication_required?).and_return(true) + allow(controller).to receive(:current_user).and_return(oauth_user) + + expect(controller).not_to receive(:redirect_to) + + subject + end + it 'does not redirect if 2FA is not required' do allow(controller).to receive(:two_factor_authentication_required?).and_return(false) + expect(controller).not_to receive(:redirect_to) subject @@ -216,6 +227,7 @@ describe ApplicationController do it 'does not redirect if user is not logged in' do allow(controller).to receive(:two_factor_authentication_required?).and_return(true) allow(controller).to receive(:current_user).and_return(nil) + expect(controller).not_to receive(:redirect_to) subject @@ -223,8 +235,9 @@ describe ApplicationController do it 'does not redirect if user has 2FA enabled' do allow(controller).to receive(:two_factor_authentication_required?).and_return(true) - allow(controller).to receive(:current_user).twice.and_return(user) + allow(controller).to receive(:current_user).thrice.and_return(user) allow(user).to receive(:two_factor_enabled?).and_return(true) + expect(controller).not_to receive(:redirect_to) subject @@ -232,9 +245,10 @@ describe ApplicationController do it 'does not redirect if 2FA setup can be skipped' do allow(controller).to receive(:two_factor_authentication_required?).and_return(true) - allow(controller).to receive(:current_user).twice.and_return(user) + allow(controller).to receive(:current_user).thrice.and_return(user) allow(user).to receive(:two_factor_enabled?).and_return(false) allow(controller).to receive(:skip_two_factor?).and_return(true) + expect(controller).not_to receive(:redirect_to) subject @@ -242,10 +256,11 @@ describe ApplicationController do it 'redirects to 2FA setup otherwise' do allow(controller).to receive(:two_factor_authentication_required?).and_return(true) - allow(controller).to receive(:current_user).twice.and_return(user) + allow(controller).to receive(:current_user).thrice.and_return(user) allow(user).to receive(:two_factor_enabled?).and_return(false) allow(controller).to receive(:skip_two_factor?).and_return(false) allow(controller).to receive(:profile_two_factor_auth_path) + expect(controller).to receive(:redirect_to) subject From 628f03cb8b203a3ba6622e729cb2ae5da6b71dbb Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Wed, 22 May 2019 12:15:34 +0800 Subject: [PATCH 115/319] Move package-and-qa to review stage from qa stage This way even if review-deploy failed we can still run it. --- .gitlab/ci/qa.gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml index 122ed622ee2..6b23af952e6 100644 --- a/.gitlab/ci/qa.gitlab-ci.yml +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -1,6 +1,6 @@ package-and-qa: image: ruby:2.6-alpine - stage: qa + stage: review # So even if review-deploy failed we can still run this when: manual before_script: [] dependencies: [] From 54fbc045d3f895f9db63d3f7c7f9ca6bf99d9ebc Mon Sep 17 00:00:00 2001 From: Walmyr Lima Date: Wed, 22 May 2019 12:04:23 +0200 Subject: [PATCH 116/319] Minor improvement on resources doc --- qa/qa/resource/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qa/qa/resource/README.md b/qa/qa/resource/README.md index 4cdeb3f42a2..2c8859b6599 100644 --- a/qa/qa/resource/README.md +++ b/qa/qa/resource/README.md @@ -1,7 +1,7 @@ # Resource class in GitLab QA Resources are primarily created using Browser UI steps, but can also -be created via the API. +be created via the API or the CLI. ## How to properly implement a resource class? From 3b1f6e8df663fcf50967f01a471af586f47db4fe Mon Sep 17 00:00:00 2001 From: Walmyr Date: Wed, 22 May 2019 10:36:52 +0000 Subject: [PATCH 117/319] Update writing e2e tests doc This is a second iteration to address the Resources section. In a third iteration the Page Object section will be addressed. --- qa/docs/WRITING_TESTS_FROM_SCRATCH.md | 108 +++++++++++++++++++++++++- 1 file changed, 105 insertions(+), 3 deletions(-) diff --git a/qa/docs/WRITING_TESTS_FROM_SCRATCH.md b/qa/docs/WRITING_TESTS_FROM_SCRATCH.md index a6daffc964e..f91286c232e 100644 --- a/qa/docs/WRITING_TESTS_FROM_SCRATCH.md +++ b/qa/docs/WRITING_TESTS_FROM_SCRATCH.md @@ -188,7 +188,7 @@ def select_label_and_refresh(label) end ``` -By creating a reusable `select_label_and_refresh` method we remove the code duplication, and later we can move this method to a Page Object class that will be created for easier maintenance purposes. +By creating a reusable `select_label_and_refresh` method, we remove the code duplication, and later we can move this method to a Page Object class that will be created for easier maintenance purposes. > Notice that the reusable method is created in the bottom of the file. The reason for that is that reading the code should be similar to reading a newspaper, where high-level information is at the top, like the title and summary of the news, while low level, or more specific information, is at the bottom. @@ -361,7 +361,109 @@ Finally, the `select_label_and_refresh` method is changed to `select_labels_and_ ### 7. Resources -TBD. +You can think of resources as anything that can be created on GitLab CE or EE, either through the GUI, the API, or the CLI. + +With that in mind, resources can be a project, an epic, an issue, a label, a commit, etc. + +As you saw in the tests' pre-conditions and the optimization sections, we're already creating some of these resources, and we are doing that by calling the `fabricate_via_api!` method. + +> We could be using the `fabricate!` method instead, which would use the `fabricate_via_api!` method if it exists, and fallback to GUI fabrication otherwise, but we recommend being explicit to make it clear what the test does. Also, we always recommend fabricating resources via API since this makes tests faster and more reliable. + +For our test suite example, the [project resource](https://gitlab.com/gitlab-org/gitlab-ee/blob/d3584e80b4236acdf393d815d604801573af72cc/qa/qa/resource/project.rb#L55) already had a `fabricate_via_api!` method available, while other resources don't have it, so we will have to create them, like for the issue and label resources. Also, we will have to make a small change in the project resource to expose its `id` attribute so that we can refer to it when fabricating the issue. + +#### Implementation + +Following we describe the changes needed in every of the before-mentioned resource files. + +**Project resource** + +Let's start with the smallest change. + +In the [project resource](https://gitlab.com/gitlab-org/gitlab-ee/blob/master/qa/qa/resource/project.rb), let's expose its `id` attribute. + +Add the following `attribute :id` right below the [`attribute :description`](https://gitlab.com/gitlab-org/gitlab-ee/blob/d3584e80b4236acdf393d815d604801573af72cc/qa/qa/resource/project.rb#L11). + +> This line is needed to allow for issues and labels to be automatically added to a project when fabricating them via API. + +**Issue resource** + +Now, let's make it possible to create an issue resource through the API. + +First, in the [issue resource](https://gitlab.com/gitlab-org/gitlab-ee/blob/d3584e80b4236acdf393d815d604801573af72cc/qa/qa/resource/issue.rb), let's expose its labels attribute. + +Add the following `attribute :labels` right below the [`attribute :title`](https://gitlab.com/gitlab-org/gitlab-ee/blob/d3584e80b4236acdf393d815d604801573af72cc/qa/qa/resource/issue.rb#L15). + +> This line is needed to allow for labels to be automatically added to an issue when fabricating it via API. + +Next, add the following code right below the [`fabricate!`](https://gitlab.com/gitlab-org/gitlab-ee/blob/d3584e80b4236acdf393d815d604801573af72cc/qa/qa/resource/issue.rb#L27) method. + +```ruby +def api_get_path + "/projects/#{project.id}/issues/#{id}" +end + +def api_post_path + "/projects/#{project.id}/issues" +end + +def api_post_body + { + title: title, + labels: [labels] + } +end +``` + +By defining the `api_get_path` method, we allow the [`ApiFabricator`](https://gitlab.com/gitlab-org/gitlab-ee/blob/master/qa/qa/resource/api_fabricator.rb) module to know which path to use to get a single issue. + +> This `GET` path can be found in the [public API documentation](https://docs.gitlab.com/ee/api/issues.html#single-issue). + +By defining the `api_post_path` method, we allow the [`ApiFabricator`](https://gitlab.com/gitlab-org/gitlab-ee/blob/master/qa/qa/resource/api_fabricator.rb) module to know which path to use to create a new issue in a specific project. + +> This `POST` path can be found in the [public API documentation](https://docs.gitlab.com/ee/api/issues.html#new-issue). + +By defining the `api_post_body` method, we allow the [`ApiFabricator.api_post`](https://gitlab.com/gitlab-org/gitlab-ee/blob/a9177ca1812bac57e2b2fa4560e1d5dd8ffac38b/qa/qa/resource/api_fabricator.rb#L68) method to know which data to send when making the `POST` request. + +> Notice that we pass both `title` and `labels` attributes in the `api_post_body`, where `labels` receives an array of labels, and [`title` is required](https://docs.gitlab.com/ee/api/issues.html#new-issue). + +**Label resource** + +Finally, let's make it possible to create label resources through the API. + +Add the following code right below the [`fabricate!`](https://gitlab.com/gitlab-org/gitlab-ee/blob/a9177ca1812bac57e2b2fa4560e1d5dd8ffac38b/qa/qa/resource/label.rb#L36) method. + +```ruby +def resource_web_url(resource) + super +rescue ResourceURLMissingError + # this particular resource does not expose a web_url property +end + +def api_get_path + raise NotImplementedError, "The Labels API doesn't expose a single-resource endpoint so this method cannot be properly implemented." +end + +def api_post_path + "/projects/#{project}/labels" +end + +def api_post_body + { + name: @title, + color: @color + } +end +``` + +By defining the `resource_web_url(resource)` method, we override the one from the [`ApiFabricator`](https://gitlab.com/gitlab-org/gitlab-ee/blob/master/qa/qa/resource/api_fabricator.rb#L44) module. We do that to avoid failing the test due to this particular resource not exposing a `web_url` property. + +By defining the `api_get_path` method, we **would** allow for the [`ApiFabricator`](https://gitlab.com/gitlab-org/gitlab-ee/blob/master/qa/qa/resource/api_fabricator.rb) module to know which path to use to get a single label, but since there's no path available for that in the publich API, we raise a `NotImplementedError` instead. + +By defining the `api_post_path` method, we allow for the [`ApiFabricator `](https://gitlab.com/gitlab-org/gitlab-ee/blob/master/qa/qa/resource/api_fabricator.rb) module to know which path to use to create a new label in a specific project. + +By defining the `api_post_body` method, we we allow for the [`ApiFabricator.api_post`](https://gitlab.com/gitlab-org/gitlab-ee/blob/a9177ca1812bac57e2b2fa4560e1d5dd8ffac38b/qa/qa/resource/api_fabricator.rb#L68) method to know which data to send when making the `POST` request. + +> Notice that we pass both `name` and `color` attributes in the `api_post_body` since [those are required](https://docs.gitlab.com/ee/api/labels.html#create-a-new-label). ### 8. Page Objects @@ -377,4 +479,4 @@ Now, let's go back to our examples. #### Adding testability -TBD. \ No newline at end of file +TBD. From 325f8590dbabee302136c669152c064aaec8093c Mon Sep 17 00:00:00 2001 From: Mark Fletcher Date: Wed, 22 May 2019 11:45:13 +0100 Subject: [PATCH 118/319] Add group label docs to Issue Workflow --- .../contributing/issue_workflow.md | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/doc/development/contributing/issue_workflow.md b/doc/development/contributing/issue_workflow.md index 0e1ab8663ed..fef94c0a4b5 100644 --- a/doc/development/contributing/issue_workflow.md +++ b/doc/development/contributing/issue_workflow.md @@ -121,6 +121,27 @@ The Stage labels are used to generate the [direction pages][direction-pages] aut [devops-stages]: https://about.gitlab.com/direction/#devops-stages [direction-pages]: https://about.gitlab.com/direction/ +## Group labels + +Group labels specify which [groups][structure-groups] the issue belongs to. + +Examples include: + +- ~"group:control" +- ~"group:editor" + +These labels should be mutually exclusive. If an issue belongs to multiple +groups, the most relevant should be used. + +Groups are nested beneath a particular stage, so only one stage label and one group label +should be applied to a single issue. You can find the groups listed in the +[Product Categories pages][product-categories]. For example, ~"group:control" and +~"group:framework" labels can be applied to issues related to the [Manage stage][manage-stage]. + +[structure-groups]: https://about.gitlab.com/company/team/structure/#groups +[product-categories]: https://about.gitlab.com/handbook/product/categories/ +[manage-stage]: https://about.gitlab.com/handbook/product/categories/#manage-stage + ## Release Scoping labels Release Scoping labels help us clearly communicate expectations of the work for the From eb444740cd20b55ca18202430717b134aefeba01 Mon Sep 17 00:00:00 2001 From: GitLab Release Tools Bot Date: Wed, 22 May 2019 11:13:03 +0000 Subject: [PATCH 119/319] Update CHANGELOG.md for 11.11.0 [ci skip] --- CHANGELOG.md | 185 ++++++++++++++++++ ...ve-ee-diff-for-boards-issue-card-inner.yml | 5 - .../10083-dropdown-ce-ee-difference.yml | 5 - ...327-enable-reliable-fetcher-by-default.yml | 5 - ...08-allow-license-import-during-install.yml | 5 - .../10921-display-scoped-labels-ce.yml | 5 - changelogs/unreleased/11254-overflow-ce.yml | 5 - .../18432-switch-to-sassc-rails.yml | 5 - .../24704-download-repository-path.yml | 5 - ...tor-to-validate_url-gem-implementation.yml | 5 - .../25604-add-dotnet-core-yaml-template.yml | 5 - ...sitory-scope-for-personal-access-token.yml | 5 - ...added_omniauth_openid_connect_startegy.yml | 5 - .../unreleased/27424-tklk-gitea-logo.yml | 5 - ...119-remove-note-multi-line-suggestions.yml | 5 - .../unreleased/28741-play-all-manual-jobs.yml | 5 - ...30093-apply-bfg-object-map-to-database.yml | 5 - .../30157-api-expose-single-environment.yml | 5 - ...add-time-tracking-issue-boards-sidebar.yml | 5 - changelogs/unreleased/46048-canary-next.yml | 5 - .../unreleased/46806-typed-ci-variables.yml | 5 - .../47327-fix-github-import-visibility.yml | 5 - .../unreleased/47584-label-text-color.yml | 5 - .../48479-auto-direction-for-issue-title.yml | 5 - .../50926-sort-by-due-date-and-popularity.yml | 5 - ...rt-prometheus-for-group-level-clusters.yml | 5 - ...peline-and-manually-running-later-jobs.yml | 5 - .../53138-add-metrics-usage-ping.yml | 5 - .../unreleased/53279-fix-updated_at-api.yml | 5 - .../53973-fix-subpixel-border-issue.yml | 5 - ...ssion-when-applying-a-suggested-change.yml | 5 - .../55948-help-text-formatting-wiki.yml | 5 - ...etes-namespace-service-account-backend.yml | 5 - .../56838-allow-guest-access-to-releases.yml | 5 - .../57017-add-toast-success-message.yml | 5 - .../57077-add-salesforce-omniauth.yml | 5 - .../57171-add-dashboard-settings.yml | 5 - ...7247-show-prioritized-labels-to-guests.yml | 5 - .../unreleased/57293-fix-image-rename.yml | 5 - ...57654-add-time-preferences-for-user-fe.yml | 5 - changelogs/unreleased/57815.yml | 5 - ...or-too-close-together-in-pipeline-list.yml | 5 - .../58252-web-ide-dropdown-duplicates.yml | 5 - .../58293-extract-discussion-actions.yml | 5 - .../58294-discussion-notes-component.yml | 5 - ...361-issue-create-system-note-timestamp.yml | 5 - .../58748-update-nodejs-to-10-15-3.yml | 5 - .../58850-fix-misplaced-swipe-view-26969.yml | 5 - .../unreleased/59034-external-link-button.yml | 5 - .../unreleased/59275-cluster-form-hints.yml | 5 - .../59514-uploading-images-base64.yml | 5 - .../unreleased/5966-rebase-with-block.yml | 5 - changelogs/unreleased/59708-vendor-css.yml | 5 - .../unreleased/59921-pipeline-schedule.yml | 5 - .../60026-group-member-count-bg.yml | 5 - changelogs/unreleased/60224-btn-env.yml | 5 - changelogs/unreleased/60261-save-btn-env.yml | 5 - .../60387-use-icons-in-user-popovers.yml | 5 - .../60462-empty-pipeline-section.yml | 5 - .../unreleased/60552-period-dropdown.yml | 5 - .../unreleased/60777-uninstall-button.yml | 5 - ...get-branch-advanced-error-before-merge.yml | 6 - .../60874-fix-suggestion-misalignment.yml | 5 - .../61036-fix-ingress-base-domain-text.yml | 5 - .../unreleased/61203-fix-lfs-ui-upload.yml | 5 - changelogs/unreleased/61278-next.yml | 5 - .../unreleased/61469-align-play-icon.yml | 5 - .../61494-set-status-modal-visual-bugs.yml | 5 - changelogs/unreleased/61550-next-badge.yml | 5 - changelogs/unreleased/62038-chevron-down.yml | 5 - .../unreleased/ac-package-storage-stats.yml | 5 - .../add-ci-variable-protected-ref.yml | 5 - .../add-runner-access-level-registration.yml | 5 - ...-replying-to-individual-notes-from-api.yml | 5 - .../always-link-instance-configuration.yml | 5 - changelogs/unreleased/an-use-labkit.yml | 5 - ...odevops_remote_private_helm_repository.yml | 6 - .../unreleased/bw-add-graphql-groups.yml | 5 - ...re-project-merge-request-settings-page.yml | 5 - .../ce-11430-update_clair_local_scan.yml | 5 - ...-use-of-row-in-member-listing-controls.yml | 5 - changelogs/unreleased/ce-4681-autosave.yml | 5 - ...ce-its-simple-just-destroy-the-mirrors.yml | 5 - .../ce-remove-already-signed-in.yml | 5 - changelogs/unreleased/ci-lint-ssl-error.yml | 6 - .../da-sentry-client-side-settings.yml | 5 - .../unreleased/delay-update-statictics.yml | 5 - .../unreleased/do-not-reopen-merged-mr.yml | 5 - .../downloading-expired-artifacts.yml | 5 - .../unreleased/expand-diff-performance.yml | 5 - .../expose-pipeline-variables-via-api.yml | 5 - .../unreleased/feat-sentry-environment.yml | 5 - .../unreleased/fix-api-group-visibility.yml | 5 - .../fix-api-ide-relative-url-root.yml | 5 - ...-extra-emails-for-custom-notifications.yml | 5 - .../unreleased/fix-ide-relative-url-bug.yml | 5 - .../unreleased/fix-js-error-ssh-key-view.yml | 5 - ...zy-blobs-requesting-all-previous-blobs.yml | 6 - ...ix-merge-request-pipeline-exist-method.yml | 5 - ...ix-project-visibility-level-validation.yml | 5 - ...x-schedule-head-pipeline-update-method.yml | 5 - .../fix-webpack-assets-relative-url-bug.yml | 5 - ...option-avoid-loading-wiki-page-content.yml | 5 - ...-improve-search-controller-performance.yml | 5 - .../fj-bump-workhorse-version-8-6-0.yml | 5 - .../unreleased/fl-fix-next-flag-for-good.yml | 5 - .../unreleased/friendly-wrap-component.yml | 5 - .../unreleased/frozen-string-spec-some.yml | 5 - .../unreleased/gitaly-version-v1.36.0.yml | 5 - .../unreleased/gitaly-version-v1.42.0.yml | 5 - changelogs/unreleased/gitlab-issue-54894.yml | 6 - .../graphql-resolvers-complexity.yml | 6 - changelogs/unreleased/include-ee-fixtures.yml | 5 - .../instance-configuration-artifact-size.yml | 5 - .../unreleased/instance_level_clusters.yml | 5 - ...ue-42692-deployment-chat-notifications.yml | 5 - .../unreleased/issue-58418-release-notes.yml | 5 - ...issue-61038-deploy-chat-message-update.yml | 5 - .../issue_57906_fix_github_import.yml | 5 - .../jc-client-gitaly-session-id.yml | 5 - .../jc-update-list-last-commits.yml | 5 - .../unreleased/jv-dedup-activerecord.yml | 6 - changelogs/unreleased/knative-0-5.yml | 5 - .../markdown-autocomplete-escaping.yml | 5 - .../member-access-granted-leave-email-fe.yml | 5 - changelogs/unreleased/patch-49.yml | 5 - .../pl-upgrade-letter_opener_web.yml | 5 - changelogs/unreleased/rails5-1.yml | 5 - ...actor-58827-migrate-issue-spec-to-jest.yml | 5 - ...actor-58829-migrate-notes-spec-to-jest.yml | 5 - ...tor-58830-migrate-sidebar-spec-to-jest.yml | 5 - .../remove-disabled-pages-domains-part-2.yml | 5 - .../remove-disabled-pages-domains.yml | 5 - .../rename_auto_deploy_app_links.yml | 5 - ...ll-templates-to-include-default-stages.yml | 5 - .../unreleased/rewind-iid-on-pipelines.yml | 5 - .../unreleased/sh-add-gitaly-backtrace.yml | 5 - ...low-equal-level-in-subgroup-membership.yml | 5 - ...void-fetching-temp-refs-within-project.yml | 5 - .../unreleased/sh-cleanup-import-export.yml | 5 - .../sh-disable-batch-load-replace-methods.yml | 5 - ...h-disable-internal-ids-available-check.yml | 5 - .../sh-fix-autocomplete-mirror-repo.yml | 5 - .../unreleased/sh-fix-invited-members.yml | 5 - .../unreleased/sh-fix-lfs-download-errors.yml | 5 - ...ersonal-snippet-uploads-object-storage.yml | 5 - .../sh-fix-pipeline-delete-caching.yml | 5 - .../sh-fix-related-merge-requests-path.yml | 5 - ...-fix-rugged-get-tree-entries-recursive.yml | 5 - .../sh-upgrade-grpc-and-protobuf.yml | 5 - .../sh-validate-ref-name-in-commit.yml | 5 - changelogs/unreleased/shell-9-1-0.yml | 5 - .../unreleased/show-disabled-mirrors.yml | 5 - .../unreleased/support-negative-matches.yml | 5 - .../tc-raw-log-in-plaintext-mail.yml | 5 - ...tlab-ce-patch-auto-deploy-extra-values.yml | 5 - ...date-gitlab-runner-helm-chart-to-0-4-0.yml | 5 - ...date-gitlab-runner-helm-chart-to-0-4-1.yml | 5 - .../unreleased/update-workhorse-master.yml | 5 - changelogs/unreleased/use-pg-10-7.yml | 5 - .../weimeng-user-autocomplete-fix.yml | 5 - .../unreleased/wiki-search-results-fix.yml | 5 - .../xanf-gitlab-ce-add-template-link.yml | 5 - ...anf-gitlab-ce-improve-project-overview.yml | 5 - changelogs/unreleased/zj-fsck-no-timeout.yml | 5 - changelogs/unreleased/zj-git-2-21-tests.yml | 5 - 166 files changed, 185 insertions(+), 832 deletions(-) delete mode 100644 changelogs/unreleased/10012-move-ee-diff-for-boards-issue-card-inner.yml delete mode 100644 changelogs/unreleased/10083-dropdown-ce-ee-difference.yml delete mode 100644 changelogs/unreleased/10327-enable-reliable-fetcher-by-default.yml delete mode 100644 changelogs/unreleased/10808-allow-license-import-during-install.yml delete mode 100644 changelogs/unreleased/10921-display-scoped-labels-ce.yml delete mode 100644 changelogs/unreleased/11254-overflow-ce.yml delete mode 100644 changelogs/unreleased/18432-switch-to-sassc-rails.yml delete mode 100644 changelogs/unreleased/24704-download-repository-path.yml delete mode 100644 changelogs/unreleased/24985-align-urlvalidator-to-validate_url-gem-implementation.yml delete mode 100644 changelogs/unreleased/25604-add-dotnet-core-yaml-template.yml delete mode 100644 changelogs/unreleased/26021-added-write_repository-scope-for-personal-access-token.yml delete mode 100644 changelogs/unreleased/27383-added_omniauth_openid_connect_startegy.yml delete mode 100644 changelogs/unreleased/27424-tklk-gitea-logo.yml delete mode 100644 changelogs/unreleased/28119-remove-note-multi-line-suggestions.yml delete mode 100644 changelogs/unreleased/28741-play-all-manual-jobs.yml delete mode 100644 changelogs/unreleased/30093-apply-bfg-object-map-to-database.yml delete mode 100644 changelogs/unreleased/30157-api-expose-single-environment.yml delete mode 100644 changelogs/unreleased/31331-add-time-tracking-issue-boards-sidebar.yml delete mode 100644 changelogs/unreleased/46048-canary-next.yml delete mode 100644 changelogs/unreleased/46806-typed-ci-variables.yml delete mode 100644 changelogs/unreleased/47327-fix-github-import-visibility.yml delete mode 100644 changelogs/unreleased/47584-label-text-color.yml delete mode 100644 changelogs/unreleased/48479-auto-direction-for-issue-title.yml delete mode 100644 changelogs/unreleased/50926-sort-by-due-date-and-popularity.yml delete mode 100644 changelogs/unreleased/51963-support-prometheus-for-group-level-clusters.yml delete mode 100644 changelogs/unreleased/53064-bypassing-pipeline-jobs-by-canceling-the-pipeline-and-manually-running-later-jobs.yml delete mode 100644 changelogs/unreleased/53138-add-metrics-usage-ping.yml delete mode 100644 changelogs/unreleased/53279-fix-updated_at-api.yml delete mode 100644 changelogs/unreleased/53973-fix-subpixel-border-issue.yml delete mode 100644 changelogs/unreleased/54405-resolve-discussion-when-applying-a-suggested-change.yml delete mode 100644 changelogs/unreleased/55948-help-text-formatting-wiki.yml delete mode 100644 changelogs/unreleased/56557-disable-kubernetes-namespace-service-account-backend.yml delete mode 100644 changelogs/unreleased/56838-allow-guest-access-to-releases.yml delete mode 100644 changelogs/unreleased/57017-add-toast-success-message.yml delete mode 100644 changelogs/unreleased/57077-add-salesforce-omniauth.yml delete mode 100644 changelogs/unreleased/57171-add-dashboard-settings.yml delete mode 100644 changelogs/unreleased/57247-show-prioritized-labels-to-guests.yml delete mode 100644 changelogs/unreleased/57293-fix-image-rename.yml delete mode 100644 changelogs/unreleased/57654-add-time-preferences-for-user-fe.yml delete mode 100644 changelogs/unreleased/57815.yml delete mode 100644 changelogs/unreleased/58105-pipeline-author-and-commit-author-too-close-together-in-pipeline-list.yml delete mode 100644 changelogs/unreleased/58252-web-ide-dropdown-duplicates.yml delete mode 100644 changelogs/unreleased/58293-extract-discussion-actions.yml delete mode 100644 changelogs/unreleased/58294-discussion-notes-component.yml delete mode 100644 changelogs/unreleased/58361-issue-create-system-note-timestamp.yml delete mode 100644 changelogs/unreleased/58748-update-nodejs-to-10-15-3.yml delete mode 100644 changelogs/unreleased/58850-fix-misplaced-swipe-view-26969.yml delete mode 100644 changelogs/unreleased/59034-external-link-button.yml delete mode 100644 changelogs/unreleased/59275-cluster-form-hints.yml delete mode 100644 changelogs/unreleased/59514-uploading-images-base64.yml delete mode 100644 changelogs/unreleased/5966-rebase-with-block.yml delete mode 100644 changelogs/unreleased/59708-vendor-css.yml delete mode 100644 changelogs/unreleased/59921-pipeline-schedule.yml delete mode 100644 changelogs/unreleased/60026-group-member-count-bg.yml delete mode 100644 changelogs/unreleased/60224-btn-env.yml delete mode 100644 changelogs/unreleased/60261-save-btn-env.yml delete mode 100644 changelogs/unreleased/60387-use-icons-in-user-popovers.yml delete mode 100644 changelogs/unreleased/60462-empty-pipeline-section.yml delete mode 100644 changelogs/unreleased/60552-period-dropdown.yml delete mode 100644 changelogs/unreleased/60777-uninstall-button.yml delete mode 100644 changelogs/unreleased/60808-only-show-target-branch-advanced-error-before-merge.yml delete mode 100644 changelogs/unreleased/60874-fix-suggestion-misalignment.yml delete mode 100644 changelogs/unreleased/61036-fix-ingress-base-domain-text.yml delete mode 100644 changelogs/unreleased/61203-fix-lfs-ui-upload.yml delete mode 100644 changelogs/unreleased/61278-next.yml delete mode 100644 changelogs/unreleased/61469-align-play-icon.yml delete mode 100644 changelogs/unreleased/61494-set-status-modal-visual-bugs.yml delete mode 100644 changelogs/unreleased/61550-next-badge.yml delete mode 100644 changelogs/unreleased/62038-chevron-down.yml delete mode 100644 changelogs/unreleased/ac-package-storage-stats.yml delete mode 100644 changelogs/unreleased/add-ci-variable-protected-ref.yml delete mode 100644 changelogs/unreleased/add-runner-access-level-registration.yml delete mode 100644 changelogs/unreleased/allow-replying-to-individual-notes-from-api.yml delete mode 100644 changelogs/unreleased/always-link-instance-configuration.yml delete mode 100644 changelogs/unreleased/an-use-labkit.yml delete mode 100644 changelogs/unreleased/autodevops_remote_private_helm_repository.yml delete mode 100644 changelogs/unreleased/bw-add-graphql-groups.yml delete mode 100644 changelogs/unreleased/ce-10725-restructure-project-merge-request-settings-page.yml delete mode 100644 changelogs/unreleased/ce-11430-update_clair_local_scan.yml delete mode 100644 changelogs/unreleased/ce-11542-remove-non-semantic-use-of-row-in-member-listing-controls.yml delete mode 100644 changelogs/unreleased/ce-4681-autosave.yml delete mode 100644 changelogs/unreleased/ce-its-simple-just-destroy-the-mirrors.yml delete mode 100644 changelogs/unreleased/ce-remove-already-signed-in.yml delete mode 100644 changelogs/unreleased/ci-lint-ssl-error.yml delete mode 100644 changelogs/unreleased/da-sentry-client-side-settings.yml delete mode 100644 changelogs/unreleased/delay-update-statictics.yml delete mode 100644 changelogs/unreleased/do-not-reopen-merged-mr.yml delete mode 100644 changelogs/unreleased/downloading-expired-artifacts.yml delete mode 100644 changelogs/unreleased/expand-diff-performance.yml delete mode 100644 changelogs/unreleased/expose-pipeline-variables-via-api.yml delete mode 100644 changelogs/unreleased/feat-sentry-environment.yml delete mode 100644 changelogs/unreleased/fix-api-group-visibility.yml delete mode 100644 changelogs/unreleased/fix-api-ide-relative-url-root.yml delete mode 100644 changelogs/unreleased/fix-extra-emails-for-custom-notifications.yml delete mode 100644 changelogs/unreleased/fix-ide-relative-url-bug.yml delete mode 100644 changelogs/unreleased/fix-js-error-ssh-key-view.yml delete mode 100644 changelogs/unreleased/fix-lazy-blobs-requesting-all-previous-blobs.yml delete mode 100644 changelogs/unreleased/fix-merge-request-pipeline-exist-method.yml delete mode 100644 changelogs/unreleased/fix-project-visibility-level-validation.yml delete mode 100644 changelogs/unreleased/fix-schedule-head-pipeline-update-method.yml delete mode 100644 changelogs/unreleased/fix-webpack-assets-relative-url-bug.yml delete mode 100644 changelogs/unreleased/fj-53523-add-option-avoid-loading-wiki-page-content.yml delete mode 100644 changelogs/unreleased/fj-59522-improve-search-controller-performance.yml delete mode 100644 changelogs/unreleased/fj-bump-workhorse-version-8-6-0.yml delete mode 100644 changelogs/unreleased/fl-fix-next-flag-for-good.yml delete mode 100644 changelogs/unreleased/friendly-wrap-component.yml delete mode 100644 changelogs/unreleased/frozen-string-spec-some.yml delete mode 100644 changelogs/unreleased/gitaly-version-v1.36.0.yml delete mode 100644 changelogs/unreleased/gitaly-version-v1.42.0.yml delete mode 100644 changelogs/unreleased/gitlab-issue-54894.yml delete mode 100644 changelogs/unreleased/graphql-resolvers-complexity.yml delete mode 100644 changelogs/unreleased/include-ee-fixtures.yml delete mode 100644 changelogs/unreleased/instance-configuration-artifact-size.yml delete mode 100644 changelogs/unreleased/instance_level_clusters.yml delete mode 100644 changelogs/unreleased/issue-42692-deployment-chat-notifications.yml delete mode 100644 changelogs/unreleased/issue-58418-release-notes.yml delete mode 100644 changelogs/unreleased/issue-61038-deploy-chat-message-update.yml delete mode 100644 changelogs/unreleased/issue_57906_fix_github_import.yml delete mode 100644 changelogs/unreleased/jc-client-gitaly-session-id.yml delete mode 100644 changelogs/unreleased/jc-update-list-last-commits.yml delete mode 100644 changelogs/unreleased/jv-dedup-activerecord.yml delete mode 100644 changelogs/unreleased/knative-0-5.yml delete mode 100644 changelogs/unreleased/markdown-autocomplete-escaping.yml delete mode 100644 changelogs/unreleased/member-access-granted-leave-email-fe.yml delete mode 100644 changelogs/unreleased/patch-49.yml delete mode 100644 changelogs/unreleased/pl-upgrade-letter_opener_web.yml delete mode 100644 changelogs/unreleased/rails5-1.yml delete mode 100644 changelogs/unreleased/refactor-58827-migrate-issue-spec-to-jest.yml delete mode 100644 changelogs/unreleased/refactor-58829-migrate-notes-spec-to-jest.yml delete mode 100644 changelogs/unreleased/refactor-58830-migrate-sidebar-spec-to-jest.yml delete mode 100644 changelogs/unreleased/remove-disabled-pages-domains-part-2.yml delete mode 100644 changelogs/unreleased/remove-disabled-pages-domains.yml delete mode 100644 changelogs/unreleased/rename_auto_deploy_app_links.yml delete mode 100644 changelogs/unreleased/require-all-templates-to-include-default-stages.yml delete mode 100644 changelogs/unreleased/rewind-iid-on-pipelines.yml delete mode 100644 changelogs/unreleased/sh-add-gitaly-backtrace.yml delete mode 100644 changelogs/unreleased/sh-allow-equal-level-in-subgroup-membership.yml delete mode 100644 changelogs/unreleased/sh-avoid-fetching-temp-refs-within-project.yml delete mode 100644 changelogs/unreleased/sh-cleanup-import-export.yml delete mode 100644 changelogs/unreleased/sh-disable-batch-load-replace-methods.yml delete mode 100644 changelogs/unreleased/sh-disable-internal-ids-available-check.yml delete mode 100644 changelogs/unreleased/sh-fix-autocomplete-mirror-repo.yml delete mode 100644 changelogs/unreleased/sh-fix-invited-members.yml delete mode 100644 changelogs/unreleased/sh-fix-lfs-download-errors.yml delete mode 100644 changelogs/unreleased/sh-fix-personal-snippet-uploads-object-storage.yml delete mode 100644 changelogs/unreleased/sh-fix-pipeline-delete-caching.yml delete mode 100644 changelogs/unreleased/sh-fix-related-merge-requests-path.yml delete mode 100644 changelogs/unreleased/sh-fix-rugged-get-tree-entries-recursive.yml delete mode 100644 changelogs/unreleased/sh-upgrade-grpc-and-protobuf.yml delete mode 100644 changelogs/unreleased/sh-validate-ref-name-in-commit.yml delete mode 100644 changelogs/unreleased/shell-9-1-0.yml delete mode 100644 changelogs/unreleased/show-disabled-mirrors.yml delete mode 100644 changelogs/unreleased/support-negative-matches.yml delete mode 100644 changelogs/unreleased/tc-raw-log-in-plaintext-mail.yml delete mode 100644 changelogs/unreleased/tortuetorche-gitlab-ce-patch-auto-deploy-extra-values.yml delete mode 100644 changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-4-0.yml delete mode 100644 changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-4-1.yml delete mode 100644 changelogs/unreleased/update-workhorse-master.yml delete mode 100644 changelogs/unreleased/use-pg-10-7.yml delete mode 100644 changelogs/unreleased/weimeng-user-autocomplete-fix.yml delete mode 100644 changelogs/unreleased/wiki-search-results-fix.yml delete mode 100644 changelogs/unreleased/xanf-gitlab-ce-add-template-link.yml delete mode 100644 changelogs/unreleased/xanf-gitlab-ce-improve-project-overview.yml delete mode 100644 changelogs/unreleased/zj-fsck-no-timeout.yml delete mode 100644 changelogs/unreleased/zj-git-2-21-tests.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 17b185358ed..88521222b8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,191 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. +## 11.11.0 (2019-05-22) + +### Security (1 change) + +- Destroy project remote mirrors instead of disabling. !27087 + +### Fixed (74 changes, 19 of them are from the community) + +- Don't create a temp reference for branch comparisons within project. !24038 +- Fix some label links not appearing on group labels page and label title being a link on project labels page. !24060 (Tanya Pazitny) +- Fix extra emails for custom notifications. !25607 +- Rewind IID on Ci::Pipelines. !26490 +- Fix duplicate merge request pipelines created by Sidekiq worker retry. !26643 +- Catch and report OpenSSL exceptions while fetching external configuration files in CI::Config. !26750 (Drew Cimino) +- stop rendering download links for expired artifacts on the project tags page. !26753 (Drew Cimino) +- Format extra help page text like wiki. !26782 (Bastian Blank) +- Always show instance configuration link. !26783 (Bastian Blank) +- Display maximum artifact size from runtime config. !26784 (Bastian Blank) +- Resolve issue where list labels did not have the correct text color on creation. !26794 (Tucker Chapman) +- Set release name when adding release notes to an existing tag. !26807 +- Fix the bug that the project statistics is not updated. !26854 (Hiroyuki Sato) +- Client side changes for ListLastCommitsForTree response update. !26880 +- Fix api group visibility. !26896 +- Require all templates to use default stages. !26954 +- Remove a "reopen merge request button" on a "merged" merge request. !26965 (Hiroyuki Sato) +- Fix misaligned image diff swipe view. !26969 (ftab) +- Add badge-pill class on group member count. !27019 +- Remove leading / trailing spaces from heading when generating header ids. !27025 (Willian Balmant) +- Respect updated_at attribute in notes produced by API calls. !27124 (Ben Gamari) +- Fix GitHub project import visibility. !27133 (Daniel Wyatt) +- Fixes actions dropdowns in environments page. !27160 +- Fixes create button background for Environments form. !27161 +- Display scoped labels in Issue Boards. !27164 +- Align UrlValidator to validate_url gem implementation. !27194 (Horatiu Eugen Vlad) +- Resolve Web IDE template dropdown showing duplicates. !27237 +- Update GitLab Workhorse to v8.6.0. !27260 +- Only show in autocomplete when author active. !27292 +- Remove deadline for Git fsck. !27299 +- Show prioritized labels to guests. !27307 +- Properly expire all pipeline caches when pipeline is deleted. !27334 +- Replaced icon for external URL with doc-text icon. !27365 +- Add auto direction for issue title. !27378 (Ahmad Haghighi) +- fix wiki search result links in titles. !27400 (khm) +- Fix system notes timestamp when creating issue in the past. !27406 +- Fix approvals sometimes being reset after a merge request is rebased. !27446 +- Fix empty block in MR widget when user doesn't have permission. !27462 +- Fix wrong use of ActiveRecord in PoolRepository. !27464 +- Show proper preview for uploaded images in Web IDE. !27471 +- Resolve Renaming an image via Web IDE corrupts it. !27486 +- Clean up CarrierWave's import/export files. !27487 +- Fix autocomplete dropdown for usernames starting with period. !27533 (Jan Beckmann) +- Disable password autocomplete in mirror repository form. !27542 +- Always use internal ID tables in development and production. !27544 +- Only show the "target branch has advanced" message when the merge request is open. !27588 +- Resolve Misalignment on suggested changes diff table. !27612 +- Update Workhorse to v8.7.0. !27630 +- Fix FE API and IDE handling of '/' relative_url_root. !27635 +- Hide ScopedBadge overflow notes. !27651 +- Fix base domain help text update. !27746 +- Upgrade letter_opener_web to support Rails 5.1. !27829 +- Fix webpack assets handling when relative url root is '/'. !27909 +- Fix IDE get file data with '/' as relative root. !27911 +- Allow a member to have an access level equal to parent group. !27913 +- Fix issuables state_id nil when importing projects from GitHub. !28027 +- Fix uploading of LFS tracked file through UI. !28052 +- Render Next badge only for gitlab.com. !28056 +- Fix update head pipeline process of Pipelines for merge requests. !28057 +- Fix visual issues in set status modal. !28147 +- Use a path for the related merge requests endpoint. !28171 +- disable SSH key validation in key details view. !28180 (Roger Meier) +- Fix MR discussion border missing in chrome sometimes. !28185 +- Fix Error 500 when inviting user already present. !28198 +- Remove non-semantic use of `.row` in member listing controls. !28204 +- Properly handle LFS Batch API response in project import. !28223 +- Fix project visibility level validation. !28305 (Peter Marko) +- Fix incorrect prefix used in new uploads for personal snippets. !28337 +- Fix Rugged get_tree_entries recursive flag not working. !28494 +- Fixes next badge being always visible. +- Next badge must visible when canary flag is true. +- Adds arrow icons to select option in CI/CD settings. +- Vertically aligns the play button for stages. +- Allow replying to individual notes from API. + +### Changed (19 changes, 3 of them are from the community) + +- Sort by due date and popularity in both directions for Issues and Merge requests. !25502 (Nermin Vehabovic) +- Improve pipelines table spacing, add triggerer column. !26136 +- Allow extra arguments in helm commands when deploying the application in Auto-DevOps.gitlab-ci.yml. !26171 (tortuetorche) +- Switch to sassc-rails for faster stylesheet compilation. !26224 +- Reorganize project merge request settings. !26834 +- Display a toast message when the Kubernetes runner has successfully upgraded. !27206 +- Allow guests users to access project releases. !27247 +- Add help texts to K8 form fields. !27274 +- Support prometheus for group level clusters. !27280 +- Include link to raw job log in plain-text emails. !27409 +- Only escape Markdown emphasis characters in autocomplete when necessary. !27457 +- Move location of charts/auto-deploy-app -> gitlab-org/charts/auto-deploy-app. !27477 +- Make canceled jobs not retryable. !27503 +- Upgrade to Gitaly v1.36.0. !27831 +- Update deployment event chat notification message. !27972 +- Upgrade to Gitaly v1.42.0. !28135 +- Resolve discussion when apply suggestion. !28160 +- Improve expanding diff to full file performance. +- Knative version bump 0.3 -> 0.5. (Chris Baumbauer ) + +### Performance (5 changes) + +- Added list_pages method to avoid loading all wiki pages content. !22801 +- Add gitaly session id & catfile-cache feature flag. !27472 +- Add improvements to global search of issues and merge requests. !27817 +- Disable method replacement in avatar loading. !27866 +- Fix Blob.lazy always loading all previously-requested blobs when a new request is made. + +### Added (36 changes, 10 of them are from the community) + +- Add time preferences for user. !25381 +- Added write_repository scope for personal access token. !26021 (Horatiu Eugen Vlad) +- Mark disabled pages domains for removal, but don't remove them yet. !26212 +- Remove pages domains if they weren't verified for 1 week. !26227 +- Expose pipeline variables via API. !26501 (Agustin Henze ) +- Download a folder from repository. !26532 (kiameisomabes) +- Remove cleaned up OIDs from database and cache. !26555 +- Disables kubernetes resources creation if a cluster is not managed. !26565 +- Add CI_COMMIT_REF_PROTECTED CI variable. !26716 (Jason van den Hurk) +- Add new API endpoint to expose a single environment. !26887 +- Allow Sentry configuration to be passed on gitlab.yml. !27091 (Roger Meier) +- CI variables of type file. !27112 +- Allow linking to a private helm repository by providing credentials, and customisation of repository name. !27123 (Stuart Moore @stjm-cc) +- Add time tracking information to Issue Boards sidebar. !27166 +- Play all manual jobs in a stage. !27188 +- Instance level kubernetes clusters. !27196 +- Adds if InfluxDB and Prometheus metrics are enabled to usage ping data. !27238 +- Autosave description in epics. !27296 +- Add deployment events to chat notification services. !27338 +- Add packages_size to ProjectStatistics. !27373 +- Added OmniAuth OpenID Connect strategy. !27383 (Horatiu Eugen Vlad) +- Test using Git 2.21. !27418 +- Use official Gitea logo in importer. !27424 (Matti Ranta (@techknowlogick)) +- Add option to set access_level of runners upon registration. !27490 (Zelin L) +- Add initial GraphQL query for Groups. !27492 +- Enable Sidekiq Reliable Fetcher for background jobs by default. !27530 +- Add backend support for a External Dashboard URL setting. !27550 +- Implement UI for uninstalling Cluster’s managed apps. !27559 +- Resolve Salesforce.com omniauth support. !27834 +- Leave project/group from access granted email. !27892 +- Allow Sentry client-side DSN to be passed on gitlab.yml. !27967 +- GraphQL: improve evaluation of query complexity based on arguments and query limits. !28017 +- Adds badge for Canary environment and help link. +- Support negative matches. +- Show category icons in user popover. +- Added Omniauth UltraAuth strategy to GitLab. (Kartikey Tanna) + +### Other (29 changes, 8 of them are from the community) + +- Validate refs used in controllers don't have spaces. !24037 +- Migrate correlation and tracing code to LabKit. !25379 +- Update node.js to 10.15.3 in CI template for Hexo. !25943 (Takuya Noguchi) +- Improve icons and button order in project overview. !26796 +- Add instructions on how to contribute a Built-In template for project. !26976 +- Extract DiscussionNotes component from NoteableDiscussion. !27066 +- Bump gRPC to 1.19.0 and protobuf to 3.7.1. !27086 +- Extract DiscussionActions component from NoteableDiscussion. !27227 +- Show disabled project repo mirrors in settings. !27326 +- Add backtrace to Gitaly performance bar. !27345 +- Moved EE/CE differences for dropdown_value_collapsed into CE. !27367 +- Remove "You are already signed in" banner. !27377 +- Move ee-specific code from boards/components/issue_card_inner.vue. !27394 (Roman Rodionov) +- Upgrade to Rails 5.1. !27480 (Jasper Maes) +- Update GitLab Runner Helm Chart to 0.4.0. !27508 +- Update GitLab Runner Helm Chart to 0.4.1. !27627 +- Refactored notes tests from Karma to Jest. !27648 (Martin Hobert) +- refactor(issue): Refactored issue tests from Karma to Jest. !27673 (Martin Hobert) +- Refactored Karma spec files to Jest. !27688 (Martin Hobert) +- Add CSS fix for elements on IE11. !27846 +- Update clair-local-scan to v2.0.8 for container scanning. !27977 +- Use PostgreSQL 10.7 in tests. !28020 +- Document EE License Auto Import During Install. !28106 +- Remove the note in the docs that multi-line suggestions are not yet available. !28119 (hardysim) +- Update gitlab-shell to v9.1.0. !28184 +- Add EE fixtures to SeedFu list. !28241 +- Replaces CSS with BS4 utility class for pipeline schedules. +- Creates a vendors folder for external CSS. +- Add some frozen string to spec/**/*.rb. (gfyoung) + + ## 11.10.4 (2019-05-01) ### Fixed (12 changes) diff --git a/changelogs/unreleased/10012-move-ee-diff-for-boards-issue-card-inner.yml b/changelogs/unreleased/10012-move-ee-diff-for-boards-issue-card-inner.yml deleted file mode 100644 index f15375e83f4..00000000000 --- a/changelogs/unreleased/10012-move-ee-diff-for-boards-issue-card-inner.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move ee-specific code from boards/components/issue_card_inner.vue -merge_request: 27394 -author: Roman Rodionov -type: other diff --git a/changelogs/unreleased/10083-dropdown-ce-ee-difference.yml b/changelogs/unreleased/10083-dropdown-ce-ee-difference.yml deleted file mode 100644 index e8594edb76a..00000000000 --- a/changelogs/unreleased/10083-dropdown-ce-ee-difference.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Moved EE/CE differences for dropdown_value_collapsed into CE -merge_request: 27367 -author: -type: other diff --git a/changelogs/unreleased/10327-enable-reliable-fetcher-by-default.yml b/changelogs/unreleased/10327-enable-reliable-fetcher-by-default.yml deleted file mode 100644 index 89d2fced6e1..00000000000 --- a/changelogs/unreleased/10327-enable-reliable-fetcher-by-default.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Enable Sidekiq Reliable Fetcher for background jobs by default -merge_request: 27530 -author: -type: added diff --git a/changelogs/unreleased/10808-allow-license-import-during-install.yml b/changelogs/unreleased/10808-allow-license-import-during-install.yml deleted file mode 100644 index f93edf03d51..00000000000 --- a/changelogs/unreleased/10808-allow-license-import-during-install.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Document EE License Auto Import During Install -merge_request: 28106 -author: -type: other diff --git a/changelogs/unreleased/10921-display-scoped-labels-ce.yml b/changelogs/unreleased/10921-display-scoped-labels-ce.yml deleted file mode 100644 index 7a0e7fec41b..00000000000 --- a/changelogs/unreleased/10921-display-scoped-labels-ce.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display scoped labels in Issue Boards -merge_request: 27164 -author: -type: fixed diff --git a/changelogs/unreleased/11254-overflow-ce.yml b/changelogs/unreleased/11254-overflow-ce.yml deleted file mode 100644 index dcac46000ac..00000000000 --- a/changelogs/unreleased/11254-overflow-ce.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Hide ScopedBadge overflow notes -merge_request: 27651 -author: -type: fixed diff --git a/changelogs/unreleased/18432-switch-to-sassc-rails.yml b/changelogs/unreleased/18432-switch-to-sassc-rails.yml deleted file mode 100644 index 1c9d515c52f..00000000000 --- a/changelogs/unreleased/18432-switch-to-sassc-rails.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Switch to sassc-rails for faster stylesheet compilation -merge_request: 26224 -author: -type: changed diff --git a/changelogs/unreleased/24704-download-repository-path.yml b/changelogs/unreleased/24704-download-repository-path.yml deleted file mode 100644 index ff3082bec45..00000000000 --- a/changelogs/unreleased/24704-download-repository-path.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Download a folder from repository -merge_request: 26532 -author: kiameisomabes -type: added diff --git a/changelogs/unreleased/24985-align-urlvalidator-to-validate_url-gem-implementation.yml b/changelogs/unreleased/24985-align-urlvalidator-to-validate_url-gem-implementation.yml deleted file mode 100644 index 1143e4effea..00000000000 --- a/changelogs/unreleased/24985-align-urlvalidator-to-validate_url-gem-implementation.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Align UrlValidator to validate_url gem implementation" -merge_request: 27194 -author: Horatiu Eugen Vlad -type: fixed diff --git a/changelogs/unreleased/25604-add-dotnet-core-yaml-template.yml b/changelogs/unreleased/25604-add-dotnet-core-yaml-template.yml deleted file mode 100644 index ef9172aaf3b..00000000000 --- a/changelogs/unreleased/25604-add-dotnet-core-yaml-template.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add .NET Core YAML template -merge_request: 25604 -author: Piotr Wosiek -type: added diff --git a/changelogs/unreleased/26021-added-write_repository-scope-for-personal-access-token.yml b/changelogs/unreleased/26021-added-write_repository-scope-for-personal-access-token.yml deleted file mode 100644 index da550d35f12..00000000000 --- a/changelogs/unreleased/26021-added-write_repository-scope-for-personal-access-token.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added write_repository scope for personal access token -merge_request: 26021 -author: Horatiu Eugen Vlad -type: added diff --git a/changelogs/unreleased/27383-added_omniauth_openid_connect_startegy.yml b/changelogs/unreleased/27383-added_omniauth_openid_connect_startegy.yml deleted file mode 100644 index c49b201f0de..00000000000 --- a/changelogs/unreleased/27383-added_omniauth_openid_connect_startegy.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added OmniAuth OpenID Connect strategy -merge_request: 27383 -author: Horatiu Eugen Vlad -type: added diff --git a/changelogs/unreleased/27424-tklk-gitea-logo.yml b/changelogs/unreleased/27424-tklk-gitea-logo.yml deleted file mode 100644 index 0d41bb39aad..00000000000 --- a/changelogs/unreleased/27424-tklk-gitea-logo.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Use official Gitea logo in importer" -merge_request: 27424 -author: Matti Ranta (@techknowlogick) -type: added \ No newline at end of file diff --git a/changelogs/unreleased/28119-remove-note-multi-line-suggestions.yml b/changelogs/unreleased/28119-remove-note-multi-line-suggestions.yml deleted file mode 100644 index 2fbacbcb011..00000000000 --- a/changelogs/unreleased/28119-remove-note-multi-line-suggestions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove the note in the docs that multi-line suggestions are not yet available -merge_request: 28119 -author: hardysim -type: other diff --git a/changelogs/unreleased/28741-play-all-manual-jobs.yml b/changelogs/unreleased/28741-play-all-manual-jobs.yml deleted file mode 100644 index 30b26e3c0ed..00000000000 --- a/changelogs/unreleased/28741-play-all-manual-jobs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Play all manual jobs in a stage -merge_request: 27188 -author: -type: added diff --git a/changelogs/unreleased/30093-apply-bfg-object-map-to-database.yml b/changelogs/unreleased/30093-apply-bfg-object-map-to-database.yml deleted file mode 100644 index ec851dfcacc..00000000000 --- a/changelogs/unreleased/30093-apply-bfg-object-map-to-database.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove cleaned up OIDs from database and cache -merge_request: 26555 -author: -type: added diff --git a/changelogs/unreleased/30157-api-expose-single-environment.yml b/changelogs/unreleased/30157-api-expose-single-environment.yml deleted file mode 100644 index f9619dbcc7d..00000000000 --- a/changelogs/unreleased/30157-api-expose-single-environment.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Add new API endpoint to expose a single environment.' -merge_request: 26887 -author: -type: added diff --git a/changelogs/unreleased/31331-add-time-tracking-issue-boards-sidebar.yml b/changelogs/unreleased/31331-add-time-tracking-issue-boards-sidebar.yml deleted file mode 100644 index b3ffb77ccad..00000000000 --- a/changelogs/unreleased/31331-add-time-tracking-issue-boards-sidebar.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add time tracking information to Issue Boards sidebar -merge_request: 27166 -author: -type: added diff --git a/changelogs/unreleased/46048-canary-next.yml b/changelogs/unreleased/46048-canary-next.yml deleted file mode 100644 index 1a702cccff9..00000000000 --- a/changelogs/unreleased/46048-canary-next.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds badge for Canary environment and help link -merge_request: -author: -type: added diff --git a/changelogs/unreleased/46806-typed-ci-variables.yml b/changelogs/unreleased/46806-typed-ci-variables.yml deleted file mode 100644 index aa15c31bca1..00000000000 --- a/changelogs/unreleased/46806-typed-ci-variables.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: CI variables of type file -merge_request: 27112 -author: -type: added diff --git a/changelogs/unreleased/47327-fix-github-import-visibility.yml b/changelogs/unreleased/47327-fix-github-import-visibility.yml deleted file mode 100644 index b02318f0e89..00000000000 --- a/changelogs/unreleased/47327-fix-github-import-visibility.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix GitHub project import visibility -merge_request: 27133 -author: Daniel Wyatt -type: fixed diff --git a/changelogs/unreleased/47584-label-text-color.yml b/changelogs/unreleased/47584-label-text-color.yml deleted file mode 100644 index 7d5eaa62793..00000000000 --- a/changelogs/unreleased/47584-label-text-color.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve issue where list labels did not have the correct text color on creation -merge_request: 26794 -author: Tucker Chapman -type: fixed diff --git a/changelogs/unreleased/48479-auto-direction-for-issue-title.yml b/changelogs/unreleased/48479-auto-direction-for-issue-title.yml deleted file mode 100644 index 0571f58ab4d..00000000000 --- a/changelogs/unreleased/48479-auto-direction-for-issue-title.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add auto direction for issue title -merge_request: 27378 -author: Ahmad Haghighi -type: fixed diff --git a/changelogs/unreleased/50926-sort-by-due-date-and-popularity.yml b/changelogs/unreleased/50926-sort-by-due-date-and-popularity.yml deleted file mode 100644 index 7efc800be1e..00000000000 --- a/changelogs/unreleased/50926-sort-by-due-date-and-popularity.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Sort by due date and popularity in both directions for Issues and Merge requests -merge_request: 25502 -author: Nermin Vehabovic -type: changed diff --git a/changelogs/unreleased/51963-support-prometheus-for-group-level-clusters.yml b/changelogs/unreleased/51963-support-prometheus-for-group-level-clusters.yml deleted file mode 100644 index ede2e242156..00000000000 --- a/changelogs/unreleased/51963-support-prometheus-for-group-level-clusters.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Support prometheus for group level clusters -merge_request: 27280 -author: -type: changed diff --git a/changelogs/unreleased/53064-bypassing-pipeline-jobs-by-canceling-the-pipeline-and-manually-running-later-jobs.yml b/changelogs/unreleased/53064-bypassing-pipeline-jobs-by-canceling-the-pipeline-and-manually-running-later-jobs.yml deleted file mode 100644 index 48f0a668982..00000000000 --- a/changelogs/unreleased/53064-bypassing-pipeline-jobs-by-canceling-the-pipeline-and-manually-running-later-jobs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make canceled jobs not retryable -merge_request: 27503 -author: -type: changed diff --git a/changelogs/unreleased/53138-add-metrics-usage-ping.yml b/changelogs/unreleased/53138-add-metrics-usage-ping.yml deleted file mode 100644 index db6af77a647..00000000000 --- a/changelogs/unreleased/53138-add-metrics-usage-ping.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds if InfluxDB and Prometheus metrics are enabled to usage ping data -merge_request: 27238 -author: -type: added diff --git a/changelogs/unreleased/53279-fix-updated_at-api.yml b/changelogs/unreleased/53279-fix-updated_at-api.yml deleted file mode 100644 index c64dada7eaa..00000000000 --- a/changelogs/unreleased/53279-fix-updated_at-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Respect updated_at attribute in notes produced by API calls" -merge_request: 27124 -author: Ben Gamari -type: fixed diff --git a/changelogs/unreleased/53973-fix-subpixel-border-issue.yml b/changelogs/unreleased/53973-fix-subpixel-border-issue.yml deleted file mode 100644 index 0dae7047236..00000000000 --- a/changelogs/unreleased/53973-fix-subpixel-border-issue.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix MR discussion border missing in chrome sometimes -merge_request: 28185 -author: -type: fixed diff --git a/changelogs/unreleased/54405-resolve-discussion-when-applying-a-suggested-change.yml b/changelogs/unreleased/54405-resolve-discussion-when-applying-a-suggested-change.yml deleted file mode 100644 index 862ce623d8c..00000000000 --- a/changelogs/unreleased/54405-resolve-discussion-when-applying-a-suggested-change.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve discussion when apply suggestion -merge_request: 28160 -author: -type: changed diff --git a/changelogs/unreleased/55948-help-text-formatting-wiki.yml b/changelogs/unreleased/55948-help-text-formatting-wiki.yml deleted file mode 100644 index e1e0475a117..00000000000 --- a/changelogs/unreleased/55948-help-text-formatting-wiki.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Format extra help page text like wiki -merge_request: 26782 -author: Bastian Blank -type: fixed diff --git a/changelogs/unreleased/56557-disable-kubernetes-namespace-service-account-backend.yml b/changelogs/unreleased/56557-disable-kubernetes-namespace-service-account-backend.yml deleted file mode 100644 index 6521eb9d1c0..00000000000 --- a/changelogs/unreleased/56557-disable-kubernetes-namespace-service-account-backend.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Disables kubernetes resources creation if a cluster is not managed -merge_request: 26565 -author: -type: added diff --git a/changelogs/unreleased/56838-allow-guest-access-to-releases.yml b/changelogs/unreleased/56838-allow-guest-access-to-releases.yml deleted file mode 100644 index 701a015b9ac..00000000000 --- a/changelogs/unreleased/56838-allow-guest-access-to-releases.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow guests users to access project releases -merge_request: 27247 -author: -type: changed diff --git a/changelogs/unreleased/57017-add-toast-success-message.yml b/changelogs/unreleased/57017-add-toast-success-message.yml deleted file mode 100644 index 931e7755591..00000000000 --- a/changelogs/unreleased/57017-add-toast-success-message.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display a toast message when the Kubernetes runner has successfully upgraded. -merge_request: 27206 -author: -type: changed diff --git a/changelogs/unreleased/57077-add-salesforce-omniauth.yml b/changelogs/unreleased/57077-add-salesforce-omniauth.yml deleted file mode 100644 index ebd0637ddac..00000000000 --- a/changelogs/unreleased/57077-add-salesforce-omniauth.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve Salesforce.com omniauth support -merge_request: 27834 -author: -type: added diff --git a/changelogs/unreleased/57171-add-dashboard-settings.yml b/changelogs/unreleased/57171-add-dashboard-settings.yml deleted file mode 100644 index f235872b35c..00000000000 --- a/changelogs/unreleased/57171-add-dashboard-settings.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add backend support for a External Dashboard URL setting -merge_request: 27550 -author: -type: added diff --git a/changelogs/unreleased/57247-show-prioritized-labels-to-guests.yml b/changelogs/unreleased/57247-show-prioritized-labels-to-guests.yml deleted file mode 100644 index 5210ff0ccef..00000000000 --- a/changelogs/unreleased/57247-show-prioritized-labels-to-guests.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show prioritized labels to guests -merge_request: 27307 -author: -type: fixed diff --git a/changelogs/unreleased/57293-fix-image-rename.yml b/changelogs/unreleased/57293-fix-image-rename.yml deleted file mode 100644 index 50dddbdf114..00000000000 --- a/changelogs/unreleased/57293-fix-image-rename.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve Renaming an image via Web IDE corrupts it -merge_request: 27486 -author: -type: fixed diff --git a/changelogs/unreleased/57654-add-time-preferences-for-user-fe.yml b/changelogs/unreleased/57654-add-time-preferences-for-user-fe.yml deleted file mode 100644 index f4ce3a51724..00000000000 --- a/changelogs/unreleased/57654-add-time-preferences-for-user-fe.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add time preferences for user -merge_request: 25381 -author: -type: added diff --git a/changelogs/unreleased/57815.yml b/changelogs/unreleased/57815.yml deleted file mode 100644 index ccf76c99f1e..00000000000 --- a/changelogs/unreleased/57815.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added Omniauth UltraAuth strategy to GitLab -merge_request: -author: Kartikey Tanna -type: added diff --git a/changelogs/unreleased/58105-pipeline-author-and-commit-author-too-close-together-in-pipeline-list.yml b/changelogs/unreleased/58105-pipeline-author-and-commit-author-too-close-together-in-pipeline-list.yml deleted file mode 100644 index aef0a5ad53e..00000000000 --- a/changelogs/unreleased/58105-pipeline-author-and-commit-author-too-close-together-in-pipeline-list.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve pipelines table spacing, add triggerer column -merge_request: 26136 -author: -type: changed diff --git a/changelogs/unreleased/58252-web-ide-dropdown-duplicates.yml b/changelogs/unreleased/58252-web-ide-dropdown-duplicates.yml deleted file mode 100644 index 48b03994586..00000000000 --- a/changelogs/unreleased/58252-web-ide-dropdown-duplicates.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve Web IDE template dropdown showing duplicates -merge_request: 27237 -author: -type: fixed diff --git a/changelogs/unreleased/58293-extract-discussion-actions.yml b/changelogs/unreleased/58293-extract-discussion-actions.yml deleted file mode 100644 index 2ca4716a6de..00000000000 --- a/changelogs/unreleased/58293-extract-discussion-actions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Extract DiscussionActions component from NoteableDiscussion -merge_request: 27227 -author: -type: other diff --git a/changelogs/unreleased/58294-discussion-notes-component.yml b/changelogs/unreleased/58294-discussion-notes-component.yml deleted file mode 100644 index fbe08360a9a..00000000000 --- a/changelogs/unreleased/58294-discussion-notes-component.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Extract DiscussionNotes component from NoteableDiscussion -merge_request: 27066 -author: -type: other diff --git a/changelogs/unreleased/58361-issue-create-system-note-timestamp.yml b/changelogs/unreleased/58361-issue-create-system-note-timestamp.yml deleted file mode 100644 index d8fe3e4aa48..00000000000 --- a/changelogs/unreleased/58361-issue-create-system-note-timestamp.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix system notes timestamp when creating issue in the past -merge_request: 27406 -author: -type: fixed diff --git a/changelogs/unreleased/58748-update-nodejs-to-10-15-3.yml b/changelogs/unreleased/58748-update-nodejs-to-10-15-3.yml deleted file mode 100644 index 4c7e4b5c604..00000000000 --- a/changelogs/unreleased/58748-update-nodejs-to-10-15-3.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update node.js to 10.15.3 in CI template for Hexo -merge_request: 25943 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/58850-fix-misplaced-swipe-view-26969.yml b/changelogs/unreleased/58850-fix-misplaced-swipe-view-26969.yml deleted file mode 100644 index fa3e81df4e0..00000000000 --- a/changelogs/unreleased/58850-fix-misplaced-swipe-view-26969.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Fix misaligned image diff swipe view" -merge_request: 26969 -author: ftab -type: fixed diff --git a/changelogs/unreleased/59034-external-link-button.yml b/changelogs/unreleased/59034-external-link-button.yml deleted file mode 100644 index 3d8e9e82836..00000000000 --- a/changelogs/unreleased/59034-external-link-button.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Replaced icon for external URL with doc-text icon -merge_request: 27365 -author: -type: fixed diff --git a/changelogs/unreleased/59275-cluster-form-hints.yml b/changelogs/unreleased/59275-cluster-form-hints.yml deleted file mode 100644 index 0031b9557f4..00000000000 --- a/changelogs/unreleased/59275-cluster-form-hints.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add help texts to K8 form fields -merge_request: 27274 -author: -type: changed diff --git a/changelogs/unreleased/59514-uploading-images-base64.yml b/changelogs/unreleased/59514-uploading-images-base64.yml deleted file mode 100644 index 905b00db06a..00000000000 --- a/changelogs/unreleased/59514-uploading-images-base64.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show proper preview for uploaded images in Web IDE -merge_request: 27471 -author: -type: fixed diff --git a/changelogs/unreleased/5966-rebase-with-block.yml b/changelogs/unreleased/5966-rebase-with-block.yml deleted file mode 100644 index 9272a02977f..00000000000 --- a/changelogs/unreleased/5966-rebase-with-block.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix approvals sometimes being reset after a merge request is rebased -merge_request: 27446 -author: -type: fixed diff --git a/changelogs/unreleased/59708-vendor-css.yml b/changelogs/unreleased/59708-vendor-css.yml deleted file mode 100644 index ec7def7a9e6..00000000000 --- a/changelogs/unreleased/59708-vendor-css.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Creates a vendors folder for external CSS -merge_request: -author: -type: other diff --git a/changelogs/unreleased/59921-pipeline-schedule.yml b/changelogs/unreleased/59921-pipeline-schedule.yml deleted file mode 100644 index 4227a047913..00000000000 --- a/changelogs/unreleased/59921-pipeline-schedule.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Replaces CSS with BS4 utility class for pipeline schedules -merge_request: -author: -type: other diff --git a/changelogs/unreleased/60026-group-member-count-bg.yml b/changelogs/unreleased/60026-group-member-count-bg.yml deleted file mode 100644 index 0a1f6eac2ea..00000000000 --- a/changelogs/unreleased/60026-group-member-count-bg.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add badge-pill class on group member count -merge_request: 27019 -author: -type: fixed diff --git a/changelogs/unreleased/60224-btn-env.yml b/changelogs/unreleased/60224-btn-env.yml deleted file mode 100644 index 5053ddb31fa..00000000000 --- a/changelogs/unreleased/60224-btn-env.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes actions dropdowns in environments page -merge_request: 27160 -author: -type: fixed diff --git a/changelogs/unreleased/60261-save-btn-env.yml b/changelogs/unreleased/60261-save-btn-env.yml deleted file mode 100644 index b0936198d2e..00000000000 --- a/changelogs/unreleased/60261-save-btn-env.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes create button background for Environments form -merge_request: 27161 -author: -type: fixed diff --git a/changelogs/unreleased/60387-use-icons-in-user-popovers.yml b/changelogs/unreleased/60387-use-icons-in-user-popovers.yml deleted file mode 100644 index 100d33690b3..00000000000 --- a/changelogs/unreleased/60387-use-icons-in-user-popovers.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show category icons in user popover -merge_request: -author: -type: added diff --git a/changelogs/unreleased/60462-empty-pipeline-section.yml b/changelogs/unreleased/60462-empty-pipeline-section.yml deleted file mode 100644 index 7d90215e20c..00000000000 --- a/changelogs/unreleased/60462-empty-pipeline-section.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix empty block in MR widget when user doesn't have permission -merge_request: 27462 -author: -type: fixed diff --git a/changelogs/unreleased/60552-period-dropdown.yml b/changelogs/unreleased/60552-period-dropdown.yml deleted file mode 100644 index e1b4a098ab0..00000000000 --- a/changelogs/unreleased/60552-period-dropdown.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix autocomplete dropdown for usernames starting with period -merge_request: 27533 -author: Jan Beckmann -type: fixed diff --git a/changelogs/unreleased/60777-uninstall-button.yml b/changelogs/unreleased/60777-uninstall-button.yml deleted file mode 100644 index a2727b16ef1..00000000000 --- a/changelogs/unreleased/60777-uninstall-button.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Implement UI for uninstalling Cluster’s managed apps -merge_request: 27559 -author: -type: added diff --git a/changelogs/unreleased/60808-only-show-target-branch-advanced-error-before-merge.yml b/changelogs/unreleased/60808-only-show-target-branch-advanced-error-before-merge.yml deleted file mode 100644 index b340f8408f3..00000000000 --- a/changelogs/unreleased/60808-only-show-target-branch-advanced-error-before-merge.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Only show the "target branch has advanced" message when the merge request is - open -merge_request: 27588 -author: -type: fixed diff --git a/changelogs/unreleased/60874-fix-suggestion-misalignment.yml b/changelogs/unreleased/60874-fix-suggestion-misalignment.yml deleted file mode 100644 index f5717ac19fd..00000000000 --- a/changelogs/unreleased/60874-fix-suggestion-misalignment.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve Misalignment on suggested changes diff table -merge_request: 27612 -author: -type: fixed diff --git a/changelogs/unreleased/61036-fix-ingress-base-domain-text.yml b/changelogs/unreleased/61036-fix-ingress-base-domain-text.yml deleted file mode 100644 index 32f0e023923..00000000000 --- a/changelogs/unreleased/61036-fix-ingress-base-domain-text.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix base domain help text update -merge_request: 27746 -author: -type: fixed diff --git a/changelogs/unreleased/61203-fix-lfs-ui-upload.yml b/changelogs/unreleased/61203-fix-lfs-ui-upload.yml deleted file mode 100644 index 66afe9f0597..00000000000 --- a/changelogs/unreleased/61203-fix-lfs-ui-upload.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix uploading of LFS tracked file through UI -merge_request: 28052 -author: -type: fixed diff --git a/changelogs/unreleased/61278-next.yml b/changelogs/unreleased/61278-next.yml deleted file mode 100644 index 829f37f75ba..00000000000 --- a/changelogs/unreleased/61278-next.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Render Next badge only for gitlab.com -merge_request: 28056 -author: -type: fixed diff --git a/changelogs/unreleased/61469-align-play-icon.yml b/changelogs/unreleased/61469-align-play-icon.yml deleted file mode 100644 index a118da29703..00000000000 --- a/changelogs/unreleased/61469-align-play-icon.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Vertically aligns the play button for stages -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/61494-set-status-modal-visual-bugs.yml b/changelogs/unreleased/61494-set-status-modal-visual-bugs.yml deleted file mode 100644 index 4126b8f93c1..00000000000 --- a/changelogs/unreleased/61494-set-status-modal-visual-bugs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix visual issues in set status modal -merge_request: 28147 -author: -type: fixed diff --git a/changelogs/unreleased/61550-next-badge.yml b/changelogs/unreleased/61550-next-badge.yml deleted file mode 100644 index 122e394a68c..00000000000 --- a/changelogs/unreleased/61550-next-badge.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes next badge being always visible -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/62038-chevron-down.yml b/changelogs/unreleased/62038-chevron-down.yml deleted file mode 100644 index 9d58c364bc9..00000000000 --- a/changelogs/unreleased/62038-chevron-down.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adds arrow icons to select option in CI/CD settings -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/ac-package-storage-stats.yml b/changelogs/unreleased/ac-package-storage-stats.yml deleted file mode 100644 index fedffb41597..00000000000 --- a/changelogs/unreleased/ac-package-storage-stats.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add packages_size to ProjectStatistics -merge_request: 27373 -author: -type: added diff --git a/changelogs/unreleased/add-ci-variable-protected-ref.yml b/changelogs/unreleased/add-ci-variable-protected-ref.yml deleted file mode 100644 index 150ddcc21ad..00000000000 --- a/changelogs/unreleased/add-ci-variable-protected-ref.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add CI_COMMIT_REF_PROTECTED CI variable -merge_request: 26716 -author: Jason van den Hurk -type: added diff --git a/changelogs/unreleased/add-runner-access-level-registration.yml b/changelogs/unreleased/add-runner-access-level-registration.yml deleted file mode 100644 index 7ae95025abb..00000000000 --- a/changelogs/unreleased/add-runner-access-level-registration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add option to set access_level of runners upon registration -merge_request: 27490 -author: Zelin L -type: added diff --git a/changelogs/unreleased/allow-replying-to-individual-notes-from-api.yml b/changelogs/unreleased/allow-replying-to-individual-notes-from-api.yml deleted file mode 100644 index b268b0689ad..00000000000 --- a/changelogs/unreleased/allow-replying-to-individual-notes-from-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow replying to individual notes from API -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/always-link-instance-configuration.yml b/changelogs/unreleased/always-link-instance-configuration.yml deleted file mode 100644 index 3f08747edf7..00000000000 --- a/changelogs/unreleased/always-link-instance-configuration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Always show instance configuration link -merge_request: 26783 -author: Bastian Blank -type: fixed diff --git a/changelogs/unreleased/an-use-labkit.yml b/changelogs/unreleased/an-use-labkit.yml deleted file mode 100644 index ab293c15787..00000000000 --- a/changelogs/unreleased/an-use-labkit.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Migrate correlation and tracing code to LabKit -merge_request: 25379 -author: -type: other diff --git a/changelogs/unreleased/autodevops_remote_private_helm_repository.yml b/changelogs/unreleased/autodevops_remote_private_helm_repository.yml deleted file mode 100644 index 5341abb1095..00000000000 --- a/changelogs/unreleased/autodevops_remote_private_helm_repository.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Allow linking to a private helm repository by providing credentials, and customisation - of repository name -merge_request: 27123 -author: Stuart Moore @stjm-cc -type: added diff --git a/changelogs/unreleased/bw-add-graphql-groups.yml b/changelogs/unreleased/bw-add-graphql-groups.yml deleted file mode 100644 index f72ee1cf2b7..00000000000 --- a/changelogs/unreleased/bw-add-graphql-groups.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add initial GraphQL query for Groups -merge_request: 27492 -author: -type: added diff --git a/changelogs/unreleased/ce-10725-restructure-project-merge-request-settings-page.yml b/changelogs/unreleased/ce-10725-restructure-project-merge-request-settings-page.yml deleted file mode 100644 index 7aa9204fe4e..00000000000 --- a/changelogs/unreleased/ce-10725-restructure-project-merge-request-settings-page.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Reorganize project merge request settings -merge_request: 26834 -author: -type: changed diff --git a/changelogs/unreleased/ce-11430-update_clair_local_scan.yml b/changelogs/unreleased/ce-11430-update_clair_local_scan.yml deleted file mode 100644 index 04bb04c3919..00000000000 --- a/changelogs/unreleased/ce-11430-update_clair_local_scan.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update clair-local-scan to v2.0.8 for container scanning -merge_request: 27977 -author: -type: other diff --git a/changelogs/unreleased/ce-11542-remove-non-semantic-use-of-row-in-member-listing-controls.yml b/changelogs/unreleased/ce-11542-remove-non-semantic-use-of-row-in-member-listing-controls.yml deleted file mode 100644 index c2dcd309abd..00000000000 --- a/changelogs/unreleased/ce-11542-remove-non-semantic-use-of-row-in-member-listing-controls.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove non-semantic use of `.row` in member listing controls -merge_request: 28204 -author: -type: fixed diff --git a/changelogs/unreleased/ce-4681-autosave.yml b/changelogs/unreleased/ce-4681-autosave.yml deleted file mode 100644 index 029954ec92b..00000000000 --- a/changelogs/unreleased/ce-4681-autosave.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Autosave description in epics -merge_request: 27296 -author: -type: added diff --git a/changelogs/unreleased/ce-its-simple-just-destroy-the-mirrors.yml b/changelogs/unreleased/ce-its-simple-just-destroy-the-mirrors.yml deleted file mode 100644 index ac5fc27cf36..00000000000 --- a/changelogs/unreleased/ce-its-simple-just-destroy-the-mirrors.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Destroy project remote mirrors instead of disabling -merge_request: 27087 -author: -type: security diff --git a/changelogs/unreleased/ce-remove-already-signed-in.yml b/changelogs/unreleased/ce-remove-already-signed-in.yml deleted file mode 100644 index 70bed136ced..00000000000 --- a/changelogs/unreleased/ce-remove-already-signed-in.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove "You are already signed in" banner -merge_request: 27377 -author: -type: other diff --git a/changelogs/unreleased/ci-lint-ssl-error.yml b/changelogs/unreleased/ci-lint-ssl-error.yml deleted file mode 100644 index d59b9204357..00000000000 --- a/changelogs/unreleased/ci-lint-ssl-error.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Catch and report OpenSSL exceptions while fetching external configuration files - in CI::Config -merge_request: 26750 -author: Drew Cimino -type: fixed diff --git a/changelogs/unreleased/da-sentry-client-side-settings.yml b/changelogs/unreleased/da-sentry-client-side-settings.yml deleted file mode 100644 index e36ac7c354b..00000000000 --- a/changelogs/unreleased/da-sentry-client-side-settings.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow Sentry client-side DSN to be passed on gitlab.yml -merge_request: 27967 -author: -type: added diff --git a/changelogs/unreleased/delay-update-statictics.yml b/changelogs/unreleased/delay-update-statictics.yml deleted file mode 100644 index d0201fb6db8..00000000000 --- a/changelogs/unreleased/delay-update-statictics.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix the bug that the project statistics is not updated -merge_request: 26854 -author: Hiroyuki Sato -type: fixed diff --git a/changelogs/unreleased/do-not-reopen-merged-mr.yml b/changelogs/unreleased/do-not-reopen-merged-mr.yml deleted file mode 100644 index 14d1455cca4..00000000000 --- a/changelogs/unreleased/do-not-reopen-merged-mr.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove a "reopen merge request button" on a "merged" merge request -merge_request: 26965 -author: Hiroyuki Sato -type: fixed diff --git a/changelogs/unreleased/downloading-expired-artifacts.yml b/changelogs/unreleased/downloading-expired-artifacts.yml deleted file mode 100644 index 2f4b79ca106..00000000000 --- a/changelogs/unreleased/downloading-expired-artifacts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: stop rendering download links for expired artifacts on the project tags page -merge_request: 26753 -author: Drew Cimino -type: fixed diff --git a/changelogs/unreleased/expand-diff-performance.yml b/changelogs/unreleased/expand-diff-performance.yml deleted file mode 100644 index 134ea4081e4..00000000000 --- a/changelogs/unreleased/expand-diff-performance.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve expanding diff to full file performance -merge_request: -author: -type: changed diff --git a/changelogs/unreleased/expose-pipeline-variables-via-api.yml b/changelogs/unreleased/expose-pipeline-variables-via-api.yml deleted file mode 100644 index f37bf0c5cd8..00000000000 --- a/changelogs/unreleased/expose-pipeline-variables-via-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expose pipeline variables via API -merge_request: 26501 -author: Agustin Henze -type: added diff --git a/changelogs/unreleased/feat-sentry-environment.yml b/changelogs/unreleased/feat-sentry-environment.yml deleted file mode 100644 index 44ea19375f8..00000000000 --- a/changelogs/unreleased/feat-sentry-environment.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow Sentry configuration to be passed on gitlab.yml -merge_request: 27091 -author: Roger Meier -type: added diff --git a/changelogs/unreleased/fix-api-group-visibility.yml b/changelogs/unreleased/fix-api-group-visibility.yml deleted file mode 100644 index 7fbdcd729c6..00000000000 --- a/changelogs/unreleased/fix-api-group-visibility.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix api group visibility -merge_request: 26896 -author: -type: fixed diff --git a/changelogs/unreleased/fix-api-ide-relative-url-root.yml b/changelogs/unreleased/fix-api-ide-relative-url-root.yml deleted file mode 100644 index 8c058645f3e..00000000000 --- a/changelogs/unreleased/fix-api-ide-relative-url-root.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix FE API and IDE handling of '/' relative_url_root -merge_request: 27635 -author: -type: fixed diff --git a/changelogs/unreleased/fix-extra-emails-for-custom-notifications.yml b/changelogs/unreleased/fix-extra-emails-for-custom-notifications.yml deleted file mode 100644 index 6eb3225e4a1..00000000000 --- a/changelogs/unreleased/fix-extra-emails-for-custom-notifications.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix extra emails for custom notifications -merge_request: 25607 -author: -type: fixed diff --git a/changelogs/unreleased/fix-ide-relative-url-bug.yml b/changelogs/unreleased/fix-ide-relative-url-bug.yml deleted file mode 100644 index 183af722657..00000000000 --- a/changelogs/unreleased/fix-ide-relative-url-bug.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix IDE get file data with '/' as relative root -merge_request: 27911 -author: -type: fixed diff --git a/changelogs/unreleased/fix-js-error-ssh-key-view.yml b/changelogs/unreleased/fix-js-error-ssh-key-view.yml deleted file mode 100644 index 0615f2ee217..00000000000 --- a/changelogs/unreleased/fix-js-error-ssh-key-view.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: disable SSH key validation in key details view -merge_request: 28180 -author: Roger Meier -type: fixed diff --git a/changelogs/unreleased/fix-lazy-blobs-requesting-all-previous-blobs.yml b/changelogs/unreleased/fix-lazy-blobs-requesting-all-previous-blobs.yml deleted file mode 100644 index 58f5a9c943c..00000000000 --- a/changelogs/unreleased/fix-lazy-blobs-requesting-all-previous-blobs.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Fix Blob.lazy always loading all previously-requested blobs when a new request - is made -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/fix-merge-request-pipeline-exist-method.yml b/changelogs/unreleased/fix-merge-request-pipeline-exist-method.yml deleted file mode 100644 index 294a665ff3e..00000000000 --- a/changelogs/unreleased/fix-merge-request-pipeline-exist-method.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix duplicate merge request pipelines created by Sidekiq worker retry -merge_request: 26643 -author: -type: fixed diff --git a/changelogs/unreleased/fix-project-visibility-level-validation.yml b/changelogs/unreleased/fix-project-visibility-level-validation.yml deleted file mode 100644 index 9581a475842..00000000000 --- a/changelogs/unreleased/fix-project-visibility-level-validation.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix project visibility level validation -merge_request: 28305 -author: Peter Marko -type: fixed diff --git a/changelogs/unreleased/fix-schedule-head-pipeline-update-method.yml b/changelogs/unreleased/fix-schedule-head-pipeline-update-method.yml deleted file mode 100644 index 5e574ef686c..00000000000 --- a/changelogs/unreleased/fix-schedule-head-pipeline-update-method.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix update head pipeline process of Pipelines for merge requests -merge_request: 28057 -author: -type: fixed diff --git a/changelogs/unreleased/fix-webpack-assets-relative-url-bug.yml b/changelogs/unreleased/fix-webpack-assets-relative-url-bug.yml deleted file mode 100644 index 80936245f3e..00000000000 --- a/changelogs/unreleased/fix-webpack-assets-relative-url-bug.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix webpack assets handling when relative url root is '/' -merge_request: 27909 -author: -type: fixed diff --git a/changelogs/unreleased/fj-53523-add-option-avoid-loading-wiki-page-content.yml b/changelogs/unreleased/fj-53523-add-option-avoid-loading-wiki-page-content.yml deleted file mode 100644 index 49eaff52e5a..00000000000 --- a/changelogs/unreleased/fj-53523-add-option-avoid-loading-wiki-page-content.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added list_pages method to avoid loading all wiki pages content -merge_request: 22801 -author: -type: performance diff --git a/changelogs/unreleased/fj-59522-improve-search-controller-performance.yml b/changelogs/unreleased/fj-59522-improve-search-controller-performance.yml deleted file mode 100644 index c513f3c3aeb..00000000000 --- a/changelogs/unreleased/fj-59522-improve-search-controller-performance.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add improvements to global search of issues and merge requests -merge_request: 27817 -author: -type: performance diff --git a/changelogs/unreleased/fj-bump-workhorse-version-8-6-0.yml b/changelogs/unreleased/fj-bump-workhorse-version-8-6-0.yml deleted file mode 100644 index e53499e21ba..00000000000 --- a/changelogs/unreleased/fj-bump-workhorse-version-8-6-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update GitLab Workhorse to v8.6.0 -merge_request: 27260 -author: -type: fixed diff --git a/changelogs/unreleased/fl-fix-next-flag-for-good.yml b/changelogs/unreleased/fl-fix-next-flag-for-good.yml deleted file mode 100644 index 93f27824213..00000000000 --- a/changelogs/unreleased/fl-fix-next-flag-for-good.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Next badge must visible when canary flag is true -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/friendly-wrap-component.yml b/changelogs/unreleased/friendly-wrap-component.yml deleted file mode 100644 index c16ca0af287..00000000000 --- a/changelogs/unreleased/friendly-wrap-component.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add CSS fix for elements on IE11 -merge_request: 27846 -author: -type: other diff --git a/changelogs/unreleased/frozen-string-spec-some.yml b/changelogs/unreleased/frozen-string-spec-some.yml deleted file mode 100644 index 55381d7ccbe..00000000000 --- a/changelogs/unreleased/frozen-string-spec-some.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add some frozen string to spec/**/*.rb -merge_request: -author: gfyoung -type: other diff --git a/changelogs/unreleased/gitaly-version-v1.36.0.yml b/changelogs/unreleased/gitaly-version-v1.36.0.yml deleted file mode 100644 index 22fdca8da80..00000000000 --- a/changelogs/unreleased/gitaly-version-v1.36.0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade to Gitaly v1.36.0 -merge_request: 27831 -author: -type: changed diff --git a/changelogs/unreleased/gitaly-version-v1.42.0.yml b/changelogs/unreleased/gitaly-version-v1.42.0.yml deleted file mode 100644 index 38621fa071e..00000000000 --- a/changelogs/unreleased/gitaly-version-v1.42.0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade to Gitaly v1.42.0 -merge_request: 28135 -author: -type: changed diff --git a/changelogs/unreleased/gitlab-issue-54894.yml b/changelogs/unreleased/gitlab-issue-54894.yml deleted file mode 100644 index 513c0163c0e..00000000000 --- a/changelogs/unreleased/gitlab-issue-54894.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Fix some label links not appearing on group labels page and label title being - a link on project labels page -merge_request: 24060 -author: Tanya Pazitny -type: fixed diff --git a/changelogs/unreleased/graphql-resolvers-complexity.yml b/changelogs/unreleased/graphql-resolvers-complexity.yml deleted file mode 100644 index 503ffbd97f2..00000000000 --- a/changelogs/unreleased/graphql-resolvers-complexity.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: 'GraphQL: improve evaluation of query complexity based on arguments and query - limits.' -merge_request: 28017 -author: -type: added diff --git a/changelogs/unreleased/include-ee-fixtures.yml b/changelogs/unreleased/include-ee-fixtures.yml deleted file mode 100644 index ba500d92de3..00000000000 --- a/changelogs/unreleased/include-ee-fixtures.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add EE fixtures to SeedFu list -merge_request: 28241 -author: -type: other diff --git a/changelogs/unreleased/instance-configuration-artifact-size.yml b/changelogs/unreleased/instance-configuration-artifact-size.yml deleted file mode 100644 index 077f8631af5..00000000000 --- a/changelogs/unreleased/instance-configuration-artifact-size.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display maximum artifact size from runtime config -merge_request: 26784 -author: Bastian Blank -type: fixed diff --git a/changelogs/unreleased/instance_level_clusters.yml b/changelogs/unreleased/instance_level_clusters.yml deleted file mode 100644 index afd06a4e05f..00000000000 --- a/changelogs/unreleased/instance_level_clusters.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Instance level kubernetes clusters -merge_request: 27196 -author: -type: added diff --git a/changelogs/unreleased/issue-42692-deployment-chat-notifications.yml b/changelogs/unreleased/issue-42692-deployment-chat-notifications.yml deleted file mode 100644 index 3f0a96ad50e..00000000000 --- a/changelogs/unreleased/issue-42692-deployment-chat-notifications.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add deployment events to chat notification services -merge_request: 27338 -author: -type: added diff --git a/changelogs/unreleased/issue-58418-release-notes.yml b/changelogs/unreleased/issue-58418-release-notes.yml deleted file mode 100644 index 80e6529eb12..00000000000 --- a/changelogs/unreleased/issue-58418-release-notes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Set release name when adding release notes to an existing tag -merge_request: 26807 -author: -type: fixed diff --git a/changelogs/unreleased/issue-61038-deploy-chat-message-update.yml b/changelogs/unreleased/issue-61038-deploy-chat-message-update.yml deleted file mode 100644 index c85ddc7b91c..00000000000 --- a/changelogs/unreleased/issue-61038-deploy-chat-message-update.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update deployment event chat notification message -merge_request: 27972 -author: -type: changed diff --git a/changelogs/unreleased/issue_57906_fix_github_import.yml b/changelogs/unreleased/issue_57906_fix_github_import.yml deleted file mode 100644 index d28a78d5d11..00000000000 --- a/changelogs/unreleased/issue_57906_fix_github_import.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix issuables state_id nil when importing projects from GitHub -merge_request: 28027 -author: -type: fixed diff --git a/changelogs/unreleased/jc-client-gitaly-session-id.yml b/changelogs/unreleased/jc-client-gitaly-session-id.yml deleted file mode 100644 index ae5b7144b98..00000000000 --- a/changelogs/unreleased/jc-client-gitaly-session-id.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add gitaly session id & catfile-cache feature flag -merge_request: 27472 -author: -type: performance diff --git a/changelogs/unreleased/jc-update-list-last-commits.yml b/changelogs/unreleased/jc-update-list-last-commits.yml deleted file mode 100644 index 0e72c4255ae..00000000000 --- a/changelogs/unreleased/jc-update-list-last-commits.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Client side changes for ListLastCommitsForTree response update -merge_request: 26880 -author: -type: fixed diff --git a/changelogs/unreleased/jv-dedup-activerecord.yml b/changelogs/unreleased/jv-dedup-activerecord.yml deleted file mode 100644 index 7b440c7c0db..00000000000 --- a/changelogs/unreleased/jv-dedup-activerecord.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Fix wrong use of ActiveRecord in PoolRepository -merge_request: 27464 -author: -type: fixed - diff --git a/changelogs/unreleased/knative-0-5.yml b/changelogs/unreleased/knative-0-5.yml deleted file mode 100644 index c7112b957e9..00000000000 --- a/changelogs/unreleased/knative-0-5.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Knative version bump 0.3 -> 0.5 -merge_request: -author: Chris Baumbauer -type: changed diff --git a/changelogs/unreleased/markdown-autocomplete-escaping.yml b/changelogs/unreleased/markdown-autocomplete-escaping.yml deleted file mode 100644 index 0ea034b14ee..00000000000 --- a/changelogs/unreleased/markdown-autocomplete-escaping.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Only escape Markdown emphasis characters in autocomplete when necessary -merge_request: 27457 -author: -type: changed diff --git a/changelogs/unreleased/member-access-granted-leave-email-fe.yml b/changelogs/unreleased/member-access-granted-leave-email-fe.yml deleted file mode 100644 index 919a2464a4d..00000000000 --- a/changelogs/unreleased/member-access-granted-leave-email-fe.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Leave project/group from access granted email -merge_request: 27892 -author: -type: added diff --git a/changelogs/unreleased/patch-49.yml b/changelogs/unreleased/patch-49.yml deleted file mode 100644 index 2c8af1e5c48..00000000000 --- a/changelogs/unreleased/patch-49.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove leading / trailing spaces from heading when generating header ids -merge_request: 27025 -author: Willian Balmant -type: fixed diff --git a/changelogs/unreleased/pl-upgrade-letter_opener_web.yml b/changelogs/unreleased/pl-upgrade-letter_opener_web.yml deleted file mode 100644 index 9891344215a..00000000000 --- a/changelogs/unreleased/pl-upgrade-letter_opener_web.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade letter_opener_web to support Rails 5.1 -merge_request: 27829 -author: -type: fixed diff --git a/changelogs/unreleased/rails5-1.yml b/changelogs/unreleased/rails5-1.yml deleted file mode 100644 index da16735bb0d..00000000000 --- a/changelogs/unreleased/rails5-1.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade to Rails 5.1 -merge_request: 27480 -author: Jasper Maes -type: other diff --git a/changelogs/unreleased/refactor-58827-migrate-issue-spec-to-jest.yml b/changelogs/unreleased/refactor-58827-migrate-issue-spec-to-jest.yml deleted file mode 100644 index 03d94c39c10..00000000000 --- a/changelogs/unreleased/refactor-58827-migrate-issue-spec-to-jest.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'refactor(issue): Refactored issue tests from Karma to Jest' -merge_request: 27673 -author: Martin Hobert -type: other diff --git a/changelogs/unreleased/refactor-58829-migrate-notes-spec-to-jest.yml b/changelogs/unreleased/refactor-58829-migrate-notes-spec-to-jest.yml deleted file mode 100644 index 9a1886797da..00000000000 --- a/changelogs/unreleased/refactor-58829-migrate-notes-spec-to-jest.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Refactored notes tests from Karma to Jest' -merge_request: 27648 -author: Martin Hobert -type: other diff --git a/changelogs/unreleased/refactor-58830-migrate-sidebar-spec-to-jest.yml b/changelogs/unreleased/refactor-58830-migrate-sidebar-spec-to-jest.yml deleted file mode 100644 index 20a4be8c9ad..00000000000 --- a/changelogs/unreleased/refactor-58830-migrate-sidebar-spec-to-jest.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Refactored Karma spec files to Jest' -merge_request: 27688 -author: Martin Hobert -type: other diff --git a/changelogs/unreleased/remove-disabled-pages-domains-part-2.yml b/changelogs/unreleased/remove-disabled-pages-domains-part-2.yml deleted file mode 100644 index 9b208cbaa0e..00000000000 --- a/changelogs/unreleased/remove-disabled-pages-domains-part-2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove pages domains if they weren't verified for 1 week -merge_request: 26227 -author: -type: added diff --git a/changelogs/unreleased/remove-disabled-pages-domains.yml b/changelogs/unreleased/remove-disabled-pages-domains.yml deleted file mode 100644 index e23561329ef..00000000000 --- a/changelogs/unreleased/remove-disabled-pages-domains.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Mark disabled pages domains for removal, but don't remove them yet -merge_request: 26212 -author: -type: added diff --git a/changelogs/unreleased/rename_auto_deploy_app_links.yml b/changelogs/unreleased/rename_auto_deploy_app_links.yml deleted file mode 100644 index c56b5fb5e5c..00000000000 --- a/changelogs/unreleased/rename_auto_deploy_app_links.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move location of charts/auto-deploy-app -> gitlab-org/charts/auto-deploy-app -merge_request: 27477 -author: -type: changed diff --git a/changelogs/unreleased/require-all-templates-to-include-default-stages.yml b/changelogs/unreleased/require-all-templates-to-include-default-stages.yml deleted file mode 100644 index de8b07160ba..00000000000 --- a/changelogs/unreleased/require-all-templates-to-include-default-stages.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Require all templates to use default stages -merge_request: 26954 -author: -type: fixed diff --git a/changelogs/unreleased/rewind-iid-on-pipelines.yml b/changelogs/unreleased/rewind-iid-on-pipelines.yml deleted file mode 100644 index b5738860024..00000000000 --- a/changelogs/unreleased/rewind-iid-on-pipelines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Rewind IID on Ci::Pipelines -merge_request: 26490 -author: -type: fixed diff --git a/changelogs/unreleased/sh-add-gitaly-backtrace.yml b/changelogs/unreleased/sh-add-gitaly-backtrace.yml deleted file mode 100644 index 1515edd6db9..00000000000 --- a/changelogs/unreleased/sh-add-gitaly-backtrace.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add backtrace to Gitaly performance bar -merge_request: 27345 -author: -type: other diff --git a/changelogs/unreleased/sh-allow-equal-level-in-subgroup-membership.yml b/changelogs/unreleased/sh-allow-equal-level-in-subgroup-membership.yml deleted file mode 100644 index adbed52db81..00000000000 --- a/changelogs/unreleased/sh-allow-equal-level-in-subgroup-membership.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow a member to have an access level equal to parent group -merge_request: 27913 -author: -type: fixed diff --git a/changelogs/unreleased/sh-avoid-fetching-temp-refs-within-project.yml b/changelogs/unreleased/sh-avoid-fetching-temp-refs-within-project.yml deleted file mode 100644 index 7511543f7f6..00000000000 --- a/changelogs/unreleased/sh-avoid-fetching-temp-refs-within-project.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Don't create a temp reference for branch comparisons within project -merge_request: 24038 -author: -type: fixed diff --git a/changelogs/unreleased/sh-cleanup-import-export.yml b/changelogs/unreleased/sh-cleanup-import-export.yml deleted file mode 100644 index 3d5d6f3c907..00000000000 --- a/changelogs/unreleased/sh-cleanup-import-export.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Clean up CarrierWave's import/export files -merge_request: 27487 -author: -type: fixed diff --git a/changelogs/unreleased/sh-disable-batch-load-replace-methods.yml b/changelogs/unreleased/sh-disable-batch-load-replace-methods.yml deleted file mode 100644 index 00f897ac4b1..00000000000 --- a/changelogs/unreleased/sh-disable-batch-load-replace-methods.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Disable method replacement in avatar loading -merge_request: 27866 -author: -type: performance diff --git a/changelogs/unreleased/sh-disable-internal-ids-available-check.yml b/changelogs/unreleased/sh-disable-internal-ids-available-check.yml deleted file mode 100644 index 069a9ba7d69..00000000000 --- a/changelogs/unreleased/sh-disable-internal-ids-available-check.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Always use internal ID tables in development and production -merge_request: 27544 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-autocomplete-mirror-repo.yml b/changelogs/unreleased/sh-fix-autocomplete-mirror-repo.yml deleted file mode 100644 index e855684bab1..00000000000 --- a/changelogs/unreleased/sh-fix-autocomplete-mirror-repo.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Disable password autocomplete in mirror repository form -merge_request: 27542 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-invited-members.yml b/changelogs/unreleased/sh-fix-invited-members.yml deleted file mode 100644 index 96e43e1aa53..00000000000 --- a/changelogs/unreleased/sh-fix-invited-members.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix Error 500 when inviting user already present -merge_request: 28198 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-lfs-download-errors.yml b/changelogs/unreleased/sh-fix-lfs-download-errors.yml deleted file mode 100644 index ad67df6bb06..00000000000 --- a/changelogs/unreleased/sh-fix-lfs-download-errors.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Properly handle LFS Batch API response in project import -merge_request: 28223 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-personal-snippet-uploads-object-storage.yml b/changelogs/unreleased/sh-fix-personal-snippet-uploads-object-storage.yml deleted file mode 100644 index 603afa8573f..00000000000 --- a/changelogs/unreleased/sh-fix-personal-snippet-uploads-object-storage.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix incorrect prefix used in new uploads for personal snippets -merge_request: 28337 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-pipeline-delete-caching.yml b/changelogs/unreleased/sh-fix-pipeline-delete-caching.yml deleted file mode 100644 index 98846ea9825..00000000000 --- a/changelogs/unreleased/sh-fix-pipeline-delete-caching.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Properly expire all pipeline caches when pipeline is deleted -merge_request: 27334 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-related-merge-requests-path.yml b/changelogs/unreleased/sh-fix-related-merge-requests-path.yml deleted file mode 100644 index 4b4108feda4..00000000000 --- a/changelogs/unreleased/sh-fix-related-merge-requests-path.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use a path for the related merge requests endpoint -merge_request: 28171 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-rugged-get-tree-entries-recursive.yml b/changelogs/unreleased/sh-fix-rugged-get-tree-entries-recursive.yml deleted file mode 100644 index a9d46c6f460..00000000000 --- a/changelogs/unreleased/sh-fix-rugged-get-tree-entries-recursive.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix Rugged get_tree_entries recursive flag not working -merge_request: 28494 -author: -type: fixed diff --git a/changelogs/unreleased/sh-upgrade-grpc-and-protobuf.yml b/changelogs/unreleased/sh-upgrade-grpc-and-protobuf.yml deleted file mode 100644 index a43a59a4f8a..00000000000 --- a/changelogs/unreleased/sh-upgrade-grpc-and-protobuf.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bump gRPC to 1.19.0 and protobuf to 3.7.1 -merge_request: 27086 -author: -type: other diff --git a/changelogs/unreleased/sh-validate-ref-name-in-commit.yml b/changelogs/unreleased/sh-validate-ref-name-in-commit.yml deleted file mode 100644 index 399529556bc..00000000000 --- a/changelogs/unreleased/sh-validate-ref-name-in-commit.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Validate refs used in controllers don't have spaces -merge_request: 24037 -author: -type: other diff --git a/changelogs/unreleased/shell-9-1-0.yml b/changelogs/unreleased/shell-9-1-0.yml deleted file mode 100644 index d5a01ee57ee..00000000000 --- a/changelogs/unreleased/shell-9-1-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update gitlab-shell to v9.1.0 -merge_request: 28184 -author: -type: other diff --git a/changelogs/unreleased/show-disabled-mirrors.yml b/changelogs/unreleased/show-disabled-mirrors.yml deleted file mode 100644 index a401606b331..00000000000 --- a/changelogs/unreleased/show-disabled-mirrors.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show disabled project repo mirrors in settings -merge_request: 27326 -author: -type: other diff --git a/changelogs/unreleased/support-negative-matches.yml b/changelogs/unreleased/support-negative-matches.yml deleted file mode 100644 index 8d3f2d3cbae..00000000000 --- a/changelogs/unreleased/support-negative-matches.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Support negative matches -merge_request: -author: -type: added diff --git a/changelogs/unreleased/tc-raw-log-in-plaintext-mail.yml b/changelogs/unreleased/tc-raw-log-in-plaintext-mail.yml deleted file mode 100644 index 373c2847ef2..00000000000 --- a/changelogs/unreleased/tc-raw-log-in-plaintext-mail.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Include link to raw job log in plain-text emails -merge_request: 27409 -author: -type: changed diff --git a/changelogs/unreleased/tortuetorche-gitlab-ce-patch-auto-deploy-extra-values.yml b/changelogs/unreleased/tortuetorche-gitlab-ce-patch-auto-deploy-extra-values.yml deleted file mode 100644 index 84ed4a8fccb..00000000000 --- a/changelogs/unreleased/tortuetorche-gitlab-ce-patch-auto-deploy-extra-values.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow extra arguments in helm commands when deploying the application in Auto-DevOps.gitlab-ci.yml -merge_request: 26171 -author: tortuetorche -type: changed diff --git a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-4-0.yml b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-4-0.yml deleted file mode 100644 index 7eb5bd58035..00000000000 --- a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-4-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update GitLab Runner Helm Chart to 0.4.0 -merge_request: 27508 -author: -type: other diff --git a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-4-1.yml b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-4-1.yml deleted file mode 100644 index f36c1d0e77e..00000000000 --- a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-4-1.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update GitLab Runner Helm Chart to 0.4.1 -merge_request: 27627 -author: -type: other diff --git a/changelogs/unreleased/update-workhorse-master.yml b/changelogs/unreleased/update-workhorse-master.yml deleted file mode 100644 index 97e2e891ab1..00000000000 --- a/changelogs/unreleased/update-workhorse-master.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update Workhorse to v8.7.0 -merge_request: 27630 -author: -type: fixed diff --git a/changelogs/unreleased/use-pg-10-7.yml b/changelogs/unreleased/use-pg-10-7.yml deleted file mode 100644 index aa57c3a6a17..00000000000 --- a/changelogs/unreleased/use-pg-10-7.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use PostgreSQL 10.7 in tests -merge_request: 28020 -author: -type: other diff --git a/changelogs/unreleased/weimeng-user-autocomplete-fix.yml b/changelogs/unreleased/weimeng-user-autocomplete-fix.yml deleted file mode 100644 index aca9fc4be30..00000000000 --- a/changelogs/unreleased/weimeng-user-autocomplete-fix.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Only show in autocomplete when author active -merge_request: 27292 -author: -type: fixed diff --git a/changelogs/unreleased/wiki-search-results-fix.yml b/changelogs/unreleased/wiki-search-results-fix.yml deleted file mode 100644 index 693867eb385..00000000000 --- a/changelogs/unreleased/wiki-search-results-fix.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: fix wiki search result links in titles -merge_request: 27400 -author: khm -type: fixed diff --git a/changelogs/unreleased/xanf-gitlab-ce-add-template-link.yml b/changelogs/unreleased/xanf-gitlab-ce-add-template-link.yml deleted file mode 100644 index b868758dcd2..00000000000 --- a/changelogs/unreleased/xanf-gitlab-ce-add-template-link.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add instructions on how to contribute a Built-In template for project -merge_request: 26976 -author: -type: other diff --git a/changelogs/unreleased/xanf-gitlab-ce-improve-project-overview.yml b/changelogs/unreleased/xanf-gitlab-ce-improve-project-overview.yml deleted file mode 100644 index 9755540953a..00000000000 --- a/changelogs/unreleased/xanf-gitlab-ce-improve-project-overview.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve icons and button order in project overview -merge_request: 26796 -author: -type: other diff --git a/changelogs/unreleased/zj-fsck-no-timeout.yml b/changelogs/unreleased/zj-fsck-no-timeout.yml deleted file mode 100644 index 044f269bb4d..00000000000 --- a/changelogs/unreleased/zj-fsck-no-timeout.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove deadline for Git fsck -merge_request: 27299 -author: -type: fixed diff --git a/changelogs/unreleased/zj-git-2-21-tests.yml b/changelogs/unreleased/zj-git-2-21-tests.yml deleted file mode 100644 index 56711379368..00000000000 --- a/changelogs/unreleased/zj-git-2-21-tests.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Test using Git 2.21 -merge_request: 27418 -author: -type: added From f2fa7f3976518eccccc52e59b25eab24bf46a7a0 Mon Sep 17 00:00:00 2001 From: GitLab Release Tools Bot Date: Wed, 22 May 2019 11:16:27 +0000 Subject: [PATCH 120/319] Update VERSION to 11.12.0-pre --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index fd59314f1ad..6a02cfa7c06 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.11.0-pre +11.12.0-pre From 0d9c2b7a38ceac99bb9004c30c3d638d39c44e7a Mon Sep 17 00:00:00 2001 From: Annabel Dunstone Gray Date: Tue, 21 May 2019 13:47:09 -0500 Subject: [PATCH 121/319] Change default color of award emoji button --- app/assets/stylesheets/framework/awards.scss | 2 +- changelogs/unreleased/61393-emoji-button.yml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/61393-emoji-button.yml diff --git a/app/assets/stylesheets/framework/awards.scss b/app/assets/stylesheets/framework/awards.scss index 648e1944388..7d5bd7a81ad 100644 --- a/app/assets/stylesheets/framework/awards.scss +++ b/app/assets/stylesheets/framework/awards.scss @@ -236,7 +236,7 @@ } path { - fill: $border-gray-normal; + fill: $gray-700; } } diff --git a/changelogs/unreleased/61393-emoji-button.yml b/changelogs/unreleased/61393-emoji-button.yml new file mode 100644 index 00000000000..2bcfde308db --- /dev/null +++ b/changelogs/unreleased/61393-emoji-button.yml @@ -0,0 +1,5 @@ +--- +title: Change default color of award emoji button +merge_request: +author: +type: other From 67a50861953be9347e267795a9ce736dfea5316b Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Wed, 22 May 2019 12:43:35 +0100 Subject: [PATCH 122/319] Added repository files to GraphQL API --- app/graphql/resolvers/tree_resolver.rb | 26 +++++++ app/graphql/types/project_type.rb | 2 + app/graphql/types/repository_type.rb | 14 ++++ app/graphql/types/tree/blob_type.rb | 10 +++ app/graphql/types/tree/entry_type.rb | 14 ++++ app/graphql/types/tree/submodule_type.rb | 10 +++ app/graphql/types/tree/tree_entry_type.rb | 11 +++ app/graphql/types/tree/tree_type.rb | 12 +++ app/graphql/types/tree/type_enum.rb | 14 ++++ spec/graphql/resolvers/tree_resolver_spec.rb | 35 +++++++++ spec/graphql/types/project_type_spec.rb | 2 + spec/graphql/types/repository_type_spec.rb | 11 +++ spec/graphql/types/tree/blob_type_spec.rb | 9 +++ .../graphql/types/tree/submodule_type_spec.rb | 9 +++ .../types/tree/tree_entry_type_spec.rb | 9 +++ spec/graphql/types/tree/tree_type_spec.rb | 9 +++ spec/graphql/types/tree/type_enum_spec.rb | 11 +++ .../api/graphql/project/repository_spec.rb | 37 ++++++++++ .../api/graphql/project/tree/tree_spec.rb | 73 +++++++++++++++++++ 19 files changed, 318 insertions(+) create mode 100644 app/graphql/resolvers/tree_resolver.rb create mode 100644 app/graphql/types/repository_type.rb create mode 100644 app/graphql/types/tree/blob_type.rb create mode 100644 app/graphql/types/tree/entry_type.rb create mode 100644 app/graphql/types/tree/submodule_type.rb create mode 100644 app/graphql/types/tree/tree_entry_type.rb create mode 100644 app/graphql/types/tree/tree_type.rb create mode 100644 app/graphql/types/tree/type_enum.rb create mode 100644 spec/graphql/resolvers/tree_resolver_spec.rb create mode 100644 spec/graphql/types/repository_type_spec.rb create mode 100644 spec/graphql/types/tree/blob_type_spec.rb create mode 100644 spec/graphql/types/tree/submodule_type_spec.rb create mode 100644 spec/graphql/types/tree/tree_entry_type_spec.rb create mode 100644 spec/graphql/types/tree/tree_type_spec.rb create mode 100644 spec/graphql/types/tree/type_enum_spec.rb create mode 100644 spec/requests/api/graphql/project/repository_spec.rb create mode 100644 spec/requests/api/graphql/project/tree/tree_spec.rb diff --git a/app/graphql/resolvers/tree_resolver.rb b/app/graphql/resolvers/tree_resolver.rb new file mode 100644 index 00000000000..5aad1c71b40 --- /dev/null +++ b/app/graphql/resolvers/tree_resolver.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +module Resolvers + class TreeResolver < BaseResolver + argument :path, GraphQL::STRING_TYPE, + required: false, + default_value: '', + description: 'The path to get the tree for. Default value is the root of the repository' + argument :ref, GraphQL::STRING_TYPE, + required: false, + default_value: :head, + description: 'The commit ref to get the tree for. Default value is HEAD' + argument :recursive, GraphQL::BOOLEAN_TYPE, + required: false, + default_value: false, + description: 'Used to get a recursive tree. Default is false' + + alias_method :repository, :object + + def resolve(**args) + return unless repository.exists? + + repository.tree(args[:ref], args[:path], recursive: args[:recursive]) + end + end +end diff --git a/app/graphql/types/project_type.rb b/app/graphql/types/project_type.rb index baea6658e05..06a1aab09f6 100644 --- a/app/graphql/types/project_type.rb +++ b/app/graphql/types/project_type.rb @@ -69,6 +69,8 @@ module Types field :namespace, Types::NamespaceType, null: false field :group, Types::GroupType, null: true + field :repository, Types::RepositoryType, null: false + field :merge_requests, Types::MergeRequestType.connection_type, null: true, diff --git a/app/graphql/types/repository_type.rb b/app/graphql/types/repository_type.rb new file mode 100644 index 00000000000..5987467e1ea --- /dev/null +++ b/app/graphql/types/repository_type.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module Types + class RepositoryType < BaseObject + graphql_name 'Repository' + + authorize :download_code + + field :root_ref, GraphQL::STRING_TYPE, null: true + field :empty, GraphQL::BOOLEAN_TYPE, null: false, method: :empty? + field :exists, GraphQL::BOOLEAN_TYPE, null: false, method: :exists? + field :tree, Types::Tree::TreeType, null: true, resolver: Resolvers::TreeResolver + end +end diff --git a/app/graphql/types/tree/blob_type.rb b/app/graphql/types/tree/blob_type.rb new file mode 100644 index 00000000000..230624201b0 --- /dev/null +++ b/app/graphql/types/tree/blob_type.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +module Types + module Tree + class BlobType < BaseObject + implements Types::Tree::EntryType + + graphql_name 'Blob' + end + end +end diff --git a/app/graphql/types/tree/entry_type.rb b/app/graphql/types/tree/entry_type.rb new file mode 100644 index 00000000000..d8e8642ddb8 --- /dev/null +++ b/app/graphql/types/tree/entry_type.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true +module Types + module Tree + module EntryType + include Types::BaseInterface + + field :id, GraphQL::ID_TYPE, null: false + field :name, GraphQL::STRING_TYPE, null: false + field :type, Tree::TypeEnum, null: false + field :path, GraphQL::STRING_TYPE, null: false + field :flat_path, GraphQL::STRING_TYPE, null: false + end + end +end diff --git a/app/graphql/types/tree/submodule_type.rb b/app/graphql/types/tree/submodule_type.rb new file mode 100644 index 00000000000..cea76dbfd2a --- /dev/null +++ b/app/graphql/types/tree/submodule_type.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true +module Types + module Tree + class SubmoduleType < BaseObject + implements Types::Tree::EntryType + + graphql_name 'Submodule' + end + end +end diff --git a/app/graphql/types/tree/tree_entry_type.rb b/app/graphql/types/tree/tree_entry_type.rb new file mode 100644 index 00000000000..d5cfb898aea --- /dev/null +++ b/app/graphql/types/tree/tree_entry_type.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true +module Types + module Tree + class TreeEntryType < BaseObject + implements Types::Tree::EntryType + + graphql_name 'TreeEntry' + description 'Represents a directory' + end + end +end diff --git a/app/graphql/types/tree/tree_type.rb b/app/graphql/types/tree/tree_type.rb new file mode 100644 index 00000000000..1eb6c43972e --- /dev/null +++ b/app/graphql/types/tree/tree_type.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true +module Types + module Tree + class TreeType < BaseObject + graphql_name 'Tree' + + field :trees, Types::Tree::TreeEntryType.connection_type, null: false + field :submodules, Types::Tree::SubmoduleType.connection_type, null: false + field :blobs, Types::Tree::BlobType.connection_type, null: false + end + end +end diff --git a/app/graphql/types/tree/type_enum.rb b/app/graphql/types/tree/type_enum.rb new file mode 100644 index 00000000000..6560d91e9e5 --- /dev/null +++ b/app/graphql/types/tree/type_enum.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module Types + module Tree + class TypeEnum < BaseEnum + graphql_name 'EntryType' + description 'Type of a tree entry' + + value 'tree', value: :tree + value 'blob', value: :blob + value 'commit', value: :commit + end + end +end diff --git a/spec/graphql/resolvers/tree_resolver_spec.rb b/spec/graphql/resolvers/tree_resolver_spec.rb new file mode 100644 index 00000000000..9f95b740ab1 --- /dev/null +++ b/spec/graphql/resolvers/tree_resolver_spec.rb @@ -0,0 +1,35 @@ +require 'spec_helper' + +describe Resolvers::TreeResolver do + include GraphqlHelpers + + let(:repository) { create(:project, :repository).repository } + + describe '#resolve' do + it 'resolves to a tree' do + result = resolve_repository({ ref: "master" }) + + expect(result).to be_an_instance_of(Tree) + end + + it 'resolve to a recursive tree' do + result = resolve_repository({ ref: "master", recursive: true }) + + expect(result.trees[4].path).to eq('files/html') + end + + context 'when repository does not exist' do + it 'returns nil' do + allow(repository).to receive(:exists?).and_return(false) + + result = resolve_repository({ ref: "master" }) + + expect(result).to be(nil) + end + end + end + + def resolve_repository(args) + resolve(described_class, obj: repository, args: args) + end +end diff --git a/spec/graphql/types/project_type_spec.rb b/spec/graphql/types/project_type_spec.rb index e0ad09bdf22..075fa7c7e43 100644 --- a/spec/graphql/types/project_type_spec.rb +++ b/spec/graphql/types/project_type_spec.rb @@ -17,4 +17,6 @@ describe GitlabSchema.types['Project'] do end it { is_expected.to have_graphql_field(:pipelines) } + + it { is_expected.to have_graphql_field(:repository) } end diff --git a/spec/graphql/types/repository_type_spec.rb b/spec/graphql/types/repository_type_spec.rb new file mode 100644 index 00000000000..8a8238f2a2a --- /dev/null +++ b/spec/graphql/types/repository_type_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe GitlabSchema.types['Repository'] do + it { expect(described_class.graphql_name).to eq('Repository') } + + it { expect(described_class).to require_graphql_authorizations(:download_code) } + + it { is_expected.to have_graphql_field(:root_ref) } + + it { is_expected.to have_graphql_field(:tree) } +end diff --git a/spec/graphql/types/tree/blob_type_spec.rb b/spec/graphql/types/tree/blob_type_spec.rb new file mode 100644 index 00000000000..fa29bb5fff7 --- /dev/null +++ b/spec/graphql/types/tree/blob_type_spec.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Types::Tree::BlobType do + it { expect(described_class.graphql_name).to eq('Blob') } + + it { expect(described_class).to have_graphql_fields(:id, :name, :type, :path, :flat_path) } +end diff --git a/spec/graphql/types/tree/submodule_type_spec.rb b/spec/graphql/types/tree/submodule_type_spec.rb new file mode 100644 index 00000000000..bdb3149b41c --- /dev/null +++ b/spec/graphql/types/tree/submodule_type_spec.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Types::Tree::SubmoduleType do + it { expect(described_class.graphql_name).to eq('Submodule') } + + it { expect(described_class).to have_graphql_fields(:id, :name, :type, :path, :flat_path) } +end diff --git a/spec/graphql/types/tree/tree_entry_type_spec.rb b/spec/graphql/types/tree/tree_entry_type_spec.rb new file mode 100644 index 00000000000..397cabde8e5 --- /dev/null +++ b/spec/graphql/types/tree/tree_entry_type_spec.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Types::Tree::TreeEntryType do + it { expect(described_class.graphql_name).to eq('TreeEntry') } + + it { expect(described_class).to have_graphql_fields(:id, :name, :type, :path, :flat_path) } +end diff --git a/spec/graphql/types/tree/tree_type_spec.rb b/spec/graphql/types/tree/tree_type_spec.rb new file mode 100644 index 00000000000..b9c5570115e --- /dev/null +++ b/spec/graphql/types/tree/tree_type_spec.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Types::Tree::TreeType do + it { expect(described_class.graphql_name).to eq('Tree') } + + it { expect(described_class).to have_graphql_fields(:trees, :submodules, :blobs) } +end diff --git a/spec/graphql/types/tree/type_enum_spec.rb b/spec/graphql/types/tree/type_enum_spec.rb new file mode 100644 index 00000000000..4caf9e1c457 --- /dev/null +++ b/spec/graphql/types/tree/type_enum_spec.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Types::Tree::TypeEnum do + it { expect(described_class.graphql_name).to eq('EntryType') } + + it 'exposes all tree entry types' do + expect(described_class.values.keys).to include(*%w[tree blob commit]) + end +end diff --git a/spec/requests/api/graphql/project/repository_spec.rb b/spec/requests/api/graphql/project/repository_spec.rb new file mode 100644 index 00000000000..67af612a4a0 --- /dev/null +++ b/spec/requests/api/graphql/project/repository_spec.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true +require 'spec_helper' + +describe 'getting a repository in a project' do + include GraphqlHelpers + + let(:project) { create(:project, :repository) } + let(:current_user) { project.owner } + let(:fields) do + <<~QUERY + #{all_graphql_fields_for('repository'.classify)} + QUERY + end + let(:query) do + graphql_query_for( + 'project', + { 'fullPath' => project.full_path }, + query_graphql_field('repository', {}, fields) + ) + end + + it 'returns repository' do + post_graphql(query, current_user: current_user) + + expect(graphql_data['project']['repository']).to be_present + end + + context 'as a non-authorized user' do + let(:current_user) { create(:user) } + + it 'returns nil' do + post_graphql(query, current_user: current_user) + + expect(graphql_data['project']).to be(nil) + end + end +end diff --git a/spec/requests/api/graphql/project/tree/tree_spec.rb b/spec/requests/api/graphql/project/tree/tree_spec.rb new file mode 100644 index 00000000000..b07aa1e12d3 --- /dev/null +++ b/spec/requests/api/graphql/project/tree/tree_spec.rb @@ -0,0 +1,73 @@ +# frozen_string_literal: true +require 'spec_helper' + +describe 'getting a tree in a project' do + include GraphqlHelpers + + let(:project) { create(:project, :repository) } + let(:current_user) { project.owner } + let(:path) { "" } + let(:ref) { "master" } + let(:fields) do + <<~QUERY + tree(path:"#{path}", ref:"#{ref}") { + #{all_graphql_fields_for('tree'.classify)} + } + QUERY + end + let(:query) do + graphql_query_for( + 'project', + { 'fullPath' => project.full_path }, + query_graphql_field('repository', {}, fields) + ) + end + + context 'when path does not exist' do + let(:path) { "testing123" } + + it 'returns empty tree' do + post_graphql(query, current_user: current_user) + + expect(graphql_data['project']['repository']['tree']['trees']['edges']).to eq([]) + expect(graphql_data['project']['repository']['tree']['submodules']['edges']).to eq([]) + expect(graphql_data['project']['repository']['tree']['blobs']['edges']).to eq([]) + end + end + + context 'when ref does not exist' do + let(:ref) { "testing123" } + + it 'returns empty tree' do + post_graphql(query, current_user: current_user) + + expect(graphql_data['project']['repository']['tree']['trees']['edges']).to eq([]) + expect(graphql_data['project']['repository']['tree']['submodules']['edges']).to eq([]) + expect(graphql_data['project']['repository']['tree']['blobs']['edges']).to eq([]) + end + end + + context 'when ref and path exist' do + it 'returns tree' do + post_graphql(query, current_user: current_user) + + expect(graphql_data['project']['repository']['tree']).to be_present + end + + it 'returns blobs, subtrees and submodules inside tree' do + post_graphql(query, current_user: current_user) + + expect(graphql_data['project']['repository']['tree']['trees']['edges'].size).to be > 0 + expect(graphql_data['project']['repository']['tree']['blobs']['edges'].size).to be > 0 + expect(graphql_data['project']['repository']['tree']['submodules']['edges'].size).to be > 0 + end + end + + context 'when current user is nil' do + it 'returns empty project' do + post_graphql(query, current_user: nil) + + expect(graphql_data['project']).to be(nil) + end + end +end From 4f20c9de6f8e09131d751174243214d9bd3b6419 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Trzci=C5=84ski?= Date: Wed, 22 May 2019 11:45:46 +0000 Subject: [PATCH 123/319] Revert "Merge branch 'reorganize-tests-jobs-by-level' into 'master'" This reverts merge request !27514 --- .gitlab-ci.yml | 2 + .gitlab/ci/rails.gitlab-ci.yml | 58 ++-------- .gitlab/ci/test-metadata.gitlab-ci.yml | 6 +- Gemfile | 2 +- Gemfile.lock | 10 +- doc/development/rake_tasks.md | 13 +-- .../testing_guide/testing_levels.md | 12 +- lib/quality/test_level.rb | 75 ------------- lib/tasks/spec.rake | 44 +++----- scripts/prepare_build.sh | 1 - spec/lib/quality/test_level_spec.rb | 105 ------------------ spec/spec_helper.rb | 5 +- ...d_examples.rb => assignees_filter_spec.rb} | 0 ...examples.rb => atomic_internal_id_spec.rb} | 0 ...hared_examples.rb => chat_service_spec.rb} | 0 ...s.rb => update_project_statistics_spec.rb} | 0 ...mples.rb => issues_shared_example_spec.rb} | 0 17 files changed, 47 insertions(+), 286 deletions(-) delete mode 100644 lib/quality/test_level.rb delete mode 100644 spec/lib/quality/test_level_spec.rb rename spec/support/shared_examples/finders/{assignees_filter_shared_examples.rb => assignees_filter_spec.rb} (100%) rename spec/support/shared_examples/models/{atomic_internal_id_shared_examples.rb => atomic_internal_id_spec.rb} (100%) rename spec/support/shared_examples/models/{chat_service_shared_examples.rb => chat_service_spec.rb} (100%) rename spec/support/shared_examples/models/{update_project_statistics_shared_examples.rb => update_project_statistics_spec.rb} (100%) rename spec/support/shared_examples/requests/api/{issues_shared_examples.rb => issues_shared_example_spec.rb} (100%) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cc71ae9245a..c971df3ba5f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -13,8 +13,10 @@ variables: BUILD_ASSETS_IMAGE: "false" before_script: + - bundle --version - date - source scripts/utils.sh + - date - source scripts/prepare_build.sh - date diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index 346fa47cbb5..29534e40a14 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -6,9 +6,8 @@ .use-pg-10: &use-pg-10 services: - - name: postgres:10.7 - command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] - - name: redis:alpine + - postgres:10.7 + - redis:alpine .use-mysql: &use-mysql services: @@ -53,10 +52,8 @@ script: - JOB_NAME=( $CI_JOB_NAME ) - TEST_TOOL=${JOB_NAME[0]} - - TEST_LEVEL=${JOB_NAME[1]} - - DATABASE=${JOB_NAME[2]} - - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json - - export KNAPSACK_GENERATE_REPORT=true KNAPSACK_LOG_LEVEL=debug KNAPSACK_TEST_DIR=spec + - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${TEST_TOOL}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json + - export KNAPSACK_GENERATE_REPORT=true - export SUITE_FLAKY_RSPEC_REPORT_PATH=${FLAKY_RSPEC_SUITE_REPORT_PATH} - export FLAKY_RSPEC_REPORT_PATH=rspec_flaky/all_${TEST_TOOL}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json - export NEW_FLAKY_RSPEC_REPORT_PATH=rspec_flaky/new_${TEST_TOOL}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json @@ -66,10 +63,7 @@ - '[[ -f $FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${FLAKY_RSPEC_REPORT_PATH}' - '[[ -f $NEW_FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${NEW_FLAKY_RSPEC_REPORT_PATH}' - scripts/gitaly-test-spawn - - date - - 'export KNAPSACK_TEST_FILE_PATTERN=$(ruby -r./lib/quality/test_level.rb -e "puts Quality::TestLevel.new.pattern(:${TEST_LEVEL})")' - - knapsack rspec "--color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag level:${TEST_LEVEL} --tag ~geo" - - date + - knapsack rspec "--color --format documentation --format RspecJunitFormatter --out junit_rspec.xml" artifacts: expire_in: 31d when: always @@ -146,47 +140,19 @@ setup-test-env: except: - /(^docs[\/-].*|.*-docs$)/ -rspec unit pg: +rspec-pg: <<: *rspec-metadata-pg - parallel: 20 + parallel: 50 -rspec integration pg: - <<: *rspec-metadata-pg - parallel: 6 - -rspec system pg: - <<: *rspec-metadata-pg - parallel: 24 - -rspec unit pg-10: +rspec-pg-10: <<: *rspec-metadata-pg-10 <<: *only-schedules-master - parallel: 20 + parallel: 50 -rspec integration pg-10: - <<: *rspec-metadata-pg-10 - <<: *only-schedules-master - parallel: 6 - -rspec system pg-10: - <<: *rspec-metadata-pg-10 - <<: *only-schedules-master - parallel: 24 - -rspec unit mysql: +rspec-mysql: <<: *rspec-metadata-mysql <<: *only-schedules-master - parallel: 20 - -rspec integration mysql: - <<: *rspec-metadata-mysql - <<: *only-schedules-master - parallel: 6 - -rspec system mysql: - <<: *rspec-metadata-mysql - <<: *only-schedules-master - parallel: 24 + parallel: 50 rspec-fast-spec-helper: <<: *rspec-metadata-pg @@ -198,7 +164,7 @@ rspec-fast-spec-helper: script: - export CACHE_CLASSES=true - scripts/gitaly-test-spawn - - bin/rspec --color --format documentation --tag quarantine -- spec/ + - bin/rspec --color --format documentation --tag quarantine spec/ rspec-pg-quarantine: <<: *rspec-metadata-pg diff --git a/.gitlab/ci/test-metadata.gitlab-ci.yml b/.gitlab/ci/test-metadata.gitlab-ci.yml index c51f825f831..4b595083ec6 100644 --- a/.gitlab/ci/test-metadata.gitlab-ci.yml +++ b/.gitlab/ci/test-metadata.gitlab-ci.yml @@ -40,12 +40,12 @@ update-tests-metadata: policy: push script: - retry gem install fog-aws mime-types activesupport rspec_profiling postgres-copy --no-document - - scripts/merge-reports ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec_*_pg_node_*.json - - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $KNAPSACK_RSPEC_SUITE_REPORT_PATH' - - rm -f knapsack/${CI_PROJECT_NAME}/*_node_*.json + - scripts/merge-reports ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec-pg_node_*.json - scripts/merge-reports ${FLAKY_RSPEC_SUITE_REPORT_PATH} rspec_flaky/all_*_*.json - FLAKY_RSPEC_GENERATE_REPORT=1 scripts/prune-old-flaky-specs ${FLAKY_RSPEC_SUITE_REPORT_PATH} + - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $KNAPSACK_RSPEC_SUITE_REPORT_PATH' - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $FLAKY_RSPEC_SUITE_REPORT_PATH' + - rm -f knapsack/${CI_PROJECT_NAME}/*_node_*.json - rm -f rspec_flaky/all_*.json rspec_flaky/new_*.json - scripts/insert-rspec-profiling-data only: diff --git a/Gemfile b/Gemfile index b8c31368bbb..b6804a94971 100644 --- a/Gemfile +++ b/Gemfile @@ -361,7 +361,7 @@ group :development, :test do gem 'scss_lint', '~> 0.56.0', require: false gem 'haml_lint', '~> 0.31.0', require: false - gem 'simplecov', '~> 0.16.1', require: false + gem 'simplecov', '~> 0.14.0', require: false gem 'bundler-audit', '~> 0.5.0', require: false gem 'benchmark-ips', '~> 2.3.0', require: false diff --git a/Gemfile.lock b/Gemfile.lock index eb1a2fae123..2dbff1674df 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -174,7 +174,7 @@ GEM diffy (3.1.0) discordrb-webhooks-blackst0ne (3.3.0) rest-client (~> 2.0) - docile (1.3.1) + docile (1.1.5) domain_name (0.5.20180417) unf (>= 0.0.5, < 1.0.0) doorkeeper (4.3.2) @@ -873,11 +873,11 @@ GEM jwt (>= 1.5, < 3.0) multi_json (~> 1.10) simple_po_parser (1.1.2) - simplecov (0.16.1) - docile (~> 1.1) + simplecov (0.14.1) + docile (~> 1.1.0) json (>= 1.8, < 3) simplecov-html (~> 0.10.0) - simplecov-html (0.10.2) + simplecov-html (0.10.0) slack-notifier (1.5.1) spring (2.0.2) activesupport (>= 4.2) @@ -1203,7 +1203,7 @@ DEPENDENCIES sidekiq (~> 5.2.7) sidekiq-cron (~> 1.0) simple_po_parser (~> 1.1.2) - simplecov (~> 0.16.1) + simplecov (~> 0.14.0) slack-notifier (~> 1.5.1) spring (~> 2.0.0) spring-commands-rspec (~> 1.0.4) diff --git a/doc/development/rake_tasks.md b/doc/development/rake_tasks.md index f06ffab03c6..27fc3231218 100644 --- a/doc/development/rake_tasks.md +++ b/doc/development/rake_tasks.md @@ -108,13 +108,11 @@ To make sure that indices still fit. You could find great details in: In order to run the test you can use the following commands: -- `bin/rake spec` to run the rspec suite -- `bin/rake spec:unit` to run the only the unit tests -- `bin/rake spec:integration` to run the only the integration tests -- `bin/rake spec:system` to run the only the system tests -- `bin/rake karma` to run the karma test suite +- `rake spec` to run the rspec suite +- `rake karma` to run the karma test suite +- `rake gitlab:test` to run all the tests -Note: `bin/rake spec` takes significant time to pass. +Note: `rake spec` takes significant time to pass. Instead of running full test suite locally you can save a lot of time by running a single test or directory related to your changes. After you submit merge request CI will run full test suite for you. Green CI status in the merge request means @@ -123,9 +121,6 @@ full test suite is passed. Note: You can't run `rspec .` since this will try to run all the `_spec.rb` files it can find, also the ones in `/tmp` -Note: You can pass RSpec command line options to the `spec:unit`, -`spec:integration`, and `spec:system` tasks, e.g. `bin/rake "spec:unit[--tag ~geo --dry-run]"`. - To run a single test file you can use: - `bin/rspec spec/controllers/commit_controller_spec.rb` for a rspec test diff --git a/doc/development/testing_guide/testing_levels.md b/doc/development/testing_guide/testing_levels.md index b5155b6b7fa..1fa6e38ea5a 100644 --- a/doc/development/testing_guide/testing_levels.md +++ b/doc/development/testing_guide/testing_levels.md @@ -4,14 +4,12 @@ _This diagram demonstrates the relative priority of each test type we use. `e2e` stands for end-to-end._ -As of 2019-05-01, we have the following distribution of tests per level: +As of 2019-04-16, we have the following distribution of tests per level: -| Test level | Community Edition | Enterprise Edition | Community + Enterprise Edition | -| --------- | ---------- | -------------- | ----- | -| Black-box tests at the system level (aka end-to-end or QA tests) | 68 (0.14%) | 31 (0.2%) | 99 (0.17%) | -| White-box tests at the system level (aka system or feature tests) | 5,471 (11.9%) | 969 (7.4%) | 6440 (10.9%) | -| Integration tests | 8,333 (18.2%) | 2,244 (17.2%) | 10,577 (17.9%) | -| Unit tests | 32,031 (69.7%) | 9,778 (75.1%) | 41,809 (71%) | +- 67 black-box tests at the system level (aka end-to-end or QA tests) in CE, 98 in EE. This represents 0.3% of all the CE tests (0.3% in EE). +- 5,457 white-box tests at the system level (aka system or feature tests) in CE, 6,585 in EE. This represents 24.6% of all the CE tests (20.3% in EE). +- 8,298 integration tests in CE, 10,633 in EE: 0.3% of all the CE tests (0.3% in EE). This represents 37.2% of all the CE tests (32.8% in EE). +- 8,403 unit tests in CE, 15,090 in EE: 0.3% of all the CE tests (0.3% in EE). This represents 37.8% of all the CE tests (46.6% in EE). ## Unit tests diff --git a/lib/quality/test_level.rb b/lib/quality/test_level.rb deleted file mode 100644 index 24d8eac200c..00000000000 --- a/lib/quality/test_level.rb +++ /dev/null @@ -1,75 +0,0 @@ -# frozen_string_literal: true - -module Quality - class TestLevel - UnknownTestLevelError = Class.new(StandardError) - - TEST_LEVEL_FOLDERS = { - unit: %w[ - bin - config - db - dependencies - factories - finders - frontend - graphql - helpers - initializers - javascripts - lib - migrations - models - policies - presenters - rack_servers - routing - rubocop - serializers - services - sidekiq - tasks - uploaders - validators - views - workers - elastic_integration - ], - integration: %w[ - controllers - mailers - requests - ], - system: ['features'] - }.freeze - - attr_reader :prefix - - def initialize(prefix = nil) - @prefix = prefix - @patterns = {} - @regexps = {} - end - - def pattern(level) - @patterns[level] ||= "#{prefix}spec/{#{TEST_LEVEL_FOLDERS.fetch(level).join(',')}}{,/**/}*_spec.rb".freeze - end - - def regexp(level) - @regexps[level] ||= Regexp.new("#{prefix}spec/(#{TEST_LEVEL_FOLDERS.fetch(level).join('|')})").freeze - end - - def level_for(file_path) - case file_path - when regexp(:unit) - :unit - when regexp(:integration) - :integration - when regexp(:system) - :system - else - raise UnknownTestLevelError, "Test level for #{file_path} couldn't be set. Please rename the file properly or change the test level detection regexes in #{__FILE__}." - end - end - end -end diff --git a/lib/tasks/spec.rake b/lib/tasks/spec.rake index c881ad4cf12..2eddcb3c777 100644 --- a/lib/tasks/spec.rake +++ b/lib/tasks/spec.rake @@ -1,32 +1,7 @@ -# frozen_string_literal: true - -return if Rails.env.production? - Rake::Task["spec"].clear if Rake::Task.task_defined?('spec') namespace :spec do - desc 'GitLab | RSpec | Run unit tests' - RSpec::Core::RakeTask.new(:unit, :rspec_opts) do |t, args| - require_dependency 'quality/test_level' - t.pattern = Quality::TestLevel.new.pattern(:unit) - t.rspec_opts = args[:rspec_opts] - end - - desc 'GitLab | RSpec | Run integration tests' - RSpec::Core::RakeTask.new(:integration, :rspec_opts) do |t, args| - require_dependency 'quality/test_level' - t.pattern = Quality::TestLevel.new.pattern(:integration) - t.rspec_opts = args[:rspec_opts] - end - - desc 'GitLab | RSpec | Run system tests' - RSpec::Core::RakeTask.new(:system, :rspec_opts) do |t, args| - require_dependency 'quality/test_level' - t.pattern = Quality::TestLevel.new.pattern(:system) - t.rspec_opts = args[:rspec_opts] - end - - desc '[Deprecated] Use the "bin/rspec --tag api" instead' + desc 'GitLab | Rspec | Run request specs' task :api do cmds = [ %w(rake gitlab:setup), @@ -35,7 +10,7 @@ namespace :spec do run_commands(cmds) end - desc '[Deprecated] Use the "spec:system" task instead' + desc 'GitLab | Rspec | Run feature specs' task :feature do cmds = [ %w(rake gitlab:setup), @@ -44,7 +19,7 @@ namespace :spec do run_commands(cmds) end - desc '[Deprecated] Use "bin/rspec spec/models" instead' + desc 'GitLab | Rspec | Run model specs' task :models do cmds = [ %w(rake gitlab:setup), @@ -53,7 +28,7 @@ namespace :spec do run_commands(cmds) end - desc '[Deprecated] Use "bin/rspec spec/services" instead' + desc 'GitLab | Rspec | Run service specs' task :services do cmds = [ %w(rake gitlab:setup), @@ -62,7 +37,7 @@ namespace :spec do run_commands(cmds) end - desc '[Deprecated] Use "bin/rspec spec/lib" instead' + desc 'GitLab | Rspec | Run lib specs' task :lib do cmds = [ %w(rake gitlab:setup), @@ -70,6 +45,15 @@ namespace :spec do ] run_commands(cmds) end + + desc 'GitLab | Rspec | Run other specs' + task :other do + cmds = [ + %w(rake gitlab:setup), + %w(rspec spec --tag ~@api --tag ~@feature --tag ~@models --tag ~@lib --tag ~@services) + ] + run_commands(cmds) + end end desc "GitLab | Run specs" diff --git a/scripts/prepare_build.sh b/scripts/prepare_build.sh index 5fca95f1f40..58b74f2f07d 100644 --- a/scripts/prepare_build.sh +++ b/scripts/prepare_build.sh @@ -5,7 +5,6 @@ export USE_BUNDLE_INSTALL=${USE_BUNDLE_INSTALL:-true} export BUNDLE_INSTALL_FLAGS="--without=production --jobs=$(nproc) --path=vendor --retry=3 --quiet" if [ "$USE_BUNDLE_INSTALL" != "false" ]; then - bundle --version bundle install --clean $BUNDLE_INSTALL_FLAGS && bundle check fi diff --git a/spec/lib/quality/test_level_spec.rb b/spec/lib/quality/test_level_spec.rb deleted file mode 100644 index 3465c3a050b..00000000000 --- a/spec/lib/quality/test_level_spec.rb +++ /dev/null @@ -1,105 +0,0 @@ -# frozen_string_literal: true - -require 'fast_spec_helper' - -RSpec.describe Quality::TestLevel do - describe '#pattern' do - context 'when level is unit' do - it 'returns a pattern' do - expect(subject.pattern(:unit)) - .to eq("spec/{bin,config,db,dependencies,factories,finders,frontend,graphql,helpers,initializers,javascripts,lib,migrations,models,policies,presenters,rack_servers,routing,rubocop,serializers,services,sidekiq,tasks,uploaders,validators,views,workers,elastic_integration}{,/**/}*_spec.rb") - end - end - - context 'when level is integration' do - it 'returns a pattern' do - expect(subject.pattern(:integration)) - .to eq("spec/{controllers,mailers,requests}{,/**/}*_spec.rb") - end - end - - context 'when level is system' do - it 'returns a pattern' do - expect(subject.pattern(:system)) - .to eq("spec/{features}{,/**/}*_spec.rb") - end - end - - context 'with a prefix' do - it 'returns a pattern' do - expect(described_class.new('ee/').pattern(:system)) - .to eq("ee/spec/{features}{,/**/}*_spec.rb") - end - end - - describe 'performance' do - it 'memoizes the pattern for a given level' do - expect(subject.pattern(:system).object_id).to eq(subject.pattern(:system).object_id) - end - - it 'freezes the pattern for a given level' do - expect(subject.pattern(:system)).to be_frozen - end - end - end - - describe '#regexp' do - context 'when level is unit' do - it 'returns a regexp' do - expect(subject.regexp(:unit)) - .to eq(%r{spec/(bin|config|db|dependencies|factories|finders|frontend|graphql|helpers|initializers|javascripts|lib|migrations|models|policies|presenters|rack_servers|routing|rubocop|serializers|services|sidekiq|tasks|uploaders|validators|views|workers|elastic_integration)}) - end - end - - context 'when level is integration' do - it 'returns a regexp' do - expect(subject.regexp(:integration)) - .to eq(%r{spec/(controllers|mailers|requests)}) - end - end - - context 'when level is system' do - it 'returns a regexp' do - expect(subject.regexp(:system)) - .to eq(%r{spec/(features)}) - end - end - - context 'with a prefix' do - it 'returns a regexp' do - expect(described_class.new('ee/').regexp(:system)) - .to eq(%r{ee/spec/(features)}) - end - end - - describe 'performance' do - it 'memoizes the regexp for a given level' do - expect(subject.regexp(:system).object_id).to eq(subject.regexp(:system).object_id) - end - - it 'freezes the regexp for a given level' do - expect(subject.regexp(:system)).to be_frozen - end - end - end - - describe '#level_for' do - it 'returns the correct level for a unit test' do - expect(subject.level_for('spec/models/abuse_report_spec.rb')).to eq(:unit) - end - - it 'returns the correct level for an integration test' do - expect(subject.level_for('spec/mailers/abuse_report_mailer_spec.rb')).to eq(:integration) - end - - it 'returns the correct level for a system test' do - expect(subject.level_for('spec/features/abuse_report_spec.rb')).to eq(:system) - end - - it 'raises an error for an unknown level' do - expect { subject.level_for('spec/unknown/foo_spec.rb') } - .to raise_error(described_class::UnknownTestLevelError, - %r{Test level for spec/unknown/foo_spec.rb couldn't be set. Please rename the file properly or change the test level detection regexes in .+/lib/quality/test_level.rb.}) - end - end -end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 390a869d93f..69589c9aa33 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -44,8 +44,6 @@ Dir[Rails.root.join("spec/support/shared_contexts/*.rb")].each { |f| require f } Dir[Rails.root.join("spec/support/shared_examples/*.rb")].each { |f| require f } Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } -quality_level = Quality::TestLevel.new - RSpec.configure do |config| config.use_transactional_fixtures = false config.use_instantiated_fixtures = false @@ -57,10 +55,9 @@ RSpec.configure do |config| config.infer_spec_type_from_file_location! config.full_backtrace = !!ENV['CI'] - config.define_derived_metadata(file_path: %r{(ee)?/spec/.+_spec\.rb\z}) do |metadata| + config.define_derived_metadata(file_path: %r{/spec/}) do |metadata| location = metadata[:location] - metadata[:level] = quality_level.level_for(location) metadata[:api] = true if location =~ %r{/spec/requests/api/} # do not overwrite type if it's already set diff --git a/spec/support/shared_examples/finders/assignees_filter_shared_examples.rb b/spec/support/shared_examples/finders/assignees_filter_spec.rb similarity index 100% rename from spec/support/shared_examples/finders/assignees_filter_shared_examples.rb rename to spec/support/shared_examples/finders/assignees_filter_spec.rb diff --git a/spec/support/shared_examples/models/atomic_internal_id_shared_examples.rb b/spec/support/shared_examples/models/atomic_internal_id_spec.rb similarity index 100% rename from spec/support/shared_examples/models/atomic_internal_id_shared_examples.rb rename to spec/support/shared_examples/models/atomic_internal_id_spec.rb diff --git a/spec/support/shared_examples/models/chat_service_shared_examples.rb b/spec/support/shared_examples/models/chat_service_spec.rb similarity index 100% rename from spec/support/shared_examples/models/chat_service_shared_examples.rb rename to spec/support/shared_examples/models/chat_service_spec.rb diff --git a/spec/support/shared_examples/models/update_project_statistics_shared_examples.rb b/spec/support/shared_examples/models/update_project_statistics_spec.rb similarity index 100% rename from spec/support/shared_examples/models/update_project_statistics_shared_examples.rb rename to spec/support/shared_examples/models/update_project_statistics_spec.rb diff --git a/spec/support/shared_examples/requests/api/issues_shared_examples.rb b/spec/support/shared_examples/requests/api/issues_shared_example_spec.rb similarity index 100% rename from spec/support/shared_examples/requests/api/issues_shared_examples.rb rename to spec/support/shared_examples/requests/api/issues_shared_example_spec.rb From 6f9e94dfc1da63b99ba3d9319f177495afa9ac18 Mon Sep 17 00:00:00 2001 From: Marcel van Remmerden Date: Wed, 22 May 2019 14:28:39 +0000 Subject: [PATCH 124/319] Give 'New Snippet' button green outline --- app/views/snippets/_actions.html.haml | 2 +- ...ct-snippet-new-snippet-button-should-be-green-outline.yml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/61324-non-project-snippet-new-snippet-button-should-be-green-outline.yml diff --git a/app/views/snippets/_actions.html.haml b/app/views/snippets/_actions.html.haml index ef8664e6f47..9952f373156 100644 --- a/app/views/snippets/_actions.html.haml +++ b/app/views/snippets/_actions.html.haml @@ -7,7 +7,7 @@ - if can?(current_user, :admin_personal_snippet, @snippet) = link_to snippet_path(@snippet), method: :delete, data: { confirm: _("Are you sure?") }, class: "btn btn-grouped btn-inverted btn-remove", title: _('Delete Snippet') do = _("Delete") - = link_to new_snippet_path, class: "btn btn-grouped btn-inverted btn-create", title: _("New snippet") do + = link_to new_snippet_path, class: "btn btn-grouped btn-success btn-inverted", title: _("New snippet") do = _("New snippet") - if @snippet.submittable_as_spam_by?(current_user) = link_to _('Submit as spam'), mark_as_spam_snippet_path(@snippet), method: :post, class: 'btn btn-grouped btn-spam', title: _('Submit as spam') diff --git a/changelogs/unreleased/61324-non-project-snippet-new-snippet-button-should-be-green-outline.yml b/changelogs/unreleased/61324-non-project-snippet-new-snippet-button-should-be-green-outline.yml new file mode 100644 index 00000000000..350fd525a30 --- /dev/null +++ b/changelogs/unreleased/61324-non-project-snippet-new-snippet-button-should-be-green-outline.yml @@ -0,0 +1,5 @@ +--- +title: Give New Snippet button green outline +merge_request: 28559 +author: Marcel van Remmerden +type: other From 77d5516d1aadc06fdeb447d8fa773495ba953ac3 Mon Sep 17 00:00:00 2001 From: Elliot Rushton Date: Tue, 21 May 2019 19:00:22 +0000 Subject: [PATCH 125/319] Add 60s & 5m monitor buckets for CI queues --- app/services/ci/register_job_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/ci/register_job_service.rb b/app/services/ci/register_job_service.rb index baa3f898b2d..dedab98b56d 100644 --- a/app/services/ci/register_job_service.rb +++ b/app/services/ci/register_job_service.rb @@ -6,7 +6,7 @@ module Ci class RegisterJobService attr_reader :runner - JOB_QUEUE_DURATION_SECONDS_BUCKETS = [1, 3, 10, 30].freeze + JOB_QUEUE_DURATION_SECONDS_BUCKETS = [1, 3, 10, 30, 60, 300].freeze JOBS_RUNNING_FOR_PROJECT_MAX_BUCKET = 5.freeze Result = Struct.new(:build, :valid?) From 77e44ae7c17799a22e853bb8418ed779a9b3e95c Mon Sep 17 00:00:00 2001 From: Paul Slaughter Date: Wed, 22 May 2019 15:09:30 +0000 Subject: [PATCH 126/319] Apply suggestion to doc/development/fe_guide/style_guide_scss.md --- doc/development/fe_guide/style_guide_scss.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/development/fe_guide/style_guide_scss.md b/doc/development/fe_guide/style_guide_scss.md index c0d078300bb..b25dce65ffe 100644 --- a/doc/development/fe_guide/style_guide_scss.md +++ b/doc/development/fe_guide/style_guide_scss.md @@ -43,7 +43,7 @@ Examples of component classes that were created using "utility-first" include: - [`.circle-icon-container`](https://gitlab.com/gitlab-org/gitlab-ce/blob/579fa8b8ec7eb38d40c96521f517c9dab8c3b97a/app/assets/stylesheets/framework/icons.scss#L85) - [`.d-flex-center`](https://gitlab.com/gitlab-org/gitlab-ce/blob/900083d89cd6af391d26ab7922b3f64fa2839bef/app/assets/stylesheets/framework/common.scss#L425) -Inspirations: +Inspiration: - https://tailwindcss.com/docs/utility-first - https://tailwindcss.com/docs/extracting-components From 79e5a09c71e20fd2ba7c166c003f2f17b6e80c46 Mon Sep 17 00:00:00 2001 From: Jarek Ostrowski Date: Wed, 22 May 2019 15:13:08 +0000 Subject: [PATCH 127/319] Update note actions icon color Use gray-600 for color Ensure passes accessibility reqs --- app/assets/stylesheets/framework/mixins.scss | 4 ++-- app/assets/stylesheets/pages/notes.scss | 2 +- changelogs/unreleased/62061-note-icon-color.yml | 5 +++++ 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 changelogs/unreleased/62061-note-icon-color.yml diff --git a/app/assets/stylesheets/framework/mixins.scss b/app/assets/stylesheets/framework/mixins.scss index 18eb10c1f23..97de0c98325 100644 --- a/app/assets/stylesheets/framework/mixins.scss +++ b/app/assets/stylesheets/framework/mixins.scss @@ -325,8 +325,8 @@ line-height: 1; padding: 0; min-width: 16px; - color: $gray-darkest; - fill: $gray-darkest; + color: $gray-600; + fill: $gray-600; .fa { position: relative; diff --git a/app/assets/stylesheets/pages/notes.scss b/app/assets/stylesheets/pages/notes.scss index fcb57db590a..50c87e55f56 100644 --- a/app/assets/stylesheets/pages/notes.scss +++ b/app/assets/stylesheets/pages/notes.scss @@ -645,7 +645,7 @@ $note-form-margin-left: 72px; display: inline-flex; align-items: center; margin-left: 10px; - color: $gray-darkest; + color: $gray-600; @include notes-media('max', map-get($grid-breakpoints, sm) - 1) { float: none; diff --git a/changelogs/unreleased/62061-note-icon-color.yml b/changelogs/unreleased/62061-note-icon-color.yml new file mode 100644 index 00000000000..5bfea1a9ed3 --- /dev/null +++ b/changelogs/unreleased/62061-note-icon-color.yml @@ -0,0 +1,5 @@ +--- +title: Update icon color to match design system, pass accessibility +merge_request: 28498 +author: Jarek Ostrowski @jareko +type: fixed From da516b9f29037ddd734f85aa1c18abe484542b42 Mon Sep 17 00:00:00 2001 From: "Philipp C. H" Date: Wed, 22 May 2019 15:19:45 +0000 Subject: [PATCH 128/319] replace passive with active voice --- doc/user/project/web_ide/index.md | 39 ++++++++++++++++--------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/doc/user/project/web_ide/index.md b/doc/user/project/web_ide/index.md index 2a2507d98a3..a634a8b2f54 100644 --- a/doc/user/project/web_ide/index.md +++ b/doc/user/project/web_ide/index.md @@ -8,7 +8,7 @@ projects by providing an advanced editor with commit staging. ## Open the Web IDE -The Web IDE can be opened when viewing a file, from the repository file list, +You can open the Web IDE when viewing a file, from the repository file list, and from merge requests. ![Open Web IDE](img/open_web_ide.png) @@ -45,7 +45,7 @@ Single file editing is based on the [Ace Editor](https://ace.c9.io). ## Stage and commit changes -After making your changes, click the Commit button in the bottom left to +After making your changes, click the **Commit** button in the bottom left to review the list of changed files. Click on each file to review the changes and click the tick icon to stage the file. @@ -67,10 +67,11 @@ shows you a preview of the merge request diff if you commit your changes. > [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/19279) in [GitLab Core][ce] 11.0. -The Web IDE can be used to quickly fix failing tests by opening the branch or -merge request in the Web IDE and opening the logs of the failed job. The status -of all jobs for the most recent pipeline and job traces for the current commit -can be accessed by clicking the **Pipelines** button in the top right. +You can use the Web IDE to quickly fix failing tests by opening +the branch or merge request in the Web IDE and opening the logs of the failed +job. You can access the status of all jobs for the most recent pipeline and job +traces for the current commit by clicking the **Pipelines** button in the top +right. The pipeline status is also shown at all times in the status bar in the bottom left. @@ -79,31 +80,31 @@ left. > [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/19318) in [GitLab Core][ce] 11.0. -Switching between your authored and assigned merge requests can be done without -leaving the Web IDE. Click the dropdown in the top of the sidebar to open a list -of merge requests. You will need to commit or discard all your changes before -switching to a different merge request. +To switch between your authored and assigned merge requests, click the +dropdown in the top of the sidebar to open a list of merge requests. You will +need to commit or discard all your changes before switching to a different merge +request. ## Switching branches > [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/20850) in [GitLab Core][ce] 11.2. -Switching between branches of the current project repository can be done without -leaving the Web IDE. Click the dropdown in the top of the sidebar to open a list -of branches. You will need to commit or discard all your changes before -switching to a different branch. +To switch between branches of the current project repository, click the dropdown +in the top of the sidebar to open a list of branches. +You will need to commit or discard all your changes before switching to a +different branch. ## Client Side Evaluation > [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/19764) in [GitLab Core][ce] 11.2. -The Web IDE can be used to preview JavaScript projects right in the browser. +You can use the Web IDE to preview JavaScript projects right in the browser. This feature uses CodeSandbox to compile and bundle the JavaScript used to preview the web application. ![Web IDE Client Side Evaluation](img/clientside_evaluation.png) -Additionally, for public projects an `Open in CodeSandbox` button is available +Additionally, for public projects an **Open in CodeSandbox** button is available to transfer the contents of the project into a public CodeSandbox project to quickly share your project with others. @@ -115,9 +116,9 @@ GitLab.com ![Admin Client Side Evaluation setting](img/admin_clientside_evaluation.png) -Once it has been enabled in application settings, projects with a -`package.json` file and a `main` entry point can be previewed inside of the Web -IDE. An example `package.json` is below. +Once you have done that, you can preview projects with a `package.json` file and +a `main` entry point inside the Web IDE. An example `package.json` is shown +below. ```json { From e009a00e799c856788211033746c6cc39552cc87 Mon Sep 17 00:00:00 2001 From: Annabel Dunstone Gray Date: Tue, 21 May 2019 14:03:09 -0500 Subject: [PATCH 129/319] Use blue for activity stream links; use monospace font for commit sha --- app/assets/stylesheets/pages/events.scss | 4 ++++ app/views/events/event/_push.html.haml | 3 ++- changelogs/unreleased/61049-links-activity-stream.yml | 5 +++++ 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/61049-links-activity-stream.yml diff --git a/app/assets/stylesheets/pages/events.scss b/app/assets/stylesheets/pages/events.scss index 618f23d81b1..e34628002ac 100644 --- a/app/assets/stylesheets/pages/events.scss +++ b/app/assets/stylesheets/pages/events.scss @@ -156,6 +156,10 @@ &:hover { background: none; } + + a { + color: $blue-600; + } } } } diff --git a/app/views/events/event/_push.html.haml b/app/views/events/event/_push.html.haml index 69914fccc48..21c418cb0e4 100644 --- a/app/views/events/event/_push.html.haml +++ b/app/views/events/event/_push.html.haml @@ -32,7 +32,8 @@ - from_label = from = link_to project_compare_path(project, from: from, to: event.commit_to) do - Compare #{from_label}...#{truncate_sha(event.commit_to)} + %span Compare + %span.commit-sha #{from_label}...#{truncate_sha(event.commit_to)} - if create_mr %span diff --git a/changelogs/unreleased/61049-links-activity-stream.yml b/changelogs/unreleased/61049-links-activity-stream.yml new file mode 100644 index 00000000000..3aac84adc31 --- /dev/null +++ b/changelogs/unreleased/61049-links-activity-stream.yml @@ -0,0 +1,5 @@ +--- +title: Use blue for activity stream links; use monospace font for commit sha +merge_request: +author: +type: other From f9f9147290b5bc315e595e059c851593c1fc466f Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Wed, 22 May 2019 15:30:10 +0100 Subject: [PATCH 130/319] Fix page_description helper performance This helper is used for extracting part of the issue / MR / whatever description for use in the description meta tag: 1. To do that, we look at the source of the Markdown description. 2. We then strip out all HTML tags. 3. And then take the first 30 words. Doing that can be really slow - especially as Markdown is supposed to be treated as plain text. There are many better ways to do this, but the immediate performance fix is to swap steps 2 and 3. This does mean that the description may be less than 30 words (or even empty), but it is much faster when the description is very long. --- app/helpers/page_layout_helper.rb | 3 ++- ...n-rendering-of-issues-with-heavy-markdown-contents.yml | 6 ++++++ spec/helpers/page_layout_helper_spec.rb | 8 ++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/62116-performance-issue-502-errors-on-rendering-of-issues-with-heavy-markdown-contents.yml diff --git a/app/helpers/page_layout_helper.rb b/app/helpers/page_layout_helper.rb index 5038dcf9746..ec1d8577f36 100644 --- a/app/helpers/page_layout_helper.rb +++ b/app/helpers/page_layout_helper.rb @@ -1,3 +1,4 @@ +# coding: utf-8 # frozen_string_literal: true module PageLayoutHelper @@ -36,7 +37,7 @@ module PageLayoutHelper if description.present? @page_description = description.squish elsif @page_description.present? - sanitize(@page_description, tags: []).truncate_words(30) + sanitize(@page_description.truncate_words(30), tags: []) end end diff --git a/changelogs/unreleased/62116-performance-issue-502-errors-on-rendering-of-issues-with-heavy-markdown-contents.yml b/changelogs/unreleased/62116-performance-issue-502-errors-on-rendering-of-issues-with-heavy-markdown-contents.yml new file mode 100644 index 00000000000..9596f487116 --- /dev/null +++ b/changelogs/unreleased/62116-performance-issue-502-errors-on-rendering-of-issues-with-heavy-markdown-contents.yml @@ -0,0 +1,6 @@ +--- +title: Fix performance issue with large Markdown content in issue or merge request + description +merge_request: 28597 +author: +type: performance diff --git a/spec/helpers/page_layout_helper_spec.rb b/spec/helpers/page_layout_helper_spec.rb index cf98eed27f1..bf50763d06f 100644 --- a/spec/helpers/page_layout_helper_spec.rb +++ b/spec/helpers/page_layout_helper_spec.rb @@ -38,6 +38,14 @@ describe PageLayoutHelper do expect(helper.page_description).to eq 'Bold Header' end + + it 'truncates before sanitizing' do + helper.page_description('Bold

Header

' * 10) + + # 12 words because was counted as a word + expect(helper.page_description) + .to eq('Bold Header Bold Header Bold Header Bold Header Bold Header Bold Header...') + end end describe 'page_image' do From 78f0a587be1d6cba1804b1fe6686f843193adf3e Mon Sep 17 00:00:00 2001 From: Annabel Dunstone Gray Date: Wed, 22 May 2019 11:02:27 -0500 Subject: [PATCH 131/319] Reduce height of issue board input to align with buttons --- app/assets/stylesheets/framework/filters.scss | 2 +- changelogs/unreleased/49041-issue-board-input-height.yml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/49041-issue-board-input-height.yml diff --git a/app/assets/stylesheets/framework/filters.scss b/app/assets/stylesheets/framework/filters.scss index 5bcfd5d1322..26cbb7f5c13 100644 --- a/app/assets/stylesheets/framework/filters.scss +++ b/app/assets/stylesheets/framework/filters.scss @@ -218,7 +218,7 @@ min-width: 200px; padding-right: 25px; padding-left: 0; - height: $input-height; + height: $input-height - 2; line-height: inherit; border-color: transparent; diff --git a/changelogs/unreleased/49041-issue-board-input-height.yml b/changelogs/unreleased/49041-issue-board-input-height.yml new file mode 100644 index 00000000000..de3fbb2ee11 --- /dev/null +++ b/changelogs/unreleased/49041-issue-board-input-height.yml @@ -0,0 +1,5 @@ +--- +title: Reduce height of issue board input to align with buttons +merge_request: +author: +type: other From 515569f8d9334847bff8f1d4b9c5676b11c80cbb Mon Sep 17 00:00:00 2001 From: Kenny Johnston <2920426-kencjohnston@users.noreply.gitlab.com> Date: Wed, 22 May 2019 17:13:17 +0000 Subject: [PATCH 132/319] Redirect first Contribution link to about.gitlab.com/community/contribute --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 82e16b4fbf4..e4c954448a5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,11 +18,11 @@ _This notice should stay as the first item in the CONTRIBUTING.md file._ ## Contributing Documentation has been moved As of July 2018, all the documentation for contributing to the GitLab project has been moved to a new location. -[View the new documentation](doc/development/contributing/index.md) to find the latest information. +[View the new documentation](https://about.gitlab.com/community/contribute/) to find the latest information. ## Contribute to GitLab -This [documentation](doc/development/contributing/index.md#contribute-to-gitlab) has been moved. +[View the new documentation](https://about.gitlab.com/community/contribute/) to find the latest information. ## Security vulnerability disclosure @@ -42,7 +42,7 @@ This [documentation](doc/development/contributing/index.md#helping-others) has b ## I want to contribute! -This [documentation](doc/development/contributing/index.md#i-want-to-contribute) has been moved. +[View the new documentation](https://about.gitlab.com/community/contribute/) to find the latest information. ## Contribution Flow From 5c8cd42bbd6a387f5e73c688615c54606810983e Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Wed, 22 May 2019 11:29:10 -0700 Subject: [PATCH 133/319] Fix invalid visibility string comparison in project import This resolves an "ArgumentError: comparison of String with 0 failed" issue where the visibility_level is stored as a string in the project import data because the value comes directly from the Web form. This problem happened upon creating a project from a template or restoring a project. We now cast the value to an integer to guard against these kinds of failures. Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/61692 --- .../sh-project-import-visibility-error.yml | 5 +++++ lib/gitlab/import_export/project_tree_restorer.rb | 2 +- .../import_export/project_tree_restorer_spec.rb | 13 +++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/sh-project-import-visibility-error.yml diff --git a/changelogs/unreleased/sh-project-import-visibility-error.yml b/changelogs/unreleased/sh-project-import-visibility-error.yml new file mode 100644 index 00000000000..eb7e001c6aa --- /dev/null +++ b/changelogs/unreleased/sh-project-import-visibility-error.yml @@ -0,0 +1,5 @@ +--- +title: Fix invalid visibility string comparison in project import +merge_request: 28612 +author: +type: fixed diff --git a/lib/gitlab/import_export/project_tree_restorer.rb b/lib/gitlab/import_export/project_tree_restorer.rb index 51001750a6c..20caadb89c0 100644 --- a/lib/gitlab/import_export/project_tree_restorer.rb +++ b/lib/gitlab/import_export/project_tree_restorer.rb @@ -129,7 +129,7 @@ module Gitlab def visibility_level level = override_params['visibility_level'] || json_params['visibility_level'] || @project.visibility_level - level = @project.group.visibility_level if @project.group && level > @project.group.visibility_level + level = @project.group.visibility_level if @project.group && level.to_i > @project.group.visibility_level { 'visibility_level' => level } end diff --git a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb index 6084dc96410..651aa600fb2 100644 --- a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb +++ b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb @@ -328,6 +328,19 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do end context 'when the project has overridden params in import data' do + it 'handles string versions of visibility_level' do + # Project needs to be in a group for visibility level comparison + # to happen + group = create(:group) + project.group = group + + project.create_import_data(data: { override_params: { visibility_level: Gitlab::VisibilityLevel::INTERNAL.to_s } }) + + restored_project_json + + expect(project.visibility_level).to eq(Gitlab::VisibilityLevel::INTERNAL) + end + it 'overwrites the params stored in the JSON' do project.create_import_data(data: { override_params: { description: "Overridden" } }) From 10ff5ca77ef1a31d8f814dfc77b47df78484c0a1 Mon Sep 17 00:00:00 2001 From: John Lund Date: Wed, 22 May 2019 19:28:41 +0000 Subject: [PATCH 134/319] Update import.md - if repository-import- parent directory DNE, then mkdir will fail for new_group. -p option is necessary to create missing parent directories. --- doc/raketasks/import.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/raketasks/import.md b/doc/raketasks/import.md index bb316df5b9a..b59c06a24ea 100644 --- a/doc/raketasks/import.md +++ b/doc/raketasks/import.md @@ -16,7 +16,7 @@ The new folder needs to have git user ownership and read/write/execute access for git user and its group: ``` -sudo -u git mkdir /var/opt/gitlab/git-data/repository-import-/new_group +sudo -u git mkdir -p /var/opt/gitlab/git-data/repository-import-/new_group ``` ### Copy your bare repositories inside this newly created folder: From 6145ddf515f93fcc7ed873b911b6369cc2bc0462 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Wed, 22 May 2019 14:16:49 +0200 Subject: [PATCH 135/319] Revert "Merge branch 'revert-04c3c6dd' into 'master'" This reverts commit 744f1f2e7037f5c70c3168d9e2e89b1c327465d2, reversing changes made to c4d930e5f54e7da07c80cc028dfc0f5c08719146. --- .gitlab-ci.yml | 2 - .gitlab/ci/rails.gitlab-ci.yml | 58 ++++++++-- .gitlab/ci/test-metadata.gitlab-ci.yml | 6 +- Gemfile | 2 +- Gemfile.lock | 10 +- doc/development/rake_tasks.md | 13 ++- .../testing_guide/testing_levels.md | 12 +- lib/quality/test_level.rb | 75 +++++++++++++ lib/tasks/spec.rake | 44 +++++--- scripts/prepare_build.sh | 1 + spec/lib/quality/test_level_spec.rb | 105 ++++++++++++++++++ spec/spec_helper.rb | 5 +- ...rb => assignees_filter_shared_examples.rb} | 0 ... => atomic_internal_id_shared_examples.rb} | 0 ...pec.rb => chat_service_shared_examples.rb} | 0 ...ate_project_statistics_shared_examples.rb} | 0 ...mple_spec.rb => issues_shared_examples.rb} | 0 17 files changed, 286 insertions(+), 47 deletions(-) create mode 100644 lib/quality/test_level.rb create mode 100644 spec/lib/quality/test_level_spec.rb rename spec/support/shared_examples/finders/{assignees_filter_spec.rb => assignees_filter_shared_examples.rb} (100%) rename spec/support/shared_examples/models/{atomic_internal_id_spec.rb => atomic_internal_id_shared_examples.rb} (100%) rename spec/support/shared_examples/models/{chat_service_spec.rb => chat_service_shared_examples.rb} (100%) rename spec/support/shared_examples/models/{update_project_statistics_spec.rb => update_project_statistics_shared_examples.rb} (100%) rename spec/support/shared_examples/requests/api/{issues_shared_example_spec.rb => issues_shared_examples.rb} (100%) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c971df3ba5f..cc71ae9245a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -13,10 +13,8 @@ variables: BUILD_ASSETS_IMAGE: "false" before_script: - - bundle --version - date - source scripts/utils.sh - - date - source scripts/prepare_build.sh - date diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index 29534e40a14..346fa47cbb5 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -6,8 +6,9 @@ .use-pg-10: &use-pg-10 services: - - postgres:10.7 - - redis:alpine + - name: postgres:10.7 + command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"] + - name: redis:alpine .use-mysql: &use-mysql services: @@ -52,8 +53,10 @@ script: - JOB_NAME=( $CI_JOB_NAME ) - TEST_TOOL=${JOB_NAME[0]} - - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${TEST_TOOL}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json - - export KNAPSACK_GENERATE_REPORT=true + - TEST_LEVEL=${JOB_NAME[1]} + - DATABASE=${JOB_NAME[2]} + - export KNAPSACK_REPORT_PATH=knapsack/${CI_PROJECT_NAME}/${TEST_TOOL}_${TEST_LEVEL}_${DATABASE}_node_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json + - export KNAPSACK_GENERATE_REPORT=true KNAPSACK_LOG_LEVEL=debug KNAPSACK_TEST_DIR=spec - export SUITE_FLAKY_RSPEC_REPORT_PATH=${FLAKY_RSPEC_SUITE_REPORT_PATH} - export FLAKY_RSPEC_REPORT_PATH=rspec_flaky/all_${TEST_TOOL}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json - export NEW_FLAKY_RSPEC_REPORT_PATH=rspec_flaky/new_${TEST_TOOL}_${CI_NODE_INDEX}_${CI_NODE_TOTAL}_report.json @@ -63,7 +66,10 @@ - '[[ -f $FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${FLAKY_RSPEC_REPORT_PATH}' - '[[ -f $NEW_FLAKY_RSPEC_REPORT_PATH ]] || echo "{}" > ${NEW_FLAKY_RSPEC_REPORT_PATH}' - scripts/gitaly-test-spawn - - knapsack rspec "--color --format documentation --format RspecJunitFormatter --out junit_rspec.xml" + - date + - 'export KNAPSACK_TEST_FILE_PATTERN=$(ruby -r./lib/quality/test_level.rb -e "puts Quality::TestLevel.new.pattern(:${TEST_LEVEL})")' + - knapsack rspec "--color --format documentation --format RspecJunitFormatter --out junit_rspec.xml --tag level:${TEST_LEVEL} --tag ~geo" + - date artifacts: expire_in: 31d when: always @@ -140,19 +146,47 @@ setup-test-env: except: - /(^docs[\/-].*|.*-docs$)/ -rspec-pg: +rspec unit pg: <<: *rspec-metadata-pg - parallel: 50 + parallel: 20 -rspec-pg-10: +rspec integration pg: + <<: *rspec-metadata-pg + parallel: 6 + +rspec system pg: + <<: *rspec-metadata-pg + parallel: 24 + +rspec unit pg-10: <<: *rspec-metadata-pg-10 <<: *only-schedules-master - parallel: 50 + parallel: 20 -rspec-mysql: +rspec integration pg-10: + <<: *rspec-metadata-pg-10 + <<: *only-schedules-master + parallel: 6 + +rspec system pg-10: + <<: *rspec-metadata-pg-10 + <<: *only-schedules-master + parallel: 24 + +rspec unit mysql: <<: *rspec-metadata-mysql <<: *only-schedules-master - parallel: 50 + parallel: 20 + +rspec integration mysql: + <<: *rspec-metadata-mysql + <<: *only-schedules-master + parallel: 6 + +rspec system mysql: + <<: *rspec-metadata-mysql + <<: *only-schedules-master + parallel: 24 rspec-fast-spec-helper: <<: *rspec-metadata-pg @@ -164,7 +198,7 @@ rspec-fast-spec-helper: script: - export CACHE_CLASSES=true - scripts/gitaly-test-spawn - - bin/rspec --color --format documentation --tag quarantine spec/ + - bin/rspec --color --format documentation --tag quarantine -- spec/ rspec-pg-quarantine: <<: *rspec-metadata-pg diff --git a/.gitlab/ci/test-metadata.gitlab-ci.yml b/.gitlab/ci/test-metadata.gitlab-ci.yml index 4b595083ec6..c51f825f831 100644 --- a/.gitlab/ci/test-metadata.gitlab-ci.yml +++ b/.gitlab/ci/test-metadata.gitlab-ci.yml @@ -40,12 +40,12 @@ update-tests-metadata: policy: push script: - retry gem install fog-aws mime-types activesupport rspec_profiling postgres-copy --no-document - - scripts/merge-reports ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec-pg_node_*.json + - scripts/merge-reports ${KNAPSACK_RSPEC_SUITE_REPORT_PATH} knapsack/${CI_PROJECT_NAME}/rspec_*_pg_node_*.json + - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $KNAPSACK_RSPEC_SUITE_REPORT_PATH' + - rm -f knapsack/${CI_PROJECT_NAME}/*_node_*.json - scripts/merge-reports ${FLAKY_RSPEC_SUITE_REPORT_PATH} rspec_flaky/all_*_*.json - FLAKY_RSPEC_GENERATE_REPORT=1 scripts/prune-old-flaky-specs ${FLAKY_RSPEC_SUITE_REPORT_PATH} - - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $KNAPSACK_RSPEC_SUITE_REPORT_PATH' - '[[ -z ${TESTS_METADATA_S3_BUCKET} ]] || scripts/sync-reports put $TESTS_METADATA_S3_BUCKET $FLAKY_RSPEC_SUITE_REPORT_PATH' - - rm -f knapsack/${CI_PROJECT_NAME}/*_node_*.json - rm -f rspec_flaky/all_*.json rspec_flaky/new_*.json - scripts/insert-rspec-profiling-data only: diff --git a/Gemfile b/Gemfile index e2842ca27db..df2d2616ad3 100644 --- a/Gemfile +++ b/Gemfile @@ -361,7 +361,7 @@ group :development, :test do gem 'scss_lint', '~> 0.56.0', require: false gem 'haml_lint', '~> 0.31.0', require: false - gem 'simplecov', '~> 0.14.0', require: false + gem 'simplecov', '~> 0.16.1', require: false gem 'bundler-audit', '~> 0.5.0', require: false gem 'benchmark-ips', '~> 2.3.0', require: false diff --git a/Gemfile.lock b/Gemfile.lock index a63b7cc84aa..064413168f9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -174,7 +174,7 @@ GEM diffy (3.1.0) discordrb-webhooks-blackst0ne (3.3.0) rest-client (~> 2.0) - docile (1.1.5) + docile (1.3.1) domain_name (0.5.20180417) unf (>= 0.0.5, < 1.0.0) doorkeeper (4.3.2) @@ -873,11 +873,11 @@ GEM jwt (>= 1.5, < 3.0) multi_json (~> 1.10) simple_po_parser (1.1.2) - simplecov (0.14.1) - docile (~> 1.1.0) + simplecov (0.16.1) + docile (~> 1.1) json (>= 1.8, < 3) simplecov-html (~> 0.10.0) - simplecov-html (0.10.0) + simplecov-html (0.10.2) slack-notifier (1.5.1) spring (2.0.2) activesupport (>= 4.2) @@ -1203,7 +1203,7 @@ DEPENDENCIES sidekiq (~> 5.2.7) sidekiq-cron (~> 1.0) simple_po_parser (~> 1.1.2) - simplecov (~> 0.14.0) + simplecov (~> 0.16.1) slack-notifier (~> 1.5.1) spring (~> 2.0.0) spring-commands-rspec (~> 1.0.4) diff --git a/doc/development/rake_tasks.md b/doc/development/rake_tasks.md index 27fc3231218..f06ffab03c6 100644 --- a/doc/development/rake_tasks.md +++ b/doc/development/rake_tasks.md @@ -108,11 +108,13 @@ To make sure that indices still fit. You could find great details in: In order to run the test you can use the following commands: -- `rake spec` to run the rspec suite -- `rake karma` to run the karma test suite -- `rake gitlab:test` to run all the tests +- `bin/rake spec` to run the rspec suite +- `bin/rake spec:unit` to run the only the unit tests +- `bin/rake spec:integration` to run the only the integration tests +- `bin/rake spec:system` to run the only the system tests +- `bin/rake karma` to run the karma test suite -Note: `rake spec` takes significant time to pass. +Note: `bin/rake spec` takes significant time to pass. Instead of running full test suite locally you can save a lot of time by running a single test or directory related to your changes. After you submit merge request CI will run full test suite for you. Green CI status in the merge request means @@ -121,6 +123,9 @@ full test suite is passed. Note: You can't run `rspec .` since this will try to run all the `_spec.rb` files it can find, also the ones in `/tmp` +Note: You can pass RSpec command line options to the `spec:unit`, +`spec:integration`, and `spec:system` tasks, e.g. `bin/rake "spec:unit[--tag ~geo --dry-run]"`. + To run a single test file you can use: - `bin/rspec spec/controllers/commit_controller_spec.rb` for a rspec test diff --git a/doc/development/testing_guide/testing_levels.md b/doc/development/testing_guide/testing_levels.md index 1fa6e38ea5a..b5155b6b7fa 100644 --- a/doc/development/testing_guide/testing_levels.md +++ b/doc/development/testing_guide/testing_levels.md @@ -4,12 +4,14 @@ _This diagram demonstrates the relative priority of each test type we use. `e2e` stands for end-to-end._ -As of 2019-04-16, we have the following distribution of tests per level: +As of 2019-05-01, we have the following distribution of tests per level: -- 67 black-box tests at the system level (aka end-to-end or QA tests) in CE, 98 in EE. This represents 0.3% of all the CE tests (0.3% in EE). -- 5,457 white-box tests at the system level (aka system or feature tests) in CE, 6,585 in EE. This represents 24.6% of all the CE tests (20.3% in EE). -- 8,298 integration tests in CE, 10,633 in EE: 0.3% of all the CE tests (0.3% in EE). This represents 37.2% of all the CE tests (32.8% in EE). -- 8,403 unit tests in CE, 15,090 in EE: 0.3% of all the CE tests (0.3% in EE). This represents 37.8% of all the CE tests (46.6% in EE). +| Test level | Community Edition | Enterprise Edition | Community + Enterprise Edition | +| --------- | ---------- | -------------- | ----- | +| Black-box tests at the system level (aka end-to-end or QA tests) | 68 (0.14%) | 31 (0.2%) | 99 (0.17%) | +| White-box tests at the system level (aka system or feature tests) | 5,471 (11.9%) | 969 (7.4%) | 6440 (10.9%) | +| Integration tests | 8,333 (18.2%) | 2,244 (17.2%) | 10,577 (17.9%) | +| Unit tests | 32,031 (69.7%) | 9,778 (75.1%) | 41,809 (71%) | ## Unit tests diff --git a/lib/quality/test_level.rb b/lib/quality/test_level.rb new file mode 100644 index 00000000000..24d8eac200c --- /dev/null +++ b/lib/quality/test_level.rb @@ -0,0 +1,75 @@ +# frozen_string_literal: true + +module Quality + class TestLevel + UnknownTestLevelError = Class.new(StandardError) + + TEST_LEVEL_FOLDERS = { + unit: %w[ + bin + config + db + dependencies + factories + finders + frontend + graphql + helpers + initializers + javascripts + lib + migrations + models + policies + presenters + rack_servers + routing + rubocop + serializers + services + sidekiq + tasks + uploaders + validators + views + workers + elastic_integration + ], + integration: %w[ + controllers + mailers + requests + ], + system: ['features'] + }.freeze + + attr_reader :prefix + + def initialize(prefix = nil) + @prefix = prefix + @patterns = {} + @regexps = {} + end + + def pattern(level) + @patterns[level] ||= "#{prefix}spec/{#{TEST_LEVEL_FOLDERS.fetch(level).join(',')}}{,/**/}*_spec.rb".freeze + end + + def regexp(level) + @regexps[level] ||= Regexp.new("#{prefix}spec/(#{TEST_LEVEL_FOLDERS.fetch(level).join('|')})").freeze + end + + def level_for(file_path) + case file_path + when regexp(:unit) + :unit + when regexp(:integration) + :integration + when regexp(:system) + :system + else + raise UnknownTestLevelError, "Test level for #{file_path} couldn't be set. Please rename the file properly or change the test level detection regexes in #{__FILE__}." + end + end + end +end diff --git a/lib/tasks/spec.rake b/lib/tasks/spec.rake index 2eddcb3c777..c881ad4cf12 100644 --- a/lib/tasks/spec.rake +++ b/lib/tasks/spec.rake @@ -1,7 +1,32 @@ +# frozen_string_literal: true + +return if Rails.env.production? + Rake::Task["spec"].clear if Rake::Task.task_defined?('spec') namespace :spec do - desc 'GitLab | Rspec | Run request specs' + desc 'GitLab | RSpec | Run unit tests' + RSpec::Core::RakeTask.new(:unit, :rspec_opts) do |t, args| + require_dependency 'quality/test_level' + t.pattern = Quality::TestLevel.new.pattern(:unit) + t.rspec_opts = args[:rspec_opts] + end + + desc 'GitLab | RSpec | Run integration tests' + RSpec::Core::RakeTask.new(:integration, :rspec_opts) do |t, args| + require_dependency 'quality/test_level' + t.pattern = Quality::TestLevel.new.pattern(:integration) + t.rspec_opts = args[:rspec_opts] + end + + desc 'GitLab | RSpec | Run system tests' + RSpec::Core::RakeTask.new(:system, :rspec_opts) do |t, args| + require_dependency 'quality/test_level' + t.pattern = Quality::TestLevel.new.pattern(:system) + t.rspec_opts = args[:rspec_opts] + end + + desc '[Deprecated] Use the "bin/rspec --tag api" instead' task :api do cmds = [ %w(rake gitlab:setup), @@ -10,7 +35,7 @@ namespace :spec do run_commands(cmds) end - desc 'GitLab | Rspec | Run feature specs' + desc '[Deprecated] Use the "spec:system" task instead' task :feature do cmds = [ %w(rake gitlab:setup), @@ -19,7 +44,7 @@ namespace :spec do run_commands(cmds) end - desc 'GitLab | Rspec | Run model specs' + desc '[Deprecated] Use "bin/rspec spec/models" instead' task :models do cmds = [ %w(rake gitlab:setup), @@ -28,7 +53,7 @@ namespace :spec do run_commands(cmds) end - desc 'GitLab | Rspec | Run service specs' + desc '[Deprecated] Use "bin/rspec spec/services" instead' task :services do cmds = [ %w(rake gitlab:setup), @@ -37,7 +62,7 @@ namespace :spec do run_commands(cmds) end - desc 'GitLab | Rspec | Run lib specs' + desc '[Deprecated] Use "bin/rspec spec/lib" instead' task :lib do cmds = [ %w(rake gitlab:setup), @@ -45,15 +70,6 @@ namespace :spec do ] run_commands(cmds) end - - desc 'GitLab | Rspec | Run other specs' - task :other do - cmds = [ - %w(rake gitlab:setup), - %w(rspec spec --tag ~@api --tag ~@feature --tag ~@models --tag ~@lib --tag ~@services) - ] - run_commands(cmds) - end end desc "GitLab | Run specs" diff --git a/scripts/prepare_build.sh b/scripts/prepare_build.sh index 58b74f2f07d..5fca95f1f40 100644 --- a/scripts/prepare_build.sh +++ b/scripts/prepare_build.sh @@ -5,6 +5,7 @@ export USE_BUNDLE_INSTALL=${USE_BUNDLE_INSTALL:-true} export BUNDLE_INSTALL_FLAGS="--without=production --jobs=$(nproc) --path=vendor --retry=3 --quiet" if [ "$USE_BUNDLE_INSTALL" != "false" ]; then + bundle --version bundle install --clean $BUNDLE_INSTALL_FLAGS && bundle check fi diff --git a/spec/lib/quality/test_level_spec.rb b/spec/lib/quality/test_level_spec.rb new file mode 100644 index 00000000000..3465c3a050b --- /dev/null +++ b/spec/lib/quality/test_level_spec.rb @@ -0,0 +1,105 @@ +# frozen_string_literal: true + +require 'fast_spec_helper' + +RSpec.describe Quality::TestLevel do + describe '#pattern' do + context 'when level is unit' do + it 'returns a pattern' do + expect(subject.pattern(:unit)) + .to eq("spec/{bin,config,db,dependencies,factories,finders,frontend,graphql,helpers,initializers,javascripts,lib,migrations,models,policies,presenters,rack_servers,routing,rubocop,serializers,services,sidekiq,tasks,uploaders,validators,views,workers,elastic_integration}{,/**/}*_spec.rb") + end + end + + context 'when level is integration' do + it 'returns a pattern' do + expect(subject.pattern(:integration)) + .to eq("spec/{controllers,mailers,requests}{,/**/}*_spec.rb") + end + end + + context 'when level is system' do + it 'returns a pattern' do + expect(subject.pattern(:system)) + .to eq("spec/{features}{,/**/}*_spec.rb") + end + end + + context 'with a prefix' do + it 'returns a pattern' do + expect(described_class.new('ee/').pattern(:system)) + .to eq("ee/spec/{features}{,/**/}*_spec.rb") + end + end + + describe 'performance' do + it 'memoizes the pattern for a given level' do + expect(subject.pattern(:system).object_id).to eq(subject.pattern(:system).object_id) + end + + it 'freezes the pattern for a given level' do + expect(subject.pattern(:system)).to be_frozen + end + end + end + + describe '#regexp' do + context 'when level is unit' do + it 'returns a regexp' do + expect(subject.regexp(:unit)) + .to eq(%r{spec/(bin|config|db|dependencies|factories|finders|frontend|graphql|helpers|initializers|javascripts|lib|migrations|models|policies|presenters|rack_servers|routing|rubocop|serializers|services|sidekiq|tasks|uploaders|validators|views|workers|elastic_integration)}) + end + end + + context 'when level is integration' do + it 'returns a regexp' do + expect(subject.regexp(:integration)) + .to eq(%r{spec/(controllers|mailers|requests)}) + end + end + + context 'when level is system' do + it 'returns a regexp' do + expect(subject.regexp(:system)) + .to eq(%r{spec/(features)}) + end + end + + context 'with a prefix' do + it 'returns a regexp' do + expect(described_class.new('ee/').regexp(:system)) + .to eq(%r{ee/spec/(features)}) + end + end + + describe 'performance' do + it 'memoizes the regexp for a given level' do + expect(subject.regexp(:system).object_id).to eq(subject.regexp(:system).object_id) + end + + it 'freezes the regexp for a given level' do + expect(subject.regexp(:system)).to be_frozen + end + end + end + + describe '#level_for' do + it 'returns the correct level for a unit test' do + expect(subject.level_for('spec/models/abuse_report_spec.rb')).to eq(:unit) + end + + it 'returns the correct level for an integration test' do + expect(subject.level_for('spec/mailers/abuse_report_mailer_spec.rb')).to eq(:integration) + end + + it 'returns the correct level for a system test' do + expect(subject.level_for('spec/features/abuse_report_spec.rb')).to eq(:system) + end + + it 'raises an error for an unknown level' do + expect { subject.level_for('spec/unknown/foo_spec.rb') } + .to raise_error(described_class::UnknownTestLevelError, + %r{Test level for spec/unknown/foo_spec.rb couldn't be set. Please rename the file properly or change the test level detection regexes in .+/lib/quality/test_level.rb.}) + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 69589c9aa33..390a869d93f 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -44,6 +44,8 @@ Dir[Rails.root.join("spec/support/shared_contexts/*.rb")].each { |f| require f } Dir[Rails.root.join("spec/support/shared_examples/*.rb")].each { |f| require f } Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } +quality_level = Quality::TestLevel.new + RSpec.configure do |config| config.use_transactional_fixtures = false config.use_instantiated_fixtures = false @@ -55,9 +57,10 @@ RSpec.configure do |config| config.infer_spec_type_from_file_location! config.full_backtrace = !!ENV['CI'] - config.define_derived_metadata(file_path: %r{/spec/}) do |metadata| + config.define_derived_metadata(file_path: %r{(ee)?/spec/.+_spec\.rb\z}) do |metadata| location = metadata[:location] + metadata[:level] = quality_level.level_for(location) metadata[:api] = true if location =~ %r{/spec/requests/api/} # do not overwrite type if it's already set diff --git a/spec/support/shared_examples/finders/assignees_filter_spec.rb b/spec/support/shared_examples/finders/assignees_filter_shared_examples.rb similarity index 100% rename from spec/support/shared_examples/finders/assignees_filter_spec.rb rename to spec/support/shared_examples/finders/assignees_filter_shared_examples.rb diff --git a/spec/support/shared_examples/models/atomic_internal_id_spec.rb b/spec/support/shared_examples/models/atomic_internal_id_shared_examples.rb similarity index 100% rename from spec/support/shared_examples/models/atomic_internal_id_spec.rb rename to spec/support/shared_examples/models/atomic_internal_id_shared_examples.rb diff --git a/spec/support/shared_examples/models/chat_service_spec.rb b/spec/support/shared_examples/models/chat_service_shared_examples.rb similarity index 100% rename from spec/support/shared_examples/models/chat_service_spec.rb rename to spec/support/shared_examples/models/chat_service_shared_examples.rb diff --git a/spec/support/shared_examples/models/update_project_statistics_spec.rb b/spec/support/shared_examples/models/update_project_statistics_shared_examples.rb similarity index 100% rename from spec/support/shared_examples/models/update_project_statistics_spec.rb rename to spec/support/shared_examples/models/update_project_statistics_shared_examples.rb diff --git a/spec/support/shared_examples/requests/api/issues_shared_example_spec.rb b/spec/support/shared_examples/requests/api/issues_shared_examples.rb similarity index 100% rename from spec/support/shared_examples/requests/api/issues_shared_example_spec.rb rename to spec/support/shared_examples/requests/api/issues_shared_examples.rb From d02d3e34dd8a1d2da9106e41918bfdd7a988e904 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Wed, 22 May 2019 13:10:19 +0200 Subject: [PATCH 136/319] Fix MySQL CI jobs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [run mysql] Signed-off-by: Rémy Coutable --- .gitlab/ci/rails.gitlab-ci.yml | 26 ++++++++++++++++++++++++-- scripts/prepare_build.sh | 10 ++++------ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index 346fa47cbb5..3f0c899d704 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -188,6 +188,27 @@ rspec system mysql: <<: *only-schedules-master parallel: 24 +.rspec-mysql-on-demand: &rspec-mysql-on-demand + only: + variables: + - $CI_COMMIT_MESSAGE =~ /\[run mysql\]/i + - $CI_COMMIT_REF_NAME =~ /mysql/ + +rspec unit mysql on-demand: + <<: *rspec-metadata-mysql + <<: *rspec-mysql-on-demand + parallel: 20 + +rspec integration mysql on-demand: + <<: *rspec-metadata-mysql + <<: *rspec-mysql-on-demand + parallel: 6 + +rspec system mysql on-demand: + <<: *rspec-metadata-mysql + <<: *rspec-mysql-on-demand + parallel: 24 + rspec-fast-spec-helper: <<: *rspec-metadata-pg script: @@ -200,14 +221,15 @@ rspec-fast-spec-helper: - scripts/gitaly-test-spawn - bin/rspec --color --format documentation --tag quarantine -- spec/ -rspec-pg-quarantine: +rspec quarantine pg: <<: *rspec-metadata-pg <<: *rspec-quarantine allow_failure: true -rspec-mysql-quarantine: +rspec quarantine mysql: <<: *rspec-metadata-mysql <<: *rspec-quarantine + <<: *only-schedules-master allow_failure: true static-analysis: diff --git a/scripts/prepare_build.sh b/scripts/prepare_build.sh index 5fca95f1f40..9b0d5d4f719 100644 --- a/scripts/prepare_build.sh +++ b/scripts/prepare_build.sh @@ -17,12 +17,10 @@ cp config/gitlab.yml.example config/gitlab.yml sed -i 's/bin_path: \/usr\/bin\/git/bin_path: \/usr\/local\/bin\/git/' config/gitlab.yml # Determine the database by looking at the job name. -# For example, we'll get pg if the job is `rspec-pg 19 20` -export GITLAB_DATABASE=$(echo $CI_JOB_NAME | cut -f1 -d' ' | cut -f2 -d-) - -# This would make the default database postgresql, and we could also use -# pg to mean postgresql. -if [ "$GITLAB_DATABASE" != 'mysql' ]; then +# This would make the default database postgresql. +if [[ "${CI_JOB_NAME#*mysql}" != "$CI_JOB_NAME" ]]; then + export GITLAB_DATABASE='mysql' +else export GITLAB_DATABASE='postgresql' fi From 0c9b9a70f4f9bf6cbdb6df244f6c7532f4d3d532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Wed, 22 May 2019 15:37:23 +0200 Subject: [PATCH 137/319] Document the on-demand run of MySQL tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rémy Coutable --- .../testing_guide/best_practices.md | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/doc/development/testing_guide/best_practices.md b/doc/development/testing_guide/best_practices.md index 63ec9755462..82439c94c5a 100644 --- a/doc/development/testing_guide/best_practices.md +++ b/doc/development/testing_guide/best_practices.md @@ -2,19 +2,29 @@ ## Test Design -Testing at GitLab is a first class citizen, not an afterthought. It's important we consider the design of our tests -as we do the design of our features. +Testing at GitLab is a first class citizen, not an afterthought. It's important we consider the design of our tests +as we do the design of our features. -When implementing a feature, we think about developing the right capabilities the right way, which helps us -narrow our scope to a manageable level. When implementing tests for a feature, we must think about developing -the right tests, but then cover _all_ the important ways the test may fail, which can quickly widen our scope to +When implementing a feature, we think about developing the right capabilities the right way, which helps us +narrow our scope to a manageable level. When implementing tests for a feature, we must think about developing +the right tests, but then cover _all_ the important ways the test may fail, which can quickly widen our scope to a level that is difficult to manage. -Test heuristics can help solve this problem. They concisely address many of the common ways bugs -manifest themselves within our code. When designing our tests, take time to review known test heuristics to inform -our test design. We can find some helpful heuristics documented in the Handbook in the +Test heuristics can help solve this problem. They concisely address many of the common ways bugs +manifest themselves within our code. When designing our tests, take time to review known test heuristics to inform +our test design. We can find some helpful heuristics documented in the Handbook in the [Test Design](https://about.gitlab.com/handbook/engineering/quality/guidelines/test-engineering/test-design/) section. +## Run tests against MySQL + +By default, tests are only run againts PostgreSQL, but you can run them on +demand against MySQL by following one of the following conventions: + +| Convention | Valid example | +|:----------------------|:-----------------------------| +| Include `mysql` in your branch name | `enhance-mysql-support` | +| Include `[run mysql]` in your commit message | `Fix MySQL support

[run mysql]` | + ## Test speed GitLab has a massive test suite that, without [parallelization], can take hours @@ -184,11 +194,11 @@ instead of 30+ seconds in case of a regular `spec_helper`. ### `let` variables GitLab's RSpec suite has made extensive use of `let`(along with it strict, non-lazy -version `let!`) variables to reduce duplication. However, this sometimes [comes at the cost of clarity][lets-not], +version `let!`) variables to reduce duplication. However, this sometimes [comes at the cost of clarity][lets-not], so we need to set some guidelines for their use going forward: - `let!` variables are preferable to instance variables. `let` variables - are preferable to `let!` variables. Local variables are preferable to + are preferable to `let!` variables. Local variables are preferable to `let` variables. - Use `let` to reduce duplication throughout an entire spec file. - Don't use `let` to define variables used by a single test; define them as @@ -199,8 +209,8 @@ so we need to set some guidelines for their use going forward: - Try to avoid overriding the definition of one `let` variable with another. - Don't define a `let` variable that's only used by the definition of another. Use a helper method instead. -- `let!` variables should be used only in case if strict evaluation with defined - order is required, otherwise `let` will suffice. Remember that `let` is lazy and won't +- `let!` variables should be used only in case if strict evaluation with defined + order is required, otherwise `let` will suffice. Remember that `let` is lazy and won't be evaluated until it is referenced. [lets-not]: https://robots.thoughtbot.com/lets-not From 51057c7117f56f1bb52da82013849c22ca8919d1 Mon Sep 17 00:00:00 2001 From: Pavel Chausov Date: Wed, 22 May 2019 19:49:12 +0000 Subject: [PATCH 138/319] Fix loading.. dropdown at search field Closes #61313 --- app/assets/javascripts/search_autocomplete.js | 1 + changelogs/unreleased/61313-fix-dropdown-searchbar.yml | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 changelogs/unreleased/61313-fix-dropdown-searchbar.yml diff --git a/app/assets/javascripts/search_autocomplete.js b/app/assets/javascripts/search_autocomplete.js index e5c3cebfb9a..ab43c2139bf 100644 --- a/app/assets/javascripts/search_autocomplete.js +++ b/app/assets/javascripts/search_autocomplete.js @@ -407,6 +407,7 @@ export class SearchAutocomplete { if (this.searchInput.val() === '') { return this.restoreOriginalState(); } + this.dropdownMenu.removeClass('show'); } restoreOriginalState() { diff --git a/changelogs/unreleased/61313-fix-dropdown-searchbar.yml b/changelogs/unreleased/61313-fix-dropdown-searchbar.yml new file mode 100644 index 00000000000..ba191a89da2 --- /dev/null +++ b/changelogs/unreleased/61313-fix-dropdown-searchbar.yml @@ -0,0 +1,5 @@ +--- +title: Fix loading.. dropdown at search field +merge_request: 28275 +author: Pavel Chausov +type: fixed From 158a14ec202b5001dd84f24a691ae32a8895ca0c Mon Sep 17 00:00:00 2001 From: Amit Rathi Date: Wed, 22 May 2019 20:16:17 +0000 Subject: [PATCH 139/319] JupyterHub Repo Integration --- app/models/clusters/applications/jupyter.rb | 9 +++++++++ .../unreleased/jupyter_pre_spawn_hook_v2.yml | 5 +++++ vendor/jupyter/values.yaml | 20 +++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 changelogs/unreleased/jupyter_pre_spawn_hook_v2.yml diff --git a/app/models/clusters/applications/jupyter.rb b/app/models/clusters/applications/jupyter.rb index 36c51522089..bd9c453e2a4 100644 --- a/app/models/clusters/applications/jupyter.rb +++ b/app/models/clusters/applications/jupyter.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +require 'securerandom' + module Clusters module Applications class Jupyter < ApplicationRecord @@ -80,6 +82,9 @@ module Clusters "secretToken" => secret_token }, "auth" => { + "state" => { + "cryptoKey" => crypto_key + }, "gitlab" => { "clientId" => oauth_application.uid, "clientSecret" => oauth_application.secret, @@ -95,6 +100,10 @@ module Clusters } end + def crypto_key + @crypto_key ||= SecureRandom.hex(32) + end + def project_id cluster&.project&.id end diff --git a/changelogs/unreleased/jupyter_pre_spawn_hook_v2.yml b/changelogs/unreleased/jupyter_pre_spawn_hook_v2.yml new file mode 100644 index 00000000000..c5918df8193 --- /dev/null +++ b/changelogs/unreleased/jupyter_pre_spawn_hook_v2.yml @@ -0,0 +1,5 @@ +--- +title: Pass user's identity and token from JupyterHub to user's Jupyter environment +merge_request: 27314 +author: Amit Rathi +type: added diff --git a/vendor/jupyter/values.yaml b/vendor/jupyter/values.yaml index 781d6e3042f..a5e13fdc104 100644 --- a/vendor/jupyter/values.yaml +++ b/vendor/jupyter/values.yaml @@ -8,8 +8,28 @@ hub: extraConfig: | c.KubeSpawner.cmd = ['jupyter-labhub'] + async def add_auth_env(spawner): + ''' + We set user's id, login and access token on single user image to + enable repository integration for JupyterHub. + See: https://gitlab.com/gitlab-org/gitlab-ce/issues/47138#note_154294790 + ''' + auth_state = await spawner.user.get_auth_state() + + if not auth_state: + spawner.log.warning("No auth state for %s", spawner.user) + return + + spawner.environment['GITLAB_ACCESS_TOKEN'] = auth_state['access_token'] + spawner.environment['GITLAB_USER_LOGIN'] = auth_state['gitlab_user']['username'] + spawner.environment['GITLAB_USER_ID'] = str(auth_state['gitlab_user']['id']) + + c.KubeSpawner.pre_spawn_hook = add_auth_env + auth: type: gitlab + state: + enabled: true singleuser: defaultUrl: "/lab" From 55fb75b92f1d5608353e23e5794e256448efcb3a Mon Sep 17 00:00:00 2001 From: Adriel Santiago Date: Wed, 22 May 2019 20:50:30 +0000 Subject: [PATCH 140/319] Remove datapoint sorting from area chart --- .../monitoring/components/charts/area.vue | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/assets/javascripts/monitoring/components/charts/area.vue b/app/assets/javascripts/monitoring/components/charts/area.vue index afe8d87a8d6..c43791f2426 100644 --- a/app/assets/javascripts/monitoring/components/charts/area.vue +++ b/app/assets/javascripts/monitoring/components/charts/area.vue @@ -125,17 +125,17 @@ export default { }, earliestDatapoint() { return this.chartData.reduce((acc, series) => { - if (!series.data.length) { + const { data } = series; + const { length } = data; + if (!length) { return acc; } - const [[timestamp]] = series.data.sort(([a], [b]) => { - if (a < b) { - return -1; - } - return a > b ? 1 : 0; - }); - return timestamp < acc || acc === null ? timestamp : acc; + const [first] = data[0]; + const [last] = data[length - 1]; + const seriesEarliest = first < last ? first : last; + + return seriesEarliest < acc || acc === null ? seriesEarliest : acc; }, null); }, isMultiSeries() { From 28a52503f44cceba0078c73e457b160791bedb14 Mon Sep 17 00:00:00 2001 From: Devin Sylva Date: Wed, 22 May 2019 22:16:13 +0000 Subject: [PATCH 141/319] Added a content field to atom feed --- app/views/issues/_issue.atom.builder | 1 + changelogs/unreleased/13453_minimal_atom_fix.yml | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 changelogs/unreleased/13453_minimal_atom_fix.yml diff --git a/app/views/issues/_issue.atom.builder b/app/views/issues/_issue.atom.builder index 21cf6d0dd65..94c32df7c60 100644 --- a/app/views/issues/_issue.atom.builder +++ b/app/views/issues/_issue.atom.builder @@ -12,6 +12,7 @@ xml.entry do xml.summary issue.title xml.description issue.description if issue.description + xml.content issue.description if issue.description xml.milestone issue.milestone.title if issue.milestone xml.due_date issue.due_date if issue.due_date diff --git a/changelogs/unreleased/13453_minimal_atom_fix.yml b/changelogs/unreleased/13453_minimal_atom_fix.yml new file mode 100644 index 00000000000..e0c18de3b1f --- /dev/null +++ b/changelogs/unreleased/13453_minimal_atom_fix.yml @@ -0,0 +1,5 @@ +--- +title: Added a content field to atom feed +merge_request: 27652 +author: +type: fixed From 1d2d1fdc075104865d473e1a629b13463180c2f9 Mon Sep 17 00:00:00 2001 From: Bob Van Landuyt Date: Tue, 21 May 2019 16:35:45 +0000 Subject: [PATCH 142/319] Re-enable codeowners by moving the file back And add myself as a ruby maintainer, since I forgot about that. --- .gitlab/{CODEOWNERS.disabled => CODEOWNERS} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename .gitlab/{CODEOWNERS.disabled => CODEOWNERS} (94%) diff --git a/.gitlab/CODEOWNERS.disabled b/.gitlab/CODEOWNERS similarity index 94% rename from .gitlab/CODEOWNERS.disabled rename to .gitlab/CODEOWNERS index 52fb651f551..0156a4d749a 100644 --- a/.gitlab/CODEOWNERS.disabled +++ b/.gitlab/CODEOWNERS @@ -1,6 +1,6 @@ # Backend Maintainers are the default for all ruby files -*.rb @ashmckenzie @ayufan @dbalexandre @DouweM @dzaporozhets @godfat @grzesiek @mkozono @nick.thomas @rspeicher @rymai @smcgivern @mayra-cabrera -*.rake @ashmckenzie @ayufan @dbalexandre @DouweM @dzaporozhets @godfat @grzesiek @mkozono @nick.thomas @rspeicher @rymai @smcgivern @mayra-cabrera +*.rb @ashmckenzie @ayufan @dbalexandre @DouweM @dzaporozhets @godfat @grzesiek @mkozono @nick.thomas @rspeicher @rymai @smcgivern @mayra-cabrera @reprazent +*.rake @ashmckenzie @ayufan @dbalexandre @DouweM @dzaporozhets @godfat @grzesiek @mkozono @nick.thomas @rspeicher @rymai @smcgivern @mayra-cabrera @reprazent # Technical writing team are the default reviewers for everything in `doc/` /doc/ @axil @marcia From 6468d99bdf599c5c464b9ece836700f6c900fbd0 Mon Sep 17 00:00:00 2001 From: Adriel Santiago Date: Thu, 23 May 2019 08:11:28 +0000 Subject: [PATCH 143/319] Add namespace PascalCase note to docs --- doc/development/i18n/externalization.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/development/i18n/externalization.md b/doc/development/i18n/externalization.md index 38d56322de8..38425674567 100644 --- a/doc/development/i18n/externalization.md +++ b/doc/development/i18n/externalization.md @@ -195,6 +195,7 @@ For example use `%{created_at}` in Ruby but `%{createdAt}` in JavaScript. Sometimes you need to add some context to the text that you want to translate (if the word occurs in a sentence and/or the word is ambiguous). +Namespaces should be PascalCase. - In Ruby/HAML: From 19f202ca8352e19da0905cd0e12cbe92bc3bcac1 Mon Sep 17 00:00:00 2001 From: Mark Fletcher Date: Thu, 23 May 2019 09:37:55 +0000 Subject: [PATCH 144/319] Group labels are now scoped labels --- doc/development/contributing/issue_workflow.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/development/contributing/issue_workflow.md b/doc/development/contributing/issue_workflow.md index fef94c0a4b5..5020c065abc 100644 --- a/doc/development/contributing/issue_workflow.md +++ b/doc/development/contributing/issue_workflow.md @@ -127,8 +127,8 @@ Group labels specify which [groups][structure-groups] the issue belongs to. Examples include: -- ~"group:control" -- ~"group:editor" +- ~"group::control" +- ~"group::editor" These labels should be mutually exclusive. If an issue belongs to multiple groups, the most relevant should be used. From ddb2949b1c1b0797bb982749b8af22faf9a0a421 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Thu, 23 May 2019 12:05:45 +0200 Subject: [PATCH 145/319] Add changelog file --- .../unreleased/30138-display-cycle-analytics-issue.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 changelogs/unreleased/30138-display-cycle-analytics-issue.yml diff --git a/changelogs/unreleased/30138-display-cycle-analytics-issue.yml b/changelogs/unreleased/30138-display-cycle-analytics-issue.yml new file mode 100644 index 00000000000..21477285323 --- /dev/null +++ b/changelogs/unreleased/30138-display-cycle-analytics-issue.yml @@ -0,0 +1,5 @@ +--- +title: Display improvements for cycle analytics - stop casting to integers +merge_request: 28507 +author: +type: fixed From 01bbbe19f7aafa56053246bb6bfde3af56c118a8 Mon Sep 17 00:00:00 2001 From: Natalia Tepluhina Date: Thu, 23 May 2019 10:22:36 +0000 Subject: [PATCH 146/319] Move EE differences for `app/views/projects/commits/_commit.html.haml` --- app/views/projects/commits/_commit.html.haml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/views/projects/commits/_commit.html.haml b/app/views/projects/commits/_commit.html.haml index e2d078855d9..771e1881e94 100644 --- a/app/views/projects/commits/_commit.html.haml +++ b/app/views/projects/commits/_commit.html.haml @@ -9,6 +9,9 @@ - commit_status = commit.present(current_user: current_user).status_for(ref) - link = commit_path(project, commit, merge_request: merge_request) + +- show_project_name = local_assigns.fetch(:show_project_name, false) + %li.commit.flex-row.js-toggle-container{ id: "commit-#{commit.short_id}" } .avatar-cell.d-none.d-sm-block @@ -32,6 +35,7 @@ - commit_timeago = time_ago_with_tooltip(commit.authored_date, placement: 'bottom') - commit_text = _('%{commit_author_link} authored %{commit_timeago}') % { commit_author_link: commit_author_link, commit_timeago: commit_timeago } #{ commit_text.html_safe } + = render_if_exists 'projects/commits/project_namespace', show_project_name: show_project_name, project: project - if commit.description? %pre.commit-row-description.js-toggle-content.append-bottom-8 From 020d2d60aa3d9bee3987614d8c994fe01a29fde2 Mon Sep 17 00:00:00 2001 From: Saederup92 Date: Thu, 23 May 2019 10:26:26 +0000 Subject: [PATCH 147/319] Update proofreader.md --- doc/development/i18n/proofreader.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/development/i18n/proofreader.md b/doc/development/i18n/proofreader.md index eb492c9818b..fb5cfb6c157 100644 --- a/doc/development/i18n/proofreader.md +++ b/doc/development/i18n/proofreader.md @@ -27,7 +27,7 @@ are very appreciative of the work done by translators and proofreaders! - Czech - Proofreaders needed. - Danish - - Proofreaders needed. + - Saederup92 - [GitLab](https://gitlab.com/Saederup92), [Crowdin](https://crowdin.com/profile/Saederup92) - Dutch - Emily Hendle - [GitLab](https://gitlab.com/pundachan), [Crowdin](https://crowdin.com/profile/pandachan) - Esperanto From d4ed2f74e36f7a1613a148cdbec57f0ad0417a75 Mon Sep 17 00:00:00 2001 From: Brandon Labuschagne Date: Tue, 7 May 2019 14:00:52 +0200 Subject: [PATCH 148/319] I18N JS files starting with u This is one of many MRs opened in order to improve the overall internationalisation of the GitLab codebase. This commit only targets Vanilla JS files. i18n documentation https://docs.gitlab.com/ee/development/i18n/externalization.html --- app/assets/javascripts/usage_ping_consent.js | 3 +- app/assets/javascripts/users_select.js | 38 ++++++++++++-------- locale/gitlab.pot | 24 +++++++++++++ 3 files changed, 50 insertions(+), 15 deletions(-) diff --git a/app/assets/javascripts/usage_ping_consent.js b/app/assets/javascripts/usage_ping_consent.js index d3d745a3c11..1e7a5fb19c2 100644 --- a/app/assets/javascripts/usage_ping_consent.js +++ b/app/assets/javascripts/usage_ping_consent.js @@ -2,6 +2,7 @@ import $ from 'jquery'; import axios from './lib/utils/axios_utils'; import Flash, { hideFlash } from './flash'; import { parseBoolean } from './lib/utils/common_utils'; +import { __ } from './locale'; export default () => { $('body').on('click', '.js-usage-consent-action', e => { @@ -25,7 +26,7 @@ export default () => { }) .catch(() => { hideConsentMessage(); - Flash('Something went wrong. Try again later.'); + Flash(__('Something went wrong. Try again later.')); }); }); }; diff --git a/app/assets/javascripts/users_select.js b/app/assets/javascripts/users_select.js index 8c71615dff2..7e6f02b10af 100644 --- a/app/assets/javascripts/users_select.js +++ b/app/assets/javascripts/users_select.js @@ -5,7 +5,7 @@ import $ from 'jquery'; import _ from 'underscore'; import axios from './lib/utils/axios_utils'; -import { __ } from './locale'; +import { s__, __, sprintf } from './locale'; import ModalStore from './boards/stores/modal_store'; // TODO: remove eventHub hack after code splitting refactor @@ -157,14 +157,20 @@ function UsersSelect(currentUser, els, options = {}) { .get(0); if (selectedUsers.length === 0) { - return 'Unassigned'; + return s__('UsersSelect|Unassigned'); } else if (selectedUsers.length === 1) { return firstUser.name; } else if (isSelected) { const otherSelected = selectedUsers.filter(s => s !== selectedUser.id); - return `${selectedUser.name} + ${otherSelected.length} more`; + return sprintf(s__('UsersSelect|%{name} + %{length} more'), { + name: selectedUser.name, + length: otherSelected.length, + }); } else { - return `${firstUser.name} + ${selectedUsers.length - 1} more`; + return sprintf(s__('UsersSelect|%{name} + %{length} more'), { + name: firstUser.name, + length: selectedUsers.length - 1, + }); } }; @@ -218,11 +224,11 @@ function UsersSelect(currentUser, els, options = {}) { tooltipTitle = _.escape(user.name); } else { user = { - name: 'Unassigned', + name: s__('UsersSelect|Unassigned'), username: '', avatar: '', }; - tooltipTitle = __('Assignee'); + tooltipTitle = s__('UsersSelect|Assignee'); } $value.html(assigneeTemplate(user)); $collapsedSidebar.attr('title', tooltipTitle).tooltip('_fixTitle'); @@ -233,7 +239,11 @@ function UsersSelect(currentUser, els, options = {}) { '<% if( avatar ) { %>
<% } else { %> <% } %>', ); assigneeTemplate = _.template( - '<% if (username) { %> <% if( avatar ) { %> <% } %> <%- name %> @<%- username %> <% } else { %> No assignee - assign yourself <% } %>', + `<% if (username) { %> <% if( avatar ) { %> <% } %> <%- name %> @<%- username %> <% } else { %> + ${sprintf(s__('UsersSelect|No assignee - %{openingTag} assign yourself %{closingTag}'), { + openingTag: '', + closingTag: '', + })} <% } %>`, ); return $dropdown.glDropdown({ showMenuAbove: showMenuAbove, @@ -302,7 +312,7 @@ function UsersSelect(currentUser, els, options = {}) { showDivider += 1; users.unshift({ beforeDivider: true, - name: 'Unassigned', + name: s__('UsersSelect|Unassigned'), id: 0, }); } @@ -310,7 +320,7 @@ function UsersSelect(currentUser, els, options = {}) { showDivider += 1; name = showAnyUser; if (name === true) { - name = 'Any User'; + name = s__('UsersSelect|Any User'); } anyUser = { beforeDivider: true, @@ -596,7 +606,7 @@ function UsersSelect(currentUser, els, options = {}) { showEmailUser = $(select).data('emailUser'); firstUser = $(select).data('firstUser'); return $(select).select2({ - placeholder: 'Search for a user', + placeholder: __('Search for a user'), multiple: $(select).hasClass('multiselect'), minimumInputLength: 0, query: function(query) { @@ -621,7 +631,7 @@ function UsersSelect(currentUser, els, options = {}) { } if (showNullUser) { nullUser = { - name: 'Unassigned', + name: s__('UsersSelect|Unassigned'), id: 0, }; data.results.unshift(nullUser); @@ -629,7 +639,7 @@ function UsersSelect(currentUser, els, options = {}) { if (showAnyUser) { name = showAnyUser; if (name === true) { - name = 'Any User'; + name = s__('UsersSelect|Any User'); } anyUser = { name: name, @@ -645,7 +655,7 @@ function UsersSelect(currentUser, els, options = {}) { ) { var trimmed = query.term.trim(); emailUser = { - name: 'Invite "' + trimmed + '" by email', + name: sprintf(__('Invite "%{trimmed}" by email'), { trimmed }), username: trimmed, id: trimmed, invite: true, @@ -688,7 +698,7 @@ UsersSelect.prototype.initSelection = function(element, callback) { id = $(element).val(); if (id === '0') { nullUser = { - name: 'Unassigned', + name: s__('UsersSelect|Unassigned'), }; return callback(nullUser); } else if (id !== '') { diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 6209530deab..f529b10046d 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -5249,6 +5249,9 @@ msgstr "" msgid "Invite" msgstr "" +msgid "Invite \"%{trimmed}\" by email" +msgstr "" + msgid "Invite group" msgstr "" @@ -8429,6 +8432,9 @@ msgstr "" msgid "Search for a group" msgstr "" +msgid "Search for a user" +msgstr "" + msgid "Search for projects, issues, etc." msgstr "" @@ -8923,6 +8929,9 @@ msgstr "" msgid "Something went wrong. Please try again." msgstr "" +msgid "Something went wrong. Try again later." +msgstr "" + msgid "Sorry, no projects matched your search" msgstr "" @@ -10726,6 +10735,21 @@ msgstr "" msgid "Users were successfully added." msgstr "" +msgid "UsersSelect|%{name} + %{length} more" +msgstr "" + +msgid "UsersSelect|Any User" +msgstr "" + +msgid "UsersSelect|Assignee" +msgstr "" + +msgid "UsersSelect|No assignee - %{openingTag} assign yourself %{closingTag}" +msgstr "" + +msgid "UsersSelect|Unassigned" +msgstr "" + msgid "Using required encryption strategy when encrypted field is missing!" msgstr "" From 2f3263961e7f42e0af2e94752a535a4bd59c7fc1 Mon Sep 17 00:00:00 2001 From: Sese Schneider Date: Thu, 23 May 2019 10:59:47 +0000 Subject: [PATCH 149/319] The pipeline hook uses 'builds' instead of 'jobs' in its request body --- doc/user/project/integrations/webhooks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/user/project/integrations/webhooks.md b/doc/user/project/integrations/webhooks.md index 10eb3a4f3b7..a0f500a939f 100644 --- a/doc/user/project/integrations/webhooks.md +++ b/doc/user/project/integrations/webhooks.md @@ -1016,7 +1016,7 @@ X-Gitlab-Event: Pipeline Hook "email": "user@gitlab.com" } }, - "jobs":[ + "builds":[ { "id": 380, "stage": "deploy", From 5dc8051676024858630a9694093336f75350a808 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Thu, 23 May 2019 13:01:21 +0200 Subject: [PATCH 150/319] Stage labels are now scoped MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rémy Coutable --- .../contributing/issue_workflow.md | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/doc/development/contributing/issue_workflow.md b/doc/development/contributing/issue_workflow.md index 5020c065abc..5de106e24c6 100644 --- a/doc/development/contributing/issue_workflow.md +++ b/doc/development/contributing/issue_workflow.md @@ -92,20 +92,21 @@ Stage labels specify which [DevOps stage][devops-stages] the issue belongs to. The current stage labels are: -- ~"devops:manage" -- ~"devops:plan" -- ~"devops:create" -- ~"devops:verify" -- ~"devops:package" -- ~"devops:release" -- ~"devops:configure" -- ~"devops:monitor" -- ~"devops:secure" -- ~"devops:defend" -- ~"devops:enablement" +- ~"devops::manage" +- ~"devops::plan" +- ~"devops::create" +- ~"devops::verify" +- ~"devops::package" +- ~"devops::release" +- ~"devops::configure" +- ~"devops::monitor" +- ~"devops::secure" +- ~"devops::defend" +- ~"devops::growth" +- ~"devops::enablement" -These labels should be mutually exclusive. If an issue belongs to multiple -stages, the most relevant should be used. +These labels are [scoped labels](../../user/project/labels.md#scoped-labels-premium) +and thus are mutually exclusive. They differ from the [Team labels](#team-labels) because teams may work on issues outside their stage. @@ -130,17 +131,15 @@ Examples include: - ~"group::control" - ~"group::editor" -These labels should be mutually exclusive. If an issue belongs to multiple -groups, the most relevant should be used. +These labels are [scoped labels](../../user/project/labels.md#scoped-labels-premium) +and thus are mutually exclusive. Groups are nested beneath a particular stage, so only one stage label and one group label -should be applied to a single issue. You can find the groups listed in the -[Product Categories pages][product-categories]. For example, ~"group:control" and -~"group:framework" labels can be applied to issues related to the [Manage stage][manage-stage]. +can be applied to a single issue. You can find the groups listed in the +[Product Categories pages][product-categories]. [structure-groups]: https://about.gitlab.com/company/team/structure/#groups [product-categories]: https://about.gitlab.com/handbook/product/categories/ -[manage-stage]: https://about.gitlab.com/handbook/product/categories/#manage-stage ## Release Scoping labels From ee92acccb47c073992f46f9b8f9132a8ef9a92a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C5=82gorzata=20Ksionek?= Date: Thu, 23 May 2019 13:23:38 +0200 Subject: [PATCH 151/319] Add specs for median serializing --- app/serializers/analytics_stage_entity.rb | 1 + .../analytics_stage_serializer_spec.rb | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/app/serializers/analytics_stage_entity.rb b/app/serializers/analytics_stage_entity.rb index ab3cf912695..64eba185a4e 100644 --- a/app/serializers/analytics_stage_entity.rb +++ b/app/serializers/analytics_stage_entity.rb @@ -10,6 +10,7 @@ class AnalyticsStageEntity < Grape::Entity expose :median, as: :value do |stage| # median returns a BatchLoader instance which we first have to unwrap by using to_f + # we use to_f to make sure results below 1 are presented to the end-user !stage.median.to_f.zero? ? distance_of_time_in_words(stage.median) : nil end end diff --git a/spec/serializers/analytics_stage_serializer_spec.rb b/spec/serializers/analytics_stage_serializer_spec.rb index dbfb3eace83..907d1b35e74 100644 --- a/spec/serializers/analytics_stage_serializer_spec.rb +++ b/spec/serializers/analytics_stage_serializer_spec.rb @@ -21,4 +21,34 @@ describe AnalyticsStageSerializer do it 'contains important elements of AnalyticsStage' do expect(subject).to include(:title, :description, :value) end + + context 'when median is equal 0' do + before do + allow_any_instance_of(Gitlab::CycleAnalytics::BaseStage).to receive(:median).and_return(0) + end + + it 'value is nil' do + expect(subject.fetch(:value)).to be_nil + end + end + + context 'when median is below 1' do + before do + allow_any_instance_of(Gitlab::CycleAnalytics::BaseStage).to receive(:median).and_return(0.12) + end + + it 'value is equal to median' do + expect(subject.fetch(:value)).to eq('less than a minute') + end + end + + context 'when median is above 1' do + before do + allow_any_instance_of(Gitlab::CycleAnalytics::BaseStage).to receive(:median).and_return(1.12) + end + + it 'value is equal to median' do + expect(subject.fetch(:value)).to eq('less than a minute') + end + end end From c6707291e02b3b82579a036a27bf4ae5da7d799e Mon Sep 17 00:00:00 2001 From: Luke Picciau Date: Thu, 23 May 2019 12:04:09 +0000 Subject: [PATCH 152/319] Change system notes to use relative urls --- app/services/system_note_service.rb | 12 ++++++------ .../unreleased/relative-urls-for-system-notes.yml | 5 +++++ spec/services/system_note_service_spec.rb | 4 ++-- 3 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 changelogs/unreleased/relative-urls-for-system-notes.yml diff --git a/app/services/system_note_service.rb b/app/services/system_note_service.rb index a39ff76b798..1390f7cdf46 100644 --- a/app/services/system_note_service.rb +++ b/app/services/system_note_service.rb @@ -25,7 +25,7 @@ module SystemNoteService text_parts = ["added #{commits_text}"] text_parts << commits_list(noteable, new_commits, existing_commits, oldrev) - text_parts << "[Compare with previous version](#{diff_comparison_url(noteable, project, oldrev)})" + text_parts << "[Compare with previous version](#{diff_comparison_path(noteable, project, oldrev)})" body = text_parts.join("\n\n") @@ -41,7 +41,7 @@ module SystemNoteService # # Returns the created Note object def tag_commit(noteable, project, author, tag_name) - link = url_helpers.project_tag_url(project, id: tag_name) + link = url_helpers.project_tag_path(project, id: tag_name) body = "tagged commit #{noteable.sha} to [`#{tag_name}`](#{link})" create_note(NoteSummary.new(noteable, project, author, body, action: 'tag')) @@ -272,7 +272,7 @@ module SystemNoteService text_parts = ["changed this line in"] if version_params = merge_request.version_params_for(diff_refs) line_code = change_position.line_code(project.repository) - url = url_helpers.diffs_project_merge_request_url(project, merge_request, version_params.merge(anchor: line_code)) + url = url_helpers.diffs_project_merge_request_path(project, merge_request, version_params.merge(anchor: line_code)) text_parts << "[version #{version_index} of the diff](#{url})" else @@ -405,7 +405,7 @@ module SystemNoteService # # "created branch `201-issue-branch-button`" def new_issue_branch(issue, project, author, branch) - link = url_helpers.project_compare_url(project, from: project.default_branch, to: branch) + link = url_helpers.project_compare_path(project, from: project.default_branch, to: branch) body = "created branch [`#{branch}`](#{link}) to address this issue" @@ -668,10 +668,10 @@ module SystemNoteService @url_helpers ||= Gitlab::Routing.url_helpers end - def diff_comparison_url(merge_request, project, oldrev) + def diff_comparison_path(merge_request, project, oldrev) diff_id = merge_request.merge_request_diff.id - url_helpers.diffs_project_merge_request_url( + url_helpers.diffs_project_merge_request_path( project, merge_request, diff_id: diff_id, diff --git a/changelogs/unreleased/relative-urls-for-system-notes.yml b/changelogs/unreleased/relative-urls-for-system-notes.yml new file mode 100644 index 00000000000..ec834e9f277 --- /dev/null +++ b/changelogs/unreleased/relative-urls-for-system-notes.yml @@ -0,0 +1,5 @@ +--- +title: Change links in system notes to use relative paths +merge_request: 28588 +author: Luke Picciau +type: fixed diff --git a/spec/services/system_note_service_spec.rb b/spec/services/system_note_service_spec.rb index 4d33c6f4094..2420817e1f7 100644 --- a/spec/services/system_note_service_spec.rb +++ b/spec/services/system_note_service_spec.rb @@ -132,7 +132,7 @@ describe SystemNoteService do end it 'sets the note text' do - link = "http://localhost/#{project.full_path}/-/tags/#{tag_name}" + link = "/#{project.full_path}/-/tags/#{tag_name}" expect(subject.note).to eq "tagged commit #{noteable.sha} to [`#{tag_name}`](#{link})" end @@ -1139,7 +1139,7 @@ describe SystemNoteService do diff_id = merge_request.merge_request_diff.id line_code = change_position.line_code(project.repository) - expect(subject.note).to include(diffs_project_merge_request_url(project, merge_request, diff_id: diff_id, anchor: line_code)) + expect(subject.note).to include(diffs_project_merge_request_path(project, merge_request, diff_id: diff_id, anchor: line_code)) end end From dd8d2fabd3bc5fcbff3f12fae37f8914098bf5cd Mon Sep 17 00:00:00 2001 From: Annabel Dunstone Gray Date: Wed, 22 May 2019 09:52:05 -0500 Subject: [PATCH 153/319] Group download buttons in a .btn-group --- app/views/projects/buttons/_download_links.html.haml | 2 +- changelogs/unreleased/61880-download-btn-group.yml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/61880-download-btn-group.yml diff --git a/app/views/projects/buttons/_download_links.html.haml b/app/views/projects/buttons/_download_links.html.haml index 7f2cd8e109e..d344167a6c5 100644 --- a/app/views/projects/buttons/_download_links.html.haml +++ b/app/views/projects/buttons/_download_links.html.haml @@ -1,5 +1,5 @@ - formats = [['zip', 'btn-primary'], ['tar.gz'], ['tar.bz2'], ['tar']] -.d-flex.justify-content-between +.btn-group.ml-0.w-100 - formats.each do |(fmt, extra_class)| = link_to fmt, project_archive_path(project, id: tree_join(ref, archive_prefix), path: path, format: fmt), rel: 'nofollow', download: '', class: "btn btn-xs #{extra_class}" diff --git a/changelogs/unreleased/61880-download-btn-group.yml b/changelogs/unreleased/61880-download-btn-group.yml new file mode 100644 index 00000000000..c1f6b2767c6 --- /dev/null +++ b/changelogs/unreleased/61880-download-btn-group.yml @@ -0,0 +1,5 @@ +--- +title: Group download buttons into a .btn-group +merge_request: +author: +type: other From 415b2e78e07b19a0a179cecdb4a3e2e53bed64e2 Mon Sep 17 00:00:00 2001 From: Jarek Ostrowski Date: Thu, 23 May 2019 12:29:32 +0000 Subject: [PATCH 154/319] Update smiley icons to new ones Add new emoji icons Remove added SVGs Change to sprite_icons Prettify Fix text left behind Fix errors Remove background top level reaction icon --- app/assets/javascripts/notes/components/note_actions.vue | 9 +++------ .../javascripts/notes/components/note_awards_list.vue | 6 +++--- .../set_status_modal/set_status_modal_wrapper.vue | 6 +++--- app/assets/stylesheets/framework/awards.scss | 3 +-- app/views/award_emoji/_awards_block.html.haml | 6 +++--- app/views/profiles/show.html.haml | 6 +++--- app/views/projects/notes/_actions.html.haml | 6 +++--- app/views/shared/icons/_emoji_slightly_smiling_face.svg | 1 - app/views/shared/icons/_emoji_smile.svg | 1 - app/views/shared/icons/_emoji_smiley.svg | 1 - app/views/snippets/notes/_actions.html.haml | 6 +++--- changelogs/unreleased/update-smileys-new.yml | 5 +++++ 12 files changed, 27 insertions(+), 29 deletions(-) delete mode 100644 app/views/shared/icons/_emoji_slightly_smiling_face.svg delete mode 100644 app/views/shared/icons/_emoji_smile.svg delete mode 100644 app/views/shared/icons/_emoji_smiley.svg create mode 100644 changelogs/unreleased/update-smileys-new.yml diff --git a/app/assets/javascripts/notes/components/note_actions.vue b/app/assets/javascripts/notes/components/note_actions.vue index 7e8f23d6a96..5a4ff15d198 100644 --- a/app/assets/javascripts/notes/components/note_actions.vue +++ b/app/assets/javascripts/notes/components/note_actions.vue @@ -148,12 +148,9 @@ export default { href="#" title="Add reaction" > - - - + + + - + - + - +

(idX*5SrTQg;#xFo+>vXy5Z2M^ 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