diff options
26 files changed, 71 insertions, 85 deletions
diff --git a/.rubocop_manual_todo.yml b/.rubocop_manual_todo.yml index aa22a908cee..99082386826 100644 --- a/.rubocop_manual_todo.yml +++ b/.rubocop_manual_todo.yml @@ -460,20 +460,6 @@ RSpec/EmptyLineAfterFinalLetItBe: - ee/spec/features/projects/licenses/maintainer_views_policies_spec.rb - ee/spec/features/registrations/group_invites_during_signup_flow_spec.rb - ee/spec/features/subscriptions_spec.rb - - ee/spec/finders/analytics/cycle_analytics/stage_finder_spec.rb - - ee/spec/finders/billed_users_finder_spec.rb - - ee/spec/finders/custom_project_templates_finder_spec.rb - - ee/spec/finders/deployments_finder_spec.rb - - ee/spec/finders/ee/projects_finder_spec.rb - - ee/spec/finders/epics_finder_spec.rb - - ee/spec/finders/geo_node_finder_spec.rb - - ee/spec/finders/incident_management/oncall_schedules_finder_spec.rb - - ee/spec/finders/issues_finder_spec.rb - - ee/spec/finders/iterations_finder_spec.rb - - ee/spec/finders/merge_trains_finder_spec.rb - - ee/spec/finders/projects/integrations/jira/issues_finder_spec.rb - - ee/spec/finders/scim_finder_spec.rb - - ee/spec/finders/security/pipeline_vulnerabilities_finder_spec.rb - ee/spec/graphql/ee/mutations/concerns/mutations/resolves_issuable_spec.rb - ee/spec/graphql/mutations/boards/update_epic_user_preferences_spec.rb - ee/spec/graphql/mutations/clusters/agent_tokens/create_spec.rb @@ -877,11 +863,6 @@ RSpec/EmptyLineAfterFinalLetItBe: - spec/models/packages/package_spec.rb - spec/models/packages/tag_spec.rb - spec/models/plan_limits_spec.rb - - spec/models/project_services/chat_message/alert_message_spec.rb - - spec/models/project_services/jira_service_spec.rb - - spec/models/project_services/prometheus_service_spec.rb - - spec/models/project_services/slack_service_spec.rb - - spec/models/project_spec.rb - spec/models/prometheus_alert_spec.rb - spec/models/protected_branch/push_access_level_spec.rb - spec/models/release_spec.rb diff --git a/app/graphql/resolvers/concerns/looks_ahead.rb b/app/graphql/resolvers/concerns/looks_ahead.rb index 77a85edfba6..644b2a11460 100644 --- a/app/graphql/resolvers/concerns/looks_ahead.rb +++ b/app/graphql/resolvers/concerns/looks_ahead.rb @@ -15,12 +15,7 @@ module LooksAhead end def apply_lookahead(query) - selection = node_selection - - includes = preloads.each.flat_map do |name, requirements| - selection&.selects?(name) ? requirements : [] - end - all_preloads = (unconditional_includes + includes).uniq + all_preloads = (unconditional_includes + filtered_preloads).uniq return query if all_preloads.empty? @@ -37,6 +32,14 @@ module LooksAhead {} end + def filtered_preloads + selection = node_selection + + preloads.each.flat_map do |name, requirements| + selection&.selects?(name) ? requirements : [] + end + end + def node_selection return unless lookahead diff --git a/app/graphql/resolvers/group_members_resolver.rb b/app/graphql/resolvers/group_members_resolver.rb index 36e1977b756..d3662b08cdf 100644 --- a/app/graphql/resolvers/group_members_resolver.rb +++ b/app/graphql/resolvers/group_members_resolver.rb @@ -13,12 +13,6 @@ module Resolvers private - def preloads - { - user: [:user, :source] - } - end - def finder_class GroupMembersFinder end diff --git a/app/graphql/resolvers/members_resolver.rb b/app/graphql/resolvers/members_resolver.rb index 76c3ae936ee..2b731d54cdd 100644 --- a/app/graphql/resolvers/members_resolver.rb +++ b/app/graphql/resolvers/members_resolver.rb @@ -21,6 +21,12 @@ module Resolvers private + def preloads + { + user: [:user, :source] + } + end + def finder_class # override in subclass end diff --git a/app/models/clusters/agent.rb b/app/models/clusters/agent.rb index 7c42fc28a8d..c5b9dddb1da 100644 --- a/app/models/clusters/agent.rb +++ b/app/models/clusters/agent.rb @@ -8,7 +8,6 @@ module Clusters belongs_to :project, class_name: '::Project' # Otherwise, it will load ::Clusters::Project has_many :agent_tokens, class_name: 'Clusters::AgentToken' - has_many :last_used_agent_tokens, -> { order_last_used_at_desc }, class_name: 'Clusters::AgentToken' scope :ordered_by_name, -> { order(:name) } scope :with_name, -> (name) { where(name: name) } diff --git a/app/models/clusters/agent_token.rb b/app/models/clusters/agent_token.rb index 27a3cd8d13d..d42279502c5 100644 --- a/app/models/clusters/agent_token.rb +++ b/app/models/clusters/agent_token.rb @@ -6,7 +6,7 @@ module Clusters include TokenAuthenticatable add_authentication_token_field :token, encrypted: :required, token_generator: -> { Devise.friendly_token(50) } - cached_attr_reader :last_used_at + cached_attr_reader :last_contacted_at self.table_name = 'cluster_agent_tokens' @@ -21,8 +21,6 @@ module Clusters validates :description, length: { maximum: 1024 } validates :name, presence: true, length: { maximum: 255 } - scope :order_last_used_at_desc, -> { order(::Gitlab::Database.nulls_last_order('last_used_at', 'DESC')) } - def track_usage track_values = { last_used_at: Time.current.utc } diff --git a/changelogs/unreleased/322128-token-order.yml b/changelogs/unreleased/322128-token-order.yml deleted file mode 100644 index cf2ccd57898..00000000000 --- a/changelogs/unreleased/322128-token-order.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add ability to order cluster token by last used -merge_request: 57520 -author: -type: changed diff --git a/changelogs/unreleased/issue-325836-fix-empty-line-after-let-it-be-models-project.yml b/changelogs/unreleased/issue-325836-fix-empty-line-after-let-it-be-models-project.yml new file mode 100644 index 00000000000..cf41822a4f9 --- /dev/null +++ b/changelogs/unreleased/issue-325836-fix-empty-line-after-let-it-be-models-project.yml @@ -0,0 +1,5 @@ +--- +title: Fix EmptyLineAfterFinalLetItBe offenses in spec/models/project +merge_request: 58372 +author: Huzaifa Iftikhar @huzaifaiftikhar +type: fixed diff --git a/db/migrate/20210407152925_add_cluster_agent_token_last_used.rb b/db/migrate/20210407152925_add_cluster_agent_token_last_used.rb deleted file mode 100644 index 8ade2971539..00000000000 --- a/db/migrate/20210407152925_add_cluster_agent_token_last_used.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -class AddClusterAgentTokenLastUsed < ActiveRecord::Migration[6.0] - include Gitlab::Database::MigrationHelpers - - INDEX = 'index_cluster_agent_tokens_on_last_used_at' - - disable_ddl_transaction! - - def up - add_concurrent_index :cluster_agent_tokens, - :last_used_at, - name: INDEX, - order: { last_used_at: 'DESC NULLS LAST' } - end - - def down - remove_concurrent_index_by_name :cluster_agent_tokens, INDEX - end -end diff --git a/db/schema_migrations/20210407152925 b/db/schema_migrations/20210407152925 deleted file mode 100644 index 1a248d78c8f..00000000000 --- a/db/schema_migrations/20210407152925 +++ /dev/null @@ -1 +0,0 @@ -079ca92ac58519ce8f575c4cb94bfe6cf209e0c9eac20d3d3a294f5b468bc586
\ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 98f3206ab40..a553b47ff84 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -22309,8 +22309,6 @@ CREATE INDEX index_cluster_agent_tokens_on_agent_id ON cluster_agent_tokens USIN CREATE INDEX index_cluster_agent_tokens_on_created_by_user_id ON cluster_agent_tokens USING btree (created_by_user_id); -CREATE INDEX index_cluster_agent_tokens_on_last_used_at ON cluster_agent_tokens USING btree (last_used_at DESC NULLS LAST); - CREATE UNIQUE INDEX index_cluster_agent_tokens_on_token_encrypted ON cluster_agent_tokens USING btree (token_encrypted); CREATE INDEX index_cluster_agents_on_created_by_user_id ON cluster_agents USING btree (created_by_user_id); diff --git a/doc/administration/redis/index.md b/doc/administration/redis/index.md index 30618075c8f..23d13491c75 100644 --- a/doc/administration/redis/index.md +++ b/doc/administration/redis/index.md @@ -5,7 +5,7 @@ group: Distribution info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments --- -# Configuring Redis for scaling +# Configuring Redis for scaling **(FREE SELF)** Based on your infrastructure setup and how you have installed GitLab, there are multiple ways to configure Redis. diff --git a/doc/administration/redis/troubleshooting.md b/doc/administration/redis/troubleshooting.md index 144660c50ea..0c1046ca22d 100644 --- a/doc/administration/redis/troubleshooting.md +++ b/doc/administration/redis/troubleshooting.md @@ -5,7 +5,7 @@ group: Distribution info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments --- -# Troubleshooting Redis +# Troubleshooting Redis **(FREE SELF)** There are a lot of moving parts that needs to be taken care carefully in order for the HA setup to work as expected. diff --git a/doc/ci/pipelines/job_artifacts.md b/doc/ci/pipelines/job_artifacts.md index 72266cce3e6..d239c8b34ae 100644 --- a/doc/ci/pipelines/job_artifacts.md +++ b/doc/ci/pipelines/job_artifacts.md @@ -18,6 +18,8 @@ You can download job artifacts by using the GitLab UI or the [API](../../api/job For an overview, watch the video [GitLab CI Pipeline, Artifacts, and Environments](https://www.youtube.com/watch?v=PCKDICEe10s). Watch also [GitLab CI pipeline tutorial for beginners](https://www.youtube.com/watch?v=Jav4vbUrqII). +Administrators should review our [job artifacts administration](../../administration/job_artifacts.md) documentation. + ## Define artifacts in the `.gitlab-ci.yml` file This example shows how to configure your `.gitlab-ci.yml` file to create job artifacts: diff --git a/doc/development/api_graphql_styleguide.md b/doc/development/api_graphql_styleguide.md index d3c2e012891..6256610ae6a 100644 --- a/doc/development/api_graphql_styleguide.md +++ b/doc/development/api_graphql_styleguide.md @@ -1014,6 +1014,26 @@ class MyThingResolver < BaseResolver end ``` +By default, fields defined in `#preloads` will be preloaded if that field +is selected in the query. Occasionally, finer control may be +needed to avoid preloading too much or incorrect content. + +Extending the above example, we might want to preload a different +association if certain fields are requested together. This can +be done by overriding `#filtered_preloads`: + +```ruby +class MyThingResolver < BaseResolver + # ... + + def filtered_preloads + return [:alternate_attribute] if lookahead.selects?(:field_one) && lookahead.selects?(:field_two) + + super + end +end +``` + The final thing that is needed is that every field that uses this resolver needs to advertise the need for lookahead: diff --git a/doc/install/requirements.md b/doc/install/requirements.md index b340ae76239..83b3eb07b14 100644 --- a/doc/install/requirements.md +++ b/doc/install/requirements.md @@ -17,7 +17,8 @@ as the hardware requirements that are needed to install and use GitLab. - Ubuntu (16.04/18.04/20.04) - Debian (9/10) - CentOS (7/8) -- openSUSE (Leap 15.1/Enterprise Server 12.2) +- openSUSE Leap (15.1/15.2) +- SUSE Linux Enterprise Server (12 SP2/12 SP5) - Red Hat Enterprise Linux (please use the CentOS packages and instructions) - Scientific Linux (please use the CentOS packages and instructions) - Oracle Linux (please use the CentOS packages and instructions) diff --git a/doc/user/profile/notifications.md b/doc/user/profile/notifications.md index c3d12a8ba54..4d890e249e7 100644 --- a/doc/user/profile/notifications.md +++ b/doc/user/profile/notifications.md @@ -5,7 +5,7 @@ group: Project Management info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments --- -# GitLab Notification Emails +# GitLab Notification Emails **(FREE)** GitLab Notifications allow you to stay informed about what's happening in GitLab. With notifications enabled, you can receive updates about activity in issues, merge requests, epics, and designs. diff --git a/doc/user/project/releases/index.md b/doc/user/project/releases/index.md index 3aba5e7853f..99df4a315c3 100644 --- a/doc/user/project/releases/index.md +++ b/doc/user/project/releases/index.md @@ -5,7 +5,7 @@ group: Release info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments --- -# Releases +# Releases **(FREE)** > [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/41766) in GitLab 11.7. diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 6e53001aaed..2c173ea73a8 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -5323,9 +5323,6 @@ msgstr "" msgid "Burndown chart" msgstr "" -msgid "Burndown charts are now fixed. This means that removing issues from a milestone after it has expired won't affect the chart. You can view the old chart using the %{strongStart}Legacy burndown chart%{strongEnd} button." -msgstr "" - msgid "BurndownChartLabel|Open issue weight" msgstr "" diff --git a/spec/models/clusters/agent_spec.rb b/spec/models/clusters/agent_spec.rb index ea7a55480a8..a85a72eba0b 100644 --- a/spec/models/clusters/agent_spec.rb +++ b/spec/models/clusters/agent_spec.rb @@ -8,7 +8,6 @@ RSpec.describe Clusters::Agent do it { is_expected.to belong_to(:created_by_user).class_name('User').optional } it { is_expected.to belong_to(:project).class_name('::Project') } it { is_expected.to have_many(:agent_tokens).class_name('Clusters::AgentToken') } - it { is_expected.to have_many(:last_used_agent_tokens).class_name('Clusters::AgentToken') } it { is_expected.to validate_presence_of(:name) } it { is_expected.to validate_length_of(:name).is_at_most(63) } diff --git a/spec/models/clusters/agent_token_spec.rb b/spec/models/clusters/agent_token_spec.rb index bde4798abec..680b351d24a 100644 --- a/spec/models/clusters/agent_token_spec.rb +++ b/spec/models/clusters/agent_token_spec.rb @@ -9,19 +9,6 @@ RSpec.describe Clusters::AgentToken do it { is_expected.to validate_length_of(:name).is_at_most(255) } it { is_expected.to validate_presence_of(:name) } - describe 'scopes' do - describe '.order_last_used_at_desc' do - let_it_be(:token_1) { create(:cluster_agent_token, last_used_at: 7.days.ago) } - let_it_be(:token_2) { create(:cluster_agent_token, last_used_at: nil) } - let_it_be(:token_3) { create(:cluster_agent_token, last_used_at: 2.days.ago) } - - it 'sorts by last_used_at descending, with null values at last' do - expect(described_class.order_last_used_at_desc) - .to eq([token_3, token_1, token_2]) - end - end - end - describe '#token' do it 'is generated on save' do agent_token = build(:cluster_agent_token, token_encrypted: nil) diff --git a/spec/models/project_services/chat_message/alert_message_spec.rb b/spec/models/project_services/chat_message/alert_message_spec.rb index 927c5dffe77..4d400990789 100644 --- a/spec/models/project_services/chat_message/alert_message_spec.rb +++ b/spec/models/project_services/chat_message/alert_message_spec.rb @@ -6,6 +6,7 @@ RSpec.describe ChatMessage::AlertMessage do subject { described_class.new(args) } let_it_be(:start_time) { Time.current } + let(:alert) { create(:alert_management_alert, started_at: start_time) } let(:args) do diff --git a/spec/models/project_services/jira_service_spec.rb b/spec/models/project_services/jira_service_spec.rb index 77b52c719c5..b50fa1edbc3 100644 --- a/spec/models/project_services/jira_service_spec.rb +++ b/spec/models/project_services/jira_service_spec.rb @@ -790,6 +790,7 @@ RSpec.describe JiraService do describe '#create_cross_reference_note' do let_it_be(:user) { build_stubbed(:user) } + let(:jira_issue) { ExternalIssue.new('JIRA-123', project) } subject { jira_service.create_cross_reference_note(jira_issue, resource, user) } diff --git a/spec/models/project_services/prometheus_service_spec.rb b/spec/models/project_services/prometheus_service_spec.rb index 366c3f68e1d..37a6d49ff74 100644 --- a/spec/models/project_services/prometheus_service_spec.rb +++ b/spec/models/project_services/prometheus_service_spec.rb @@ -9,6 +9,7 @@ RSpec.describe PrometheusService, :use_clean_rails_memory_store_caching, :snowpl include ReactiveCachingHelpers let_it_be_with_reload(:project) { create(:prometheus_project) } + let(:service) { project.prometheus_service } describe "Associations" do @@ -337,6 +338,7 @@ RSpec.describe PrometheusService, :use_clean_rails_memory_store_caching, :snowpl context 'cluster belongs to projects group' do let_it_be(:group) { create(:group) } + let(:project) { create(:prometheus_project, group: group) } let(:cluster) { create(:cluster_for_group, :with_installed_helm, groups: [group]) } diff --git a/spec/models/project_services/slack_service_spec.rb b/spec/models/project_services/slack_service_spec.rb index aa5d92e5c61..688a59fcf09 100644 --- a/spec/models/project_services/slack_service_spec.rb +++ b/spec/models/project_services/slack_service_spec.rb @@ -32,6 +32,7 @@ RSpec.describe SlackService do context 'event is not supported for usage log' do let_it_be(:pipeline) { create(:ci_pipeline) } + let(:data) { Gitlab::DataBuilder::Pipeline.build(pipeline) } it 'does not increase the usage data counter' do @@ -43,6 +44,7 @@ RSpec.describe SlackService do context 'issue notification' do let_it_be(:issue) { create(:issue) } + let(:data) { issue.to_hook_data(user) } it_behaves_like 'increases the usage data counter', 'i_ecosystem_slack_service_issue_notification' @@ -56,6 +58,7 @@ RSpec.describe SlackService do context 'deployment notification' do let_it_be(:deployment) { create(:deployment, user: user) } + let(:data) { Gitlab::DataBuilder::Deployment.build(deployment) } it_behaves_like 'increases the usage data counter', 'i_ecosystem_slack_service_deployment_notification' @@ -63,6 +66,7 @@ RSpec.describe SlackService do context 'wiki_page notification' do let_it_be(:wiki_page) { create(:wiki_page, wiki: project.wiki, message: 'user created page: Awesome wiki_page') } + let(:data) { Gitlab::DataBuilder::WikiPage.build(wiki_page, user, 'create') } it_behaves_like 'increases the usage data counter', 'i_ecosystem_slack_service_wiki_page_notification' @@ -70,6 +74,7 @@ RSpec.describe SlackService do context 'merge_request notification' do let_it_be(:merge_request) { create(:merge_request) } + let(:data) { merge_request.to_hook_data(user) } it_behaves_like 'increases the usage data counter', 'i_ecosystem_slack_service_merge_request_notification' @@ -77,6 +82,7 @@ RSpec.describe SlackService do context 'note notification' do let_it_be(:issue_note) { create(:note_on_issue, note: 'issue note') } + let(:data) { Gitlab::DataBuilder::Note.build(issue_note, user) } it_behaves_like 'increases the usage data counter', 'i_ecosystem_slack_service_note_notification' @@ -93,6 +99,7 @@ RSpec.describe SlackService do context 'confidential note notification' do let_it_be(:confidential_issue_note) { create(:note_on_issue, note: 'issue note', confidential: true) } + let(:data) { Gitlab::DataBuilder::Note.build(confidential_issue_note, user) } it_behaves_like 'increases the usage data counter', 'i_ecosystem_slack_service_confidential_note_notification' @@ -100,6 +107,7 @@ RSpec.describe SlackService do context 'confidential issue notification' do let_it_be(:issue) { create(:issue, confidential: true) } + let(:data) { issue.to_hook_data(user) } it_behaves_like 'increases the usage data counter', 'i_ecosystem_slack_service_confidential_issue_notification' diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 263ab6526a0..01132e18745 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -891,6 +891,7 @@ RSpec.describe Project, factory_default: :keep do describe '#get_issue' do let_it_be(:project) { create(:project) } let_it_be(:user) { create(:user) } + let!(:issue) { create(:issue, project: project) } before_all do @@ -2406,6 +2407,7 @@ RSpec.describe Project, factory_default: :keep do describe '#latest_pipeline' do let_it_be(:project) { create(:project, :repository) } + let(:second_branch) { project.repository.branches[2] } let!(:pipeline_for_default_branch) do @@ -2870,6 +2872,7 @@ RSpec.describe Project, factory_default: :keep do describe '#emails_disabled?' do let_it_be(:namespace) { create(:namespace) } + let(:project) { build(:project, namespace: namespace, emails_disabled: false) } context 'emails disabled in group' do @@ -3190,6 +3193,7 @@ RSpec.describe Project, factory_default: :keep do describe '#ci_variables_for' do let_it_be(:project) { create(:project) } + let(:environment_scope) { '*' } let!(:ci_variable) do @@ -4035,6 +4039,7 @@ RSpec.describe Project, factory_default: :keep do include ProjectHelpers let_it_be(:group) { create(:group) } + let!(:project) { create(:project, project_level, namespace: group ) } let(:user) { create_user_from_membership(project, membership) } @@ -4300,6 +4305,7 @@ RSpec.describe Project, factory_default: :keep do context 'legacy storage' do let_it_be(:project) { create(:project, :repository, :legacy_storage) } + let(:gitlab_shell) { Gitlab::Shell.new } let(:project_storage) { project.send(:storage) } @@ -4399,6 +4405,7 @@ RSpec.describe Project, factory_default: :keep do context 'hashed storage' do let_it_be(:project) { create(:project, :repository, skip_disk_validation: true) } + let(:gitlab_shell) { Gitlab::Shell.new } let(:hash) { Digest::SHA2.hexdigest(project.id.to_s) } let(:hashed_prefix) { File.join('@hashed', hash[0..1], hash[2..3]) } @@ -4489,6 +4496,7 @@ RSpec.describe Project, factory_default: :keep do describe '#has_ci?' do let_it_be(:project, reload: true) { create(:project) } + let(:repository) { double } before do @@ -4985,6 +4993,7 @@ RSpec.describe Project, factory_default: :keep do context 'branch protection' do let_it_be(:namespace) { create(:namespace) } + let(:project) { create(:project, :repository, namespace: namespace) } before do @@ -6597,6 +6606,7 @@ RSpec.describe Project, factory_default: :keep do describe '#latest_jira_import' do let_it_be(:project) { create(:project) } + context 'when no jira imports' do it 'returns nil' do expect(project.latest_jira_import).to be nil |