From 749c551f2f8fec36c623a96e964768f8ab61b2bb Mon Sep 17 00:00:00 2001 From: GitLab Release Tools Bot Date: Wed, 30 Jan 2019 18:11:27 +0000 Subject: [PATCH 01/35] Update CHANGELOG.md for 11.7.3 [ci skip] --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 742f22afadef68..7b30361c29912c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. +## 11.7.3 (2019-01-30) + +- No changes. + ## 11.7.2 (2019-01-29) ### Security (24 changes) -- GitLab From 3424476b4c9f17c11b969ab00e9be80f8c635c02 Mon Sep 17 00:00:00 2001 From: GitLab Release Tools Bot Date: Wed, 30 Jan 2019 18:12:33 +0000 Subject: [PATCH 02/35] Update VERSION to 11.7.3 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 300bd3fe0814af..7687edc13d6900 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.7.2 +11.7.3 -- GitLab From ddeacb390a7bf544aaa966be919edf92ba758ef8 Mon Sep 17 00:00:00 2001 From: Nick Thomas Date: Fri, 1 Feb 2019 15:22:37 +0000 Subject: [PATCH 03/35] Update Workhorse to v8.0.2 --- GITLAB_WORKHORSE_VERSION | 2 +- changelogs/unreleased/update-workhorse-8-0-2.yml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/update-workhorse-8-0-2.yml diff --git a/GITLAB_WORKHORSE_VERSION b/GITLAB_WORKHORSE_VERSION index cd1d2e94f31d7c..8b22a322d0fea3 100644 --- a/GITLAB_WORKHORSE_VERSION +++ b/GITLAB_WORKHORSE_VERSION @@ -1 +1 @@ -8.0.1 +8.0.2 diff --git a/changelogs/unreleased/update-workhorse-8-0-2.yml b/changelogs/unreleased/update-workhorse-8-0-2.yml new file mode 100644 index 00000000000000..d62e1575a0c442 --- /dev/null +++ b/changelogs/unreleased/update-workhorse-8-0-2.yml @@ -0,0 +1,5 @@ +--- +title: Update Workhorse to v8.0.2 +merge_request: 24870 +author: +type: fixed -- GitLab From b02315befcd888f9983e0ce7a4bf1f3accfffd46 Mon Sep 17 00:00:00 2001 From: Tim Zallmann Date: Fri, 25 Jan 2019 10:24:29 +0000 Subject: [PATCH 04/35] Merge branch 'security-11-7-55320-stored-xss-in-user-status' into 'security-11-7' [11.7] Use sanitized user status message in user popover See merge request gitlab/gitlabhq!2839 (cherry picked from commit e5d355eb04e165fa1b9ccce1253b909a785d4bed) 21e70bba Use sanitized user status message for user popover --- .../vue_shared/components/user_popover/user_popover.vue | 8 ++++---- .../security-11-7-55320-stored-xss-in-user-status.yml | 5 +++++ .../components/user_popover/user_popover_spec.js | 6 +++--- 3 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 changelogs/unreleased/security-11-7-55320-stored-xss-in-user-status.yml diff --git a/app/assets/javascripts/vue_shared/components/user_popover/user_popover.vue b/app/assets/javascripts/vue_shared/components/user_popover/user_popover.vue index d24fe1b547e919..f9773622001e20 100644 --- a/app/assets/javascripts/vue_shared/components/user_popover/user_popover.vue +++ b/app/assets/javascripts/vue_shared/components/user_popover/user_popover.vue @@ -28,10 +28,10 @@ export default { }, computed: { statusHtml() { - if (this.user.status.emoji && this.user.status.message) { - return `${glEmojiTag(this.user.status.emoji)} ${this.user.status.message}`; - } else if (this.user.status.message) { - return this.user.status.message; + if (this.user.status.emoji && this.user.status.message_html) { + return `${glEmojiTag(this.user.status.emoji)} ${this.user.status.message_html}`; + } else if (this.user.status.message_html) { + return this.user.status.message_html; } return ''; }, diff --git a/changelogs/unreleased/security-11-7-55320-stored-xss-in-user-status.yml b/changelogs/unreleased/security-11-7-55320-stored-xss-in-user-status.yml new file mode 100644 index 00000000000000..8ea9ae0ccdfcc2 --- /dev/null +++ b/changelogs/unreleased/security-11-7-55320-stored-xss-in-user-status.yml @@ -0,0 +1,5 @@ +--- +title: Use sanitized user status message for user popover +merge_request: +author: +type: security diff --git a/spec/javascripts/vue_shared/components/user_popover/user_popover_spec.js b/spec/javascripts/vue_shared/components/user_popover/user_popover_spec.js index de3e0c149de38e..e8b41e8eeff469 100644 --- a/spec/javascripts/vue_shared/components/user_popover/user_popover_spec.js +++ b/spec/javascripts/vue_shared/components/user_popover/user_popover_spec.js @@ -122,7 +122,7 @@ describe('User Popover Component', () => { describe('status data', () => { it('should show only message', () => { const testProps = Object.assign({}, DEFAULT_PROPS); - testProps.user.status = { message: 'Hello World' }; + testProps.user.status = { message_html: 'Hello World' }; vm = mountComponent(UserPopover, { ...DEFAULT_PROPS, @@ -134,12 +134,12 @@ describe('User Popover Component', () => { it('should show message and emoji', () => { const testProps = Object.assign({}, DEFAULT_PROPS); - testProps.user.status = { emoji: 'basketball_player', message: 'Hello World' }; + testProps.user.status = { emoji: 'basketball_player', message_html: 'Hello World' }; vm = mountComponent(UserPopover, { ...DEFAULT_PROPS, target: document.querySelector('.js-user-link'), - status: { emoji: 'basketball_player', message: 'Hello World' }, + status: { emoji: 'basketball_player', message_html: 'Hello World' }, }); expect(vm.$el.textContent).toContain('Hello World'); -- GitLab From c95d304d16f1a71e5a6ec4b66dd49bba345a727a Mon Sep 17 00:00:00 2001 From: Yorick Peterse Date: Mon, 4 Feb 2019 16:50:33 +0000 Subject: [PATCH 05/35] Merge branch 'security-makrdown-release-description-vulnerability-11-7' into 'security-11-7' [11.7] Markdown of release notes leaks confidential issue titles and MR titles to any users See merge request gitlab/gitlabhq!2871 (cherry picked from commit f7d842f0521f6d209e1b390c9fb733c8bfe7918f) f2e331c1 Fix Markdown of release notes --- lib/api/entities.rb | 4 +++- spec/requests/api/releases_spec.rb | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 829d6fb13d48ee..5da411b4ece017 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -1109,7 +1109,9 @@ class Source < Grape::Entity class Release < TagRelease expose :name - expose :description_html + expose :description_html do |entity| + MarkupHelper.markdown_field(entity, :description) + end expose :created_at expose :author, using: Entities::UserBasic, if: -> (release, _) { release.author.present? } expose :commit, using: Entities::Commit diff --git a/spec/requests/api/releases_spec.rb b/spec/requests/api/releases_spec.rb index 811e23fb854051..1f317971a66536 100644 --- a/spec/requests/api/releases_spec.rb +++ b/spec/requests/api/releases_spec.rb @@ -127,6 +127,31 @@ .to match_array(release.sources.map(&:url)) end + context "when release description contains confidential issue's link" do + let(:confidential_issue) do + create(:issue, + :confidential, + project: project, + title: 'A vulnerability') + end + + let!(:release) do + create(:release, + project: project, + tag: 'v0.1', + sha: commit.id, + author: maintainer, + description: "This is confidential #{confidential_issue.to_reference}") + end + + it "does not expose confidential issue's title" do + get api("/projects/#{project.id}/releases/v0.1", maintainer) + + expect(json_response['description_html']).to include(confidential_issue.to_reference) + expect(json_response['description_html']).not_to include('A vulnerability') + end + end + context 'when release has link asset' do let!(:link) do create(:release_link, -- GitLab From 45db7b863bc31107f5bab3df1a26ad423fd849d3 Mon Sep 17 00:00:00 2001 From: GitLab Release Tools Bot Date: Mon, 4 Feb 2019 20:10:20 +0000 Subject: [PATCH 06/35] Update CHANGELOG.md for 11.7.4 [ci skip] --- CHANGELOG.md | 7 +++++++ .../security-11-7-55320-stored-xss-in-user-status.yml | 5 ----- 2 files changed, 7 insertions(+), 5 deletions(-) delete mode 100644 changelogs/unreleased/security-11-7-55320-stored-xss-in-user-status.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b30361c29912c..794b52273deecf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. +## 11.7.4 (2019-02-04) + +### Security (1 change) + +- Use sanitized user status message for user popover. + + ## 11.7.3 (2019-01-30) - No changes. diff --git a/changelogs/unreleased/security-11-7-55320-stored-xss-in-user-status.yml b/changelogs/unreleased/security-11-7-55320-stored-xss-in-user-status.yml deleted file mode 100644 index 8ea9ae0ccdfcc2..00000000000000 --- a/changelogs/unreleased/security-11-7-55320-stored-xss-in-user-status.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use sanitized user status message for user popover -merge_request: -author: -type: security -- GitLab From 1b59453d73db6655b0a3c3d723dace9e8f8994df Mon Sep 17 00:00:00 2001 From: GitLab Release Tools Bot Date: Mon, 4 Feb 2019 20:11:25 +0000 Subject: [PATCH 07/35] Update VERSION to 11.7.4 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 7687edc13d6900..6e009551677503 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -11.7.3 +11.7.4 -- GitLab From 51cae07972715e19ba93656946cb612a451d22c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Trzci=C5=84ski?= Date: Sat, 19 Jan 2019 12:48:33 +0000 Subject: [PATCH 08/35] Merge branch '56213-remove-error_tracking-feature-flag' into 'master' Resolve "Remove `error_tracking` feature flag" Closes #56213 See merge request gitlab-org/gitlab-ce!24306 (cherry picked from commit d4d4ebadfb373518013382560b1f505eb6217f13) 77eff52a Remove `error_tracking` feature flag --- .../javascripts/error_tracking/index.js | 4 ---- .../projects/error_tracking_controller.rb | 10 -------- app/helpers/projects_helper.rb | 2 +- .../layouts/nav/sidebar/_project.html.haml | 2 +- .../operations/_error_tracking.html.haml | 2 +- .../error_tracking_controller_spec.rb | 12 ---------- .../settings/operations_controller_spec.rb | 24 ------------------- .../settings/operations_settings_spec.rb | 24 ++++--------------- .../operations/show.html.haml_spec.rb | 2 -- 9 files changed, 7 insertions(+), 75 deletions(-) diff --git a/app/assets/javascripts/error_tracking/index.js b/app/assets/javascripts/error_tracking/index.js index 808ae2c9a41088..3d609448efe4c9 100644 --- a/app/assets/javascripts/error_tracking/index.js +++ b/app/assets/javascripts/error_tracking/index.js @@ -4,10 +4,6 @@ import store from './store'; import ErrorTrackingList from './components/error_tracking_list.vue'; export default () => { - if (!gon.features.errorTracking) { - return; - } - // eslint-disable-next-line no-new new Vue({ el: '#js-error_tracking', diff --git a/app/controllers/projects/error_tracking_controller.rb b/app/controllers/projects/error_tracking_controller.rb index 4596b6c91f2af8..9e403e1d25b1ab 100644 --- a/app/controllers/projects/error_tracking_controller.rb +++ b/app/controllers/projects/error_tracking_controller.rb @@ -1,9 +1,7 @@ # frozen_string_literal: true class Projects::ErrorTrackingController < Projects::ApplicationController - before_action :check_feature_flag! before_action :authorize_read_sentry_issue! - before_action :push_feature_flag_to_frontend POLLING_INTERVAL = 10_000 @@ -43,12 +41,4 @@ def serialize_errors(errors) .new(project: project, user: current_user) .represent(errors) end - - def check_feature_flag! - render_404 unless Feature.enabled?(:error_tracking, project) - end - - def push_feature_flag_to_frontend - push_frontend_feature_flag(:error_tracking, current_user) - end end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index a1cac080bd2ff8..85248a16f501c7 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -285,7 +285,7 @@ def show_issue_count?(disabled: false, compact_mode: false) # overridden in EE def settings_operations_available? - Feature.enabled?(:error_tracking, @project) && can?(current_user, :read_environment, @project) + can?(current_user, :read_environment, @project) end private diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index 758a12ea9f3dda..a63c6ff21ab602 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -227,7 +227,7 @@ %span = _('Environments') - - if project_nav_tab?(:error_tracking) && Feature.enabled?(:error_tracking, @project) + - if project_nav_tab?(:error_tracking) = nav_link(controller: :error_tracking) do = link_to project_error_tracking_index_path(@project), title: _('Error Tracking'), class: 'shortcuts-tracking qa-operations-tracking-link' do %span diff --git a/app/views/projects/settings/operations/_error_tracking.html.haml b/app/views/projects/settings/operations/_error_tracking.html.haml index 871b60f05bab8b..4911e8d37706d6 100644 --- a/app/views/projects/settings/operations/_error_tracking.html.haml +++ b/app/views/projects/settings/operations/_error_tracking.html.haml @@ -1,4 +1,4 @@ -- return unless Feature.enabled?(:error_tracking, @project) && can?(current_user, :read_environment, @project) +- return unless can?(current_user, :read_environment, @project) - setting = error_tracking_setting diff --git a/spec/controllers/projects/error_tracking_controller_spec.rb b/spec/controllers/projects/error_tracking_controller_spec.rb index 729e71b87a671d..6464398cea1c85 100644 --- a/spec/controllers/projects/error_tracking_controller_spec.rb +++ b/spec/controllers/projects/error_tracking_controller_spec.rb @@ -20,18 +20,6 @@ expect(response).to render_template(:index) end - context 'with feature flag disabled' do - before do - stub_feature_flags(error_tracking: false) - end - - it 'returns 404' do - get :index, params: project_params - - expect(response).to have_gitlab_http_status(:not_found) - end - end - context 'with insufficient permissions' do before do project.add_guest(user) diff --git a/spec/controllers/projects/settings/operations_controller_spec.rb b/spec/controllers/projects/settings/operations_controller_spec.rb index 810f5bb64ba54d..d989ec224819f1 100644 --- a/spec/controllers/projects/settings/operations_controller_spec.rb +++ b/spec/controllers/projects/settings/operations_controller_spec.rb @@ -41,18 +41,6 @@ end end - context 'with feature flag disabled' do - before do - stub_feature_flags(error_tracking: false) - end - - it 'renders 404' do - get :show, params: project_params(project) - - expect(response).to have_gitlab_http_status(:not_found) - end - end - context 'with insufficient permissions' do before do project.add_reporter(user) @@ -121,18 +109,6 @@ end end - context 'with feature flag disabled' do - before do - stub_feature_flags(error_tracking: false) - end - - it 'renders 404' do - patch :update, params: project_params(project) - - expect(response).to have_gitlab_http_status(:not_found) - end - end - context 'with insufficient permissions' do before do project.add_reporter(user) diff --git a/spec/features/projects/settings/operations_settings_spec.rb b/spec/features/projects/settings/operations_settings_spec.rb index 1f2328a6dd81f5..06290c67c70729 100644 --- a/spec/features/projects/settings/operations_settings_spec.rb +++ b/spec/features/projects/settings/operations_settings_spec.rb @@ -8,32 +8,16 @@ let(:role) { :maintainer } before do - stub_feature_flags(error_tracking: true) sign_in(user) project.add_role(user, role) end describe 'Sidebar > Operations' do - context 'when sidebar feature flag enabled' do - it 'renders the settings link in the sidebar' do - visit project_path(project) - wait_for_requests + it 'renders the settings link in the sidebar' do + visit project_path(project) + wait_for_requests - expect(page).to have_selector('a[title="Operations"]', visible: false) - end - end - - context 'when sidebar feature flag disabled' do - before do - stub_feature_flags(error_tracking: false) - end - - it 'does not render the settings link in the sidebar' do - visit project_path(project) - wait_for_requests - - expect(page).not_to have_selector('a[title="Operations"]', visible: false) - end + expect(page).to have_selector('a[title="Operations"]', visible: false) end end end diff --git a/spec/views/projects/settings/operations/show.html.haml_spec.rb b/spec/views/projects/settings/operations/show.html.haml_spec.rb index 752fd82c5e893f..8e34521c7c86fa 100644 --- a/spec/views/projects/settings/operations/show.html.haml_spec.rb +++ b/spec/views/projects/settings/operations/show.html.haml_spec.rb @@ -13,8 +13,6 @@ describe 'Operations > Error Tracking' do before do - stub_feature_flags(error_tracking: true) - project.add_reporter(user) allow(view).to receive(:error_tracking_setting) -- GitLab From 46108ee138107f23456f71aa2af554a70665860d Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Mon, 21 Jan 2019 16:32:49 +0000 Subject: [PATCH 09/35] Merge branch 'docs/default-rbac' into 'master' Add note about default See merge request gitlab-org/gitlab-ce!24445 (cherry picked from commit 227ce776dcdaac35f6509d32428312ff0053de06) a103beed Add note about default --- doc/user/project/clusters/index.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/user/project/clusters/index.md b/doc/user/project/clusters/index.md index 6f334af4fb71ea..bb815695cb10ab 100644 --- a/doc/user/project/clusters/index.md +++ b/doc/user/project/clusters/index.md @@ -178,8 +178,11 @@ When creating a cluster in GitLab, you will be asked if you would like to create [Attribute-based access control (ABAC)](https://kubernetes.io/docs/admin/authorization/abac/) cluster, or a [Role-based access control (RBAC)](https://kubernetes.io/docs/admin/authorization/rbac/) one. -Whether ABAC or RBAC is enabled, GitLab will create the necessary -service accounts and privileges in order to install and run +NOTE: **Note:** +[RBAC](#role-based-access-control-rbac) is recommended and the GitLab default. + +Whether [ABAC](#attribute-based-access-control-abac) or [RBAC](#role-based-access-control-rbac) is enabled, +GitLab will create the necessary service accounts and privileges in order to install and run [GitLab managed applications](#installing-applications): - If GitLab is creating the cluster, a `gitlab` service account with -- GitLab From 54414d747871897921e53271bb333b2d34afbece Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Thu, 24 Jan 2019 11:53:41 +0000 Subject: [PATCH 10/35] Merge branch 'qa/testing/cng/189' into 'master' Improve the handling of tags and branches which contains a `/` when triggering CNG pipelines See merge request gitlab-org/gitlab-ce!24465 (cherry picked from commit 16ab0050f6f1544eb717da34975f12861df37c9c) 67dfd878 Use $CI_COMMIT_REF_SLUG in review-apps.sh f8a10191 Use $CI_COMMIT_REF_NAME for tags in trigger-build --- scripts/review_apps/review-apps.sh | 10 +++++----- scripts/trigger-build | 5 ++++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/scripts/review_apps/review-apps.sh b/scripts/review_apps/review-apps.sh index 118a7c7f638ff6..3e3c0fe2ea850d 100755 --- a/scripts/review_apps/review-apps.sh +++ b/scripts/review_apps/review-apps.sh @@ -149,19 +149,19 @@ HELM_CMD=$(cat << EOF --set redis.resources.requests.cpu=100m \ --set minio.resources.requests.cpu=100m \ --set gitlab.migrations.image.repository="$gitlab_migrations_image_repository" \ - --set gitlab.migrations.image.tag="$CI_COMMIT_REF_NAME" \ + --set gitlab.migrations.image.tag="$CI_COMMIT_REF_SLUG" \ --set gitlab.sidekiq.image.repository="$gitlab_sidekiq_image_repository" \ - --set gitlab.sidekiq.image.tag="$CI_COMMIT_REF_NAME" \ + --set gitlab.sidekiq.image.tag="$CI_COMMIT_REF_SLUG" \ --set gitlab.unicorn.image.repository="$gitlab_unicorn_image_repository" \ - --set gitlab.unicorn.image.tag="$CI_COMMIT_REF_NAME" \ + --set gitlab.unicorn.image.tag="$CI_COMMIT_REF_SLUG" \ --set gitlab.task-runner.image.repository="$gitlab_task_runner_image_repository" \ - --set gitlab.task-runner.image.tag="$CI_COMMIT_REF_NAME" \ + --set gitlab.task-runner.image.tag="$CI_COMMIT_REF_SLUG" \ --set gitlab.gitaly.image.repository="registry.gitlab.com/gitlab-org/build/cng-mirror/gitaly" \ --set gitlab.gitaly.image.tag="v$GITALY_VERSION" \ --set gitlab.gitlab-shell.image.repository="registry.gitlab.com/gitlab-org/build/cng-mirror/gitlab-shell" \ --set gitlab.gitlab-shell.image.tag="v$GITLAB_SHELL_VERSION" \ --set gitlab.unicorn.workhorse.image="$gitlab_workhorse_image_repository" \ - --set gitlab.unicorn.workhorse.tag="$CI_COMMIT_REF_NAME" \ + --set gitlab.unicorn.workhorse.tag="$CI_COMMIT_REF_SLUG" \ --set nginx-ingress.controller.config.ssl-ciphers="ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4" \ --namespace="$KUBE_NAMESPACE" \ --version="$CI_PIPELINE_ID-$CI_JOB_ID" \ diff --git a/scripts/trigger-build b/scripts/trigger-build index 4032ba853e6bb1..fbf35e7217c11c 100755 --- a/scripts/trigger-build +++ b/scripts/trigger-build @@ -68,7 +68,7 @@ module Trigger def base_variables { - 'GITLAB_REF_SLUG' => ENV['CI_COMMIT_REF_SLUG'], + 'GITLAB_REF_SLUG' => ENV['CI_COMMIT_TAG'] ? ENV['CI_COMMIT_REF_NAME'] : ENV['CI_COMMIT_REF_SLUG'], 'TRIGGERED_USER' => ENV['TRIGGERED_USER'] || ENV['GITLAB_USER_NAME'], 'TRIGGER_SOURCE' => ENV['CI_JOB_URL'], 'TOP_UPSTREAM_SOURCE_PROJECT' => ENV['CI_PROJECT_PATH'], @@ -137,7 +137,10 @@ module Trigger edition = Trigger.ee? ? 'EE' : 'CE' { + # Back-compatibility until https://gitlab.com/gitlab-org/build/CNG/merge_requests/189 is merged "GITLAB_#{edition}_VERSION" => ENV['CI_COMMIT_REF_NAME'], + "GITLAB_VERSION" => ENV['CI_COMMIT_REF_NAME'], + "GITLAB_ASSETS_TAG" => ENV['CI_COMMIT_REF_SLUG'], "#{edition}_PIPELINE" => 'true' } end -- GitLab From 481532c817cfa4bab59fda12827ef0914abf0e38 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Mon, 21 Jan 2019 16:04:22 +0000 Subject: [PATCH 11/35] Merge branch 'docs/private-project-go-package' into 'master' Add tip about Go packages Closes #56493 See merge request gitlab-org/gitlab-ce!24477 (cherry picked from commit 1914f3c40ca15d23fe3ae32b40e6ca1a0f868321) d0309928 Add tip about Go packages 22d09fb6 Refactor content based on review comments --- doc/user/project/index.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/doc/user/project/index.md b/doc/user/project/index.md index d46ae31580ac0c..81aad2d9312e5f 100644 --- a/doc/user/project/index.md +++ b/doc/user/project/index.md @@ -149,3 +149,17 @@ When [renaming a user](../profile/index.md#changing-your-username), work after a rename, making any transition a lot smoother. - The redirects will be available as long as the original path is not claimed by another group, user or project. + +## Use your project as a Go package + +Any project can be used as a Go package including private projects in subgroups. To use packages +hosted in private projects with the `go get` command, use a [`.netrc` file](https://ec.haxx.se/usingcurl-netrc.html) +and a personal access token in the password field. + +For example: + +```text +machine example.gitlab.com +login +password +``` -- GitLab From 612a42aac8314c8e45b63bdeacab7c346009e983 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Fri, 18 Jan 2019 16:34:33 +0000 Subject: [PATCH 12/35] Merge branch '56254-follow-up-from-change-update-instructions-for-node-from-6-to-8' into 'master' Correct minimum yarn version in 11.6 -> 11.7 upgrade doc Closes #56254 See merge request gitlab-org/gitlab-ce!24495 (cherry picked from commit 518604b45f402565c6910ebc3db040c669efc9bf) d9664bbd Correct yarn version in 11.6 -> 11.7 upgrade doc --- doc/update/11.6-to-11.7.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/update/11.6-to-11.7.md b/doc/update/11.6-to-11.7.md index f5f671c1946e0a..f9e3f565e0b0e9 100644 --- a/doc/update/11.6-to-11.7.md +++ b/doc/update/11.6-to-11.7.md @@ -66,7 +66,7 @@ from source at the nodejs.org website. -GitLab also requires the use of yarn `>= v1.2.0` to manage JavaScript +GitLab also requires the use of yarn `>= v1.10.0` to manage JavaScript dependencies. ```bash -- GitLab From 6e7c13a8070dc9cdf7699cdd9de0e1886ef33f3f Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Wed, 23 Jan 2019 23:49:42 +0000 Subject: [PATCH 13/35] Merge branch 'sh-remove-bitbucket-mirror-constant' into 'master' Fix import handling errors in Bitbucket Server importer See merge request gitlab-org/gitlab-ce!24499 (cherry picked from commit de3af288ce4e478acf8ad7a89690e7215a2bf6a0) 100b050b Fix import handling errors in Bitbucket Server importer --- .../sh-remove-bitbucket-mirror-constant.yml | 5 +++++ lib/gitlab/bitbucket_server_import/importer.rb | 4 ++-- .../bitbucket_server_import/importer_spec.rb | 17 +++++++++++++---- 3 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 changelogs/unreleased/sh-remove-bitbucket-mirror-constant.yml diff --git a/changelogs/unreleased/sh-remove-bitbucket-mirror-constant.yml b/changelogs/unreleased/sh-remove-bitbucket-mirror-constant.yml new file mode 100644 index 00000000000000..8c0b000220fb11 --- /dev/null +++ b/changelogs/unreleased/sh-remove-bitbucket-mirror-constant.yml @@ -0,0 +1,5 @@ +--- +title: Fix import handling errors in Bitbucket Server importer +merge_request: 24499 +author: +type: fixed diff --git a/lib/gitlab/bitbucket_server_import/importer.rb b/lib/gitlab/bitbucket_server_import/importer.rb index 28cfb46e2d4984..dbbedd5dcbeabd 100644 --- a/lib/gitlab/bitbucket_server_import/importer.rb +++ b/lib/gitlab/bitbucket_server_import/importer.rb @@ -132,7 +132,7 @@ def import_repository project.repository.fetch_as_mirror(project.import_url, refmap: self.class.refmap, remote_name: REMOTE_NAME) log_info(stage: 'import_repository', message: 'finished import') - rescue Gitlab::Shell::Error, Gitlab::Git::RepositoryMirroring::RemoteError => e + rescue Gitlab::Shell::Error => e log_error(stage: 'import_repository', message: 'failed import', error: e.message) # Expire cache to prevent scenarios such as: @@ -140,7 +140,7 @@ def import_repository # 2. Retried import, repo is broken or not imported but +exists?+ still returns true project.repository.expire_content_cache if project.repository_exists? - raise e.message + raise end # Bitbucket Server keeps tracks of references for open pull requests in diff --git a/spec/lib/gitlab/bitbucket_server_import/importer_spec.rb b/spec/lib/gitlab/bitbucket_server_import/importer_spec.rb index 70423823b8971c..1e90a2ef27f95b 100644 --- a/spec/lib/gitlab/bitbucket_server_import/importer_spec.rb +++ b/spec/lib/gitlab/bitbucket_server_import/importer_spec.rb @@ -21,12 +21,9 @@ end describe '#import_repository' do - before do + it 'adds a remote' do expect(subject).to receive(:import_pull_requests) expect(subject).to receive(:delete_temp_branches) - end - - it 'adds a remote' do expect(project.repository).to receive(:fetch_as_mirror) .with('http://bitbucket:test@my-bitbucket', refmap: [:heads, :tags, '+refs/pull-requests/*/to:refs/merge-requests/*/head'], @@ -34,6 +31,18 @@ subject.execute end + + it 'raises a Gitlab::Shell exception in the fetch' do + expect(project.repository).to receive(:fetch_as_mirror).and_raise(Gitlab::Shell::Error) + + expect { subject.execute }.to raise_error(Gitlab::Shell::Error) + end + + it 'raises an unhandled exception in the fetch' do + expect(project.repository).to receive(:fetch_as_mirror).and_raise(RuntimeError) + + expect { subject.execute }.to raise_error(RuntimeError) + end end describe '#import_pull_requests' do -- GitLab From c64e61fa574ccfbf2f3a4443b2e095da9c44c5a3 Mon Sep 17 00:00:00 2001 From: Tim Zallmann Date: Mon, 21 Jan 2019 18:01:08 +0000 Subject: [PATCH 14/35] Merge branch 'sh-fix-issue-56225' into 'master' Fix excessive blank space in project activity view Closes #56225 See merge request gitlab-org/gitlab-ce!24510 (cherry picked from commit dc65a77992f7e965fa4cd843a21eaa59b7a7e6c1) 7ea53e38 Fix excessive blank space in project activity view --- app/views/projects/_activity.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/projects/_activity.html.haml b/app/views/projects/_activity.html.haml index 31f1cf560e2235..12da62f4c64ddd 100644 --- a/app/views/projects/_activity.html.haml +++ b/app/views/projects/_activity.html.haml @@ -1,5 +1,5 @@ %div{ class: container_class } - .nav-block.d-none.d-sm-block.activities + .nav-block.d-none.d-sm-flex.activities = render 'shared/event_filter' .controls = link_to project_path(@project, rss_url_options), title: s_("ProjectActivityRSS|Subscribe"), class: 'btn d-none d-sm-inline-block has-tooltip' do -- GitLab From 755f52bade247519960cf0d77c456e0d95598ee9 Mon Sep 17 00:00:00 2001 From: Marcia Ramos Date: Mon, 21 Jan 2019 16:08:01 +0000 Subject: [PATCH 15/35] Merge branch 'update-errortracking-118-docs' into 'master' Update release error tracking is available in to 11.8 See merge request gitlab-org/gitlab-ce!24528 (cherry picked from commit c2faab8d873e23577530b7dcdec6842dcbe1631e) 27b3838b Update release error tracking is available in to 11.8 --- doc/user/project/operations/error_tracking.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/user/project/operations/error_tracking.md b/doc/user/project/operations/error_tracking.md index 2b5abc7233f6f8..c79fbad57658d9 100644 --- a/doc/user/project/operations/error_tracking.md +++ b/doc/user/project/operations/error_tracking.md @@ -1,6 +1,6 @@ # Error Tracking -> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/169) in GitLab 11.7. +> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/169) in GitLab 11.8. Error tracking allows developers to easily discover and view the errors that their application may be generating. By surfacing error information where the code is being developed, efficiency and awareness can be increased. -- GitLab From cf47f170724d31017ed1a492ebea1cc680767dd4 Mon Sep 17 00:00:00 2001 From: Mark Lapierre Date: Wed, 23 Jan 2019 17:49:14 +0000 Subject: [PATCH 16/35] Merge branch 'qa-staging-27' into 'master' [QA] Use public_email instead of email since it's available Closes gitlab-org/quality/staging#27 See merge request gitlab-org/gitlab-ce!24533 (cherry picked from commit 19add9218c88dd9babf47a4d8b8569fca00b86fa) cbc3d1f9 [QA] Use public_email instead of email since it's available --- qa/qa/resource/user.rb | 14 ++- qa/qa/runtime/user.rb | 4 + ...user_views_raw_diff_patch_requests_spec.rb | 2 +- qa/spec/resource/user_spec.rb | 118 ++++++++++++++++++ 4 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 qa/spec/resource/user_spec.rb diff --git a/qa/qa/resource/user.rb b/qa/qa/resource/user.rb index b9580d81171c1b..6c5e91b6488cf5 100644 --- a/qa/qa/resource/user.rb +++ b/qa/qa/resource/user.rb @@ -17,11 +17,11 @@ def initialize end def username - @username ||= "qa-user-#{unique_id}" + @username || "qa-user-#{unique_id}" end def password - @password ||= 'password' + @password || 'password' end def name @@ -29,7 +29,15 @@ def name end def email - @email ||= api_resource&.dig(:email) || "#{username}@example.com" + @email ||= "#{username}@example.com" + end + + def public_email + @public_email ||= begin + api_public_email = api_resource&.dig(:public_email) + + api_public_email && api_public_email != '' ? api_public_email : Runtime::User.default_email + end end def credentials_given? diff --git a/qa/qa/runtime/user.rb b/qa/qa/runtime/user.rb index 5eb7a210fce4d7..e8bcb8a9f504be 100644 --- a/qa/qa/runtime/user.rb +++ b/qa/qa/runtime/user.rb @@ -7,6 +7,10 @@ def default_username 'root' end + def default_email + 'admin@example.com' + end + def default_password '5iveL!fe' end diff --git a/qa/qa/specs/features/browser_ui/3_create/repository/user_views_raw_diff_patch_requests_spec.rb b/qa/qa/specs/features/browser_ui/3_create/repository/user_views_raw_diff_patch_requests_spec.rb index 3a5d89e6b837a5..621cca0f9a5341 100644 --- a/qa/qa/specs/features/browser_ui/3_create/repository/user_views_raw_diff_patch_requests_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/repository/user_views_raw_diff_patch_requests_spec.rb @@ -47,7 +47,7 @@ def raw_content Page::Project::Commit::Show.perform(&:select_email_patches) - expect(page).to have_content("From: #{user.name} <#{user.email}>") + expect(page).to have_content("From: #{user.name} <#{user.public_email}>") expect(page).to have_content('Subject: [PATCH] Add second file') expect(page).to have_content('diff --git a/second b/second') end diff --git a/qa/spec/resource/user_spec.rb b/qa/spec/resource/user_spec.rb new file mode 100644 index 00000000000000..d612dfc530e60e --- /dev/null +++ b/qa/spec/resource/user_spec.rb @@ -0,0 +1,118 @@ +# frozen_string_literal: true + +describe QA::Resource::User do + let(:api_resource) do + { + name: "GitLab QA", + username: "gitlab-qa", + web_url: "https://staging.gitlab.com/gitlab-qa", + public_email: "1614863-gitlab-qa@users.noreply.staging.gitlab.com" + } + end + + describe '#username' do + it 'generates a default username' do + expect(subject.username).to match(/qa-user-\w+/) + end + + it 'is possible to set the username' do + subject.username = 'johndoe' + + expect(subject.username).to eq('johndoe') + end + end + + describe '#password' do + it 'generates a default password' do + expect(subject.password).to eq('password') + end + + it 'is possible to set the password' do + subject.password = 'secret' + + expect(subject.password).to eq('secret') + end + end + + describe '#name' do + it 'defaults to the username' do + expect(subject.name).to eq(subject.username) + end + + it 'retrieves the name from the api_resource if present' do + subject.__send__(:api_resource=, api_resource) + + expect(subject.name).to eq(api_resource[:name]) + end + + it 'is possible to set the name' do + subject.name = 'John Doe' + + expect(subject.name).to eq('John Doe') + end + end + + describe '#email' do + it 'defaults to the @example.com' do + expect(subject.email).to eq("#{subject.username}@example.com") + end + + it 'is possible to set the email' do + subject.email = 'johndoe@example.org' + + expect(subject.email).to eq('johndoe@example.org') + end + end + + describe '#public_email' do + it 'defaults to QA::Runtime::User.default_email' do + expect(subject.public_email).to eq(QA::Runtime::User.default_email) + end + + it 'retrieves the public_email from the api_resource if present' do + subject.__send__(:api_resource=, api_resource) + + expect(subject.public_email).to eq(api_resource[:public_email]) + end + + it 'defaults to QA::Runtime::User.default_email if the public_email from the api_resource is blank' do + subject.__send__(:api_resource=, api_resource.merge(public_email: '')) + + expect(subject.public_email).to eq(QA::Runtime::User.default_email) + end + end + + describe '#credentials_given?' do + it 'returns false when username and email have not been overridden' do + expect(subject).not_to be_credentials_given + end + + it 'returns false even after username and email have been called' do + # Call #username and #password to ensure this doesn't set their respective + # instance variable. + subject.username + subject.password + + expect(subject).not_to be_credentials_given + end + + it 'returns false if only the username has been overridden' do + subject.username = 'johndoe' + + expect(subject).not_to be_credentials_given + end + + it 'returns false if only the password has been overridden' do + subject.password = 'secret' + + expect(subject).not_to be_credentials_given + end + + it 'returns true if both the username and password have been overridden' do + subject.username = 'johndoe' + subject.password = 'secret' + + expect(subject).to be_credentials_given + end + end +end -- GitLab From 10a4b4f2acd7095a43807315d140422e83ef80fe Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 25 Jan 2019 18:35:05 +0000 Subject: [PATCH 17/35] Merge branch 'osw-adjusts-suggestions-unable-to-be-applied' into 'master' Adjusts suggestions unable to be applied Closes #56690 See merge request gitlab-org/gitlab-ce!24603 (cherry picked from commit 7c7916baee74e2532e77a94b84e8775a6a8dc2e5) 1b93b3b6 Adjusts suggestions unable to be applied --- app/assets/javascripts/notes/stores/actions.js | 11 ++++++----- app/services/suggestions/apply_service.rb | 15 ++++++++------- ...w-adjusts-suggestions-unable-to-be-applied.yml | 5 +++++ spec/services/suggestions/apply_service_spec.rb | 7 +++---- 4 files changed, 22 insertions(+), 16 deletions(-) create mode 100644 changelogs/unreleased/osw-adjusts-suggestions-unable-to-be-applied.yml diff --git a/app/assets/javascripts/notes/stores/actions.js b/app/assets/javascripts/notes/stores/actions.js index 65f85314fa083d..2105a62cecb085 100644 --- a/app/assets/javascripts/notes/stores/actions.js +++ b/app/assets/javascripts/notes/stores/actions.js @@ -415,12 +415,13 @@ export const submitSuggestion = ( commit(types.APPLY_SUGGESTION, { discussionId, noteId, suggestionId }); callback(); }) - .catch(() => { - Flash( - __('Something went wrong while applying the suggestion. Please try again.'), - 'alert', - flashContainer, + .catch(err => { + const defaultMessage = __( + 'Something went wrong while applying the suggestion. Please try again.', ); + const flashMessage = err.response.data ? `${err.response.data.message}.` : defaultMessage; + + Flash(__(flashMessage), 'alert', flashContainer); callback(); }); }; diff --git a/app/services/suggestions/apply_service.rb b/app/services/suggestions/apply_service.rb index cc47b46b527a56..1f720fc835f153 100644 --- a/app/services/suggestions/apply_service.rb +++ b/app/services/suggestions/apply_service.rb @@ -11,7 +11,7 @@ def execute(suggestion) return error('Suggestion is not appliable') end - unless latest_diff_refs?(suggestion) + unless latest_source_head?(suggestion) return error('The file has been changed') end @@ -29,12 +29,13 @@ def execute(suggestion) private - # Checks whether the latest diff refs for the branch matches with - # the position refs we're using to update the file content. Since - # the persisted refs are updated async (for MergeRequest), - # it's more consistent to fetch this data directly from the repository. - def latest_diff_refs?(suggestion) - suggestion.position.diff_refs == suggestion.noteable.repository_diff_refs + # Checks whether the latest source branch HEAD matches with + # the position HEAD we're using to update the file content. Since + # the persisted HEAD is updated async (for MergeRequest), + # it's more consistent to fetch this data directly from the + # repository. + def latest_source_head?(suggestion) + suggestion.position.head_sha == suggestion.noteable.source_branch_sha end def file_update_params(suggestion) diff --git a/changelogs/unreleased/osw-adjusts-suggestions-unable-to-be-applied.yml b/changelogs/unreleased/osw-adjusts-suggestions-unable-to-be-applied.yml new file mode 100644 index 00000000000000..3ba62b924134ae --- /dev/null +++ b/changelogs/unreleased/osw-adjusts-suggestions-unable-to-be-applied.yml @@ -0,0 +1,5 @@ +--- +title: Adjusts suggestions unable to be applied +merge_request: 24603 +author: +type: fixed diff --git a/spec/services/suggestions/apply_service_spec.rb b/spec/services/suggestions/apply_service_spec.rb index e5ca1c155ed890..8e77d582eb4a87 100644 --- a/spec/services/suggestions/apply_service_spec.rb +++ b/spec/services/suggestions/apply_service_spec.rb @@ -134,12 +134,11 @@ def popen(cmd, path=nil) end end - context 'when diff ref from position is different from repo diff refs' do + context 'when HEAD from position is different from source branch HEAD on repo' do it 'returns error message' do - outdated_refs = Gitlab::Diff::DiffRefs.new(base_sha: 'foo', start_sha: 'bar', head_sha: 'outdated') - allow(suggestion).to receive(:appliable?) { true } - allow(suggestion.position).to receive(:diff_refs) { outdated_refs } + allow(suggestion.position).to receive(:head_sha) { 'old-sha' } + allow(suggestion.noteable).to receive(:source_branch_sha) { 'new-sha' } result = subject.execute(suggestion) -- GitLab From 5b561b50dac27d17a0a85d31670b3ee7f2442714 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Wed, 23 Jan 2019 20:42:56 +0000 Subject: [PATCH 18/35] Merge branch 'sh-fix-issue-9357' into 'master' Fix 500 errors with legacy appearance logos Closes gitlab-ee#9357 See merge request gitlab-org/gitlab-ce!24615 (cherry picked from commit 8d90f81731ccc10f3239fecfd232f84bdae23665) 19f9d998 Fix 500 errors with legacy appearance logos --- app/models/appearance.rb | 6 +++++- changelogs/unreleased/sh-fix-issue-9357.yml | 5 +++++ spec/models/appearance_spec.rb | 7 +++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/sh-fix-issue-9357.yml diff --git a/app/models/appearance.rb b/app/models/appearance.rb index e114c435b67b6f..ff1ecfda684422 100644 --- a/app/models/appearance.rb +++ b/app/models/appearance.rb @@ -44,7 +44,11 @@ def favicon_path private def logo_system_path(logo, mount_type) - return unless logo&.upload + # Legacy attachments may not have have an associated Upload record, + # so fallback to the AttachmentUploader#url if this is the + # case. AttachmentUploader#path doesn't work because for a local + # file, this is an absolute path to the file. + return logo&.url unless logo&.upload # If we're using a CDN, we need to use the full URL asset_host = ActionController::Base.asset_host diff --git a/changelogs/unreleased/sh-fix-issue-9357.yml b/changelogs/unreleased/sh-fix-issue-9357.yml new file mode 100644 index 00000000000000..756cd6047b8f0c --- /dev/null +++ b/changelogs/unreleased/sh-fix-issue-9357.yml @@ -0,0 +1,5 @@ +--- +title: Fix 500 errors with legacy appearance logos +merge_request: 24615 +author: +type: fixed diff --git a/spec/models/appearance_spec.rb b/spec/models/appearance_spec.rb index ec2e7d672f050a..cc76a2019eca27 100644 --- a/spec/models/appearance_spec.rb +++ b/spec/models/appearance_spec.rb @@ -36,6 +36,13 @@ expect(subject.send("#{logo_type}_path")).to be_nil end + it 'returns the path when the upload has been orphaned' do + appearance.send(logo_type).upload.destroy + appearance.reload + + expect(appearance.send("#{logo_type}_path")).to eq(expected_path) + end + it 'returns a local path using the system route' do expect(appearance.send("#{logo_type}_path")).to eq(expected_path) end -- GitLab From 4f57b0c6bfb6b6c635fbc131b061a18f77e04baf Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Wed, 30 Jan 2019 15:46:44 +0000 Subject: [PATCH 19/35] Merge branch 'support-CNG-mirror-2-ce' into 'master' Pass $CI_COMMIT_TAG as GITLAB_TAG to the CNG triggered pipelines See merge request gitlab-org/gitlab-ce!24639 (cherry picked from commit cc4b5656d47513da1c82b4d6ffb6a4920a826aa7) 79eec047 Pass $CI_COMMIT_TAG as GITLAB_TAG to the CNG triggered pipelines --- scripts/trigger-build | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/trigger-build b/scripts/trigger-build index fbf35e7217c11c..9dbafffddfc305 100755 --- a/scripts/trigger-build +++ b/scripts/trigger-build @@ -140,6 +140,7 @@ module Trigger # Back-compatibility until https://gitlab.com/gitlab-org/build/CNG/merge_requests/189 is merged "GITLAB_#{edition}_VERSION" => ENV['CI_COMMIT_REF_NAME'], "GITLAB_VERSION" => ENV['CI_COMMIT_REF_NAME'], + "GITLAB_TAG" => ENV['CI_COMMIT_TAG'], "GITLAB_ASSETS_TAG" => ENV['CI_COMMIT_REF_SLUG'], "#{edition}_PIPELINE" => 'true' } -- GitLab From c51b7f8ee64ddec37fe2ec2a3cba463dd7356087 Mon Sep 17 00:00:00 2001 From: Filipa Lacerda Date: Fri, 25 Jan 2019 09:39:06 +0000 Subject: [PATCH 20/35] Merge branch '56424-fix-gl-form-init-tag-editing' into 'master' Init GLForm instance on form while editing tags Closes #56424 See merge request gitlab-org/gitlab-ce!24645 (cherry picked from commit 15a7f3c6af5286dee5188af045d3e80f95323472) 7506275e Init GLForm instance on form while editing tags b0746e79 Add changelog entry --- .../pages/projects/tags/releases/index.js | 8 ++ app/views/projects/tags/_tag.html.haml | 2 +- app/views/projects/tags/show.html.haml | 2 +- .../56424-fix-gl-form-init-tag-editing.yml | 5 ++ .../projects/tags/user_edits_tags_spec.rb | 82 +++++++++++++++++++ 5 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 app/assets/javascripts/pages/projects/tags/releases/index.js create mode 100644 changelogs/unreleased/56424-fix-gl-form-init-tag-editing.yml create mode 100644 spec/features/projects/tags/user_edits_tags_spec.rb diff --git a/app/assets/javascripts/pages/projects/tags/releases/index.js b/app/assets/javascripts/pages/projects/tags/releases/index.js new file mode 100644 index 00000000000000..d6afc71fb031d7 --- /dev/null +++ b/app/assets/javascripts/pages/projects/tags/releases/index.js @@ -0,0 +1,8 @@ +import $ from 'jquery'; +import ZenMode from '~/zen_mode'; +import GLForm from '~/gl_form'; + +document.addEventListener('DOMContentLoaded', () => { + new ZenMode(); // eslint-disable-line no-new + new GLForm($('.release-form')); // eslint-disable-line no-new +}); diff --git a/app/views/projects/tags/_tag.html.haml b/app/views/projects/tags/_tag.html.haml index f55202c2c5f05a..cc203cfad86fb2 100644 --- a/app/views/projects/tags/_tag.html.haml +++ b/app/views/projects/tags/_tag.html.haml @@ -28,7 +28,7 @@ = render 'projects/buttons/download', project: @project, ref: tag.name, pipeline: @tags_pipelines[tag.name] - if can?(current_user, :push_code, @project) - = link_to edit_project_tag_release_path(@project, tag.name), class: 'btn has-tooltip', title: s_('TagsPage|Edit release notes'), data: { container: "body" } do + = link_to edit_project_tag_release_path(@project, tag.name), class: 'btn btn-edit has-tooltip', title: s_('TagsPage|Edit release notes'), data: { container: "body" } do = icon("pencil") - if can?(current_user, :admin_project, @project) diff --git a/app/views/projects/tags/show.html.haml b/app/views/projects/tags/show.html.haml index 15a960f81b8777..feeaf799f513c3 100644 --- a/app/views/projects/tags/show.html.haml +++ b/app/views/projects/tags/show.html.haml @@ -20,7 +20,7 @@ .nav-controls.controls-flex - if can?(current_user, :push_code, @project) - = link_to edit_project_tag_release_path(@project, @tag.name), class: 'btn controls-item has-tooltip', title: s_('TagsPage|Edit release notes') do + = link_to edit_project_tag_release_path(@project, @tag.name), class: 'btn btn-edit controls-item has-tooltip', title: s_('TagsPage|Edit release notes') do = icon("pencil") = link_to project_tree_path(@project, @tag.name), class: 'btn controls-item has-tooltip', title: s_('TagsPage|Browse files') do = icon('files-o') diff --git a/changelogs/unreleased/56424-fix-gl-form-init-tag-editing.yml b/changelogs/unreleased/56424-fix-gl-form-init-tag-editing.yml new file mode 100644 index 00000000000000..b19b4d650fdbf0 --- /dev/null +++ b/changelogs/unreleased/56424-fix-gl-form-init-tag-editing.yml @@ -0,0 +1,5 @@ +--- +title: Fix form functionality for edit tag page +merge_request: 24645 +author: +type: fixed diff --git a/spec/features/projects/tags/user_edits_tags_spec.rb b/spec/features/projects/tags/user_edits_tags_spec.rb new file mode 100644 index 00000000000000..ebb2844d17facf --- /dev/null +++ b/spec/features/projects/tags/user_edits_tags_spec.rb @@ -0,0 +1,82 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe 'Project > Tags', :js do + include DropzoneHelper + + let(:user) { create(:user) } + let(:role) { :developer } + let(:project) { create(:project, :repository) } + + before do + sign_in(user) + project.add_role(user, role) + end + + describe 'when opening project tags' do + before do + visit project_tags_path(project) + end + + context 'page with tags list' do + it 'shows tag name' do + page.within first('.tags > .content-list > li') do + expect(page.find('.row-main-content')).to have_content 'v1.1.0 Version 1.1.0' + end + end + + it 'shows tag edit button' do + page.within first('.tags > .content-list > li') do + edit_btn = page.find('.row-fixed-content.controls a.btn-edit') + + expect(edit_btn['href']).to have_content '/tags/v1.1.0/release/edit' + end + end + end + + context 'edit tag release notes' do + before do + find('.tags > .content-list > li:first-child .row-fixed-content.controls a.btn-edit').click + end + + it 'shows tag name header' do + page.within('.content') do + expect(page.find('.sub-header-block')).to have_content 'Release notes for tag v1.1.0' + end + end + + it 'shows release notes form' do + page.within('.content') do + expect(page).to have_selector('form.release-form') + end + end + + it 'toolbar buttons on release notes form are functional' do + page.within('.content form.release-form') do + note_textarea = page.find('.js-gfm-input') + + # Click on Bold button + page.find('.md-header-toolbar button.toolbar-btn:first-child').click + + expect(note_textarea.value).to eq('****') + end + end + + it 'release notes form shows "Attach a file" button', :js do + page.within('.content form.release-form') do + expect(page).to have_button('Attach a file') + expect(page).not_to have_selector('.uploading-progress-container', visible: true) + end + end + + it 'shows "Attaching a file" message on uploading 1 file', :js do + slow_requests do + dropzone_file([Rails.root.join('spec', 'fixtures', 'dk.png')], 0, false) + + expect(page).to have_selector('.attaching-file-message', visible: true, text: 'Attaching a file -') + end + end + end + end +end -- GitLab From 666d5b7f2196b3b36f3a802d4aaa75b2a0110d61 Mon Sep 17 00:00:00 2001 From: Mark Lapierre Date: Tue, 29 Jan 2019 14:42:59 +0000 Subject: [PATCH 21/35] Merge branch 'qa-ml-quarantine-diff-patch-spec' into 'master' Quarantine diff patch spec See merge request gitlab-org/gitlab-ce!24769 (cherry picked from commit 244f4f5f523cdc92732b2aa3cbff2fdc3ed1605b) 58ec656b Quarantine failing test --- .../repository/user_views_raw_diff_patch_requests_spec.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/qa/qa/specs/features/browser_ui/3_create/repository/user_views_raw_diff_patch_requests_spec.rb b/qa/qa/specs/features/browser_ui/3_create/repository/user_views_raw_diff_patch_requests_spec.rb index 621cca0f9a5341..b862a7bd1edf96 100644 --- a/qa/qa/specs/features/browser_ui/3_create/repository/user_views_raw_diff_patch_requests_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/repository/user_views_raw_diff_patch_requests_spec.rb @@ -2,7 +2,10 @@ module QA context 'Create' do - describe 'Commit data' do + # failure reported: https://gitlab.com/gitlab-org/quality/nightly/issues/42 + # also failing in staging until the fix is picked into the next release: + # https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/24533 + describe 'Commit data', :quarantine do before(:context) do Runtime::Browser.visit(:gitlab, Page::Main::Login) Page::Main::Login.perform(&:sign_in_using_credentials) -- GitLab From 2771d97bdc33ff1d50a61327107422b6c0513fdc Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Fri, 1 Feb 2019 16:59:08 +0000 Subject: [PATCH 22/35] Merge branch 'ee-1979-blobs-at' into 'master' Fix migration when project repository is missing See merge request gitlab-org/gitlab-ce!24859 (cherry picked from commit c5d431240e09e20c49dd27b9c65a4865f3f79bbd) db35a3ae Fix migration when project repository is missing --- app/models/repository.rb | 2 ++ spec/models/repository_spec.rb | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/app/models/repository.rb b/app/models/repository.rb index b47238b52f16ff..e6ab3b484a2ade 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -525,6 +525,8 @@ def blob_at(sha, path) # items is an Array like: [[oid, path], [oid1, path1]] def blobs_at(items) + return [] unless exists? + raw_repository.batch_blobs(items).map { |blob| Blob.decorate(blob, project) } end diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index ac5874fd0f7a44..4978c43c9b5ccc 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -1237,6 +1237,27 @@ def expect_to_raise_storage_error end end + describe '#blobs_at' do + let(:empty_repository) { create(:project_empty_repo).repository } + + it 'returns empty array for an empty repository' do + # rubocop:disable Style/WordArray + expect(empty_repository.blobs_at(['master', 'foobar'])).to eq([]) + # rubocop:enable Style/WordArray + end + + it 'returns blob array for a non-empty repository' do + repository.create_file(User.last, 'foobar', 'CONTENT', message: 'message', branch_name: 'master') + + # rubocop:disable Style/WordArray + blobs = repository.blobs_at([['master', 'foobar']]) + # rubocop:enable Style/WordArray + + expect(blobs.first.name).to eq('foobar') + expect(blobs.size).to eq(1) + end + end + describe '#root_ref' do it 'returns a branch name' do expect(repository.root_ref).to be_an_instance_of(String) -- GitLab From f8671e4c1dc076af86ecf0c323b166c8390f19b2 Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Mon, 4 Feb 2019 13:44:28 +0000 Subject: [PATCH 23/35] Merge branch 'sh-fix-oauth2-callback-caps' into 'master' Downcase aliased OAuth2 callback providers Closes #57156 See merge request gitlab-org/gitlab-ce!24877 (cherry picked from commit 5f964567650a164c11fe250d69ab0eeaa4e35e13) 1f188236 Downcase aliased OAuth2 callback providers --- changelogs/unreleased/sh-fix-oauth2-callback-caps.yml | 5 +++++ config/routes/import.rb | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/sh-fix-oauth2-callback-caps.yml diff --git a/changelogs/unreleased/sh-fix-oauth2-callback-caps.yml b/changelogs/unreleased/sh-fix-oauth2-callback-caps.yml new file mode 100644 index 00000000000000..8d17900cb79934 --- /dev/null +++ b/changelogs/unreleased/sh-fix-oauth2-callback-caps.yml @@ -0,0 +1,5 @@ +--- +title: Downcase aliased OAuth2 callback providers +merge_request: 24877 +author: +type: fixed diff --git a/config/routes/import.rb b/config/routes/import.rb index 69df82611f29c1..da5c31d0062492 100644 --- a/config/routes/import.rb +++ b/config/routes/import.rb @@ -1,7 +1,7 @@ # Alias import callbacks under the /users/auth endpoint so that # the OAuth2 callback URL can be restricted under http://example.com/users/auth # instead of http://example.com. -Devise.omniauth_providers.each do |provider| +Devise.omniauth_providers.map(&:downcase).each do |provider| next if provider == 'ldapmain' get "/users/auth/-/import/#{provider}/callback", to: "import/#{provider}#callback", as: "users_import_#{provider}_callback" -- GitLab From e14b27bb9438d1db689c7098c343eab5f3d579dd Mon Sep 17 00:00:00 2001 From: Nick Thomas Date: Mon, 4 Feb 2019 12:44:19 +0000 Subject: [PATCH 24/35] Merge branch 'sh-fix-detect-host-keys' into 'master' Fix Detect Host Keys not working Closes #56855 See merge request gitlab-org/gitlab-ce!24884 (cherry picked from commit 2b0f4df0217b4a4aee53f964610d66ceedb68dca) 4c1231ac Fix SSH Detect Host Keys not working --- app/models/ssh_host_key.rb | 2 +- changelogs/unreleased/sh-fix-detect-host-keys.yml | 5 +++++ spec/models/ssh_host_key_spec.rb | 6 ++++++ 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/sh-fix-detect-host-keys.yml diff --git a/app/models/ssh_host_key.rb b/app/models/ssh_host_key.rb index 99a0c54a26a387..f318d32c71cb31 100644 --- a/app/models/ssh_host_key.rb +++ b/app/models/ssh_host_key.rb @@ -54,7 +54,7 @@ def initialize(project:, url:, compare_host_keys: nil) # Needed for reactive caching def self.primary_key - 'id' + :id end def id diff --git a/changelogs/unreleased/sh-fix-detect-host-keys.yml b/changelogs/unreleased/sh-fix-detect-host-keys.yml new file mode 100644 index 00000000000000..993d7c35b18259 --- /dev/null +++ b/changelogs/unreleased/sh-fix-detect-host-keys.yml @@ -0,0 +1,5 @@ +--- +title: Fix Detect Host Keys not working +merge_request: 24884 +author: +type: fixed diff --git a/spec/models/ssh_host_key_spec.rb b/spec/models/ssh_host_key_spec.rb index 75db43b3d56e67..23a94334172cb4 100644 --- a/spec/models/ssh_host_key_spec.rb +++ b/spec/models/ssh_host_key_spec.rb @@ -50,6 +50,12 @@ def stub_ssh_keyscan(args, status: true, stdout: "", stderr: "") subject(:ssh_host_key) { described_class.new(project: project, url: 'ssh://example.com:2222', compare_host_keys: compare_host_keys) } + describe '.primary_key' do + it 'returns a symbol' do + expect(described_class.primary_key).to eq(:id) + end + end + describe '#fingerprints', :use_clean_rails_memory_store_caching do it 'returns an array of indexed fingerprints when the cache is filled' do stub_reactive_cache(ssh_host_key, known_hosts: known_hosts) -- GitLab From 694124db7b59b2e7704652a8922424b639c2b7c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Coutable?= Date: Mon, 4 Feb 2019 17:35:53 +0000 Subject: [PATCH 25/35] Merge branch 'fj-regression-external-wiki-url' into 'master' Changed external wiki query method to prevent attribute caching Closes #57228 See merge request gitlab-org/gitlab-ce!24907 (cherry picked from commit 7ffbfeb1f79b18b6a3a42e73d12b9680e3e3eb48) 247bd122 Changed external wiki query method to prevent attribute caching --- app/helpers/projects_helper.rb | 2 +- .../unreleased/fj-regression-external-wiki-url.yml | 5 +++++ spec/helpers/projects_helper_spec.rb | 11 +++-------- 3 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 changelogs/unreleased/fj-regression-external-wiki-url.yml diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 85248a16f501c7..4408cb5145a8fa 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -328,7 +328,7 @@ def get_project_nav_tabs(project, current_user) def external_nav_tabs(project) [].tap do |tabs| tabs << :external_issue_tracker if project.external_issue_tracker - tabs << :external_wiki if project.has_external_wiki? + tabs << :external_wiki if project.external_wiki end end diff --git a/changelogs/unreleased/fj-regression-external-wiki-url.yml b/changelogs/unreleased/fj-regression-external-wiki-url.yml new file mode 100644 index 00000000000000..d4f21dab9823b9 --- /dev/null +++ b/changelogs/unreleased/fj-regression-external-wiki-url.yml @@ -0,0 +1,5 @@ +--- +title: Changed external wiki query method to prevent attribute caching +merge_request: 24907 +author: +type: fixed diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb index 10f61731206640..990750f0b2f779 100644 --- a/spec/helpers/projects_helper_spec.rb +++ b/spec/helpers/projects_helper_spec.rb @@ -372,21 +372,16 @@ end context 'when project has external wiki' do - before do - allow(project).to receive(:has_external_wiki?).and_return(true) - end - it 'includes external wiki tab' do + project.create_external_wiki_service(active: true, properties: { 'external_wiki_url' => 'https://gitlab.com' }) + is_expected.to include(:external_wiki) end end context 'when project does not have external wiki' do - before do - allow(project).to receive(:has_external_wiki?).and_return(false) - end - it 'does not include external wiki tab' do + expect(project.external_wiki).to be_nil is_expected.not_to include(:external_wiki) end end -- GitLab From f39473c4486fd00a8e1428e7807b91f28188eb06 Mon Sep 17 00:00:00 2001 From: Clement Ho Date: Fri, 18 Jan 2019 22:51:40 +0000 Subject: [PATCH 26/35] Merge branch 'winh-issue-board-switcher-icons-safari' into 'master' Fix vertical alignment of search box icons in issue board switcher for Safari Closes #9240 See merge request gitlab-org/gitlab-ee!9190 (cherry picked from commit 6237598169d0c798c5423e6f194897a83a3470d4) d053abaf Explicitly set position of search box icons in issue board switcher --- ee/app/assets/stylesheets/pages/boards.scss | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ee/app/assets/stylesheets/pages/boards.scss b/ee/app/assets/stylesheets/pages/boards.scss index 58bb5d004788cb..25d9aca95fec0f 100644 --- a/ee/app/assets/stylesheets/pages/boards.scss +++ b/ee/app/assets/stylesheets/pages/boards.scss @@ -109,4 +109,10 @@ $search-box-height: 50px; max-height: calc(#{$dropdown-max-height} - #{$search-box-height}); } + + // the following is a workaround until we have it fixed in gitlab-ui + // see https://gitlab.com/gitlab-org/gitlab-ui/issues/156 + .sticky-top { + top: 0; + } } -- GitLab From 30cb141333cc815d1d6f1dfeae5f1bf2261b5dba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Trzci=C5=84ski?= Date: Sat, 19 Jan 2019 12:48:32 +0000 Subject: [PATCH 27/35] Merge branch '56213-remove-error_tracking-feature-flag-ee' into 'master' Remove `error_tracking` feature flag See merge request gitlab-org/gitlab-ee!9216 (cherry picked from commit 82d4ccacaffb6bcde629ec67999b270b171e0839) d350945c Remove `error_tracking` feature flag --- .../javascripts/error_tracking/index.js | 4 ---- .../projects/error_tracking_controller.rb | 10 -------- app/helpers/projects_helper.rb | 2 +- .../layouts/nav/sidebar/_project.html.haml | 2 +- .../operations/_error_tracking.html.haml | 2 +- .../settings/operations/_tracing.html.haml | 2 +- .../error_tracking_controller_spec.rb | 12 ---------- .../settings/operations_controller_spec.rb | 24 ------------------- .../settings/operations_settings_spec.rb | 24 ++++--------------- .../operations/show.html.haml_spec.rb | 2 -- 10 files changed, 8 insertions(+), 76 deletions(-) diff --git a/app/assets/javascripts/error_tracking/index.js b/app/assets/javascripts/error_tracking/index.js index 808ae2c9a41088..3d609448efe4c9 100644 --- a/app/assets/javascripts/error_tracking/index.js +++ b/app/assets/javascripts/error_tracking/index.js @@ -4,10 +4,6 @@ import store from './store'; import ErrorTrackingList from './components/error_tracking_list.vue'; export default () => { - if (!gon.features.errorTracking) { - return; - } - // eslint-disable-next-line no-new new Vue({ el: '#js-error_tracking', diff --git a/app/controllers/projects/error_tracking_controller.rb b/app/controllers/projects/error_tracking_controller.rb index 4596b6c91f2af8..9e403e1d25b1ab 100644 --- a/app/controllers/projects/error_tracking_controller.rb +++ b/app/controllers/projects/error_tracking_controller.rb @@ -1,9 +1,7 @@ # frozen_string_literal: true class Projects::ErrorTrackingController < Projects::ApplicationController - before_action :check_feature_flag! before_action :authorize_read_sentry_issue! - before_action :push_feature_flag_to_frontend POLLING_INTERVAL = 10_000 @@ -43,12 +41,4 @@ def serialize_errors(errors) .new(project: project, user: current_user) .represent(errors) end - - def check_feature_flag! - render_404 unless Feature.enabled?(:error_tracking, project) - end - - def push_feature_flag_to_frontend - push_frontend_feature_flag(:error_tracking, current_user) - end end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 035d2d49bc554e..e5450e3624c0a6 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -287,7 +287,7 @@ def show_issue_count?(disabled: false, compact_mode: false) # overridden in EE def settings_operations_available? - Feature.enabled?(:error_tracking, @project) && can?(current_user, :read_environment, @project) + can?(current_user, :read_environment, @project) end private diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index c5246f94c63e1c..29de51526f900a 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -227,7 +227,7 @@ %span = _('Environments') - - if project_nav_tab?(:error_tracking) && Feature.enabled?(:error_tracking, @project) + - if project_nav_tab?(:error_tracking) = nav_link(controller: :error_tracking) do = link_to project_error_tracking_index_path(@project), title: _('Error Tracking'), class: 'shortcuts-tracking qa-operations-tracking-link' do %span diff --git a/app/views/projects/settings/operations/_error_tracking.html.haml b/app/views/projects/settings/operations/_error_tracking.html.haml index 871b60f05bab8b..4911e8d37706d6 100644 --- a/app/views/projects/settings/operations/_error_tracking.html.haml +++ b/app/views/projects/settings/operations/_error_tracking.html.haml @@ -1,4 +1,4 @@ -- return unless Feature.enabled?(:error_tracking, @project) && can?(current_user, :read_environment, @project) +- return unless can?(current_user, :read_environment, @project) - setting = error_tracking_setting diff --git a/ee/app/views/projects/settings/operations/_tracing.html.haml b/ee/app/views/projects/settings/operations/_tracing.html.haml index 5a849c13be764c..a3a4fd458677e8 100644 --- a/ee/app/views/projects/settings/operations/_tracing.html.haml +++ b/ee/app/views/projects/settings/operations/_tracing.html.haml @@ -4,7 +4,7 @@ - has_jaeger_url = setting.external_url.present? %section.settings.expanded.border-0.no-animate - .settings-header{ :class => ("border-top" unless not Feature.enabled?(:error_tracking, @project)) } + .settings-header{ :class => "border-top" } %h4 = _("Jaeger tracing") %p diff --git a/spec/controllers/projects/error_tracking_controller_spec.rb b/spec/controllers/projects/error_tracking_controller_spec.rb index 729e71b87a671d..6464398cea1c85 100644 --- a/spec/controllers/projects/error_tracking_controller_spec.rb +++ b/spec/controllers/projects/error_tracking_controller_spec.rb @@ -20,18 +20,6 @@ expect(response).to render_template(:index) end - context 'with feature flag disabled' do - before do - stub_feature_flags(error_tracking: false) - end - - it 'returns 404' do - get :index, params: project_params - - expect(response).to have_gitlab_http_status(:not_found) - end - end - context 'with insufficient permissions' do before do project.add_guest(user) diff --git a/spec/controllers/projects/settings/operations_controller_spec.rb b/spec/controllers/projects/settings/operations_controller_spec.rb index 810f5bb64ba54d..d989ec224819f1 100644 --- a/spec/controllers/projects/settings/operations_controller_spec.rb +++ b/spec/controllers/projects/settings/operations_controller_spec.rb @@ -41,18 +41,6 @@ end end - context 'with feature flag disabled' do - before do - stub_feature_flags(error_tracking: false) - end - - it 'renders 404' do - get :show, params: project_params(project) - - expect(response).to have_gitlab_http_status(:not_found) - end - end - context 'with insufficient permissions' do before do project.add_reporter(user) @@ -121,18 +109,6 @@ end end - context 'with feature flag disabled' do - before do - stub_feature_flags(error_tracking: false) - end - - it 'renders 404' do - patch :update, params: project_params(project) - - expect(response).to have_gitlab_http_status(:not_found) - end - end - context 'with insufficient permissions' do before do project.add_reporter(user) diff --git a/spec/features/projects/settings/operations_settings_spec.rb b/spec/features/projects/settings/operations_settings_spec.rb index 1f2328a6dd81f5..06290c67c70729 100644 --- a/spec/features/projects/settings/operations_settings_spec.rb +++ b/spec/features/projects/settings/operations_settings_spec.rb @@ -8,32 +8,16 @@ let(:role) { :maintainer } before do - stub_feature_flags(error_tracking: true) sign_in(user) project.add_role(user, role) end describe 'Sidebar > Operations' do - context 'when sidebar feature flag enabled' do - it 'renders the settings link in the sidebar' do - visit project_path(project) - wait_for_requests + it 'renders the settings link in the sidebar' do + visit project_path(project) + wait_for_requests - expect(page).to have_selector('a[title="Operations"]', visible: false) - end - end - - context 'when sidebar feature flag disabled' do - before do - stub_feature_flags(error_tracking: false) - end - - it 'does not render the settings link in the sidebar' do - visit project_path(project) - wait_for_requests - - expect(page).not_to have_selector('a[title="Operations"]', visible: false) - end + expect(page).to have_selector('a[title="Operations"]', visible: false) end end end diff --git a/spec/views/projects/settings/operations/show.html.haml_spec.rb b/spec/views/projects/settings/operations/show.html.haml_spec.rb index 752fd82c5e893f..8e34521c7c86fa 100644 --- a/spec/views/projects/settings/operations/show.html.haml_spec.rb +++ b/spec/views/projects/settings/operations/show.html.haml_spec.rb @@ -13,8 +13,6 @@ describe 'Operations > Error Tracking' do before do - stub_feature_flags(error_tracking: true) - project.add_reporter(user) allow(view).to receive(:error_tracking_setting) -- GitLab From 42cdf7fd36dcc8f7dc55b83580d3567b98c4c99c Mon Sep 17 00:00:00 2001 From: Evan Read Date: Mon, 21 Jan 2019 21:54:48 +0000 Subject: [PATCH 28/35] Merge branch 'docs-multi-level-child-epics' into 'master' Docs - Multi-level Child Epics See merge request gitlab-org/gitlab-ee!9244 (cherry picked from commit 46594bd48893e9d36c3a4dc2e3f8ad21d3ba9b6e) 8449f903 Rename child epics feature --- doc/user/group/epics/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/user/group/epics/index.md b/doc/user/group/epics/index.md index e46e0f3f29ed83..5342c8197eabc4 100644 --- a/doc/user/group/epics/index.md +++ b/doc/user/group/epics/index.md @@ -41,7 +41,7 @@ NOTE: **Note:** When you add an issue or an epic to an epic that's already associated with another epic, the issue or the epic is automatically removed from the previous epic. -## Child epics +## Multi-level child epics > [Introduced](https://gitlab.com/gitlab-org/gitlab-ee/issues/8333) in GitLab Ultimate 11.7. -- GitLab From 4197b54d4ab7ee0e19ef56ba3296b2c8f48cde3f Mon Sep 17 00:00:00 2001 From: Douglas Barbosa Alexandre Date: Wed, 23 Jan 2019 20:43:14 +0000 Subject: [PATCH 29/35] Merge branch 'sh-fix-issue-9357-ee' into 'master' Fix 500 errors with legacy appearance logos Closes #9357 See merge request gitlab-org/gitlab-ee!9277 (cherry picked from commit 8c23acadffbe5cc4b742ec8a84d7a05f791063cb) 922d97d9 Fix 500 errors with legacy appearance logos --- app/models/appearance.rb | 6 ++++- ee/spec/helpers/ee/appearances_helper_spec.rb | 22 +++++++++++++++++++ spec/models/appearance_spec.rb | 7 ++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/app/models/appearance.rb b/app/models/appearance.rb index d918add2147fb4..12fa112cd5034a 100644 --- a/app/models/appearance.rb +++ b/app/models/appearance.rb @@ -44,7 +44,11 @@ def favicon_path private def logo_system_path(logo, mount_type) - return unless logo&.upload + # Legacy attachments may not have have an associated Upload record, + # so fallback to the AttachmentUploader#url if this is the + # case. AttachmentUploader#path doesn't work because for a local + # file, this is an absolute path to the file. + return logo&.url unless logo&.upload # If we're using a CDN, we need to use the full URL asset_host = ActionController::Base.asset_host diff --git a/ee/spec/helpers/ee/appearances_helper_spec.rb b/ee/spec/helpers/ee/appearances_helper_spec.rb index 00607d5f25b6c6..2d44043f462b2d 100644 --- a/ee/spec/helpers/ee/appearances_helper_spec.rb +++ b/ee/spec/helpers/ee/appearances_helper_spec.rb @@ -60,6 +60,28 @@ end end + describe '#brand_image' do + let!(:appearance) { create(:appearance, :with_logo) } + + context 'when there is a logo' do + it 'returns a path' do + expect(helper.brand_image).to match(%r(img data-src="/uploads/-/system/appearance/.*png)) + end + end + + context 'when there is a logo but no associated upload' do + before do + # Legacy attachments were not tracked in the uploads table + appearance.logo.upload.destroy + appearance.reload + end + + it 'falls back to using the original path' do + expect(helper.brand_image).to match(%r(img data-src="/uploads/-/system/appearance/.*png)) + end + end + end + describe '#brand_title' do it 'returns the default EE title when no appearance is present' do allow(helper) diff --git a/spec/models/appearance_spec.rb b/spec/models/appearance_spec.rb index ec2e7d672f050a..cc76a2019eca27 100644 --- a/spec/models/appearance_spec.rb +++ b/spec/models/appearance_spec.rb @@ -36,6 +36,13 @@ expect(subject.send("#{logo_type}_path")).to be_nil end + it 'returns the path when the upload has been orphaned' do + appearance.send(logo_type).upload.destroy + appearance.reload + + expect(appearance.send("#{logo_type}_path")).to eq(expected_path) + end + it 'returns a local path using the system route' do expect(appearance.send("#{logo_type}_path")).to eq(expected_path) end -- GitLab From 4a40e4109fc2603ca59c5e6da0f0cb3485870257 Mon Sep 17 00:00:00 2001 From: Sean McGivern Date: Fri, 1 Feb 2019 13:31:16 +0000 Subject: [PATCH 30/35] Merge branch '9519-kerberos-spnego-authentication-is-broken-since-a-code-refactoring' into 'master' Fix Kerberos authentication Closes #9519 See merge request gitlab-org/gitlab-ee!9390 (cherry picked from commit 0450fa5fc26930dfb301499fe0c95db2ca26fedb) f00fcb16 Fix Kerberos authentication --- ee/app/helpers/ee/kerberos_spnego_helper.rb | 2 +- ...ion-is-broken-since-a-code-refactoring.yml | 5 ++ .../helpers/kerberos_spnego_helper_spec.rb | 60 +++++++++++++++++++ 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 ee/changelogs/unreleased/9519-kerberos-spnego-authentication-is-broken-since-a-code-refactoring.yml create mode 100644 ee/spec/helpers/kerberos_spnego_helper_spec.rb diff --git a/ee/app/helpers/ee/kerberos_spnego_helper.rb b/ee/app/helpers/ee/kerberos_spnego_helper.rb index b592a3e3c333be..1f7317a9332403 100644 --- a/ee/app/helpers/ee/kerberos_spnego_helper.rb +++ b/ee/app/helpers/ee/kerberos_spnego_helper.rb @@ -66,7 +66,7 @@ def spnego_credentials!(spnego_token) # pass service name to acquire_credentials explicitly to support the special meaning of nil gss_service_name = if ::Gitlab.config.kerberos.service_principal_name.present? - gss.import_name(Gitlab.config.kerberos.service_principal_name) + gss.import_name(::Gitlab.config.kerberos.service_principal_name) else nil # accept any valid service principal name from keytab end diff --git a/ee/changelogs/unreleased/9519-kerberos-spnego-authentication-is-broken-since-a-code-refactoring.yml b/ee/changelogs/unreleased/9519-kerberos-spnego-authentication-is-broken-since-a-code-refactoring.yml new file mode 100644 index 00000000000000..0ff5954dafcdd3 --- /dev/null +++ b/ee/changelogs/unreleased/9519-kerberos-spnego-authentication-is-broken-since-a-code-refactoring.yml @@ -0,0 +1,5 @@ +--- +title: Fix Kerberos authentication +merge_request: 9390 +author: +type: fixed diff --git a/ee/spec/helpers/kerberos_spnego_helper_spec.rb b/ee/spec/helpers/kerberos_spnego_helper_spec.rb new file mode 100644 index 00000000000000..48f785c9c16359 --- /dev/null +++ b/ee/spec/helpers/kerberos_spnego_helper_spec.rb @@ -0,0 +1,60 @@ +require 'spec_helper' +require 'gssapi' + +describe KerberosSpnegoHelper do + describe '#spnego_credentials!' do + let(:gss) { double('GSSAPI::Simple') } + let(:gss_service_name) { 'gss_service_name' } + subject { Class.new { include KerberosSpnegoHelper }.new } + + before do + expect(GSSAPI::Simple).to receive(:new) + .with(nil, nil, ::Gitlab.config.kerberos.keytab) + .and_return(gss) + end + + shared_examples 'a method that decodes a spnego token' do + let(:gss_result) { true } + let(:spnego_response_token) { nil } + + it 'decodes the given spnego token' do + token = 'abc123' + gss_display_name = 'gss_display_name' + + expect(gss).to receive(:acquire_credentials).with(gss_service_name) + expect(gss).to receive(:accept_context).with(token).and_return(gss_result) + expect(gss).to receive(:display_name).and_return(gss_display_name) + + expect(subject.spnego_credentials!(token)).to eq(gss_display_name) + expect(subject.spnego_response_token).to eq(spnego_response_token) + end + end + + context 'with Kerberos service_principal_name present' do + before do + kerberos_service_principal_name = 'default' + stub_kerberos_setting(service_principal_name: kerberos_service_principal_name) + expect(gss).to receive(:import_name).with(kerberos_service_principal_name).and_return(gss_service_name) + end + + it_behaves_like 'a method that decodes a spnego token' + + context 'when gss_result is not true' do + it_behaves_like 'a method that decodes a spnego token' do + let(:gss_result) { 'gss_result' } + let(:spnego_response_token) { gss_result } + end + end + end + + context 'with Kerberos service_principal_name missing' do + before do + expect(gss).not_to receive(:import_name) + end + + it_behaves_like 'a method that decodes a spnego token' do + let(:gss_service_name) { nil } + end + end + end +end -- GitLab From 76f2accd085e78f4c0d3b8c69ef7c69e1011ea74 Mon Sep 17 00:00:00 2001 From: Douwe Maan Date: Fri, 1 Feb 2019 16:59:11 +0000 Subject: [PATCH 31/35] Merge branch '1979-blobs-at' into 'master' Fix migration error when project repository is missing See merge request gitlab-org/gitlab-ee!9392 (cherry picked from commit de97f66fb789a083ba59dd9449d516eb90eec836) 2e95d8fe Fix migration when project repository is missing --- app/models/repository.rb | 2 ++ ee/changelogs/unreleased/1979-blobs-at.yml | 5 +++++ ...migrate_approver_to_approval_rules_spec.rb | 12 +++++++++++ spec/models/repository_spec.rb | 21 +++++++++++++++++++ 4 files changed, 40 insertions(+) create mode 100644 ee/changelogs/unreleased/1979-blobs-at.yml diff --git a/app/models/repository.rb b/app/models/repository.rb index 39c8619147725e..cddf6576c25648 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -525,6 +525,8 @@ def blob_at(sha, path) # items is an Array like: [[oid, path], [oid1, path1]] def blobs_at(items) + return [] unless exists? + raw_repository.batch_blobs(items).map { |blob| Blob.decorate(blob, project) } end diff --git a/ee/changelogs/unreleased/1979-blobs-at.yml b/ee/changelogs/unreleased/1979-blobs-at.yml new file mode 100644 index 00000000000000..75edc4e4b12433 --- /dev/null +++ b/ee/changelogs/unreleased/1979-blobs-at.yml @@ -0,0 +1,5 @@ +--- +title: Fix background migration error when project repository is missing +merge_request: 9392 +author: +type: fixed diff --git a/ee/spec/lib/gitlab/background_migration/migrate_approver_to_approval_rules_spec.rb b/ee/spec/lib/gitlab/background_migration/migrate_approver_to_approval_rules_spec.rb index 04268c4670c01a..53e3c76234748e 100644 --- a/ee/spec/lib/gitlab/background_migration/migrate_approver_to_approval_rules_spec.rb +++ b/ee/spec/lib/gitlab/background_migration/migrate_approver_to_approval_rules_spec.rb @@ -253,4 +253,16 @@ def create_member_in(member, *populate_in) end.not_to raise_error end end + + context 'when project has no repository' do + let(:project_without_repository) { create(:project) } + let(:target) { create(:merge_request, target_project: project_without_repository, source_project: project_without_repository) } + let(:target_type) { 'MergeRequest' } + + it "does not err" do + expect do + described_class.new.perform(target_type, target.id) + end.not_to raise_error + end + end end diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index ac5874fd0f7a44..4978c43c9b5ccc 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -1237,6 +1237,27 @@ def expect_to_raise_storage_error end end + describe '#blobs_at' do + let(:empty_repository) { create(:project_empty_repo).repository } + + it 'returns empty array for an empty repository' do + # rubocop:disable Style/WordArray + expect(empty_repository.blobs_at(['master', 'foobar'])).to eq([]) + # rubocop:enable Style/WordArray + end + + it 'returns blob array for a non-empty repository' do + repository.create_file(User.last, 'foobar', 'CONTENT', message: 'message', branch_name: 'master') + + # rubocop:disable Style/WordArray + blobs = repository.blobs_at([['master', 'foobar']]) + # rubocop:enable Style/WordArray + + expect(blobs.first.name).to eq('foobar') + expect(blobs.size).to eq(1) + end + end + describe '#root_ref' do it 'returns a branch name' do expect(repository.root_ref).to be_an_instance_of(String) -- GitLab From c28360c52d54b389133a586858c58a8babc11a70 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Fri, 18 Jan 2019 14:15:32 +0000 Subject: [PATCH 32/35] Merge branch '56473-update-nginx-docs' into 'master' Add documentation for new NGINX Ingress metrics Closes #56473 See merge request gitlab-org/gitlab-ce!24449 --- .../integrations/prometheus_library/index.md | 3 +- .../prometheus_library/nginx_ingress.md | 28 +++++---- .../prometheus_library/nginx_ingress_vts.md | 58 +++++++++++++++++++ 3 files changed, 76 insertions(+), 13 deletions(-) create mode 100644 doc/user/project/integrations/prometheus_library/nginx_ingress_vts.md diff --git a/doc/user/project/integrations/prometheus_library/index.md b/doc/user/project/integrations/prometheus_library/index.md index 9b9b4f6c8ca05b..a79bc2bce06645 100644 --- a/doc/user/project/integrations/prometheus_library/index.md +++ b/doc/user/project/integrations/prometheus_library/index.md @@ -10,7 +10,8 @@ Currently supported exporters are: - [Kubernetes](kubernetes.md) - [NGINX](nginx.md) -- [NGINX Ingress Controller](nginx_ingress.md) +- [NGINX Ingress Controller 0.9.0-0.15.x](nginx_ingress_vts.md) +- [NGINX Ingress Controller 0.16.0+](nginx_ingress.md) - [HAProxy](haproxy.md) - [Amazon Cloud Watch](cloudwatch.md) diff --git a/doc/user/project/integrations/prometheus_library/nginx_ingress.md b/doc/user/project/integrations/prometheus_library/nginx_ingress.md index 40ac855c74fdc3..7755ba8e2e8817 100644 --- a/doc/user/project/integrations/prometheus_library/nginx_ingress.md +++ b/doc/user/project/integrations/prometheus_library/nginx_ingress.md @@ -1,8 +1,10 @@ # Monitoring NGINX Ingress Controller -> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/13438) in GitLab 9.5. +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/22133) in GitLab 11.7. -GitLab has support for automatically detecting and monitoring the Kubernetes NGINX ingress controller. This is provided by leveraging the built in Prometheus metrics included in [version 0.9.0](https://github.com/kubernetes/ingress-nginx/blob/master/Changelog.md#09-beta1) and above of the ingress. +NOTE: **Note:** NGINX Ingress versions prior to 0.16.0 offer an included [VTS Prometheus metrics exporter](nginx_ingress_vts.md), which exports metrics different than the built-in metrics. + +GitLab has support for automatically detecting and monitoring the Kubernetes NGINX ingress controller. This is provided by leveraging the built-in Prometheus metrics included starting with [version 0.16.0](https://github.com/kubernetes/ingress-nginx/blob/master/Changelog.md#0160). ## Requirements @@ -12,27 +14,29 @@ GitLab has support for automatically detecting and monitoring the Kubernetes NGI | Name | Query | | ---- | ----- | -| Throughput (req/sec) | sum(rate(nginx_upstream_responses_total{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) by (status_code) | -| Latency (ms) | avg(nginx_upstream_response_msecs_avg{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}) | -| HTTP Error Rate (%) | sum(rate(nginx_upstream_responses_total{status_code="5xx", upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) / sum(rate(nginx_upstream_responses_total{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) * 100 | +| Throughput (req/sec) | sum(label_replace(rate(nginx_ingress_controller_requests{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m]), "status_code", "${1}xx", "status", "(.)..")) by (status_code) | +| Latency (ms) | sum(rate(nginx_ingress_controller_ingress_upstream_latency_seconds_sum{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) / sum(rate(nginx_ingress_controller_ingress_upstream_latency_seconds_count{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) * 1000 | +| HTTP Error Rate (%) | sum(rate(nginx_ingress_controller_requests{status=~"5.*",namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) / sum(rate(nginx_ingress_controller_requests{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) * 100 | ## Configuring NGINX ingress monitoring If you have deployed NGINX Ingress using GitLab's [Kubernetes cluster integration](../../clusters/index.md#installing-applications), it will [automatically be monitored](#about-managed-nginx-ingress-deployments) by Prometheus. For other deployments, there is [some configuration](#manually-setting-up-nginx-ingress-for-prometheus-monitoring) required depending on your installation: -* NGINX Ingress should be version 0.9.0 or above, with metrics enabled -* NGINX Ingress should be annotated for Prometheus monitoring -* Prometheus should be configured to monitor annotated pods + +- NGINX Ingress should be version 0.16.0 or above, with metrics enabled. +- NGINX Ingress should be annotated for Prometheus monitoring. +- Prometheus should be configured to monitor annotated pods. ### About managed NGINX Ingress deployments NGINX Ingress is deployed into the `gitlab-managed-apps` namespace, using the [official Helm chart](https://github.com/kubernetes/charts/tree/master/stable/nginx-ingress). NGINX Ingress will be [externally reachable via the Load Balancer's IP](../../clusters/index.md#getting-the-external-ip-address). NGINX is configured for Prometheus monitoring, by setting: -* `enable-vts-status: "true"`, to export Prometheus metrics -* `prometheus.io/scrape: "true"`, to enable automatic discovery -* `prometheus.io/port: "10254"`, to specify the metrics port + +- `enable-vts-status: "true"`, to export Prometheus metrics. +- `prometheus.io/scrape: "true"`, to enable automatic discovery. +- `prometheus.io/port: "10254"`, to specify the metrics port. When used in conjunction with the GitLab deployed Prometheus service, response metrics will be automatically collected. @@ -49,6 +53,6 @@ Managing these settings depends on how NGINX ingress has been deployed. If you h ## Specifying the Environment label -In order to isolate and only display relevant metrics for a given environment, GitLab needs a method to detect which labels are associated. To do this, GitLab will search for metrics with appropriate labels. In this case, the `upstream` label must be of the form `--*`. +In order to isolate and only display relevant metrics for a given environment, GitLab needs a method to detect which labels are associated. To do this, GitLab will search for metrics with appropriate labels. In this case, the `ingress` label must ``. If you have used [Auto Deploy](../../../../topics/autodevops/index.md#auto-deploy) to deploy your app, this format will be used automatically and metrics will be detected with no action on your part. diff --git a/doc/user/project/integrations/prometheus_library/nginx_ingress_vts.md b/doc/user/project/integrations/prometheus_library/nginx_ingress_vts.md new file mode 100644 index 00000000000000..081eb8732ad334 --- /dev/null +++ b/doc/user/project/integrations/prometheus_library/nginx_ingress_vts.md @@ -0,0 +1,58 @@ +# Monitoring NGINX Ingress Controller with VTS metrics + +> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/13438) in GitLab 9.5. + +NOTE: **Note:** [NGINX Ingress version 0.16](nginx_ingress.md) and above have built-in Prometheus metrics, which are different than the VTS based metrics. + +GitLab has support for automatically detecting and monitoring the Kubernetes NGINX ingress controller. This is provided by leveraging the included VTS Prometheus metrics exporter in [version 0.9.0](https://github.com/kubernetes/ingress-nginx/blob/master/Changelog.md#09-beta1) through [0.15.x](https://github.com/kubernetes/ingress-nginx/blob/master/Changelog.md#0150). + +## Requirements + +[Prometheus integration](../prometheus.md) must be active. + +## Metrics supported + +| Name | Query | +| ---- | ----- | +| Throughput (req/sec) | sum(rate(nginx_upstream_responses_total{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) by (status_code) | +| Latency (ms) | avg(nginx_upstream_response_msecs_avg{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}) | +| HTTP Error Rate (%) | sum(rate(nginx_upstream_responses_total{status_code="5xx", upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) / sum(rate(nginx_upstream_responses_total{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) * 100 | + +## Configuring NGINX ingress monitoring + +If you have deployed NGINX Ingress using GitLab's [Kubernetes cluster integration](../../clusters/index.md#installing-applications), it will [automatically be monitored](#about-managed-nginx-ingress-deployments) by Prometheus. + +For other deployments, there is [some configuration](#manually-setting-up-nginx-ingress-for-prometheus-monitoring) required depending on your installation: + +- NGINX Ingress should be version 0.9.0 or above, with metrics enabled. +- NGINX Ingress should be annotated for Prometheus monitoring. +- Prometheus should be configured to monitor annotated pods. + +### About managed NGINX Ingress deployments + +NGINX Ingress is deployed into the `gitlab-managed-apps` namespace, using the [official Helm chart](https://github.com/kubernetes/charts/tree/master/stable/nginx-ingress). NGINX Ingress will be [externally reachable via the Load Balancer's IP](../../clusters/index.md#getting-the-external-ip-address). + +NGINX is configured for Prometheus monitoring, by setting: + +- `enable-vts-status: "true"`, to export Prometheus metrics. +- `prometheus.io/scrape: "true"`, to enable automatic discovery. +- `prometheus.io/port: "10254"`, to specify the metrics port. + +When used in conjunction with the GitLab deployed Prometheus service, response metrics will be automatically collected. + +### Manually setting up NGINX Ingress for Prometheus monitoring + +Version 0.9.0 and above of [NGINX ingress](https://github.com/kubernetes/ingress-nginx) have built-in support for exporting Prometheus metrics. To enable, a ConfigMap setting must be passed: `enable-vts-status: "true"`. Once enabled, a Prometheus metrics endpoint will start running on port 10254. + +Next, the ingress needs to be annotated for Prometheus monitoring. Two new annotations need to be added: + +- `prometheus.io/scrape: "true"` +- `prometheus.io/port: "10254"` + +Managing these settings depends on how NGINX ingress has been deployed. If you have deployed via the [official Helm chart](https://github.com/kubernetes/charts/tree/master/stable/nginx-ingress), metrics can be enabled with `controller.stats.enabled` along with the required annotations. Alternatively it is possible edit the NGINX ingress YML directly in the [Kubernetes dashboard](https://github.com/kubernetes/dashboard). + +## Specifying the Environment label + +In order to isolate and only display relevant metrics for a given environment, GitLab needs a method to detect which labels are associated. To do this, GitLab will search for metrics with appropriate labels. In this case, the `upstream` label must be of the form `--*`. + +If you have used [Auto Deploy](../../../../topics/autodevops/index.md#auto-deploy) to deploy your app, this format will be used automatically and metrics will be detected with no action on your part. -- GitLab From e473e9db42ae40573b9f5f6ad27a0c5bbd600823 Mon Sep 17 00:00:00 2001 From: Sanad Liaquat Date: Thu, 17 Jan 2019 13:26:07 +0000 Subject: [PATCH 33/35] Merge branch 'fix-qa-364' into 'master' Fix the Epic QA test Closes gitlab-qa#364 See merge request gitlab-org/gitlab-ee!9194 --- .../components/related_issues_block.vue | 10 +++++- .../javascripts/related_issues/constants.js | 20 ++++++++++++ qa/qa/ee/page/group/epic/show.rb | 2 +- .../ee_epic/create_edit_delete_epic_spec.rb | 31 ++++++++++--------- 4 files changed, 47 insertions(+), 16 deletions(-) diff --git a/ee/app/assets/javascripts/related_issues/components/related_issues_block.vue b/ee/app/assets/javascripts/related_issues/components/related_issues_block.vue index 89c6f1de180c7c..ec9e868a2f2052 100644 --- a/ee/app/assets/javascripts/related_issues/components/related_issues_block.vue +++ b/ee/app/assets/javascripts/related_issues/components/related_issues_block.vue @@ -6,6 +6,7 @@ import sortableConfig from 'ee/sortable/sortable_config'; import { GlLoadingIcon } from '@gitlab/ui'; import issueItem from './issue_item.vue'; import addIssuableForm from './add_issuable_form.vue'; +import { issuableIconMap, issuableQaClassMap } from '../constants'; export default { name: 'RelatedIssuesBlock', @@ -99,6 +100,12 @@ export default { hasHelpPath() { return this.helpPath.length > 0; }, + issuableTypeIcon() { + return issuableIconMap[this.issuableType]; + }, + qaClass() { + return issuableQaClassMap[this.issuableType]; + }, }, mounted() { if (this.canReorder) { @@ -168,7 +175,8 @@ export default { v-if="canAdmin" ref="issueCountBadgeAddButton" type="button" - class="js-issue-count-badge-add-button issue-count-badge-add-button btn btn-sm btn-default qa-add-issues-button" + :class="qaClass" + class="js-issue-count-badge-add-button issue-count-badge-add-button btn btn-sm btn-default" aria-label="Add an issue" data-placement="top" @click="$emit('toggleAddRelatedIssuesForm', $event);" diff --git a/ee/app/assets/javascripts/related_issues/constants.js b/ee/app/assets/javascripts/related_issues/constants.js index 2c88809cb77da4..97433a86a70549 100644 --- a/ee/app/assets/javascripts/related_issues/constants.js +++ b/ee/app/assets/javascripts/related_issues/constants.js @@ -30,3 +30,23 @@ export const addRelatedIssueErrorMap = { issue: __("We can't find an issue that matches what you are looking for."), epic: __("We can't find an epic that matches what you are looking for."), }; + +/** + * These are used to map issuableType to the correct icon. + * Since these are never used for any display purposes, don't wrap + * them inside i18n functions. + */ +export const issuableIconMap = { + issue: 'issues', + epic: 'epic', +}; + +/** + * These are used to map issuableType to the correct QA class. + * Since these are never used for any display purposes, don't wrap + * them inside i18n functions. + */ +export const issuableQaClassMap = { + issue: 'qa-add-issues-button', + epic: 'qa-add-epics-button', +}; diff --git a/qa/qa/ee/page/group/epic/show.rb b/qa/qa/ee/page/group/epic/show.rb index 523d3ace401a1f..489aa5349b139d 100644 --- a/qa/qa/ee/page/group/epic/show.rb +++ b/qa/qa/ee/page/group/epic/show.rb @@ -8,7 +8,7 @@ module Epic class Show < QA::Page::Base include QA::Page::Component::Issuable::Common - view 'ee/app/assets/javascripts/related_issues/components/related_issues_block.vue' do + view 'ee/app/assets/javascripts/related_issues/constants.js' do element :add_issues_button end diff --git a/qa/qa/specs/features/browser_ui/2_plan/ee_epic/create_edit_delete_epic_spec.rb b/qa/qa/specs/features/browser_ui/2_plan/ee_epic/create_edit_delete_epic_spec.rb index c0f3ee12e2d277..fdfa6bd9782d16 100644 --- a/qa/qa/specs/features/browser_ui/2_plan/ee_epic/create_edit_delete_epic_spec.rb +++ b/qa/qa/specs/features/browser_ui/2_plan/ee_epic/create_edit_delete_epic_spec.rb @@ -15,32 +15,35 @@ module QA epic = EE::Resource::Epic.fabricate! do |epic| epic.group = issue.project.group - epic.title = "My First Epic" + epic.title = 'My First Epic' end - expect(page).to have_content(/My First Epic/) + expect(page).to have_content('My First Epic') # Edit Epics EE::Page::Group::Epic::Show.act { go_to_edit_page } EE::Page::Group::Epic::Edit.perform do |edit_page| - edit_page.set_description("My Edited Epic Description") - edit_page.set_title("My Edited Epic") + edit_page.set_description('My Edited Epic Description') + edit_page.set_title('My Edited Epic') edit_page.save_changes - expect(edit_page).to have_content(/My Edited Epic/) + expect(edit_page).to have_content('My Edited Epic') end # Add/Remove Issues to/from Epics EE::Page::Group::Epic::Show.perform do |show_page| show_page.add_issue_to_epic(issue.web_url) + expect(show_page).to have_content('added issue') + expect(show_page).to have_content('My Edited Epic') + show_page.remove_issue_from_epic - expect(show_page).to have_content(/removed issue/) + expect(show_page).to have_content('removed issue') end # Comment on Epics - EE::Page::Group::Epic::Show.act { add_comment_to_epic("My Epic Comments") } + EE::Page::Group::Epic::Show.act { add_comment_to_epic('My Epic Comments') } - expect(page).to have_content(/My Epic Comments/) + expect(page).to have_content('My Epic Comments') # Add Issue to Epic using quick actions issue.visit! @@ -49,30 +52,30 @@ module QA show_page.select_all_activities_filter show_page.comment("/epic #{epic.web_url}") show_page.comment("/remove_epic") - expect(show_page).to have_content(/removed from epic/) + expect(show_page).to have_content('removed from epic') end epic.visit! - expect(page).to have_content("added issue", count: 2) - expect(page).to have_content("removed issue", count: 2) + expect(page).to have_content('added issue', count: 2) + expect(page).to have_content('removed issue', count: 2) # Close Epic EE::Page::Group::Epic::Show.act { close_reopen_epic } - expect(page).to have_content(/Closed/) + expect(page).to have_content('Closed') # Reopen Epic EE::Page::Group::Epic::Show.act { close_reopen_epic } - expect(page).to have_content(/Open/) + expect(page).to have_content('Open') # Delete Epics EE::Page::Group::Epic::Show.act { go_to_edit_page } EE::Page::Group::Epic::Edit.perform do |edit_page| edit_page.delete_epic - expect(edit_page).to have_content(/The epic was successfully deleted/) + expect(edit_page).to have_content('The epic was successfully deleted') end end end -- GitLab From a21c6baecf92c5575997a6d545204bbc36f90c40 Mon Sep 17 00:00:00 2001 From: Yorick Peterse Date: Tue, 5 Feb 2019 15:18:02 +0000 Subject: [PATCH 34/35] Merge branch 'update-workhorse-8-0-2' into '11-7-stable' Update Workhorse to v8.0.2 See merge request gitlab-org/gitlab-ce!24870 --- GITLAB_WORKHORSE_VERSION | 2 +- changelogs/unreleased/update-workhorse-8-0-2.yml | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/update-workhorse-8-0-2.yml diff --git a/GITLAB_WORKHORSE_VERSION b/GITLAB_WORKHORSE_VERSION index cd1d2e94f31d7c..8b22a322d0fea3 100644 --- a/GITLAB_WORKHORSE_VERSION +++ b/GITLAB_WORKHORSE_VERSION @@ -1 +1 @@ -8.0.1 +8.0.2 diff --git a/changelogs/unreleased/update-workhorse-8-0-2.yml b/changelogs/unreleased/update-workhorse-8-0-2.yml new file mode 100644 index 00000000000000..d62e1575a0c442 --- /dev/null +++ b/changelogs/unreleased/update-workhorse-8-0-2.yml @@ -0,0 +1,5 @@ +--- +title: Update Workhorse to v8.0.2 +merge_request: 24870 +author: +type: fixed -- GitLab From dd663a8bba896e05f5ecc6d7ac0c56705e023493 Mon Sep 17 00:00:00 2001 From: Alex Hanselka Date: Tue, 5 Feb 2019 14:42:07 -0600 Subject: [PATCH 35/35] Fix duplicate changelog entries --- CHANGELOG.md | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef34bf474ca4ac..89d5f395da7a02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,17 +9,6 @@ entry. - Use sanitized user status message for user popover. -## 11.7.3 (2019-01-30) - -- No changes. - -## 11.7.2 (2019-01-29) - -### Security (1 change) - -- Use sanitized user status message for user popover. - - ## 11.7.3 (2019-01-30) - No changes. -- GitLab