From ef73ee020e96f39a109a16c4c6b018d8ea7cabc1 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 17 Dec 2020 15:10:41 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab/ci/review.gitlab-ci.yml | 2 +- .../unreleased/ak-fix-project-transfer-2.yml | 5 ++ .../upgrade-codequality-0-85-19.yml | 5 ++ ...anup_transfered_projects_shared_runners.rb | 30 ++++++++++ db/schema_migrations/20201110161542 | 1 + doc/.vale/gitlab/spelling-exceptions.txt | 2 + .../roadmap/img/roadmap_filters_v13_7.png | Bin 0 -> 21615 bytes doc/user/group/roadmap/index.md | 54 ++++++++++++++++-- doc/user/project/labels.md | 4 +- doc/user/search/index.md | 7 +++ ...shared_runners_for_transferred_projects.rb | 30 ++++++++++ .../templates/Jobs/Code-Quality.gitlab-ci.yml | 2 +- spec/frontend/helpers/stub_transition.js | 8 +++ .../time_tracking/time_tracker_spec.js | 10 ++-- ...d_runners_for_transferred_projects_spec.rb | 35 ++++++++++++ ...transfered_projects_shared_runners_spec.rb | 32 +++++++++++ 16 files changed, 214 insertions(+), 13 deletions(-) create mode 100644 changelogs/unreleased/ak-fix-project-transfer-2.yml create mode 100644 changelogs/unreleased/upgrade-codequality-0-85-19.yml create mode 100644 db/post_migrate/20201110161542_cleanup_transfered_projects_shared_runners.rb create mode 100644 db/schema_migrations/20201110161542 create mode 100644 doc/user/group/roadmap/img/roadmap_filters_v13_7.png create mode 100644 lib/gitlab/background_migration/reset_shared_runners_for_transferred_projects.rb create mode 100644 spec/frontend/helpers/stub_transition.js create mode 100644 spec/lib/gitlab/background_migration/reset_shared_runners_for_transferred_projects_spec.rb create mode 100644 spec/migrations/20201110161542_cleanup_transfered_projects_shared_runners_spec.rb diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml index f1bd173ff6d..4422968ea4e 100644 --- a/.gitlab/ci/review.gitlab-ci.yml +++ b/.gitlab/ci/review.gitlab-ci.yml @@ -48,7 +48,7 @@ review-build-cng: HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" REVIEW_APPS_DOMAIN: "temp.gitlab-review.app" # FIXME: using temporary domain DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}" - GITLAB_HELM_CHART_REF: "v4.3.0" + GITLAB_HELM_CHART_REF: "v4.6.3" environment: name: review/${CI_COMMIT_REF_SLUG}${FREQUENCY} url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN} diff --git a/changelogs/unreleased/ak-fix-project-transfer-2.yml b/changelogs/unreleased/ak-fix-project-transfer-2.yml new file mode 100644 index 00000000000..f75e498bbc5 --- /dev/null +++ b/changelogs/unreleased/ak-fix-project-transfer-2.yml @@ -0,0 +1,5 @@ +--- +title: Fix project transfer corrupting shared runners state +merge_request: 47316 +author: +type: fixed diff --git a/changelogs/unreleased/upgrade-codequality-0-85-19.yml b/changelogs/unreleased/upgrade-codequality-0-85-19.yml new file mode 100644 index 00000000000..ff6e56d6615 --- /dev/null +++ b/changelogs/unreleased/upgrade-codequality-0-85-19.yml @@ -0,0 +1,5 @@ +--- +title: Upgrade CodeQuality version in CI template to 0.85.19 +merge_request: 50118 +author: +type: changed diff --git a/db/post_migrate/20201110161542_cleanup_transfered_projects_shared_runners.rb b/db/post_migrate/20201110161542_cleanup_transfered_projects_shared_runners.rb new file mode 100644 index 00000000000..5e907092e83 --- /dev/null +++ b/db/post_migrate/20201110161542_cleanup_transfered_projects_shared_runners.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +class CleanupTransferedProjectsSharedRunners < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + BATCH_SIZE = 25_000 + INTERVAL = 3.minutes + MIGRATION = 'ResetSharedRunnersForTransferredProjects' + + disable_ddl_transaction! + + class Namespace < ActiveRecord::Base + include EachBatch + + self.table_name = 'namespaces' + end + + def up + queue_background_migration_jobs_by_range_at_intervals(Namespace, + MIGRATION, + INTERVAL, + batch_size: BATCH_SIZE) + end + + def down + # This migration fixes an inconsistent database state resulting from https://gitlab.com/gitlab-org/gitlab/-/issues/271728 + # and as such does not require a down migration + end +end diff --git a/db/schema_migrations/20201110161542 b/db/schema_migrations/20201110161542 new file mode 100644 index 00000000000..1d4ca947738 --- /dev/null +++ b/db/schema_migrations/20201110161542 @@ -0,0 +1 @@ +ebc304867bab499da3f9fa69b32373a328948b5068b226df5166042d1c1c7604 \ No newline at end of file diff --git a/doc/.vale/gitlab/spelling-exceptions.txt b/doc/.vale/gitlab/spelling-exceptions.txt index fd3aff63bce..3d8e9b1ef72 100644 --- a/doc/.vale/gitlab/spelling-exceptions.txt +++ b/doc/.vale/gitlab/spelling-exceptions.txt @@ -404,6 +404,8 @@ reusability reverified reverifies reverify +roadmap +roadmaps rollout rollouts rsync diff --git a/doc/user/group/roadmap/img/roadmap_filters_v13_7.png b/doc/user/group/roadmap/img/roadmap_filters_v13_7.png new file mode 100644 index 0000000000000000000000000000000000000000..00505a7f34f7bf166258332e1352e0d37ae70d90 GIT binary patch literal 21615 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 literal 0 HcmV?d00001 diff --git a/doc/user/group/roadmap/index.md b/doc/user/group/roadmap/index.md index 32abc676352..6dfa7641dbb 100644 --- a/doc/user/group/roadmap/index.md +++ b/doc/user/group/roadmap/index.md @@ -15,7 +15,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w > - In [GitLab 13.2](https://gitlab.com/gitlab-org/gitlab/-/issues/214375) and later, the Roadmap also shows milestones in projects in a group. > - In [GitLab 13.2](https://gitlab.com/gitlab-org/gitlab/-/issues/212494) and later, milestone bars can be collapsed and expanded. -Epics and milestones within a group containing a start date or due date can be visualized in a form +Epics and milestones in a group containing a start date or due date can be visualized in a form of a timeline (that is, a Gantt chart). The Roadmap page shows the epics and milestones in a group, one of its subgroups, or a project in one of the groups. @@ -24,14 +24,31 @@ When you hover over an epic bar, a popover appears with the epic's title, start weight completed. You can expand epics that contain child epics to show their child epics in the roadmap. -You can click the chevron (**{chevron-down}**) next to the epic title to expand and collapse the child epics. +You can click the chevron (**{chevron-down}**) next to the epic title to expand and collapse the +child epics. -On top of the milestone bars, you can see their title. When you hover a milestone bar or title, a popover appears with its title, start date and due date. -You can also click the chevron (**{chevron-down}**) next to the **Milestones** heading to toggle the list of the milestone bars. +On top of the milestone bars, you can see their title. +When you hover over a milestone bar or title, a popover appears with its title, start date, and due +date. You can also click the chevron (**{chevron-down}**) next to the **Milestones** heading to +toggle the list of the milestone bars. ![roadmap view](img/roadmap_view_v13_2.png) -A dropdown menu allows you to show only open or closed epics. By default, all epics are shown. +## Sort and filter the Roadmap + +> - Filtering roadmaps by milestone [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/218621) in GitLab 13.7. +> - Filtering roadmaps by milestone is [deployed behind a feature flag](../../feature_flags.md), enabled by default. +> - Filtering roadmaps by milestone is enabled on GitLab.com. +> - Filtering roadmaps by milestone is recommended for production use. +> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#enable-or-disable-filtering-roadmaps-by-milestone). **(PREMIUM ONLY)** + +WARNING: +Filtering roadmaps by milestone might not be available to you. Check the **version history** note above for details. + +When you want to explore a roadmap, there are several ways to make it easier by sorting epics or +filtering them by what's important for you. + +A dropdown menu lets you show only open or closed epics. By default, all epics are shown. ![epics state dropdown](img/epics_state_dropdown_v12_10.png) @@ -45,8 +62,35 @@ You can sort epics in the Roadmap view by: Each option contains a button that toggles the sort order between **ascending** and **descending**. The sort option and order persist when browsing Epics, including the [epics list view](../epics/index.md). +You can also filter epics in the Roadmap view by: + +- Author +- Label +- Milestone + +![roadmap date range in weeks](img/roadmap_filters_v13_7.png) + Roadmaps can also be [visualized inside an epic](../epics/index.md#roadmap-in-epics). +### Enable or disable filtering roadmaps by milestone **(PREMIUM ONLY)** + +Filtering roadmaps by milestone is under development but ready for production use. +It is deployed behind a feature flag that is **enabled by default**. +[GitLab administrators with access to the GitLab Rails console](../../../administration/feature_flags.md) +can opt to disable it. + +To enable it: + +```ruby +Feature.enable(:async_filtering) +``` + +To disable it: + +```ruby +Feature.disable(:async_filtering) +``` + ## Timeline duration > - Introduced in [GitLab Ultimate](https://about.gitlab.com/pricing/) 11.0. diff --git a/doc/user/project/labels.md b/doc/user/project/labels.md index 2f8603e1db0..7106c7c6aee 100644 --- a/doc/user/project/labels.md +++ b/doc/user/project/labels.md @@ -228,7 +228,7 @@ to label notifications for the project only, or the whole group. > - Priority sorting is based on the highest priority label only. [This discussion](https://gitlab.com/gitlab-org/gitlab/-/issues/14523) considers changing this. Labels can have relative priorities, which are used in the **Label priority** and -**Priority** sort orders of the epic, issue, and merge request list pages. Prioritization +**Priority** sort orders of issues and merge request list pages. Prioritization for both group and project labels happens at the project level, and cannot be done from the group label list. @@ -241,7 +241,7 @@ means higher priority. ![Drag to change label priority](img/labels_drag_priority_v12_1.gif) -On the epic, merge request, and issue list pages (for both groups and projects) you +On the merge request and issue list pages (for both groups and projects) you can sort by `Label priority` or `Priority`. If you sort by `Label priority`, GitLab uses this sort comparison order: diff --git a/doc/user/search/index.md b/doc/user/search/index.md index 8c3d941192c..106306356bb 100644 --- a/doc/user/search/index.md +++ b/doc/user/search/index.md @@ -118,6 +118,13 @@ the dropdown) **Approved-By** and select the user. ![Filter MRs by approved by](img/filter_approved_by_merge_requests_v13_0.png) +### Filtering merge requests by reviewer **(CORE)** + +> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/47605) in GitLab 13.7. + +To filter review requested merge requests for a specific individual, you can type (or select from +the dropdown) **Reviewer** and select the user. + ### Filtering merge requests by environment or deployment date **(CORE)** > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/44041) in GitLab 13.6. diff --git a/lib/gitlab/background_migration/reset_shared_runners_for_transferred_projects.rb b/lib/gitlab/background_migration/reset_shared_runners_for_transferred_projects.rb new file mode 100644 index 00000000000..0053cafb4ac --- /dev/null +++ b/lib/gitlab/background_migration/reset_shared_runners_for_transferred_projects.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module Gitlab + module BackgroundMigration + # Resets inconsistent state of shared_runners_enabled for projects that have been transferred + class ResetSharedRunnersForTransferredProjects + # Model specifically used for migration. + class Namespace < ActiveRecord::Base + include EachBatch + + self.table_name = 'namespaces' + end + + # Model specifically used for migration. + class Project < ActiveRecord::Base + self.table_name = 'projects' + end + + def perform(start_id, stop_id) + Project.reset_column_information + + Namespace.where(id: start_id..stop_id).each_batch(of: 1_000) do |relation| + ids = relation.where(shared_runners_enabled: false, allow_descendants_override_disabled_shared_runners: false).select(:id) + + Project.where(namespace_id: ids).update_all(shared_runners_enabled: false) + end + end + end + end +end diff --git a/lib/gitlab/ci/templates/Jobs/Code-Quality.gitlab-ci.yml b/lib/gitlab/ci/templates/Jobs/Code-Quality.gitlab-ci.yml index 2ae9730ec1a..501d8737acd 100644 --- a/lib/gitlab/ci/templates/Jobs/Code-Quality.gitlab-ci.yml +++ b/lib/gitlab/ci/templates/Jobs/Code-Quality.gitlab-ci.yml @@ -7,7 +7,7 @@ code_quality: variables: DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "" - CODE_QUALITY_IMAGE: "registry.gitlab.com/gitlab-org/ci-cd/codequality:0.85.18-gitlab.1" + CODE_QUALITY_IMAGE: "registry.gitlab.com/gitlab-org/ci-cd/codequality:0.85.19" needs: [] script: - export SOURCE_CODE=$PWD diff --git a/spec/frontend/helpers/stub_transition.js b/spec/frontend/helpers/stub_transition.js new file mode 100644 index 00000000000..9cddb432a63 --- /dev/null +++ b/spec/frontend/helpers/stub_transition.js @@ -0,0 +1,8 @@ +export function stubTransition() { + return { + render() { + // eslint-disable-next-line no-underscore-dangle + return this.$options._renderChildren; + }, + }; +} diff --git a/spec/frontend/sidebar/components/time_tracking/time_tracker_spec.js b/spec/frontend/sidebar/components/time_tracking/time_tracker_spec.js index bcd2c14f2fa..28c268e87c8 100644 --- a/spec/frontend/sidebar/components/time_tracking/time_tracker_spec.js +++ b/spec/frontend/sidebar/components/time_tracking/time_tracker_spec.js @@ -1,5 +1,6 @@ import { createMockDirective } from 'helpers/vue_mock_directive'; import { mount } from '@vue/test-utils'; +import { stubTransition } from 'helpers/stub_transition'; import TimeTracker from '~/sidebar/components/time_tracking/time_tracker.vue'; describe('Issuable Time Tracker', () => { @@ -22,6 +23,9 @@ describe('Issuable Time Tracker', () => { mount(TimeTracker, { propsData: { ...defaultProps, ...props }, directives: { GlTooltip: createMockDirective() }, + stubs: { + transition: stubTransition(), + }, }); afterEach(() => { @@ -213,14 +217,12 @@ describe('Issuable Time Tracker', () => { findHelpButton().trigger('click'); await wrapper.vm.$nextTick(); - expect(findByTestId('helpPane').classes('help-state-toggle-enter')).toBe(true); - expect(findByTestId('helpPane').classes('help-state-toggle-leave')).toBe(false); + expect(findByTestId('helpPane').exists()).toBe(true); findCloseHelpButton().trigger('click'); await wrapper.vm.$nextTick(); - expect(findByTestId('helpPane').classes('help-state-toggle-leave')).toBe(true); - expect(findByTestId('helpPane').classes('help-state-toggle-enter')).toBe(false); + expect(findByTestId('helpPane').exists()).toBe(false); }); }); }); diff --git a/spec/lib/gitlab/background_migration/reset_shared_runners_for_transferred_projects_spec.rb b/spec/lib/gitlab/background_migration/reset_shared_runners_for_transferred_projects_spec.rb new file mode 100644 index 00000000000..68aa64a1c7d --- /dev/null +++ b/spec/lib/gitlab/background_migration/reset_shared_runners_for_transferred_projects_spec.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::BackgroundMigration::ResetSharedRunnersForTransferredProjects, schema: 20201110161542 do + let(:namespaces) { table(:namespaces) } + let(:projects) { table(:projects) } + + let(:namespace_1) { namespaces.create!(name: 'foo', path: 'foo', shared_runners_enabled: true, allow_descendants_override_disabled_shared_runners: false ) } + let(:namespace_2) { namespaces.create!(name: 'foo', path: 'foo', shared_runners_enabled: false, allow_descendants_override_disabled_shared_runners: false ) } + let(:namespace_3) { namespaces.create!(name: 'bar', path: 'bar', shared_runners_enabled: false, allow_descendants_override_disabled_shared_runners: true ) } + let(:project_1_1) { projects.create!(namespace_id: namespace_1.id, shared_runners_enabled: true) } + let(:project_1_2) { projects.create!(namespace_id: namespace_1.id, shared_runners_enabled: false) } + let(:project_2_1) { projects.create!(namespace_id: namespace_2.id, shared_runners_enabled: true) } + let(:project_2_2) { projects.create!(namespace_id: namespace_2.id, shared_runners_enabled: false) } + let(:project_3_1) { projects.create!(namespace_id: namespace_3.id, shared_runners_enabled: true) } + let(:project_3_2) { projects.create!(namespace_id: namespace_3.id, shared_runners_enabled: false) } + + it 'corrects each project shared_runners_enabled column' do + expect do + described_class.new.perform(namespace_1.id, namespace_3.id) + project_1_1.reload + project_1_2.reload + project_2_1.reload + project_2_2.reload + project_3_1.reload + project_3_2.reload + end.to not_change(project_1_1, :shared_runners_enabled).from(true) + .and not_change(project_1_2, :shared_runners_enabled).from(false) + .and change(project_2_1, :shared_runners_enabled).from(true).to(false) + .and not_change(project_2_2, :shared_runners_enabled).from(false) + .and not_change(project_3_1, :shared_runners_enabled).from(true) + .and not_change(project_3_2, :shared_runners_enabled).from(false) + end +end diff --git a/spec/migrations/20201110161542_cleanup_transfered_projects_shared_runners_spec.rb b/spec/migrations/20201110161542_cleanup_transfered_projects_shared_runners_spec.rb new file mode 100644 index 00000000000..8563114c9f9 --- /dev/null +++ b/spec/migrations/20201110161542_cleanup_transfered_projects_shared_runners_spec.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require 'spec_helper' +require Rails.root.join('db', 'post_migrate', '20201110161542_cleanup_transfered_projects_shared_runners.rb') + +RSpec.describe CleanupTransferedProjectsSharedRunners, :sidekiq, schema: 20201110161542 do + let(:namespaces) { table(:namespaces) } + let(:migration) { described_class.new } + let(:batch_interval) { described_class::INTERVAL } + + let!(:namespace_1) { namespaces.create!(name: 'foo', path: 'foo') } + let!(:namespace_2) { namespaces.create!(name: 'bar', path: 'bar') } + let!(:namespace_3) { namespaces.create!(name: 'baz', path: 'baz') } + + describe '#up' do + before do + stub_const("#{described_class}::BATCH_SIZE", 2) + end + + it 'schedules ResetSharedRunnersForTransferredProjects background jobs' do + Sidekiq::Testing.fake! do + freeze_time do + migration.up + + expect(BackgroundMigrationWorker.jobs.size).to eq(2) + expect(described_class::MIGRATION).to be_scheduled_delayed_migration(batch_interval, namespace_1.id, namespace_2.id) + expect(described_class::MIGRATION).to be_scheduled_delayed_migration(batch_interval * 2, namespace_3.id, namespace_3.id) + end + end + end + end +end