diff --git a/changelogs/unreleased/omit-previous-error-from-sidekiq-logs.yml b/changelogs/unreleased/omit-previous-error-from-sidekiq-logs.yml new file mode 100644 index 00000000000..ab7c18b5833 --- /dev/null +++ b/changelogs/unreleased/omit-previous-error-from-sidekiq-logs.yml @@ -0,0 +1,5 @@ +--- +title: Omit error details from previous attempt in Sidekiq JSON logs +merge_request: 25161 +author: +type: changed diff --git a/config/webpack.vendor.config.js b/config/webpack.vendor.config.js index 8da4938191c..90736349d91 100644 --- a/config/webpack.vendor.config.js +++ b/config/webpack.vendor.config.js @@ -1,6 +1,7 @@ const path = require('path'); const webpack = require('webpack'); const vendorDllHash = require('./helpers/vendor_dll_hash'); +const { YarnCheck } = require('yarn-check-webpack-plugin'); const ROOT_PATH = path.resolve(__dirname, '..'); @@ -60,6 +61,11 @@ module.exports = { path: path.join(dllCachePath, '[name].dll.manifest.json'), name: '[name]_[hash]', }), + new YarnCheck({ + rootDirectory: ROOT_PATH, + exclude: /ts-jest/, + forceKill: true, + }), ], node: { diff --git a/doc/topics/autodevops/index.md b/doc/topics/autodevops/index.md index abd946e1f23..dcd822705f9 100644 --- a/doc/topics/autodevops/index.md +++ b/doc/topics/autodevops/index.md @@ -109,6 +109,7 @@ To make full use of Auto DevOps, you will need: 1. A [Kubernetes 1.12+ cluster](../../user/project/clusters/index.md) for the project. The easiest way is to add a [new cluster using the GitLab UI](../../user/project/clusters/add_remove_clusters.md#add-new-cluster). + For Kubernetes 1.16+ clusters, there is some additional configuration for [Auto Deploy for Kubernetes 1.16+](#kubernetes-116). 1. NGINX Ingress. You can deploy it to your Kubernetes cluster by installing the [GitLab-managed app for Ingress](../../user/clusters/applications.md#ingress), once you have configured GitLab's Kubernetes integration in the previous step. @@ -635,6 +636,30 @@ be pulled again, e.g. after pod eviction, Kubernetes will fail to do so as it will be attempting to fetch the image using `CI_REGISTRY_PASSWORD`. +#### Kubernetes 1.16+ + +> [Introduced](https://gitlab.com/gitlab-org/charts/auto-deploy-app/-/merge_requests/51) in GitLab 12.8. + +CAUTION: **Deprecation** +The default value of `extensions/v1beta1` for the `deploymentApiVersion` setting is +deprecated, and is scheduled to be changed to a new default of `apps/v1` in +[GitLab 13.0](https://gitlab.com/gitlab-org/charts/auto-deploy-app/issues/47). + +In Kubernetes 1.16 onwards, a number of [APIs were removed](https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16/), +including support for `Deployment` in the `extensions/v1beta1` version. + +To use Auto Deploy on a Kubernetes 1.16+ cluster, you must: + +1. Set the following in the [`.gitlab/auto-deploy-values.yaml` file](#customize-values-for-helm-chart): + + ```yml + deploymentApiVersion: apps/v1 + ``` + +1. Set the `POSTGRES_ENABLED` variable to `false`. This will disable Auto Deploy's deployment of PostgreSQL. +Support for enabling Auto Deploy's deployment of PostgreSQL in a Kubernetes 1.16+ cluster +is [planned](https://gitlab.com/gitlab-org/charts/auto-deploy-app/issues/28). + #### Migrations > [Introduced][ce-21955] in GitLab 11.4 diff --git a/lib/gitlab/sidekiq_logging/structured_logger.rb b/lib/gitlab/sidekiq_logging/structured_logger.rb index 6dacca5529b..b45014d283f 100644 --- a/lib/gitlab/sidekiq_logging/structured_logger.rb +++ b/lib/gitlab/sidekiq_logging/structured_logger.rb @@ -77,7 +77,9 @@ module Gitlab end def parse_job(job) - job = job.dup + # Error information from the previous try is in the payload for + # displaying in the Sidekiq UI, but is very confusing in logs! + job = job.except('error_backtrace', 'error_class', 'error_message') # Add process id params job['pid'] = ::Process.pid diff --git a/lib/tasks/gitlab/assets.rake b/lib/tasks/gitlab/assets.rake index 3aa1dc403d6..b398bbe403f 100644 --- a/lib/tasks/gitlab/assets.rake +++ b/lib/tasks/gitlab/assets.rake @@ -8,7 +8,6 @@ namespace :gitlab do yarn:check gettext:po_to_json rake:assets:precompile - gitlab:assets:vendor webpack:compile gitlab:assets:fix_urls ].each(&Gitlab::TaskHelpers.method(:invoke_and_time_task)) diff --git a/package.json b/package.json index 4a0d2cde754..6078d7300c4 100644 --- a/package.json +++ b/package.json @@ -198,6 +198,7 @@ "timezone-mock": "^1.0.8", "vue-jest": "^4.0.0-beta.2", "webpack-dev-server": "^3.8.1", + "yarn-check-webpack-plugin": "^1.2.0", "yarn-deduplicate": "^1.1.1" }, "resolutions": { diff --git a/spec/controllers/profiles/notifications_controller_spec.rb b/spec/controllers/profiles/notifications_controller_spec.rb index ba85c781a93..47d6f11fecf 100644 --- a/spec/controllers/profiles/notifications_controller_spec.rb +++ b/spec/controllers/profiles/notifications_controller_spec.rb @@ -22,8 +22,9 @@ describe Profiles::NotificationsController do end context 'with groups that do not have notification preferences' do - set(:group) { create(:group) } - set(:subgroup) { create(:group, parent: group) } + let_it_be(:group) { create(:group) } + let_it_be(:subgroup) { create(:group, parent: group) } + before do group.add_developer(user) end diff --git a/spec/finders/award_emojis_finder_spec.rb b/spec/finders/award_emojis_finder_spec.rb index ccac475daad..bdfd2a9a3f4 100644 --- a/spec/finders/award_emojis_finder_spec.rb +++ b/spec/finders/award_emojis_finder_spec.rb @@ -3,14 +3,14 @@ require 'spec_helper' describe AwardEmojisFinder do - set(:issue_1) { create(:issue) } - set(:issue_1_thumbsup) { create(:award_emoji, name: 'thumbsup', awardable: issue_1) } - set(:issue_1_thumbsdown) { create(:award_emoji, name: 'thumbsdown', awardable: issue_1) } + let_it_be(:issue_1) { create(:issue) } + let_it_be(:issue_1_thumbsup) { create(:award_emoji, name: 'thumbsup', awardable: issue_1) } + let_it_be(:issue_1_thumbsdown) { create(:award_emoji, name: 'thumbsdown', awardable: issue_1) } # Create a matching set of emoji for a second issue. # These should never appear in our finder results - set(:issue_2) { create(:issue) } - set(:issue_2_thumbsup) { create(:award_emoji, name: 'thumbsup', awardable: issue_2) } - set(:issue_2_thumbsdown) { create(:award_emoji, name: 'thumbsdown', awardable: issue_2) } + let_it_be(:issue_2) { create(:issue) } + let_it_be(:issue_2_thumbsup) { create(:award_emoji, name: 'thumbsup', awardable: issue_2) } + let_it_be(:issue_2_thumbsdown) { create(:award_emoji, name: 'thumbsdown', awardable: issue_2) } describe 'param validation' do it 'raises an error if `name` is invalid' do diff --git a/spec/finders/clusters_finder_spec.rb b/spec/finders/clusters_finder_spec.rb index 5dde616f679..3bad88573f7 100644 --- a/spec/finders/clusters_finder_spec.rb +++ b/spec/finders/clusters_finder_spec.rb @@ -5,7 +5,7 @@ require 'spec_helper' describe ClustersFinder do let(:project) { create(:project) } - set(:user) { create(:user) } + let_it_be(:user) { create(:user) } describe '#execute' do let(:enabled_cluster) { create(:cluster, :provided_by_gcp, projects: [project]) } diff --git a/spec/finders/issues_finder_spec.rb b/spec/finders/issues_finder_spec.rb index 7a102cb479e..ff52e1b9d5f 100644 --- a/spec/finders/issues_finder_spec.rb +++ b/spec/finders/issues_finder_spec.rb @@ -29,7 +29,7 @@ describe IssuesFinder do end context 'filter by username' do - set(:user3) { create(:user) } + let_it_be(:user3) { create(:user) } before do project2.add_developer(user3) @@ -53,7 +53,7 @@ describe IssuesFinder do end it_behaves_like 'no assignee filter' do - set(:user3) { create(:user) } + let_it_be(:user3) { create(:user) } let(:expected_issuables) { [issue4] } end @@ -679,7 +679,7 @@ describe IssuesFinder do end context 'filtering by confidential' do - set(:confidential_issue) { create(:issue, project: project1, confidential: true) } + let_it_be(:confidential_issue) { create(:issue, project: project1, confidential: true) } context 'no filtering' do it 'returns all issues' do @@ -777,7 +777,7 @@ describe IssuesFinder do it 'returns the number of rows for the default state' do finder = described_class.new(user) - expect(finder.row_count).to eq(5) + expect(finder.row_count).to eq(4) end it 'returns the number of rows for a given state' do @@ -790,10 +790,10 @@ describe IssuesFinder do describe '#with_confidentiality_access_check' do let(:guest) { create(:user) } - set(:authorized_user) { create(:user) } - set(:project) { create(:project, namespace: authorized_user.namespace) } - set(:public_issue) { create(:issue, project: project) } - set(:confidential_issue) { create(:issue, project: project, confidential: true) } + let_it_be(:authorized_user) { create(:user) } + let_it_be(:project) { create(:project, namespace: authorized_user.namespace) } + let_it_be(:public_issue) { create(:issue, project: project) } + let_it_be(:confidential_issue) { create(:issue, project: project, confidential: true) } context 'when no project filter is given' do let(:params) { {} } diff --git a/spec/finders/jobs_finder_spec.rb b/spec/finders/jobs_finder_spec.rb index 675d170b90e..01f9ec03c79 100644 --- a/spec/finders/jobs_finder_spec.rb +++ b/spec/finders/jobs_finder_spec.rb @@ -3,13 +3,13 @@ require 'spec_helper' describe JobsFinder, '#execute' do - set(:user) { create(:user) } - set(:admin) { create(:user, :admin) } - set(:project) { create(:project, :private, public_builds: false) } - set(:pipeline) { create(:ci_pipeline, project: project) } - set(:job_1) { create(:ci_build) } - set(:job_2) { create(:ci_build, :running) } - set(:job_3) { create(:ci_build, :success, pipeline: pipeline) } + let_it_be(:user) { create(:user) } + let_it_be(:admin) { create(:user, :admin) } + let_it_be(:project) { create(:project, :private, public_builds: false) } + let_it_be(:pipeline) { create(:ci_pipeline, project: project) } + let_it_be(:job_1) { create(:ci_build) } + let_it_be(:job_2) { create(:ci_build, :running) } + let_it_be(:job_3) { create(:ci_build, :success, pipeline: pipeline) } let(:params) { {} } diff --git a/spec/finders/members_finder_spec.rb b/spec/finders/members_finder_spec.rb index f7331f689ea..f6df727f7db 100644 --- a/spec/finders/members_finder_spec.rb +++ b/spec/finders/members_finder_spec.rb @@ -3,13 +3,13 @@ require 'spec_helper' describe MembersFinder, '#execute' do - set(:group) { create(:group) } - set(:nested_group) { create(:group, parent: group) } - set(:project) { create(:project, namespace: nested_group) } - set(:user1) { create(:user) } - set(:user2) { create(:user) } - set(:user3) { create(:user) } - set(:user4) { create(:user) } + let_it_be(:group) { create(:group) } + let_it_be(:nested_group) { create(:group, parent: group) } + let_it_be(:project, reload: true) { create(:project, namespace: nested_group) } + let_it_be(:user1) { create(:user) } + let_it_be(:user2) { create(:user) } + let_it_be(:user3) { create(:user) } + let_it_be(:user4) { create(:user) } it 'returns members for project and parent groups' do nested_group.request_access(user1) @@ -128,10 +128,10 @@ describe MembersFinder, '#execute' do context 'when include_invited_groups_members == true' do subject { described_class.new(project, user2).execute(include_relations: [:inherited, :direct, :invited_groups_members]) } - set(:linked_group) { create(:group, :public) } - set(:nested_linked_group) { create(:group, parent: linked_group) } - set(:linked_group_member) { linked_group.add_guest(user1) } - set(:nested_linked_group_member) { nested_linked_group.add_guest(user2) } + let_it_be(:linked_group) { create(:group, :public) } + let_it_be(:nested_linked_group) { create(:group, parent: linked_group) } + let_it_be(:linked_group_member) { linked_group.add_guest(user1) } + let_it_be(:nested_linked_group_member) { nested_linked_group.add_guest(user2) } it 'includes all the invited_groups members including members inherited from ancestor groups' do create(:project_group_link, project: project, group: nested_linked_group) diff --git a/spec/finders/merge_requests_finder_spec.rb b/spec/finders/merge_requests_finder_spec.rb index 849387b72bd..42211f7ac9d 100644 --- a/spec/finders/merge_requests_finder_spec.rb +++ b/spec/finders/merge_requests_finder_spec.rb @@ -214,13 +214,13 @@ describe MergeRequestsFinder do merge_request3.assignees = [user2, user3] end - set(:user3) { create(:user) } + let_it_be(:user3) { create(:user) } let(:params) { { assignee_username: [user2.username, user3.username] } } let(:expected_issuables) { [merge_request3] } end it_behaves_like 'no assignee filter' do - set(:user3) { create(:user) } + let_it_be(:user3) { create(:user) } let(:expected_issuables) { [merge_request4, merge_request5] } end diff --git a/spec/finders/resource_label_event_finder_spec.rb b/spec/finders/resource_label_event_finder_spec.rb index c894387100d..5068ea19d63 100644 --- a/spec/finders/resource_label_event_finder_spec.rb +++ b/spec/finders/resource_label_event_finder_spec.rb @@ -3,9 +3,9 @@ require 'spec_helper' describe ResourceLabelEventFinder do - set(:user) { create(:user) } - set(:issue_project) { create(:project) } - set(:issue) { create(:issue, project: issue_project) } + let_it_be(:user) { create(:user) } + let_it_be(:issue_project) { create(:project) } + let_it_be(:issue) { create(:issue, project: issue_project) } describe '#execute' do subject { described_class.new(user, issue).execute } diff --git a/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb b/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb index ac4cf1734a5..f294d7f7fcd 100644 --- a/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb +++ b/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb @@ -18,7 +18,10 @@ describe Gitlab::SidekiqLogging::StructuredLogger do "jid" => "da883554ee4fe414012f5f42", "created_at" => created_at.to_f, "enqueued_at" => created_at.to_f, - "correlation_id" => 'cid' + "correlation_id" => 'cid', + "error_message" => "wrong number of arguments (2 for 3)", + "error_class" => "ArgumentError", + "error_backtrace" => [] } end @@ -26,7 +29,7 @@ describe Gitlab::SidekiqLogging::StructuredLogger do let(:clock_thread_cputime_start) { 0.222222299 } let(:clock_thread_cputime_end) { 1.333333799 } let(:start_payload) do - job.merge( + job.except('error_backtrace', 'error_class', 'error_message').merge( 'message' => 'TestWorker JID-da883554ee4fe414012f5f42: start', 'job_status' => 'start', 'pid' => Process.pid, diff --git a/spec/presenters/ci/bridge_presenter_spec.rb b/spec/presenters/ci/bridge_presenter_spec.rb index 1c2eeced20c..2a4c40a7eaa 100644 --- a/spec/presenters/ci/bridge_presenter_spec.rb +++ b/spec/presenters/ci/bridge_presenter_spec.rb @@ -3,9 +3,9 @@ require 'spec_helper' describe Ci::BridgePresenter do - set(:project) { create(:project) } - set(:pipeline) { create(:ci_pipeline, project: project) } - set(:bridge) { create(:ci_bridge, pipeline: pipeline, status: :failed) } + let_it_be(:project) { create(:project) } + let_it_be(:pipeline) { create(:ci_pipeline, project: project) } + let_it_be(:bridge) { create(:ci_bridge, pipeline: pipeline, status: :failed) } subject(:presenter) do described_class.new(bridge) diff --git a/spec/presenters/ci/trigger_presenter_spec.rb b/spec/presenters/ci/trigger_presenter_spec.rb index ac3967f4f77..41cb436f928 100644 --- a/spec/presenters/ci/trigger_presenter_spec.rb +++ b/spec/presenters/ci/trigger_presenter_spec.rb @@ -3,10 +3,10 @@ require 'spec_helper' describe Ci::TriggerPresenter do - set(:user) { create(:user) } - set(:project) { create(:project) } + let_it_be(:user) { create(:user) } + let_it_be(:project) { create(:project) } - set(:trigger) do + let_it_be(:trigger) do create(:ci_trigger, token: '123456789abcd', project: project) end diff --git a/spec/presenters/event_presenter_spec.rb b/spec/presenters/event_presenter_spec.rb index 79f5e359141..eb94d838370 100644 --- a/spec/presenters/event_presenter_spec.rb +++ b/spec/presenters/event_presenter_spec.rb @@ -5,11 +5,11 @@ require 'spec_helper' describe EventPresenter do include Gitlab::Routing.url_helpers - set(:group) { create(:group) } - set(:project) { create(:project, group: group) } - set(:target) { create(:milestone, project: project) } - set(:group_event) { create(:event, :created, project: nil, group: group, target: target) } - set(:project_event) { create(:event, :created, project: project, target: target) } + let_it_be(:group) { create(:group) } + let_it_be(:project) { create(:project, group: group) } + let_it_be(:target) { create(:milestone, project: project) } + let_it_be(:group_event) { create(:event, :created, project: nil, group: group, target: target) } + let_it_be(:project_event) { create(:event, :created, project: project, target: target) } describe '#resource_parent_name' do context 'with group event' do diff --git a/spec/presenters/label_presenter_spec.rb b/spec/presenters/label_presenter_spec.rb index e9f9657490d..9578d017af5 100644 --- a/spec/presenters/label_presenter_spec.rb +++ b/spec/presenters/label_presenter_spec.rb @@ -5,8 +5,8 @@ require 'spec_helper' describe LabelPresenter do include Gitlab::Routing.url_helpers - set(:group) { create(:group) } - set(:project) { create(:project, group: group) } + let_it_be(:group) { create(:group) } + let_it_be(:project) { create(:project, group: group) } let(:label) { build_stubbed(:label, project: project).present(issuable_subject: project) } let(:group_label) { build_stubbed(:group_label, group: group).present(issuable_subject: project) } diff --git a/spec/services/ci/create_pipeline_service/parent_child_pipeline_spec.rb b/spec/services/ci/create_pipeline_service/parent_child_pipeline_spec.rb index cfb68ffa585..b4071d1b0fe 100644 --- a/spec/services/ci/create_pipeline_service/parent_child_pipeline_spec.rb +++ b/spec/services/ci/create_pipeline_service/parent_child_pipeline_spec.rb @@ -3,8 +3,8 @@ require 'spec_helper' describe Ci::CreatePipelineService, '#execute' do - set(:project) { create(:project, :repository) } - set(:user) { create(:user) } + let_it_be(:project) { create(:project, :repository) } + let_it_be(:user) { create(:user) } let(:ref_name) { 'master' } let(:service) do diff --git a/spec/services/ci/pipeline_processing/atomic_processing_service/status_collection_spec.rb b/spec/services/ci/pipeline_processing/atomic_processing_service/status_collection_spec.rb index c29c56c2b04..b487730d07f 100644 --- a/spec/services/ci/pipeline_processing/atomic_processing_service/status_collection_spec.rb +++ b/spec/services/ci/pipeline_processing/atomic_processing_service/status_collection_spec.rb @@ -5,12 +5,12 @@ require 'spec_helper' describe Ci::PipelineProcessing::AtomicProcessingService::StatusCollection do using RSpec::Parameterized::TableSyntax - set(:pipeline) { create(:ci_pipeline) } - set(:build_a) { create(:ci_build, :success, name: 'build-a', stage: 'build', stage_idx: 0, pipeline: pipeline) } - set(:build_b) { create(:ci_build, :failed, name: 'build-b', stage: 'build', stage_idx: 0, pipeline: pipeline) } - set(:test_a) { create(:ci_build, :running, name: 'test-a', stage: 'test', stage_idx: 1, pipeline: pipeline) } - set(:test_b) { create(:ci_build, :pending, name: 'test-b', stage: 'test', stage_idx: 1, pipeline: pipeline) } - set(:deploy) { create(:ci_build, :created, name: 'deploy', stage: 'deploy', stage_idx: 2, pipeline: pipeline) } + let_it_be(:pipeline) { create(:ci_pipeline) } + let_it_be(:build_a) { create(:ci_build, :success, name: 'build-a', stage: 'build', stage_idx: 0, pipeline: pipeline) } + let_it_be(:build_b) { create(:ci_build, :failed, name: 'build-b', stage: 'build', stage_idx: 0, pipeline: pipeline) } + let_it_be(:test_a) { create(:ci_build, :running, name: 'test-a', stage: 'test', stage_idx: 1, pipeline: pipeline) } + let_it_be(:test_b) { create(:ci_build, :pending, name: 'test-b', stage: 'test', stage_idx: 1, pipeline: pipeline) } + let_it_be(:deploy) { create(:ci_build, :created, name: 'deploy', stage: 'deploy', stage_idx: 2, pipeline: pipeline) } let(:collection) { described_class.new(pipeline) } diff --git a/spec/services/metrics/dashboard/clone_dashboard_service_spec.rb b/spec/services/metrics/dashboard/clone_dashboard_service_spec.rb index 20583ff77e9..5f7279ee550 100644 --- a/spec/services/metrics/dashboard/clone_dashboard_service_spec.rb +++ b/spec/services/metrics/dashboard/clone_dashboard_service_spec.rb @@ -7,9 +7,9 @@ describe Metrics::Dashboard::CloneDashboardService, :use_clean_rails_memory_stor STAGES = ::Gitlab::Metrics::Dashboard::Stages - set(:user) { create(:user) } - set(:project) { create(:project, :repository) } - set(:environment) { create(:environment, project: project) } + let_it_be(:user) { create(:user) } + let_it_be(:project) { create(:project, :repository) } + let_it_be(:environment) { create(:environment, project: project) } describe '#execute' do subject(:service_call) { described_class.new(project, user, params).execute } diff --git a/yarn.lock b/yarn.lock index c667eac957b..e614b6bb2af 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12369,6 +12369,13 @@ yargs@^7.0.0: y18n "^3.2.1" yargs-parser "^5.0.0" +yarn-check-webpack-plugin@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/yarn-check-webpack-plugin/-/yarn-check-webpack-plugin-1.2.0.tgz#0eb00cdcdb430f0494222a3eab1d2832737840cc" + integrity sha512-BKjFMmI2rsSxIVY6kXaYSpC/9rpfj/9Lm2armdJ+mYvCYuONfiK2+b9q6r8fYFEYJaB2Uv0hPuLvUvAwTVZ8Sg== + dependencies: + chalk "^2.4.2" + yarn-deduplicate@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/yarn-deduplicate/-/yarn-deduplicate-1.1.1.tgz#19b4a87654b66f55bf3a4bd6b153b4e4ab1b6e6d"