summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml24
-rw-r--r--CHANGELOG.md186
-rw-r--r--GITALY_SERVER_VERSION2
-rw-r--r--VERSION2
-rw-r--r--app/assets/javascripts/diffs/components/compare_versions.vue18
-rw-r--r--app/assets/javascripts/dirty_submit/dirty_submit_form.js7
-rw-r--r--app/assets/javascripts/notes/components/note_form.vue3
-rw-r--r--app/assets/stylesheets/components/related_items_list.scss381
-rw-r--r--app/assets/stylesheets/framework/variables.scss5
-rw-r--r--app/assets/stylesheets/pages/diff.scss15
-rw-r--r--app/assets/stylesheets/pages/issues.scss14
-rw-r--r--app/assets/stylesheets/pages/issues/issue_count_badge.scss6
-rw-r--r--app/assets/stylesheets/pages/merge_requests.scss29
-rw-r--r--app/controllers/concerns/uploads_actions.rb12
-rw-r--r--app/controllers/projects_controller.rb16
-rw-r--r--app/controllers/uploads_controller.rb4
-rw-r--r--app/helpers/application_helper.rb11
-rw-r--r--app/models/clusters/applications/runner.rb2
-rw-r--r--app/models/issue.rb3
-rw-r--r--app/models/label.rb1
-rw-r--r--app/uploaders/personal_file_uploader.rb18
-rw-r--r--app/views/layouts/_init_client_detection_flags.html.haml7
-rw-r--r--app/views/layouts/application.html.haml3
-rw-r--r--app/views/projects/_activity.html.haml2
-rw-r--r--app/views/projects/issues/_merge_requests.html.haml66
-rw-r--r--app/views/projects/issues/_merge_requests_status.html.haml22
-rw-r--r--app/workers/build_finished_worker.rb26
-rw-r--r--app/workers/expire_pipeline_cache_worker.rb28
-rw-r--r--changelogs/unreleased/18667-handle-push-opts.yml5
-rw-r--r--changelogs/unreleased/23367-clarify-docs-allow-failure.yml5
-rw-r--r--changelogs/unreleased/27861-add-markdown-editing-buttons-to-the-file-editor.yml5
-rw-r--r--changelogs/unreleased/29951-issue-creation-by-email-without-subaddressing.yml5
-rw-r--r--changelogs/unreleased/34758-extend-can-create-cluster-logic.yml5
-rw-r--r--changelogs/unreleased/34758-list-ancestor-clusters.yml5
-rw-r--r--changelogs/unreleased/40270-remove-gitlab-upgrader-completely.yml5
-rw-r--r--changelogs/unreleased/40473-api-support-for-kubernetes-integration.yml5
-rw-r--r--changelogs/unreleased/41766-vue-component.yml5
-rw-r--r--changelogs/unreleased/41766-vuex-store.yml5
-rw-r--r--changelogs/unreleased/42125-extend-override-check-to-also-check-arity.yml5
-rw-r--r--changelogs/unreleased/43623-add-submit-feedback-in-product-feedback-link.yml5
-rw-r--r--changelogs/unreleased/44353-improve-snippet-search-performance.yml5
-rw-r--r--changelogs/unreleased/44984-use-serializer-for-issuable-sidebar.yml5
-rw-r--r--changelogs/unreleased/47007-related-merge-requests-in-issue-design-restyle.yml5
-rw-r--r--changelogs/unreleased/47052-merge-button-does-not-appear-after-rebase-ing.yml5
-rw-r--r--changelogs/unreleased/49056-configure-auto-devops-deployed-applications-with-secrets-that-aren-t-committed-to-the-repo.yml5
-rw-r--r--changelogs/unreleased/49231-import-issues-csv.yml5
-rw-r--r--changelogs/unreleased/50013-add-browser-platform-flags.yml5
-rw-r--r--changelogs/unreleased/51485-new-issue-labels-note.yml5
-rw-r--r--changelogs/unreleased/51606-expanding-a-diff-while-having-an-open-comment-form-will-always-scroll-down-to-the-comment.yml5
-rw-r--r--changelogs/unreleased/51944-redesign-project-lists-ui.yml5
-rw-r--r--changelogs/unreleased/51970-correct-ordering-of-metrics.yml5
-rw-r--r--changelogs/unreleased/51994-disable-merging-labels-in-dropdowns.yml5
-rw-r--r--changelogs/unreleased/52446-hide-ado-project-banner-for-ci-file-or-ci-disabled.yml5
-rw-r--r--changelogs/unreleased/52620-fix-loader-animation-alignment.yml5
-rw-r--r--changelogs/unreleased/52888-status-emoji-should-not-be-added-to-awards-section-on-issue-page-2.yml5
-rw-r--r--changelogs/unreleased/52971-merge-request-file-browser-should-always-be-possible-show-hide.yml5
-rw-r--r--changelogs/unreleased/53020-user-specific-profile-page-settings-fields-don-t-have-help-text-placeholders.yml5
-rw-r--r--changelogs/unreleased/53493-list-id-email-header.yml5
-rw-r--r--changelogs/unreleased/53671-redirect-projects-id-to-project-page.yml5
-rw-r--r--changelogs/unreleased/53696-make-rbac-default.yml5
-rw-r--r--changelogs/unreleased/53714-inconsistent-text-color-for-labels.yml5
-rw-r--r--changelogs/unreleased/53796-discard-draft-comment-button-to-easy-to-accidentally-hit-on-mobile.yml5
-rw-r--r--changelogs/unreleased/53856-changing-group-visibility-does-not-re-enable-save-button.yml6
-rw-r--r--changelogs/unreleased/53907-improve-milestone-links.yml5
-rw-r--r--changelogs/unreleased/53933-include-dates-in-milestone-change-email.yml5
-rw-r--r--changelogs/unreleased/53954-resolved-non-diff-discussions-on-merge-requests-no-longer-show-who-resolved-them-and-when-at-a-glance.yml5
-rw-r--r--changelogs/unreleased/53966-hashed-storage-read-only.yml5
-rw-r--r--changelogs/unreleased/54142-pages-in-project-s-permission-should-be-named-pages-access-control.yml5
-rw-r--r--changelogs/unreleased/54146-fix-calendar-query.yml5
-rw-r--r--changelogs/unreleased/54206-show-the-activity-filter-dropdown-in-discussion-tab-only.yml5
-rw-r--r--changelogs/unreleased/54311-fix-board-add-label.yml5
-rw-r--r--changelogs/unreleased/54386-integrate-mobile-css-framework-into-specific-frameworks.yml5
-rw-r--r--changelogs/unreleased/54427-label-xss.yml5
-rw-r--r--changelogs/unreleased/54736-sign-in-bottom-margin.yml5
-rw-r--r--changelogs/unreleased/54786-mr-empty-file-display.yml5
-rw-r--r--changelogs/unreleased/54814-sidebar-styling-updates.yml5
-rw-r--r--changelogs/unreleased/54844-report-syntax-dep-scan-ado.yml5
-rw-r--r--changelogs/unreleased/54953-error-500-viewing-merge-request-due-to-nil-commit_email_hostname.yml5
-rw-r--r--changelogs/unreleased/54981-extended-user-centric-tooltips-add-missing-cases.yml5
-rw-r--r--changelogs/unreleased/55191-update-workhorse.yml5
-rw-r--r--changelogs/unreleased/55192-about-link-in-new-window.yml5
-rw-r--r--changelogs/unreleased/55266-fix-incorrect-due-date-parsing.yml5
-rw-r--r--changelogs/unreleased/55293-split-bio-into-individual-line-in-extended-user-tooltips.yml5
-rw-r--r--changelogs/unreleased/55344-only-prompt-user-once-when-navigating-away-from-file-editor.yml5
-rw-r--r--changelogs/unreleased/55369-update-milestone-sort-to-say-say-milestone-due-date.yml5
-rw-r--r--changelogs/unreleased/55484-fix-edit-button.yml4
-rw-r--r--changelogs/unreleased/55669-redesign-project-lists-ui-further-improvements.yml5
-rw-r--r--changelogs/unreleased/55670-remove-app-views-shared-issuable-_filter-html-haml.yml5
-rw-r--r--changelogs/unreleased/55716-update-cert-manager-chart-from-v0-5-0-to-v0-5-2.yml5
-rw-r--r--changelogs/unreleased/55721-externalization-for-pipeline-tags.yml5
-rw-r--r--changelogs/unreleased/55755-user-activity-is-stuck-loading-when-there-is-none.yml5
-rw-r--r--changelogs/unreleased/55836-docs-fix-navigation-style-in-docs.yml5
-rw-r--r--changelogs/unreleased/55838-remove-gem-install-bundler-from-docker-based-ruby-environments.yml5
-rw-r--r--changelogs/unreleased/55883-modal-header-titles-have-an-unnecessary-top-margin.yml5
-rw-r--r--changelogs/unreleased/55958-inconsistent-spacing-between-note-and-user-avatar-in-discussions.yml5
-rw-r--r--changelogs/unreleased/55966-when-ref-is-ambiguous-createpipelineservice-raises-an-error.yml5
-rw-r--r--changelogs/unreleased/56076-releases-margin.yml5
-rw-r--r--changelogs/unreleased/56371-don-t-check-confidential-issues-for-spam.yml5
-rw-r--r--changelogs/unreleased/56547-limit-sidekiq-logging-based-on-argument-size.yml5
-rw-r--r--changelogs/unreleased/ab-50763-persist-index.yml5
-rw-r--r--changelogs/unreleased/ac-releases-api-with-assets.yml5
-rw-r--r--changelogs/unreleased/ac-releases-api.yml5
-rw-r--r--changelogs/unreleased/ac-releases-name-sha-author.yml5
-rw-r--r--changelogs/unreleased/add-new-nginx-metrics.yml5
-rw-r--r--changelogs/unreleased/allow-basic-auth-on-go-get-middleware.yml5
-rw-r--r--changelogs/unreleased/allow_collaboration_status_work.yml5
-rw-r--r--changelogs/unreleased/blackst0ne-bump-rails-cve-2018-16476.yml5
-rw-r--r--changelogs/unreleased/blackst0ne-convert-specs-rails5-style.yml5
-rw-r--r--changelogs/unreleased/blackst0ne-improve-encoding-helper-spec.yml5
-rw-r--r--changelogs/unreleased/bvl-hide-confidential-events-take2.yml5
-rw-r--r--changelogs/unreleased/ccr-49289_milestone_link.yml5
-rw-r--r--changelogs/unreleased/ci-dropdown-hidden-bug.yml5
-rw-r--r--changelogs/unreleased/depracated-migration-inheritance.yml5
-rw-r--r--changelogs/unreleased/deprecated-actiondispatch-paramsparser.yml5
-rw-r--r--changelogs/unreleased/deprecated-alias-method-chain.yml6
-rw-r--r--changelogs/unreleased/deprecated-callback-false.yml6
-rw-r--r--changelogs/unreleased/deprecated-comparing-actioncontroller-params-hash.yml6
-rw-r--r--changelogs/unreleased/deprecated-delete-all-params.yml5
-rw-r--r--changelogs/unreleased/deprecated-directly-inheriting-migration.yml5
-rw-r--r--changelogs/unreleased/deprecated-insert-sql.yml5
-rw-r--r--changelogs/unreleased/deprecated-migration-inheritance-2.yml5
-rw-r--r--changelogs/unreleased/deprecated-passing-activerecord-objects.yml5
-rw-r--r--changelogs/unreleased/deprecated-positional-seperator-parameter.yml5
-rw-r--r--changelogs/unreleased/deprecated-positional-spec-arguments.yml5
-rw-r--r--changelogs/unreleased/deprecated-redirect-back.yml5
-rw-r--r--changelogs/unreleased/diff-empty-state-fixes.yml5
-rw-r--r--changelogs/unreleased/dm-note-email-image-diff-discussion.yml5
-rw-r--r--changelogs/unreleased/docs-releases-api.yml5
-rw-r--r--changelogs/unreleased/error_tracking_feature_flag_fe.yml5
-rw-r--r--changelogs/unreleased/feature-gb-expose-ci-api-url-variable.yml5
-rw-r--r--changelogs/unreleased/feature-option-to-make-variables-protected.yml5
-rw-r--r--changelogs/unreleased/fix-55448.yml5
-rw-r--r--changelogs/unreleased/fix-calendar-events-fetching-error.yml5
-rw-r--r--changelogs/unreleased/fix-n-plus-1-queries-projects.yml6
-rw-r--r--changelogs/unreleased/fix-runner-eternal-loop-when-update-job-result.yml5
-rw-r--r--changelogs/unreleased/fix-udpate-head-pipeline-method.yml5
-rw-r--r--changelogs/unreleased/fj-44679-skip-per-commit-validations.yml5
-rw-r--r--changelogs/unreleased/fj-fix-lfs-image-comments-diffs.yml5
-rw-r--r--changelogs/unreleased/force-redeploy-on-updated-secrets.yml5
-rw-r--r--changelogs/unreleased/force-reload-arguments-2.yml5
-rw-r--r--changelogs/unreleased/gt-externalize-app-views-shared-notes.yml5
-rw-r--r--changelogs/unreleased/gt-remove-unnecessary-line-before-reply-holder.yml5
-rw-r--r--changelogs/unreleased/gt-reorder-group-sidebar-menu-items.yml5
-rw-r--r--changelogs/unreleased/gt-update-environment-breadcrumb.yml5
-rw-r--r--changelogs/unreleased/gt-update-navigation-theme-colors.yml5
-rw-r--r--changelogs/unreleased/include-project.yml5
-rw-r--r--changelogs/unreleased/include-templates.yml5
-rw-r--r--changelogs/unreleased/jivl-update-placeholder-sentry-config.yml5
-rw-r--r--changelogs/unreleased/jlenny-CI_COMMIT_SHORT_SHA.yml5
-rw-r--r--changelogs/unreleased/knative-prometheus.yml5
-rw-r--r--changelogs/unreleased/knative-rbac-check.yml5
-rw-r--r--changelogs/unreleased/mk-avoid-read-only-error.yml5
-rw-r--r--changelogs/unreleased/none-syntax-highlighting.yml5
-rw-r--r--changelogs/unreleased/osw-cache-discussions-diff-highlighting.yml6
-rw-r--r--changelogs/unreleased/osw-fix-quick-suggestion-application-being-reverted.yml5
-rw-r--r--changelogs/unreleased/pl-reactive-caching-primary_key.yml5
-rw-r--r--changelogs/unreleased/remote-mirror-update-failed-notification.yml5
-rw-r--r--changelogs/unreleased/remove-rails4-specific-code.yml5
-rw-r--r--changelogs/unreleased/remove-rails4-support.yml5
-rw-r--r--changelogs/unreleased/s3-directories-get.yml6
-rw-r--r--changelogs/unreleased/security-48259-private-snippet.yml5
-rw-r--r--changelogs/unreleased/security-53543-user-keeps-access-to-mr-issue-when-removed-from-team.yml5
-rw-r--r--changelogs/unreleased/security-54377-label-milestone-name-xss.yml5
-rw-r--r--changelogs/unreleased/security-bvl-fix-cross-project-mr-exposure.yml5
-rw-r--r--changelogs/unreleased/security-fix-ssrf-import-url-remote-mirror.yml5
-rw-r--r--changelogs/unreleased/security-master-group-cicd-settings-accessible-to-maintainer.yml5
-rw-r--r--changelogs/unreleased/security-master-guests-jobs-api.yml5
-rw-r--r--changelogs/unreleased/security-master-secret-ci-variables-exposed.yml5
-rw-r--r--changelogs/unreleased/security-master-url-rel.yml5
-rw-r--r--changelogs/unreleased/security-refs-available-to-project-guest.yml5
-rw-r--r--changelogs/unreleased/security-todos_not_redacted_for_guests.yml5
-rw-r--r--changelogs/unreleased/sh-bump-omniauth-google-gem.yml5
-rw-r--r--changelogs/unreleased/sh-cache-avatar-paths.yml5
-rw-r--r--changelogs/unreleased/sh-carrierwave-patch-google-acl.yml5
-rw-r--r--changelogs/unreleased/sh-drop-webhooks-project-export.yml5
-rw-r--r--changelogs/unreleased/sh-fix-branches-api-timeout.yml5
-rw-r--r--changelogs/unreleased/sh-fix-github-import-without-oauth2-config.yml5
-rw-r--r--changelogs/unreleased/sh-fix-issue-55822.yml5
-rw-r--r--changelogs/unreleased/sh-fix-issue-55914.yml5
-rw-r--r--changelogs/unreleased/sh-fix-snippet-uploads-path-lookup.yml5
-rw-r--r--changelogs/unreleased/sh-skip-validation-visibility-changed.yml5
-rw-r--r--changelogs/unreleased/spec-positional-arguments.yml5
-rw-r--r--changelogs/unreleased/specs-positional-arguments.yml5
-rw-r--r--changelogs/unreleased/support-gitaly-tls.yml5
-rw-r--r--changelogs/unreleased/tc-remove-20181218192239-migration.yml5
-rw-r--r--changelogs/unreleased/triggermesh-knative-version.yml5
-rw-r--r--changelogs/unreleased/tz-user-popover-follow-up.yml4
-rw-r--r--changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-43.yml5
-rw-r--r--changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-45.yml5
-rw-r--r--changelogs/unreleased/user-update-head-pipeline-worker.yml5
-rw-r--r--changelogs/unreleased/winh-dropdown-title-padding.yml5
-rw-r--r--changelogs/unreleased/winh-merge-request-commit-context.yml5
-rw-r--r--changelogs/unreleased/winh-princess-mononospace.yml5
-rw-r--r--changelogs/unreleased/winh-upgrade-gitlab-ui.yml5
-rw-r--r--changelogs/unreleased/zj-backup-restore-object-pools.yml5
-rw-r--r--config/routes/project.rb2
-rw-r--r--danger/documentation/Dangerfile2
-rw-r--r--doc/administration/gitaly/index.md19
-rw-r--r--doc/ci/environments.md84
-rw-r--r--doc/ci/review_apps/img/view_on_env_blob.png (renamed from doc/ci/img/view_on_env_blob.png)bin11889 -> 11889 bytes
-rw-r--r--doc/ci/review_apps/img/view_on_env_mr.png (renamed from doc/ci/img/view_on_env_mr.png)bin295181 -> 295181 bytes
-rw-r--r--doc/ci/review_apps/img/view_on_mr_widget.png (renamed from doc/ci/img/view_on_mr_widget.png)bin21942 -> 21942 bytes
-rw-r--r--doc/ci/review_apps/index.md85
-rw-r--r--doc/development/automatic_ce_ee_merge.md4
-rw-r--r--doc/development/sidekiq_debugging.md9
-rw-r--r--doc/development/testing_guide/flaky_tests.md33
-rw-r--r--doc/update/11.5-to-11.6.md8
-rw-r--r--doc/update/11.6-to-11.7.md8
-rw-r--r--doc/update/11.7-to-11.8.md7
-rw-r--r--doc/user/project/clusters/index.md7
-rw-r--r--doc/user/project/index.md21
-rw-r--r--doc/user/project/issues/csv_import.md26
-rw-r--r--doc/user/project/issues/img/import_csv_button.pngbin4342 -> 0 bytes
-rw-r--r--doc/user/project/issues/index.md16
-rw-r--r--doc/user/project/merge_requests/index.md6
-rw-r--r--doc/user/project/operations/error_tracking.md2
-rw-r--r--doc/user/project/pipelines/settings.md65
-rw-r--r--lib/gitlab/ci/pipeline/chain/build.rb1
-rw-r--r--lib/gitlab/ci/pipeline/chain/populate.rb4
-rw-r--r--lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml22
-rw-r--r--lib/gitlab/sidekiq_logging/structured_logger.rb17
-rw-r--r--locale/gitlab.pot9
-rw-r--r--package.json1
-rw-r--r--qa/qa/git/repository.rb114
-rw-r--r--qa/qa/resource/repository/push.rb29
-rw-r--r--spec/controllers/projects_controller_spec.rb53
-rw-r--r--spec/controllers/uploads_controller_spec.rb14
-rw-r--r--spec/features/groups_spec.rb4
-rw-r--r--spec/features/issuables/markdown_references/internal_references_spec.rb4
-rw-r--r--spec/features/issues/user_creates_branch_and_merge_request_spec.rb2
-rw-r--r--spec/helpers/application_helper_spec.rb15
-rw-r--r--spec/javascripts/diffs/components/compare_versions_spec.js4
-rw-r--r--spec/javascripts/dirty_submit/dirty_submit_collection_spec.js6
-rw-r--r--spec/javascripts/dirty_submit/dirty_submit_form_spec.js28
-rw-r--r--spec/javascripts/dirty_submit/helper.js29
-rw-r--r--spec/javascripts/lib/utils/common_utils_spec.js40
-rw-r--r--spec/javascripts/matchers.js39
-rw-r--r--spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb25
-rw-r--r--spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb31
-rw-r--r--spec/models/clusters/applications/runner_spec.rb6
-rw-r--r--spec/models/issue_spec.rb45
-rw-r--r--spec/requests/api/submodules_spec.rb4
-rw-r--r--spec/routing/project_routing_spec.rb4
-rw-r--r--spec/support/shared_examples/dirty_submit_form_shared_examples.rb26
-rw-r--r--spec/uploaders/personal_file_uploader_spec.rb32
-rw-r--r--yarn.lock12
246 files changed, 1591 insertions, 1186 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 68dea56a67d..383300a895f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -947,6 +947,20 @@ no_ee_check:
- //@gitlab-org/gitlab-ce
# GitLab Review apps
+review-build-cng:
+ <<: *single-script-job
+ variables:
+ <<: *single-script-job-variables
+ SCRIPT_NAME: trigger-build
+ script:
+ - gem install gitlab --no-document
+ - apk add --update openssl curl jq
+ - wget $CI_PROJECT_URL/raw/$CI_COMMIT_SHA/scripts/review_apps/review-apps.sh
+ - chmod 755 review-apps.sh
+ - source ./review-apps.sh
+ - wait_for_job_to_be_done "gitlab:assets:compile"
+ - BUILD_TRIGGER_TOKEN=$REVIEW_APPS_BUILD_TRIGGER_TOKEN ./$SCRIPT_NAME cng
+
review-deploy:
<<: *review-base
retry: 2
@@ -961,15 +975,14 @@ review-deploy:
<<: *review-environment
on_stop: review-stop
before_script:
- - apk update && apk add jq
- - gem install gitlab --no-document
- script:
- export GITLAB_SHELL_VERSION=$(<GITLAB_SHELL_VERSION)
- export GITALY_VERSION=$(<GITALY_SERVER_VERSION)
- export GITLAB_WORKHORSE_VERSION=$(<GITLAB_WORKHORSE_VERSION)
+ - apk update && apk add jq
+ - gem install gitlab --no-document
- source ./scripts/review_apps/review-apps.sh
- - wait_for_job_to_be_done "gitlab:assets:compile"
- - BUILD_TRIGGER_TOKEN=$REVIEW_APPS_BUILD_TRIGGER_TOKEN ./scripts/trigger-build cng
+ script:
+ - wait_for_job_to_be_done "review-build-cng"
- check_kube_domain
- download_gitlab_chart
- ensure_namespace
@@ -980,7 +993,6 @@ review-deploy:
.review-qa-base: &review-qa-base
<<: *review-docker
- retry: 2
allow_failure: true
variables:
<<: *review-docker-variables
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b47dc4e19ac..c1deab58d38 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,192 @@
documentation](doc/development/changelog.md) for instructions on adding your own
entry.
+## 11.7.0 (2019-01-22)
+
+### Security (14 changes, 1 of them is from the community)
+
+- Escape label and milestone titles to prevent XSS in GFM autocomplete. !2693
+- Bump Ruby on Rails to 5.0.7.1. !23396 (@blackst0ne)
+- Delete confidential todos for user when downgraded to Guest.
+- Project guests no longer are able to see refs page.
+- Set URL rel attribute for broken URLs.
+- Prevent leaking protected variables for ambiguous refs.
+- Authorize before reading job information via API.
+- Allow changing group CI/CD settings only for owners.
+- Fix SSRF with import_url and remote mirror url.
+- Don't expose cross project repositories through diffs when creating merge reqeusts.
+- Validate bundle files before unpacking them.
+- Issuable no longer is visible to users when project can't be viewed.
+- Escape html entities in LabelReferenceFilter when no label found.
+- Prevent private snippets from being embeddable.
+
+### Removed (3 changes, 1 of them is from the community)
+
+- Removes all instances of deprecated Gitlab Upgrader calls. !23603 (@jwolen)
+- Removed discard draft comment button form notes. !24185
+- Remove migration to backfill project_repositories for legacy storage projects. !24299
+
+### Fixed (42 changes, 7 of them are from the community)
+
+- Prevent awards emoji being updated when updating status. !23470
+- Allow merge after rebase without page refresh on FF repositories. !23572
+- Prevent admins from attempting hashed storage migration on read only DB. !23597
+- Correct the ordering of metrics on the performance dashboard. !23630
+- Display empty files properly on MR diffs. !23671 (Sean Nichols)
+- Allow GitHub imports via token even if OAuth2 provider not configured. !23703
+- Update header navigation theme colors. !23734 (George Tsiolis)
+- Fix login box bottom margins on signin page. !23739 (@gear54)
+- Return an ApplicationSetting in CurrentSettings. !23766
+- Fix bug commenting on LFS images. !23812
+- Only prompt user once when navigating away from file editor. !23820 (Sam Bigelow)
+- Display commit ID for discussions made on merge request commits. !23837
+- Stop autofocusing on diff comment after initial mount. !23849
+- Fix object storage not working properly with Google S3 compatibility. !23858
+- Fix project calendar feed when sorted by priority. !23870
+- Fix edit button disappearing in issue title. !23948 (Ruben Moya)
+- Aligns build loader animation with the job log. !23959
+- Allow 'rake gitlab:cleanup:remote_upload_files' to read bucket files without having permissions to see all buckets. !23981
+- Correctly externalize pipeline tags. !24028
+- Fix error when creating labels in a new issue in the boards page. !24039 (Ruben Moya)
+- Use 'parsePikadayDate' to parse due date string. !24045
+- Fix commit SHA not showing in merge request compare dropdown. !24084
+- Remove top margin in modal header titles. !24108
+- Drop Webhooks from project import/export config. !24121
+- Only validate project visibility when it has changed. !24142
+- Resolve About this feature link should open in new window. !24149
+- Add syntax highlighting to suggestion diff. !24156
+- Fix Bitbucket Server import only including first 25 pull requests. !24178
+- Enable caching for records which primary key is not `id`. !24245
+- Adjust applied suggestion reverting previous changes. !24250
+- Fix unexpected exception by failure of finding an actual head pipeline. !24257
+- Fix broken templated "Too many changes to show" text. !24282
+- Fix requests profiler in admin page not rendering HTML properly. !24291
+- Fix no avatar not showing in user selection box. !24346
+- Upgrade to gitaly 1.12.1. !24361
+- Fix runner eternal loop when update job result. !24481
+- Fix notification email for image diff notes.
+- Fixed merge request diffs empty states.
+- Fixed diff suggestions removing dashes.
+- Don't hide CI dropdown behind diff summary. (gfyoung)
+- Fix spacing on discussions.
+- Fixes missing margin in releases block.
+
+### Changed (22 changes, 8 of them are from the community)
+
+- Show clusters of ancestors in cluster list page. !22996
+- Remove unnecessary line before reply holder. !23092 (George Tsiolis)
+- Make the Pages permission setting more clear. !23146
+- Disable merging of labels with same names. !23265
+- Allow basic authentication on go get middleware. !23497 (Morty Choi @mortyccp)
+- No longer require email subaddressing for issue creation by email. !23523
+- Adjust padding of .dropdown-title to comply with design specs. !23546
+- Make commit IDs in merge request discussion header monospace. !23562
+- Update environments breadcrumb. !23751 (George Tsiolis)
+- Add date range in milestone change email notifications. !23762
+- Require Knative to be installed only on an RBAC kubernetes cluster. !23807 (Chris Baumbauer)
+- Fix label and header styles in the job details sidebar. !23816 (Nathan Friend)
+- Add % prefix to milestone reference links. !23928
+- Reorder sidebar menu item for group clusters. !24001 (George Tsiolis)
+- Support CURD operation for Links as one of the Release assets. !24056
+- Upgrade Omniauth and JWT gems to switch away from Google+ API. !24068
+- Renames Milestone sort into Milestone due date. !24080 (Jacopo Beschi @jacopo-beschi)
+- Discussion filter only displayed in discussions tab for merge requests. !24082
+- Make RBAC enabled default for new clusters. !24119
+- Hashed Storage: Only set as `read_only` when starting the per-project migration. !24128
+- Knative version bump 0.1.3 -> 0.2.2. (Chris Baumbauer)
+- Show message on non-diff discussions.
+
+### Performance (7 changes)
+
+- Fix some N+1 queries related to Admin Dashboard, User Dashboards and Activity Stream. !23034
+- Add indexes to speed up CI query. !23188
+- Improve the loading time on merge request's discussion page by caching diff highlight. !23857
+- Cache avatar URLs and paths within a request. !23950
+- Improve snippet search performance by removing duplicate counts. !23952
+- Skip per-commit validations already evaluated. !23984
+- Fix timeout issues retrieving branches via API. !24034
+
+### Added (29 changes, 6 of them are from the community)
+
+- Handle ci.skip push option. !15643 (Jonathon Reinhart)
+- Add NGINX 0.16.0 and above metrics. !22133
+- Add project milestone link. !22552
+- Support tls communication in gitaly. !22602
+- Add option to make ci variables protected by default. !22744 (Alexis Reigel)
+- Add project identifier as List-Id email Header to ease filtering. !22817 (Olivier Crête)
+- Add markdown helper buttons to file editor. !23480
+- Allow to include templates in gitlab-ci.yml. !23495
+- Extend override check to also check arity. !23498 (Jacopo Beschi @jacopo-beschi)
+- Add importing of issues from CSV file. !23532
+- Add submit feedback link to help dropdown. !23547
+- Send a notification email to project maintainers when a mirror update fails. !23595
+- Restore Object Pools when restoring an object pool. !23682
+- Creates component for release block. !23697
+- Configure Auto DevOps deployed applications with secrets from prefixed CI variables. !23719
+- Add name, author_id, and sha to releases table. !23763
+- Display a list of Sentry Issues in GitLab. !23770
+- Releases API. !23795
+- Creates frontend app for releases. !23796
+- Add new pipeline variable CI_COMMIT_SHORT_SHA. !23822
+- Create system notes on issue / MR creation when labels, milestone, or due date is set. !23859
+- Adds API documentation for releases. !23901
+- Add API Support for Kubernetes integration. !23922
+- Expose CI/CD predefined variable `CI_API_V4_URL`. !23936
+- Add Knative metrics to Prometheus. !23972 (Chris Baumbauer)
+- Use reports syntax for Dependency scanning in Auto DevOps. !24081
+- Allow to include files from another projects in gitlab-ci.yml. !24101
+- User Popovers for Commit Infos, Member Lists and Snippets. !24132
+- Add no-color theme for syntax highlighting. (khm)
+
+### Other (45 changes, 30 of them are from the community)
+
+- Redesign project lists UI. !22682
+- [Rails5.1] Update functional specs to use new keyword format. !23095 (@blackst0ne)
+- Update a condition to visibility a merge request collaboration message. !23104 (Harry Kiselev)
+- Remove framework/mobile.scss. !23301 (Takuya Noguchi)
+- Passing the separator argument as a positional parameter is deprecated. !23334 (Jasper Maes)
+- Clarifies docs about CI `allow_failure`. !23367 (C.J. Jameson)
+- Refactor issuable sidebar to use serializer. !23379
+- Refactor the logic of updating head pipelines for merge requests. !23502
+- Allow user to add Kubernetes cluster for clusterable when there are ancestor clusters. !23569
+- Adds explanatory text to input fields on user profile settings page. !23673
+- Externalize strings from `/app/views/shared/notes`. !23696 (Tao Wang)
+- Remove rails 4 support in CI, Gemfiles, bin/ and config/. !23717 (Jasper Maes)
+- Fix calendar events fetching error on private profile page. !23718 (Harry Kiselev)
+- Update GitLab Workhorse to v8.0.0. !23740
+- Hide confidential events in the API. !23746
+- Changed Userpopover Fixtures and shadow color. !23768
+- Fix deprecation: Passing conditions to delete_all is deprecated. !23817 (Jasper Maes)
+- Fix deprecation: Passing ActiveRecord::Base objects to sanitize_sql_hash_for_assignment. !23818 (Jasper Maes)
+- Remove rails4 specific code. !23847 (Jasper Maes)
+- Remove deprecated ActionDispatch::ParamsParser. !23848 (Jasper Maes)
+- Fix deprecation: Comparing equality between ActionController::Parameters and a Hash is deprecated. !23855 (Jasper Maes)
+- Fix deprecation: Directly inheriting from ActiveRecord::Migration is deprecated. !23884 (Jasper Maes)
+- Fix deprecation: alias_method_chain is deprecated. Please, use Module#prepend instead. !23887 (Jasper Maes)
+- Update specs to exclude possible false positive pass. !23893 (@blackst0ne)
+- Passing an argument to force an association to reload is now deprecated. !23894 (Jasper Maes)
+- ActiveRecord::Migration -> ActiveRecord::Migration[5.0]. !23910 (Jasper Maes)
+- Split bio into individual line in extended user tooltips. !23940
+- Fix deprecation: redirect_to :back is deprecated. !23943 (Jasper Maes)
+- Fix deprecation: insert_sql is deprecated and will be removed. !23944 (Jasper Maes)
+- Upgrade @gitlab/ui to 1.16.2. !23946
+- convert specs in javascripts/ and support/ to new syntax. !23947 (Jasper Maes)
+- Remove deprecated xhr from specs. !23949 (Jasper Maes)
+- Remove app/views/shared/issuable/_filter.html.haml. !24008 (Takuya Noguchi)
+- Fix deprecation: Using positional arguments in integration tests. !24009 (Jasper Maes)
+- UI improvements for redesigned project lists. !24011
+- Update cert-manager chart from v0.5.0 to v0.5.2. !24025 (Takuya Noguchi)
+- Hide spinner on empty activites list on user profile overview. !24063
+- Don't show Auto DevOps enabled banner for projects with CI file or CI disabled. !24067
+- Update GitLab Runner Helm Chart to 0.1.43. !24083
+- Fix navigation style in docs. !24090 (Takuya Noguchi)
+- Remove gem install bundler from Docker-based Ruby environments. !24093 (Takuya Noguchi)
+- Fix deprecation: Using positional arguments in integration tests. !24110 (Jasper Maes)
+- Fix deprecation: returning false in Active Record and Active Model callbacks will not implicitly halt a callback chain. !24134 (Jasper Maes)
+- ActiveRecord::Migration -> ActiveRecord::Migration[5.0] for AddIndexesToCiBuildsAndPipelines. !24167 (Jasper Maes)
+- Update url placeholder for the sentry configuration page. !24338
+
+
## 11.6.5 (2019-01-17)
### Fixed (5 changes)
diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION
index f88cf52e6ef..cd99d386a8d 100644
--- a/GITALY_SERVER_VERSION
+++ b/GITALY_SERVER_VERSION
@@ -1 +1 @@
-1.13.0 \ No newline at end of file
+1.14.0 \ No newline at end of file
diff --git a/VERSION b/VERSION
index 74f35bff618..106400c03a2 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-11.7.0-pre
+11.8.0-pre
diff --git a/app/assets/javascripts/diffs/components/compare_versions.vue b/app/assets/javascripts/diffs/components/compare_versions.vue
index f0a827be7e8..3770b5c8864 100644
--- a/app/assets/javascripts/diffs/components/compare_versions.vue
+++ b/app/assets/javascripts/diffs/components/compare_versions.vue
@@ -3,6 +3,7 @@ import { mapActions, mapGetters, mapState } from 'vuex';
import { GlTooltipDirective, GlLink, GlButton } from '@gitlab/ui';
import { __ } from '~/locale';
import { getParameterValues, mergeUrlParams } from '~/lib/utils/url_utility';
+import { polyfillSticky } from '~/lib/utils/sticky';
import Icon from '~/vue_shared/components/icon.vue';
import CompareVersionsDropdown from './compare_versions_dropdown.vue';
@@ -54,10 +55,19 @@ export default {
showDropdowns() {
return !this.commit && this.mergeRequestDiffs.length;
},
+ fileTreeIcon() {
+ return this.showTreeList ? 'collapse-left' : 'expand-left';
+ },
+ toggleFileBrowserTitle() {
+ return this.showTreeList ? __('Hide file browser') : __('Show file browser');
+ },
baseVersionPath() {
return this.mergeRequestDiff.base_version_path;
},
},
+ mounted() {
+ polyfillSticky(this.$el);
+ },
methods: {
...mapActions('diffs', [
'setInlineDiffViewType',
@@ -73,7 +83,7 @@ export default {
</script>
<template>
- <div class="mr-version-controls">
+ <div class="mr-version-controls" :class="{ 'is-fileTreeOpen': showTreeList }">
<div class="mr-version-menus-container content-block">
<button
v-gl-tooltip.hover
@@ -82,10 +92,10 @@ export default {
:class="{
active: showTreeList,
}"
- :title="__('Toggle file browser')"
+ :title="toggleFileBrowserTitle"
@click="toggleShowTreeList"
>
- <icon name="hamburger" />
+ <icon :name="fileTreeIcon" />
</button>
<div v-if="showDropdowns" class="d-flex align-items-center compare-versions-container">
Changes between
@@ -108,7 +118,7 @@ export default {
{{ __('Viewing commit') }}
<gl-link :href="commit.commit_url" class="monospace">{{ commit.short_id }}</gl-link>
</div>
- <div class="inline-parallel-buttons d-none d-md-flex ml-auto">
+ <div class="inline-parallel-buttons d-none d-lg-flex ml-auto">
<gl-button
v-if="commit || startVersion"
:href="latestVersionPath"
diff --git a/app/assets/javascripts/dirty_submit/dirty_submit_form.js b/app/assets/javascripts/dirty_submit/dirty_submit_form.js
index d8d0fa1fac4..00e41dd0301 100644
--- a/app/assets/javascripts/dirty_submit/dirty_submit_form.js
+++ b/app/assets/javascripts/dirty_submit/dirty_submit_form.js
@@ -25,15 +25,16 @@ class DirtySubmitForm {
DirtySubmitForm.THROTTLE_DURATION,
);
this.form.addEventListener('input', throttledUpdateDirtyInput);
+ this.form.addEventListener('change', throttledUpdateDirtyInput);
this.form.addEventListener('submit', event => this.formSubmit(event));
}
updateDirtyInput(event) {
- const input = event.target;
+ const { target } = event;
- if (!input.dataset.isDirtySubmitInput) return;
+ if (!target.dataset.isDirtySubmitInput) return;
- this.updateDirtyInputs(input);
+ this.updateDirtyInputs(target);
this.toggleSubmission();
}
diff --git a/app/assets/javascripts/notes/components/note_form.vue b/app/assets/javascripts/notes/components/note_form.vue
index 6dbb858e93d..269b4a4b117 100644
--- a/app/assets/javascripts/notes/components/note_form.vue
+++ b/app/assets/javascripts/notes/components/note_form.vue
@@ -6,6 +6,7 @@ import issueWarning from '../../vue_shared/components/issue/issue_warning.vue';
import markdownField from '../../vue_shared/components/markdown/field.vue';
import issuableStateMixin from '../mixins/issuable_state';
import resolvable from '../mixins/resolvable';
+import { __ } from '~/locale';
export default {
name: 'NoteForm',
@@ -33,7 +34,7 @@ export default {
saveButtonTitle: {
type: String,
required: false,
- default: 'Save comment',
+ default: __('Save comment'),
},
discussion: {
type: Object,
diff --git a/app/assets/stylesheets/components/related_items_list.scss b/app/assets/stylesheets/components/related_items_list.scss
new file mode 100644
index 00000000000..048a5c0300c
--- /dev/null
+++ b/app/assets/stylesheets/components/related_items_list.scss
@@ -0,0 +1,381 @@
+$item-path-max-width: 160px;
+$item-milestone-max-width: 120px;
+$item-weight-max-width: 48px;
+
+.related-items-list {
+ padding: $gl-padding-4;
+
+ &,
+ .list-item:last-child {
+ margin-bottom: 0;
+ }
+}
+
+.item-body {
+ display: flex;
+ position: relative;
+ align-items: center;
+ padding: $gl-padding-8;
+ line-height: $gl-line-height;
+
+ .item-contents {
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ flex-grow: 1;
+ }
+
+ .issue-token-state-icon-open,
+ .issue-token-state-icon-closed,
+ .confidential-icon,
+ .item-milestone .icon,
+ .item-weight .board-card-info-icon {
+ min-width: $gl-padding;
+ cursor: help;
+ }
+
+ .issue-token-state-icon-open,
+ .issue-token-state-icon-closed {
+ margin-right: $gl-padding-4;
+ }
+
+ .confidential-icon {
+ align-self: baseline;
+ color: $orange-600;
+ margin-right: $gl-padding-4;
+ }
+
+ .item-title {
+ flex-basis: 100%;
+ margin-bottom: $gl-padding-8;
+ font-size: $gl-font-size-small;
+
+ &.mr-title {
+ font-weight: $gl-font-weight-bold;
+ }
+
+ .sortable-link {
+ max-width: 85%;
+ }
+
+ .issue-token-state-icon-open,
+ .issue-token-state-icon-closed {
+ display: none;
+ }
+ }
+
+ .item-meta {
+ display: flex;
+ flex-wrap: wrap;
+ flex-basis: 100%;
+ font-size: $gl-font-size-small;
+ color: $gl-text-color-secondary;
+
+ .item-meta-child {
+ order: 0;
+ display: flex;
+ flex-wrap: wrap;
+ flex-basis: 100%;
+
+ .item-due-date,
+ .item-weight {
+ margin-left: $gl-padding-8;
+ }
+
+ .item-milestone,
+ .item-weight {
+ cursor: help;
+ }
+
+ .item-milestone {
+ text-decoration: none;
+ max-width: $item-milestone-max-width;
+ }
+
+ .item-due-date {
+ margin-right: 0;
+ }
+
+ .item-weight {
+ margin-right: 0;
+ max-width: $item-weight-max-width;
+ }
+ }
+
+ .item-path-id .path-id-text,
+ .item-milestone .milestone-title,
+ .item-due-date,
+ .item-weight .board-card-info-text {
+ color: $gl-text-color-secondary;
+ display: inline-block;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ }
+
+ .item-path-id {
+ margin-top: $gl-padding-4;
+ font-size: $gl-font-size-xs;
+ white-space: nowrap;
+
+ .path-id-text {
+ font-weight: $gl-font-weight-bold;
+ max-width: $item-path-max-width;
+ }
+
+ .issue-token-state-icon-open,
+ .issue-token-state-icon-closed {
+ display: block;
+ }
+
+ &:not(.mr-item-path) {
+ order: 1;
+ }
+ }
+
+ .item-milestone .ic-clock {
+ color: $gl-text-color-tertiary;
+ margin-right: $gl-padding-4;
+ }
+
+ .item-assignees {
+ order: 2;
+ align-self: flex-end;
+ align-items: center;
+ margin-left: auto;
+
+ .user-avatar-link {
+ margin-right: -$gl-padding-4;
+
+ &:nth-of-type(1) {
+ z-index: 2;
+ }
+
+ &:nth-of-type(2) {
+ z-index: 1;
+ }
+
+ &:last-child {
+ margin-right: 0;
+ }
+ }
+
+ .avatar {
+ height: $gl-padding;
+ width: $gl-padding;
+ margin-right: 0;
+ vertical-align: bottom;
+ }
+
+ .avatar-counter {
+ height: $gl-padding;
+ border: 1px solid transparent;
+ background-color: $gl-text-color-tertiary;
+ font-weight: $gl-font-weight-bold;
+ padding: 0 $gl-padding-4;
+ line-height: $gl-padding;
+ }
+ }
+ }
+
+ .btn-item-remove {
+ position: absolute;
+ right: 0;
+ top: $gl-padding-4 / 2;
+ padding: $gl-padding-4;
+ margin-right: $gl-padding-4 / 2;
+ line-height: 0;
+ border-color: transparent;
+ color: $gl-text-color-secondary;
+
+ &:hover {
+ color: $gl-text-color;
+ }
+ }
+}
+
+.mr-status-wrapper,
+.mr-ci-status
+ {
+ line-height: 0;
+}
+
+@include media-breakpoint-up(sm) {
+ .item-body {
+ .item-contents .item-title {
+ .mr-title-link,
+ .sortable-link {
+ max-width: 90%;
+ }
+ }
+ }
+}
+
+/* Small devices (landscape phones, 768px and up) */
+@include media-breakpoint-up(md) {
+ .item-body {
+ .item-contents {
+ min-width: 0;
+
+ .item-title {
+ flex-basis: unset;
+ // 95% because we compensate
+ // for remove button which is
+ // positioned absolutely
+ width: 95%;
+ margin-bottom: $gl-padding-4;
+
+ .mr-title-link,
+ .sortable-link {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ max-width: 100%;
+ }
+ }
+
+ .item-meta {
+ .item-path-id {
+ order: 0;
+ margin-top: 0;
+ }
+
+ .item-meta-child {
+ flex-basis: unset;
+ margin-left: auto;
+ margin-right: $gl-padding-4;
+
+ ~ .item-assignees {
+ margin-left: $gl-padding-4;
+ }
+ }
+
+ .item-assignees {
+ margin-bottom: 0;
+ margin-left: 0;
+ order: 2;
+ }
+ }
+ }
+
+ .btn-item-remove {
+ order: 1;
+ }
+ }
+}
+
+/* Medium devices (desktops, 992px and up) */
+@include media-breakpoint-up(lg) {
+ .item-body {
+ padding: $gl-padding;
+
+ .item-title {
+ font-size: $gl-font-size;
+ }
+
+ .item-meta .item-path-id {
+ font-size: inherit; // Base size given to `item-meta` is `$gl-font-size-small`
+ }
+
+ .issue-token-state-icon-open,
+ .issue-token-state-icon-closed {
+ margin-right: $gl-padding-4;
+ }
+ }
+}
+
+/* Large devices (large desktops, 1200px and up) */
+@include media-breakpoint-up(xl) {
+ .item-body {
+ padding: $gl-padding-8;
+ padding-left: $gl-padding;
+
+ .item-contents {
+ flex-wrap: nowrap;
+ overflow: hidden;
+
+ .item-title {
+ display: flex;
+ margin-bottom: 0;
+ min-width: 0;
+ width: auto;
+ flex-basis: unset;
+ font-weight: $gl-font-weight-normal;
+
+ .mr-title-link,
+ .sortable-link {
+ display: block;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+ }
+
+ .issue-token-state-icon-open,
+ .issue-token-state-icon-closed {
+ display: block;
+ margin-right: $gl-padding-8;
+ }
+
+ .confidential-icon {
+ align-self: auto;
+ margin-top: 0;
+ }
+ }
+
+ .item-meta {
+ margin-top: 0;
+ justify-content: flex-end;
+ flex: 1;
+ flex-wrap: nowrap;
+
+ .item-path-id {
+ order: 0;
+ margin-top: 0;
+ margin-left: $gl-padding-8;
+ margin-right: auto;
+
+ .issue-token-state-icon-open,
+ .issue-token-state-icon-closed {
+ display: none;
+ }
+ }
+
+ .item-meta-child {
+ margin-left: $gl-padding-8;
+ flex-wrap: nowrap;
+ }
+
+ .item-assignees {
+ flex-grow: 0;
+ margin-top: 0;
+ margin-right: $gl-padding-4;
+
+ .avatar {
+ height: $gl-padding-24;
+ width: $gl-padding-24;
+ }
+
+ .avatar-counter {
+ height: $gl-padding-24;
+ min-width: $gl-padding-24;
+ line-height: $gl-padding-24;
+ border-radius: $gl-padding-24;
+ }
+ }
+ }
+ }
+
+ .btn-item-remove {
+ position: relative;
+ align-self: center;
+ top: initial;
+ right: 0;
+ margin-right: 0;
+ padding: $btn-sm-side-margin;
+
+ &:hover {
+ border-color: $border-color;
+ }
+ }
+ }
+}
diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss
index c1666c728f3..e886a54dc99 100644
--- a/app/assets/stylesheets/framework/variables.scss
+++ b/app/assets/stylesheets/framework/variables.scss
@@ -664,3 +664,8 @@ $priority-label-empty-state-width: 114px;
Issues Analytics
*/
$issues-analytics-popover-boarder-color: rgba(0, 0, 0, 0.15);
+/*
+Merge Requests
+*/
+$mr-tabs-height: 51px;
+$mr-version-controls-height: 56px;
diff --git a/app/assets/stylesheets/pages/diff.scss b/app/assets/stylesheets/pages/diff.scss
index b78f11aadf1..4f804866886 100644
--- a/app/assets/stylesheets/pages/diff.scss
+++ b/app/assets/stylesheets/pages/diff.scss
@@ -9,7 +9,7 @@
@media (min-width: map-get($grid-breakpoints, md)) {
position: -webkit-sticky;
position: sticky;
- top: $header-height + 51px;
+ top: $mr-version-controls-height + $header-height + $mr-tabs-height;
margin-left: -1px;
border-left: 1px solid $border-color;
z-index: 102;
@@ -19,6 +19,7 @@
.with-performance-bar & {
top: $header-height + 36px + $performance-bar-height;
+
}
}
@@ -34,7 +35,7 @@
}
.with-performance-bar & {
- top: 127px;
+ top: $header-height + $performance-bar-height + $mr-version-controls-height + $mr-tabs-height;
}
}
@@ -1026,8 +1027,9 @@
.tree-list-holder {
position: -webkit-sticky;
position: sticky;
- top: 100px;
- max-height: calc(100vh - 100px);
+ $top-pos: $header-height + $mr-tabs-height + $mr-version-controls-height + 10px;
+ top: $header-height + $mr-tabs-height + $mr-version-controls-height + 10px;
+ max-height: calc(100vh - $top-pos);
padding-right: $gl-padding;
.file-row {
@@ -1036,8 +1038,9 @@
}
.with-performance-bar & {
- top: 135px;
- max-height: calc(100vh - 135px);
+ $performance-bar-top-pos: $performance-bar-height + $top-pos;
+ top: $performance-bar-top-pos;
+ max-height: calc(100vh - $performance-bar-top-pos);
}
}
diff --git a/app/assets/stylesheets/pages/issues.scss b/app/assets/stylesheets/pages/issues.scss
index 6c847fc0d53..0037364978c 100644
--- a/app/assets/stylesheets/pages/issues.scss
+++ b/app/assets/stylesheets/pages/issues.scss
@@ -80,7 +80,6 @@ ul.related-merge-requests > li {
}
}
-.merge-requests-title,
.related-branches-title {
font-size: 16px;
font-weight: $gl-font-weight-bold;
@@ -91,23 +90,16 @@ ul.related-merge-requests > li {
}
.merge-request-status {
- font-size: 13px;
- padding: 0 5px;
- color: $white-light;
- height: 20px;
- border-radius: 3px;
- line-height: 18px;
-
&.merged {
- background: $blue-500;
+ color: $blue-500;
}
&.closed {
- background: $red-500;
+ color: $red-500;
}
&.open {
- background: $green-500;
+ color: $green-500;
}
}
diff --git a/app/assets/stylesheets/pages/issues/issue_count_badge.scss b/app/assets/stylesheets/pages/issues/issue_count_badge.scss
index 4fba89e956b..64ca61f7094 100644
--- a/app/assets/stylesheets/pages/issues/issue_count_badge.scss
+++ b/app/assets/stylesheets/pages/issues/issue_count_badge.scss
@@ -1,11 +1,13 @@
-.issue-count-badge {
+.issue-count-badge,
+.mr-count-badge {
display: inline-flex;
border-radius: $border-radius-base;
border: 1px solid $border-color;
padding: 5px $gl-padding-8;
}
-.issue-count-badge-count {
+.issue-count-badge-count,
+.mr-count-badge-count {
display: inline-flex;
align-items: center;
}
diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss
index 1e4b8d8b7e4..53afb182b54 100644
--- a/app/assets/stylesheets/pages/merge_requests.scss
+++ b/app/assets/stylesheets/pages/merge_requests.scss
@@ -708,6 +708,7 @@
.mr-version-controls {
position: relative;
+ z-index: 103;
background: $gray-light;
color: $gl-text-color;
@@ -755,13 +756,37 @@
color: $orange-500;
padding-right: 5px;
}
+
+ @include media-breakpoint-up(md) {
+ position: -webkit-sticky;
+ position: sticky;
+ top: $header-height + $mr-tabs-height;
+ width: 100%;
+ border-top: 1px solid $border-color;
+
+ &.is-fileTreeOpen {
+ margin-left: -16px;
+ width: calc(100% + 32px);
+ }
+
+ .mr-version-menus-container {
+ flex-wrap: nowrap;
+ }
+
+ .with-performance-bar & {
+ top: $header-height + $performance-bar-height + $mr-tabs-height;
+ }
+ }
}
.merge-request-tabs-holder {
top: $header-height;
z-index: 200;
background-color: $white-light;
- border-bottom: 1px solid $border-color;
+
+ @include media-breakpoint-down(md) {
+ border-bottom: 1px solid $border-color;
+ }
@include media-breakpoint-up(sm) {
position: sticky;
@@ -816,7 +841,7 @@
display: flex;
justify-content: space-between;
- @include media-breakpoint-down(md) {
+ @include media-breakpoint-down(sm) {
flex-direction: column-reverse;
}
diff --git a/app/controllers/concerns/uploads_actions.rb b/app/controllers/concerns/uploads_actions.rb
index c114e16edf8..4ec0e94df9a 100644
--- a/app/controllers/concerns/uploads_actions.rb
+++ b/app/controllers/concerns/uploads_actions.rb
@@ -29,7 +29,13 @@ module UploadsActions
def show
return render_404 unless uploader&.exists?
- expires_in 0.seconds, must_revalidate: true, private: true
+ if cache_publicly?
+ # We need to reset caching from the applications controller to get rid of the no-store value
+ headers['Cache-Control'] = ''
+ expires_in 5.minutes, public: true, must_revalidate: false
+ else
+ expires_in 0.seconds, must_revalidate: true, private: true
+ end
disposition = uploader.image_or_video? ? 'inline' : 'attachment'
@@ -114,6 +120,10 @@ module UploadsActions
nil
end
+ def cache_publicly?
+ false
+ end
+
def model
strong_memoize(:model) { find_model }
end
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 878816475b2..d3af35723ac 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -10,10 +10,10 @@ class ProjectsController < Projects::ApplicationController
prepend_before_action(only: [:show]) { authenticate_sessionless_user!(:rss) }
before_action :whitelist_query_limiting, only: [:create]
- before_action :authenticate_user!, except: [:index, :show, :activity, :refs]
+ before_action :authenticate_user!, except: [:index, :show, :activity, :refs, :resolve]
before_action :redirect_git_extension, only: [:show]
- before_action :project, except: [:index, :new, :create]
- before_action :repository, except: [:index, :new, :create]
+ before_action :project, except: [:index, :new, :create, :resolve]
+ before_action :repository, except: [:index, :new, :create, :resolve]
before_action :assign_ref_vars, only: [:show], if: :repo_exists?
before_action :tree, only: [:show], if: [:repo_exists?, :project_view_files?]
before_action :lfs_blob_ids, only: [:show], if: [:repo_exists?, :project_view_files?]
@@ -442,4 +442,14 @@ class ProjectsController < Projects::ApplicationController
def present_project
@project = @project.present(current_user: current_user)
end
+
+ def resolve
+ @project = Project.find(params[:id])
+
+ if can?(current_user, :read_project, @project)
+ redirect_to @project
+ else
+ render_404
+ end
+ end
end
diff --git a/app/controllers/uploads_controller.rb b/app/controllers/uploads_controller.rb
index fa5d84633b5..519e7439205 100644
--- a/app/controllers/uploads_controller.rb
+++ b/app/controllers/uploads_controller.rb
@@ -70,6 +70,10 @@ class UploadsController < ApplicationController
end
end
+ def cache_publicly?
+ User === model || Appearance === model
+ end
+
def upload_model_class
MODEL_CLASSES[params[:model]] || raise(UnknownUploadModelError)
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 82bb2d1a805..9efa84b02f0 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -268,6 +268,17 @@ module ApplicationHelper
_('You are on a read-only GitLab instance.')
end
+ def client_class_list
+ "gl-browser-#{browser.id} gl-platform-#{browser.platform.id}"
+ end
+
+ def client_js_flags
+ {
+ "is#{browser.id.to_s.titlecase}": true,
+ "is#{browser.platform.id.to_s.titlecase}": true
+ }
+ end
+
def autocomplete_data_sources(object, noteable_type)
return {} unless object && noteable_type
diff --git a/app/models/clusters/applications/runner.rb b/app/models/clusters/applications/runner.rb
index 0c0247da1fb..f17da0bb7b1 100644
--- a/app/models/clusters/applications/runner.rb
+++ b/app/models/clusters/applications/runner.rb
@@ -3,7 +3,7 @@
module Clusters
module Applications
class Runner < ActiveRecord::Base
- VERSION = '0.1.43'.freeze
+ VERSION = '0.1.45'.freeze
self.table_name = 'clusters_applications_runners'
diff --git a/app/models/issue.rb b/app/models/issue.rb
index b7e13bcbccf..5c4ecbfdf4e 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -230,7 +230,8 @@ class Issue < ActiveRecord::Base
end
def check_for_spam?
- project.public? && (title_changed? || description_changed?)
+ publicly_visible? &&
+ (title_changed? || description_changed? || confidential_changed?)
end
def as_json(options = {})
diff --git a/app/models/label.rb b/app/models/label.rb
index 5d2d1afd1d9..1c3db3eb35d 100644
--- a/app/models/label.rb
+++ b/app/models/label.rb
@@ -214,6 +214,7 @@ class Label < ActiveRecord::Base
super(options).tap do |json|
json[:type] = self.try(:type)
json[:priority] = priority(options[:project]) if options.key?(:project)
+ json[:textColor] = text_color
end
end
diff --git a/app/uploaders/personal_file_uploader.rb b/app/uploaders/personal_file_uploader.rb
index 25474b494ff..272837aa6ce 100644
--- a/app/uploaders/personal_file_uploader.rb
+++ b/app/uploaders/personal_file_uploader.rb
@@ -6,8 +6,15 @@ class PersonalFileUploader < FileUploader
options.storage_path
end
- def self.base_dir(model, _store = nil)
- File.join(options.base_dir, model_path_segment(model))
+ def self.base_dir(model, store = nil)
+ base_dirs(model)[store || Store::LOCAL]
+ end
+
+ def self.base_dirs(model)
+ {
+ Store::LOCAL => File.join(options.base_dir, model_path_segment(model)),
+ Store::REMOTE => model_path_segment(model)
+ }
end
def self.model_path_segment(model)
@@ -33,13 +40,6 @@ class PersonalFileUploader < FileUploader
store_dirs[object_store]
end
- def store_dirs
- {
- Store::LOCAL => File.join(base_dir, dynamic_segment),
- Store::REMOTE => File.join(self.class.model_path_segment(model), dynamic_segment)
- }
- end
-
private
def secure_url
diff --git a/app/views/layouts/_init_client_detection_flags.html.haml b/app/views/layouts/_init_client_detection_flags.html.haml
new file mode 100644
index 00000000000..c729f8aa696
--- /dev/null
+++ b/app/views/layouts/_init_client_detection_flags.html.haml
@@ -0,0 +1,7 @@
+- client = client_js_flags
+
+- if client
+ -# haml-lint:disable InlineJavaScript
+ :javascript
+ gl = window.gl || {};
+ gl.client = #{client.to_json};
diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml
index 1f4d24d996c..4373240001e 100644
--- a/app/views/layouts/application.html.haml
+++ b/app/views/layouts/application.html.haml
@@ -1,8 +1,9 @@
!!! 5
%html{ lang: I18n.locale, class: page_class }
= render "layouts/head"
- %body{ class: "#{user_application_theme} #{@body_class}", data: { page: body_data_page, project: "#{@project.path if @project}", group: "#{@group.path if @group}", find_file: find_file_path } }
+ %body{ class: "#{user_application_theme} #{@body_class} #{client_class_list}", data: { page: body_data_page, project: "#{@project.path if @project}", group: "#{@group.path if @group}", find_file: find_file_path } }
= render "layouts/init_auto_complete" if @gfm_form
+ = render "layouts/init_client_detection_flags"
= render 'peek/bar'
= render partial: "layouts/header/default", locals: { project: @project, group: @group }
= render 'layouts/page', sidebar: sidebar, nav: nav
diff --git a/app/views/projects/_activity.html.haml b/app/views/projects/_activity.html.haml
index 31f1cf560e2..12da62f4c64 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
diff --git a/app/views/projects/issues/_merge_requests.html.haml b/app/views/projects/issues/_merge_requests.html.haml
index 5c36d2202a6..eb46bf5c6a3 100644
--- a/app/views/projects/issues/_merge_requests.html.haml
+++ b/app/views/projects/issues/_merge_requests.html.haml
@@ -1,35 +1,35 @@
- if @merge_requests.any?
- %h2.merge-requests-title
- = pluralize(@merge_requests.count, 'Related Merge Request')
- %ul.unstyled-list.related-merge-requests
- - has_any_head_pipeline = @merge_requests.any?(&:head_pipeline_id)
- - @merge_requests.each do |merge_request|
- %li
- %span.merge-request-ci-status
- - if merge_request.head_pipeline
- = render_pipeline_status(merge_request.head_pipeline)
- - elsif has_any_head_pipeline
- = icon('blank fw')
- %span.merge-request-id
- = merge_request.to_reference
- %span.merge-request-info
- %strong
- = link_to merge_request.title, merge_request_path(merge_request), class: "row_title"
- - unless @issue.project.id == merge_request.target_project.id
- in
- - project = merge_request.target_project
- = link_to project.full_name, project_path(project)
+ .card-slim.mt-3
+ .card-header
+ %h2.card-title.mt-0.mb-0.h5.merge-requests-title
+ %span.mr-1.bold
+ = _('Related merge requests')
+ .d-inline-flex.lh-100.align-middle
+ .mr-count-badge
+ .mr-count-badge-count
+ = sprite_icon('merge-request', size: 16, css_class: 'mr-1 text-secondary')
+ = @merge_requests.count
+ %ul.content-list.related-items-list
+ - has_any_head_pipeline = @merge_requests.any?(&:head_pipeline_id)
+ - @merge_requests.each do |merge_request|
+ %li.list-item.py-0.px-0
+ .item-body.issuable-info-container.py-lg-3.px-lg-3.pl-md-3
+ .item-contents
+ .item-title.d-flex.align-items-center.mr-title
+ = render partial: 'projects/issues/merge_requests_status', locals: { merge_request: merge_request, css_class: 'd-none d-xl-block append-right-8' }
+ = link_to merge_request.title, merge_request_path(merge_request), { class: 'mr-title-link'}
+ .item-meta
+ = render partial: 'projects/issues/merge_requests_status', locals: { merge_request: merge_request, css_class: 'd-xl-none d-lg-block append-right-5' }
+ %span.d-flex.align-items-center.append-right-8.mr-item-path.item-path-id.mt-0
+ %span.path-id-text.bold.text-truncate{ data: { toggle: 'tooltip'}, title: merge_request.target_project.full_path }
+ = merge_request.target_project.full_path
+ = merge_request.to_reference
+ %span.mr-ci-status.flex-md-grow-1.justify-content-end.d-flex.ml-md-2
+ - if merge_request.head_pipeline
+ = render_pipeline_status(merge_request.head_pipeline, tooltip_placement: 'bottom')
+ - elsif has_any_head_pipeline
+ = icon('blank fw')
- - if merge_request.merged?
- %span.merge-request-status.prepend-left-10.merged
- Merged
- - elsif merge_request.closed?
- %span.merge-request-status.prepend-left-10.closed
- Closed
- - else
- %span.merge-request-status.prepend-left-10.open
- Open
-
- - if @closed_by_merge_requests.present?
- %li
- = render partial: 'projects/issues/closed_by_box', locals: {merge_request_count: @merge_requests.count}
+ - if @closed_by_merge_requests.present?
+ %p
+ = render partial: 'projects/issues/closed_by_box', locals: {merge_request_count: @merge_requests.count}
diff --git a/app/views/projects/issues/_merge_requests_status.html.haml b/app/views/projects/issues/_merge_requests_status.html.haml
new file mode 100644
index 00000000000..38126d6f0c6
--- /dev/null
+++ b/app/views/projects/issues/_merge_requests_status.html.haml
@@ -0,0 +1,22 @@
+- time_format = '%b %e, %Y %l:%M%P %Z%z'
+
+- if merge_request.merged?
+ - mr_status_date = merge_request.merged_at
+ - mr_status_title = _('Merged')
+ - mr_status_icon = 'merge'
+ - mr_status_class = 'merged'
+- elsif merge_request.closed?
+ - mr_status_date = merge_request.closed_event&.created_at
+ - mr_status_title = _('Closed')
+ - mr_status_icon = 'issue-close'
+ - mr_status_class = 'closed'
+- else
+ - mr_status_date = merge_request.created_at
+ - mr_status_title = _('Opened')
+ - mr_status_icon = 'issue-open-m'
+ - mr_status_class = 'open'
+
+- mr_status_tooltip = "<div><span class=\"bold\">#{mr_status_title}</span> #{time_ago_in_words(mr_status_date)} ago</div><span class=\"text-tertiary\">#{l(mr_status_date.to_time, format: time_format)}</span>"
+
+%span.mr-status-wrapper.suggestion-help-hover{ class: css_class, data: { toggle: 'tooltip', placement: 'bottom', html: 'true', title: mr_status_tooltip } }
+ = sprite_icon(mr_status_icon, size: 16, css_class: "merge-request-status #{mr_status_class}")
diff --git a/app/workers/build_finished_worker.rb b/app/workers/build_finished_worker.rb
index 61d866b1f02..ae853ec9316 100644
--- a/app/workers/build_finished_worker.rb
+++ b/app/workers/build_finished_worker.rb
@@ -9,14 +9,26 @@ class BuildFinishedWorker
# rubocop: disable CodeReuse/ActiveRecord
def perform(build_id)
Ci::Build.find_by(id: build_id).try do |build|
- # We execute that in sync as this access the files in order to access local file, and reduce IO
- BuildTraceSectionsWorker.new.perform(build.id)
- BuildCoverageWorker.new.perform(build.id)
-
- # We execute that async as this are two independent operations that can be executed after TraceSections and Coverage
- BuildHooksWorker.perform_async(build.id)
- ArchiveTraceWorker.perform_async(build.id)
+ process_build(build)
end
end
# rubocop: enable CodeReuse/ActiveRecord
+
+ private
+
+ # Processes a single CI build that has finished.
+ #
+ # This logic resides in a separate method so that EE can extend it more
+ # easily.
+ #
+ # @param [Ci::Build] build The build to process.
+ def process_build(build)
+ # We execute these in sync to reduce IO.
+ BuildTraceSectionsWorker.new.perform(build.id)
+ BuildCoverageWorker.new.perform(build.id)
+
+ # We execute these async as these are independent operations.
+ BuildHooksWorker.perform_async(build.id)
+ ArchiveTraceWorker.perform_async(build.id)
+ end
end
diff --git a/app/workers/expire_pipeline_cache_worker.rb b/app/workers/expire_pipeline_cache_worker.rb
index c96e8a0379b..148384600b6 100644
--- a/app/workers/expire_pipeline_cache_worker.rb
+++ b/app/workers/expire_pipeline_cache_worker.rb
@@ -11,16 +11,9 @@ class ExpirePipelineCacheWorker
pipeline = Ci::Pipeline.find_by(id: pipeline_id)
return unless pipeline
- project = pipeline.project
store = Gitlab::EtagCaching::Store.new
- store.touch(project_pipelines_path(project))
- store.touch(project_pipeline_path(project, pipeline))
- store.touch(commit_pipelines_path(project, pipeline.commit)) unless pipeline.commit.nil?
- store.touch(new_merge_request_pipelines_path(project))
- each_pipelines_merge_request_path(project, pipeline) do |path|
- store.touch(path)
- end
+ update_etag_cache(pipeline, store)
Gitlab::Cache::Ci::ProjectPipelineStatus.update_for_pipeline(pipeline)
end
@@ -51,4 +44,23 @@ class ExpirePipelineCacheWorker
yield(path)
end
end
+
+ # Updates ETag caches of a pipeline.
+ #
+ # This logic resides in a separate method so that EE can more easily extend
+ # it.
+ #
+ # @param [Ci::Pipeline] pipeline
+ # @param [Gitlab::EtagCaching::Store] store
+ def update_etag_cache(pipeline, store)
+ project = pipeline.project
+
+ store.touch(project_pipelines_path(project))
+ store.touch(project_pipeline_path(project, pipeline))
+ store.touch(commit_pipelines_path(project, pipeline.commit)) unless pipeline.commit.nil?
+ store.touch(new_merge_request_pipelines_path(project))
+ each_pipelines_merge_request_path(project, pipeline) do |path|
+ store.touch(path)
+ end
+ end
end
diff --git a/changelogs/unreleased/18667-handle-push-opts.yml b/changelogs/unreleased/18667-handle-push-opts.yml
deleted file mode 100644
index 204293476f6..00000000000
--- a/changelogs/unreleased/18667-handle-push-opts.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Handle ci.skip push option
-merge_request: 15643
-author: Jonathon Reinhart
-type: added
diff --git a/changelogs/unreleased/23367-clarify-docs-allow-failure.yml b/changelogs/unreleased/23367-clarify-docs-allow-failure.yml
deleted file mode 100644
index 221d9e83ffb..00000000000
--- a/changelogs/unreleased/23367-clarify-docs-allow-failure.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Clarifies docs about CI `allow_failure`
-merge_request: 23367
-author: C.J. Jameson
-type: other
diff --git a/changelogs/unreleased/27861-add-markdown-editing-buttons-to-the-file-editor.yml b/changelogs/unreleased/27861-add-markdown-editing-buttons-to-the-file-editor.yml
deleted file mode 100644
index 00eb5223d58..00000000000
--- a/changelogs/unreleased/27861-add-markdown-editing-buttons-to-the-file-editor.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add markdown helper buttons to file editor
-merge_request: 23480
-author:
-type: added
diff --git a/changelogs/unreleased/29951-issue-creation-by-email-without-subaddressing.yml b/changelogs/unreleased/29951-issue-creation-by-email-without-subaddressing.yml
deleted file mode 100644
index 4139099eac3..00000000000
--- a/changelogs/unreleased/29951-issue-creation-by-email-without-subaddressing.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: No longer require email subaddressing for issue creation by email
-merge_request: 23523
-author:
-type: changed
diff --git a/changelogs/unreleased/34758-extend-can-create-cluster-logic.yml b/changelogs/unreleased/34758-extend-can-create-cluster-logic.yml
deleted file mode 100644
index 65f5253a271..00000000000
--- a/changelogs/unreleased/34758-extend-can-create-cluster-logic.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Allow user to add Kubernetes cluster for clusterable when there are ancestor clusters
-merge_request: 23569
-author:
-type: other
diff --git a/changelogs/unreleased/34758-list-ancestor-clusters.yml b/changelogs/unreleased/34758-list-ancestor-clusters.yml
deleted file mode 100644
index 8fdba7ba90a..00000000000
--- a/changelogs/unreleased/34758-list-ancestor-clusters.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Show clusters of ancestors in cluster list page
-merge_request: 22996
-author:
-type: changed
diff --git a/changelogs/unreleased/40270-remove-gitlab-upgrader-completely.yml b/changelogs/unreleased/40270-remove-gitlab-upgrader-completely.yml
deleted file mode 100644
index 9ea2157bfb7..00000000000
--- a/changelogs/unreleased/40270-remove-gitlab-upgrader-completely.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Removes all instances of deprecated Gitlab Upgrader calls
-merge_request: 23603
-author: '@jwolen'
-type: removed
diff --git a/changelogs/unreleased/40473-api-support-for-kubernetes-integration.yml b/changelogs/unreleased/40473-api-support-for-kubernetes-integration.yml
deleted file mode 100644
index 5567aad6320..00000000000
--- a/changelogs/unreleased/40473-api-support-for-kubernetes-integration.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add API Support for Kubernetes integration
-merge_request: 23922
-author:
-type: added
diff --git a/changelogs/unreleased/41766-vue-component.yml b/changelogs/unreleased/41766-vue-component.yml
deleted file mode 100644
index 12343c8ce84..00000000000
--- a/changelogs/unreleased/41766-vue-component.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Creates component for release block
-merge_request: 23697
-author:
-type: added
diff --git a/changelogs/unreleased/41766-vuex-store.yml b/changelogs/unreleased/41766-vuex-store.yml
deleted file mode 100644
index f20fc736a6f..00000000000
--- a/changelogs/unreleased/41766-vuex-store.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Creates frontend app for releases
-merge_request: 23796
-author:
-type: added
diff --git a/changelogs/unreleased/42125-extend-override-check-to-also-check-arity.yml b/changelogs/unreleased/42125-extend-override-check-to-also-check-arity.yml
deleted file mode 100644
index 9892466ca50..00000000000
--- a/changelogs/unreleased/42125-extend-override-check-to-also-check-arity.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Extend override check to also check arity
-merge_request: 23498
-author: Jacopo Beschi @jacopo-beschi
-type: added
diff --git a/changelogs/unreleased/43623-add-submit-feedback-in-product-feedback-link.yml b/changelogs/unreleased/43623-add-submit-feedback-in-product-feedback-link.yml
deleted file mode 100644
index f5d99e9a448..00000000000
--- a/changelogs/unreleased/43623-add-submit-feedback-in-product-feedback-link.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add submit feedback link to help dropdown
-merge_request: 23547
-author:
-type: added
diff --git a/changelogs/unreleased/44353-improve-snippet-search-performance.yml b/changelogs/unreleased/44353-improve-snippet-search-performance.yml
deleted file mode 100644
index 2ecbcef8843..00000000000
--- a/changelogs/unreleased/44353-improve-snippet-search-performance.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Improve snippet search performance by removing duplicate counts
-merge_request: 23952
-author:
-type: performance
diff --git a/changelogs/unreleased/44984-use-serializer-for-issuable-sidebar.yml b/changelogs/unreleased/44984-use-serializer-for-issuable-sidebar.yml
deleted file mode 100644
index ba9edc8740d..00000000000
--- a/changelogs/unreleased/44984-use-serializer-for-issuable-sidebar.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Refactor issuable sidebar to use serializer
-merge_request: 23379
-author:
-type: other
diff --git a/changelogs/unreleased/47007-related-merge-requests-in-issue-design-restyle.yml b/changelogs/unreleased/47007-related-merge-requests-in-issue-design-restyle.yml
new file mode 100644
index 00000000000..28e2a4cc377
--- /dev/null
+++ b/changelogs/unreleased/47007-related-merge-requests-in-issue-design-restyle.yml
@@ -0,0 +1,5 @@
+---
+title: Redesigned related merge requests in issue page.
+merge_request: 24270
+author:
+type: changed
diff --git a/changelogs/unreleased/47052-merge-button-does-not-appear-after-rebase-ing.yml b/changelogs/unreleased/47052-merge-button-does-not-appear-after-rebase-ing.yml
deleted file mode 100644
index fd1e4605f2d..00000000000
--- a/changelogs/unreleased/47052-merge-button-does-not-appear-after-rebase-ing.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Allow merge after rebase without page refresh on FF repositories
-merge_request: 23572
-author:
-type: fixed
diff --git a/changelogs/unreleased/49056-configure-auto-devops-deployed-applications-with-secrets-that-aren-t-committed-to-the-repo.yml b/changelogs/unreleased/49056-configure-auto-devops-deployed-applications-with-secrets-that-aren-t-committed-to-the-repo.yml
deleted file mode 100644
index 65efa85176b..00000000000
--- a/changelogs/unreleased/49056-configure-auto-devops-deployed-applications-with-secrets-that-aren-t-committed-to-the-repo.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Configure Auto DevOps deployed applications with secrets from prefixed CI variables
-merge_request: 23719
-author:
-type: added
diff --git a/changelogs/unreleased/49231-import-issues-csv.yml b/changelogs/unreleased/49231-import-issues-csv.yml
deleted file mode 100644
index c10bd8143b2..00000000000
--- a/changelogs/unreleased/49231-import-issues-csv.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add importing of issues from CSV file
-merge_request: 23532
-author:
-type: added
diff --git a/changelogs/unreleased/50013-add-browser-platform-flags.yml b/changelogs/unreleased/50013-add-browser-platform-flags.yml
new file mode 100644
index 00000000000..6176b8b64a7
--- /dev/null
+++ b/changelogs/unreleased/50013-add-browser-platform-flags.yml
@@ -0,0 +1,5 @@
+---
+title: Add CSS & JS global flags to represent browser and platform
+merge_request: 24017
+author:
+type: other
diff --git a/changelogs/unreleased/51485-new-issue-labels-note.yml b/changelogs/unreleased/51485-new-issue-labels-note.yml
deleted file mode 100644
index a312d379ce2..00000000000
--- a/changelogs/unreleased/51485-new-issue-labels-note.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Create system notes on issue / MR creation when labels, milestone, or due date is set
-merge_request: 23859
-author:
-type: added
diff --git a/changelogs/unreleased/51606-expanding-a-diff-while-having-an-open-comment-form-will-always-scroll-down-to-the-comment.yml b/changelogs/unreleased/51606-expanding-a-diff-while-having-an-open-comment-form-will-always-scroll-down-to-the-comment.yml
deleted file mode 100644
index a845234b42f..00000000000
--- a/changelogs/unreleased/51606-expanding-a-diff-while-having-an-open-comment-form-will-always-scroll-down-to-the-comment.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Stop autofocusing on diff comment after initial mount
-merge_request: 23849
-author:
-type: fixed
diff --git a/changelogs/unreleased/51944-redesign-project-lists-ui.yml b/changelogs/unreleased/51944-redesign-project-lists-ui.yml
deleted file mode 100644
index 56f9a86a686..00000000000
--- a/changelogs/unreleased/51944-redesign-project-lists-ui.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Redesign project lists UI
-merge_request: 22682
-author:
-type: other
diff --git a/changelogs/unreleased/51970-correct-ordering-of-metrics.yml b/changelogs/unreleased/51970-correct-ordering-of-metrics.yml
deleted file mode 100644
index fbc7b58d901..00000000000
--- a/changelogs/unreleased/51970-correct-ordering-of-metrics.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Correct the ordering of metrics on the performance dashboard
-merge_request: 23630
-author:
-type: fixed
diff --git a/changelogs/unreleased/51994-disable-merging-labels-in-dropdowns.yml b/changelogs/unreleased/51994-disable-merging-labels-in-dropdowns.yml
deleted file mode 100644
index 2d54cf814b7..00000000000
--- a/changelogs/unreleased/51994-disable-merging-labels-in-dropdowns.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Disable merging of labels with same names
-merge_request: 23265
-author:
-type: changed
diff --git a/changelogs/unreleased/52446-hide-ado-project-banner-for-ci-file-or-ci-disabled.yml b/changelogs/unreleased/52446-hide-ado-project-banner-for-ci-file-or-ci-disabled.yml
deleted file mode 100644
index bd8d0699bd1..00000000000
--- a/changelogs/unreleased/52446-hide-ado-project-banner-for-ci-file-or-ci-disabled.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Don't show Auto DevOps enabled banner for projects with CI file or CI disabled
-merge_request: 24067
-author:
-type: other
diff --git a/changelogs/unreleased/52620-fix-loader-animation-alignment.yml b/changelogs/unreleased/52620-fix-loader-animation-alignment.yml
deleted file mode 100644
index 5cfb7fc019f..00000000000
--- a/changelogs/unreleased/52620-fix-loader-animation-alignment.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Aligns build loader animation with the job log
-merge_request: 23959
-author:
-type: fixed
diff --git a/changelogs/unreleased/52888-status-emoji-should-not-be-added-to-awards-section-on-issue-page-2.yml b/changelogs/unreleased/52888-status-emoji-should-not-be-added-to-awards-section-on-issue-page-2.yml
deleted file mode 100644
index 501940d6da3..00000000000
--- a/changelogs/unreleased/52888-status-emoji-should-not-be-added-to-awards-section-on-issue-page-2.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Prevent awards emoji being updated when updating status
-merge_request: 23470
-author:
-type: fixed
diff --git a/changelogs/unreleased/52971-merge-request-file-browser-should-always-be-possible-show-hide.yml b/changelogs/unreleased/52971-merge-request-file-browser-should-always-be-possible-show-hide.yml
new file mode 100644
index 00000000000..b661c55957d
--- /dev/null
+++ b/changelogs/unreleased/52971-merge-request-file-browser-should-always-be-possible-show-hide.yml
@@ -0,0 +1,5 @@
+---
+title: Make possible to toggle file tree while scrolling through diffs
+merge_request: !24103
+author:
+type: changed
diff --git a/changelogs/unreleased/53020-user-specific-profile-page-settings-fields-don-t-have-help-text-placeholders.yml b/changelogs/unreleased/53020-user-specific-profile-page-settings-fields-don-t-have-help-text-placeholders.yml
deleted file mode 100644
index 99da02dd31a..00000000000
--- a/changelogs/unreleased/53020-user-specific-profile-page-settings-fields-don-t-have-help-text-placeholders.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Adds explanatory text to input fields on user profile settings page
-merge_request: 23673
-author:
-type: other
diff --git a/changelogs/unreleased/53493-list-id-email-header.yml b/changelogs/unreleased/53493-list-id-email-header.yml
deleted file mode 100644
index 09a0639f6f5..00000000000
--- a/changelogs/unreleased/53493-list-id-email-header.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add project identifier as List-Id email Header to ease filtering
-merge_request: 22817
-author: Olivier Crête
-type: added
diff --git a/changelogs/unreleased/53671-redirect-projects-id-to-project-page.yml b/changelogs/unreleased/53671-redirect-projects-id-to-project-page.yml
new file mode 100644
index 00000000000..08c5ded05d5
--- /dev/null
+++ b/changelogs/unreleased/53671-redirect-projects-id-to-project-page.yml
@@ -0,0 +1,5 @@
+---
+title: Redirect GET projects/:id to project page
+merge_request: 24467
+author:
+type: added
diff --git a/changelogs/unreleased/53696-make-rbac-default.yml b/changelogs/unreleased/53696-make-rbac-default.yml
deleted file mode 100644
index 4f1326cd874..00000000000
--- a/changelogs/unreleased/53696-make-rbac-default.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Make RBAC enabled default for new clusters
-merge_request: 24119
-author:
-type: changed
diff --git a/changelogs/unreleased/53714-inconsistent-text-color-for-labels.yml b/changelogs/unreleased/53714-inconsistent-text-color-for-labels.yml
new file mode 100644
index 00000000000..d804e2df2cd
--- /dev/null
+++ b/changelogs/unreleased/53714-inconsistent-text-color-for-labels.yml
@@ -0,0 +1,5 @@
+---
+title: Fix foreground color for labels to ensure consistency of label appearance
+merge_request: 23873
+author: Nathan Friend
+type: fixed
diff --git a/changelogs/unreleased/53796-discard-draft-comment-button-to-easy-to-accidentally-hit-on-mobile.yml b/changelogs/unreleased/53796-discard-draft-comment-button-to-easy-to-accidentally-hit-on-mobile.yml
deleted file mode 100644
index 083b5f21a52..00000000000
--- a/changelogs/unreleased/53796-discard-draft-comment-button-to-easy-to-accidentally-hit-on-mobile.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Removed discard draft comment button form notes
-merge_request: 24185
-author:
-type: removed
diff --git a/changelogs/unreleased/53856-changing-group-visibility-does-not-re-enable-save-button.yml b/changelogs/unreleased/53856-changing-group-visibility-does-not-re-enable-save-button.yml
new file mode 100644
index 00000000000..1daa72fb9c4
--- /dev/null
+++ b/changelogs/unreleased/53856-changing-group-visibility-does-not-re-enable-save-button.yml
@@ -0,0 +1,6 @@
+---
+title: Fix suboptimal handling of checkbox and radio input events causing
+ group general settings submit button to stay disabled after changing its visibility
+merge_request: 23022
+author:
+type: fixed
diff --git a/changelogs/unreleased/53907-improve-milestone-links.yml b/changelogs/unreleased/53907-improve-milestone-links.yml
deleted file mode 100644
index 8e867e783cc..00000000000
--- a/changelogs/unreleased/53907-improve-milestone-links.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add % prefix to milestone reference links
-merge_request: 23928
-author:
-type: changed
diff --git a/changelogs/unreleased/53933-include-dates-in-milestone-change-email.yml b/changelogs/unreleased/53933-include-dates-in-milestone-change-email.yml
deleted file mode 100644
index 5c40a1e900c..00000000000
--- a/changelogs/unreleased/53933-include-dates-in-milestone-change-email.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add date range in milestone change email notifications
-merge_request: 23762
-author:
-type: changed
diff --git a/changelogs/unreleased/53954-resolved-non-diff-discussions-on-merge-requests-no-longer-show-who-resolved-them-and-when-at-a-glance.yml b/changelogs/unreleased/53954-resolved-non-diff-discussions-on-merge-requests-no-longer-show-who-resolved-them-and-when-at-a-glance.yml
deleted file mode 100644
index 0632c1992c7..00000000000
--- a/changelogs/unreleased/53954-resolved-non-diff-discussions-on-merge-requests-no-longer-show-who-resolved-them-and-when-at-a-glance.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Show message on non-diff discussions
-merge_request:
-author:
-type: changed
diff --git a/changelogs/unreleased/53966-hashed-storage-read-only.yml b/changelogs/unreleased/53966-hashed-storage-read-only.yml
deleted file mode 100644
index 2b6c9c49c85..00000000000
--- a/changelogs/unreleased/53966-hashed-storage-read-only.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: 'Hashed Storage: Only set as `read_only` when starting the per-project migration'
-merge_request: 24128
-author:
-type: changed
diff --git a/changelogs/unreleased/54142-pages-in-project-s-permission-should-be-named-pages-access-control.yml b/changelogs/unreleased/54142-pages-in-project-s-permission-should-be-named-pages-access-control.yml
deleted file mode 100644
index b45ebaa1a02..00000000000
--- a/changelogs/unreleased/54142-pages-in-project-s-permission-should-be-named-pages-access-control.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Make the Pages permission setting more clear
-merge_request: 23146
-author:
-type: changed
diff --git a/changelogs/unreleased/54146-fix-calendar-query.yml b/changelogs/unreleased/54146-fix-calendar-query.yml
deleted file mode 100644
index dcac343108a..00000000000
--- a/changelogs/unreleased/54146-fix-calendar-query.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix project calendar feed when sorted by priority
-merge_request: 23870
-author:
-type: fixed
diff --git a/changelogs/unreleased/54206-show-the-activity-filter-dropdown-in-discussion-tab-only.yml b/changelogs/unreleased/54206-show-the-activity-filter-dropdown-in-discussion-tab-only.yml
deleted file mode 100644
index e29987b0935..00000000000
--- a/changelogs/unreleased/54206-show-the-activity-filter-dropdown-in-discussion-tab-only.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Discussion filter only displayed in discussions tab for merge requests
-merge_request: 24082
-author:
-type: changed
diff --git a/changelogs/unreleased/54311-fix-board-add-label.yml b/changelogs/unreleased/54311-fix-board-add-label.yml
deleted file mode 100644
index 8fd8f7a0381..00000000000
--- a/changelogs/unreleased/54311-fix-board-add-label.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix error when creating labels in a new issue in the boards page
-merge_request: 24039
-author: Ruben Moya
-type: fixed
diff --git a/changelogs/unreleased/54386-integrate-mobile-css-framework-into-specific-frameworks.yml b/changelogs/unreleased/54386-integrate-mobile-css-framework-into-specific-frameworks.yml
deleted file mode 100644
index e446d2a2781..00000000000
--- a/changelogs/unreleased/54386-integrate-mobile-css-framework-into-specific-frameworks.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove framework/mobile.scss
-merge_request: 23301
-author: Takuya Noguchi
-type: other
diff --git a/changelogs/unreleased/54427-label-xss.yml b/changelogs/unreleased/54427-label-xss.yml
deleted file mode 100644
index 090d1832af2..00000000000
--- a/changelogs/unreleased/54427-label-xss.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Escape html entities in LabelReferenceFilter when no label found
-merge_request:
-author:
-type: security
diff --git a/changelogs/unreleased/54736-sign-in-bottom-margin.yml b/changelogs/unreleased/54736-sign-in-bottom-margin.yml
deleted file mode 100644
index 32b5b44fe35..00000000000
--- a/changelogs/unreleased/54736-sign-in-bottom-margin.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix login box bottom margins on signin page
-merge_request: 23739
-author: '@gear54'
-type: fixed
diff --git a/changelogs/unreleased/54786-mr-empty-file-display.yml b/changelogs/unreleased/54786-mr-empty-file-display.yml
deleted file mode 100644
index 5adf5744755..00000000000
--- a/changelogs/unreleased/54786-mr-empty-file-display.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Display empty files properly on MR diffs
-merge_request: 23671
-author: Sean Nichols
-type: fixed
diff --git a/changelogs/unreleased/54814-sidebar-styling-updates.yml b/changelogs/unreleased/54814-sidebar-styling-updates.yml
deleted file mode 100644
index 98e3836ee14..00000000000
--- a/changelogs/unreleased/54814-sidebar-styling-updates.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix label and header styles in the job details sidebar.
-merge_request: 23816
-author: Nathan Friend
-type: changed
diff --git a/changelogs/unreleased/54844-report-syntax-dep-scan-ado.yml b/changelogs/unreleased/54844-report-syntax-dep-scan-ado.yml
deleted file mode 100644
index 95fc5cb804d..00000000000
--- a/changelogs/unreleased/54844-report-syntax-dep-scan-ado.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Use reports syntax for Dependency scanning in Auto DevOps
-merge_request: 24081
-author:
-type: added
diff --git a/changelogs/unreleased/54953-error-500-viewing-merge-request-due-to-nil-commit_email_hostname.yml b/changelogs/unreleased/54953-error-500-viewing-merge-request-due-to-nil-commit_email_hostname.yml
deleted file mode 100644
index 8fd127acf2b..00000000000
--- a/changelogs/unreleased/54953-error-500-viewing-merge-request-due-to-nil-commit_email_hostname.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Return an ApplicationSetting in CurrentSettings
-merge_request: 23766
-author:
-type: fixed
diff --git a/changelogs/unreleased/54981-extended-user-centric-tooltips-add-missing-cases.yml b/changelogs/unreleased/54981-extended-user-centric-tooltips-add-missing-cases.yml
deleted file mode 100644
index 25ae6d88428..00000000000
--- a/changelogs/unreleased/54981-extended-user-centric-tooltips-add-missing-cases.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: User Popovers for Commit Infos, Member Lists and Snippets
-merge_request: 24132
-author:
-type: added
diff --git a/changelogs/unreleased/55191-update-workhorse.yml b/changelogs/unreleased/55191-update-workhorse.yml
deleted file mode 100644
index d16518e673a..00000000000
--- a/changelogs/unreleased/55191-update-workhorse.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Update GitLab Workhorse to v8.0.0
-merge_request: 23740
-author:
-type: other
diff --git a/changelogs/unreleased/55192-about-link-in-new-window.yml b/changelogs/unreleased/55192-about-link-in-new-window.yml
deleted file mode 100644
index b686150942b..00000000000
--- a/changelogs/unreleased/55192-about-link-in-new-window.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Resolve About this feature link should open in new window
-merge_request: 24149
-author:
-type: fixed
diff --git a/changelogs/unreleased/55266-fix-incorrect-due-date-parsing.yml b/changelogs/unreleased/55266-fix-incorrect-due-date-parsing.yml
deleted file mode 100644
index 62a57085192..00000000000
--- a/changelogs/unreleased/55266-fix-incorrect-due-date-parsing.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Use 'parsePikadayDate' to parse due date string
-merge_request: 24045
-author:
-type: fixed
diff --git a/changelogs/unreleased/55293-split-bio-into-individual-line-in-extended-user-tooltips.yml b/changelogs/unreleased/55293-split-bio-into-individual-line-in-extended-user-tooltips.yml
deleted file mode 100644
index c6ff52b0fa1..00000000000
--- a/changelogs/unreleased/55293-split-bio-into-individual-line-in-extended-user-tooltips.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Split bio into individual line in extended user tooltips
-merge_request: 23940
-author:
-type: other
diff --git a/changelogs/unreleased/55344-only-prompt-user-once-when-navigating-away-from-file-editor.yml b/changelogs/unreleased/55344-only-prompt-user-once-when-navigating-away-from-file-editor.yml
deleted file mode 100644
index 9c4d73c5323..00000000000
--- a/changelogs/unreleased/55344-only-prompt-user-once-when-navigating-away-from-file-editor.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Only prompt user once when navigating away from file editor
-merge_request: 23820
-author: Sam Bigelow
-type: fixed
diff --git a/changelogs/unreleased/55369-update-milestone-sort-to-say-say-milestone-due-date.yml b/changelogs/unreleased/55369-update-milestone-sort-to-say-say-milestone-due-date.yml
deleted file mode 100644
index 7476b9caa93..00000000000
--- a/changelogs/unreleased/55369-update-milestone-sort-to-say-say-milestone-due-date.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Renames Milestone sort into Milestone due date
-merge_request: 24080
-author: Jacopo Beschi @jacopo-beschi
-type: changed
diff --git a/changelogs/unreleased/55484-fix-edit-button.yml b/changelogs/unreleased/55484-fix-edit-button.yml
deleted file mode 100644
index c8998cba248..00000000000
--- a/changelogs/unreleased/55484-fix-edit-button.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-title: Fix edit button disappearing in issue title
-merge_request: 23948
-author: Ruben Moya
-type: fixed
diff --git a/changelogs/unreleased/55669-redesign-project-lists-ui-further-improvements.yml b/changelogs/unreleased/55669-redesign-project-lists-ui-further-improvements.yml
deleted file mode 100644
index a51a08c892a..00000000000
--- a/changelogs/unreleased/55669-redesign-project-lists-ui-further-improvements.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: UI improvements for redesigned project lists
-merge_request: 24011
-author:
-type: other
diff --git a/changelogs/unreleased/55670-remove-app-views-shared-issuable-_filter-html-haml.yml b/changelogs/unreleased/55670-remove-app-views-shared-issuable-_filter-html-haml.yml
deleted file mode 100644
index 9d37f798250..00000000000
--- a/changelogs/unreleased/55670-remove-app-views-shared-issuable-_filter-html-haml.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove app/views/shared/issuable/_filter.html.haml
-merge_request: 24008
-author: Takuya Noguchi
-type: other
diff --git a/changelogs/unreleased/55716-update-cert-manager-chart-from-v0-5-0-to-v0-5-2.yml b/changelogs/unreleased/55716-update-cert-manager-chart-from-v0-5-0-to-v0-5-2.yml
deleted file mode 100644
index a25ace9d76d..00000000000
--- a/changelogs/unreleased/55716-update-cert-manager-chart-from-v0-5-0-to-v0-5-2.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Update cert-manager chart from v0.5.0 to v0.5.2
-merge_request: 24025
-author: Takuya Noguchi
-type: other
diff --git a/changelogs/unreleased/55721-externalization-for-pipeline-tags.yml b/changelogs/unreleased/55721-externalization-for-pipeline-tags.yml
deleted file mode 100644
index 4062300e73f..00000000000
--- a/changelogs/unreleased/55721-externalization-for-pipeline-tags.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Correctly externalize pipeline tags
-merge_request: 24028
-author:
-type: fixed
diff --git a/changelogs/unreleased/55755-user-activity-is-stuck-loading-when-there-is-none.yml b/changelogs/unreleased/55755-user-activity-is-stuck-loading-when-there-is-none.yml
deleted file mode 100644
index 5362a781281..00000000000
--- a/changelogs/unreleased/55755-user-activity-is-stuck-loading-when-there-is-none.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Hide spinner on empty activites list on user profile overview
-merge_request: 24063
-author:
-type: other
diff --git a/changelogs/unreleased/55836-docs-fix-navigation-style-in-docs.yml b/changelogs/unreleased/55836-docs-fix-navigation-style-in-docs.yml
deleted file mode 100644
index 2ac3599175b..00000000000
--- a/changelogs/unreleased/55836-docs-fix-navigation-style-in-docs.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix navigation style in docs
-merge_request: 24090
-author: Takuya Noguchi
-type: other
diff --git a/changelogs/unreleased/55838-remove-gem-install-bundler-from-docker-based-ruby-environments.yml b/changelogs/unreleased/55838-remove-gem-install-bundler-from-docker-based-ruby-environments.yml
deleted file mode 100644
index 08f60d205df..00000000000
--- a/changelogs/unreleased/55838-remove-gem-install-bundler-from-docker-based-ruby-environments.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove gem install bundler from Docker-based Ruby environments
-merge_request: 24093
-author: Takuya Noguchi
-type: other
diff --git a/changelogs/unreleased/55883-modal-header-titles-have-an-unnecessary-top-margin.yml b/changelogs/unreleased/55883-modal-header-titles-have-an-unnecessary-top-margin.yml
deleted file mode 100644
index 7dc783cc2b8..00000000000
--- a/changelogs/unreleased/55883-modal-header-titles-have-an-unnecessary-top-margin.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove top margin in modal header titles
-merge_request: 24108
-author:
-type: fixed
diff --git a/changelogs/unreleased/55958-inconsistent-spacing-between-note-and-user-avatar-in-discussions.yml b/changelogs/unreleased/55958-inconsistent-spacing-between-note-and-user-avatar-in-discussions.yml
deleted file mode 100644
index 765398cda84..00000000000
--- a/changelogs/unreleased/55958-inconsistent-spacing-between-note-and-user-avatar-in-discussions.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix spacing on discussions
-merge_request: !24197
-author:
-type: fixed
diff --git a/changelogs/unreleased/55966-when-ref-is-ambiguous-createpipelineservice-raises-an-error.yml b/changelogs/unreleased/55966-when-ref-is-ambiguous-createpipelineservice-raises-an-error.yml
new file mode 100644
index 00000000000..01a162944d3
--- /dev/null
+++ b/changelogs/unreleased/55966-when-ref-is-ambiguous-createpipelineservice-raises-an-error.yml
@@ -0,0 +1,5 @@
+---
+title: Prevent checking protected_ref? for ambiguous refs.
+merge_request: 24437
+author:
+type: fixed
diff --git a/changelogs/unreleased/56076-releases-margin.yml b/changelogs/unreleased/56076-releases-margin.yml
deleted file mode 100644
index a3cae1e035f..00000000000
--- a/changelogs/unreleased/56076-releases-margin.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fixes missing margin in releases block
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/56371-don-t-check-confidential-issues-for-spam.yml b/changelogs/unreleased/56371-don-t-check-confidential-issues-for-spam.yml
new file mode 100644
index 00000000000..fcfa29977d1
--- /dev/null
+++ b/changelogs/unreleased/56371-don-t-check-confidential-issues-for-spam.yml
@@ -0,0 +1,5 @@
+---
+title: Do not run spam checks on confidential issues
+merge_request: 24453
+author:
+type: fixed
diff --git a/changelogs/unreleased/56547-limit-sidekiq-logging-based-on-argument-size.yml b/changelogs/unreleased/56547-limit-sidekiq-logging-based-on-argument-size.yml
new file mode 100644
index 00000000000..9ef274f3b49
--- /dev/null
+++ b/changelogs/unreleased/56547-limit-sidekiq-logging-based-on-argument-size.yml
@@ -0,0 +1,5 @@
+---
+title: Prevent Sidekiq arguments over 10 KB in size from being logged to JSON
+merge_request: 24493
+author:
+type: changed
diff --git a/changelogs/unreleased/ab-50763-persist-index.yml b/changelogs/unreleased/ab-50763-persist-index.yml
deleted file mode 100644
index 0cf11923c5a..00000000000
--- a/changelogs/unreleased/ab-50763-persist-index.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add indexes to speed up CI query.
-merge_request: 23188
-author:
-type: performance
diff --git a/changelogs/unreleased/ac-releases-api-with-assets.yml b/changelogs/unreleased/ac-releases-api-with-assets.yml
deleted file mode 100644
index b29319ae683..00000000000
--- a/changelogs/unreleased/ac-releases-api-with-assets.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Support CURD operation for Links as one of the Release assets
-merge_request: 24056
-author:
-type: changed
diff --git a/changelogs/unreleased/ac-releases-api.yml b/changelogs/unreleased/ac-releases-api.yml
deleted file mode 100644
index 87217cce371..00000000000
--- a/changelogs/unreleased/ac-releases-api.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Releases API
-merge_request: 23795
-author:
-type: added
diff --git a/changelogs/unreleased/ac-releases-name-sha-author.yml b/changelogs/unreleased/ac-releases-name-sha-author.yml
deleted file mode 100644
index e84b82847eb..00000000000
--- a/changelogs/unreleased/ac-releases-name-sha-author.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add name, author_id, and sha to releases table
-merge_request: 23763
-author:
-type: added
diff --git a/changelogs/unreleased/add-new-nginx-metrics.yml b/changelogs/unreleased/add-new-nginx-metrics.yml
deleted file mode 100644
index 57221056d6e..00000000000
--- a/changelogs/unreleased/add-new-nginx-metrics.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add NGINX 0.16.0 and above metrics
-merge_request: 22133
-author:
-type: added
diff --git a/changelogs/unreleased/allow-basic-auth-on-go-get-middleware.yml b/changelogs/unreleased/allow-basic-auth-on-go-get-middleware.yml
deleted file mode 100644
index fda3fdc28cf..00000000000
--- a/changelogs/unreleased/allow-basic-auth-on-go-get-middleware.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Allow basic authentication on go get middleware
-merge_request: 23497
-author: Morty Choi @mortyccp
-type: changed
diff --git a/changelogs/unreleased/allow_collaboration_status_work.yml b/changelogs/unreleased/allow_collaboration_status_work.yml
deleted file mode 100644
index 3cf8f13ffea..00000000000
--- a/changelogs/unreleased/allow_collaboration_status_work.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Update a condition to visibility a merge request collaboration message
-merge_request: 23104
-author: Harry Kiselev
-type: other
diff --git a/changelogs/unreleased/blackst0ne-bump-rails-cve-2018-16476.yml b/changelogs/unreleased/blackst0ne-bump-rails-cve-2018-16476.yml
deleted file mode 100644
index dfa94c69ce0..00000000000
--- a/changelogs/unreleased/blackst0ne-bump-rails-cve-2018-16476.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Bump Ruby on Rails to 5.0.7.1
-merge_request: 23396
-author: "@blackst0ne"
-type: security
diff --git a/changelogs/unreleased/blackst0ne-convert-specs-rails5-style.yml b/changelogs/unreleased/blackst0ne-convert-specs-rails5-style.yml
deleted file mode 100644
index c29cfec075c..00000000000
--- a/changelogs/unreleased/blackst0ne-convert-specs-rails5-style.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: "[Rails5.1] Update functional specs to use new keyword format"
-merge_request: 23095
-author: "@blackst0ne"
-type: other
diff --git a/changelogs/unreleased/blackst0ne-improve-encoding-helper-spec.yml b/changelogs/unreleased/blackst0ne-improve-encoding-helper-spec.yml
deleted file mode 100644
index 09480499b87..00000000000
--- a/changelogs/unreleased/blackst0ne-improve-encoding-helper-spec.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Update specs to exclude possible false positive pass
-merge_request: 23893
-author: "@blackst0ne"
-type: other
diff --git a/changelogs/unreleased/bvl-hide-confidential-events-take2.yml b/changelogs/unreleased/bvl-hide-confidential-events-take2.yml
deleted file mode 100644
index a5abd496a9d..00000000000
--- a/changelogs/unreleased/bvl-hide-confidential-events-take2.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Hide confidential events in the API
-merge_request: 23746
-author:
-type: other
diff --git a/changelogs/unreleased/ccr-49289_milestone_link.yml b/changelogs/unreleased/ccr-49289_milestone_link.yml
deleted file mode 100644
index 14c09752a24..00000000000
--- a/changelogs/unreleased/ccr-49289_milestone_link.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add project milestone link
-merge_request: 22552
-author:
-type: added
diff --git a/changelogs/unreleased/ci-dropdown-hidden-bug.yml b/changelogs/unreleased/ci-dropdown-hidden-bug.yml
deleted file mode 100644
index 6910f04a6d5..00000000000
--- a/changelogs/unreleased/ci-dropdown-hidden-bug.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Don't hide CI dropdown behind diff summary
-merge_request:
-author: gfyoung
-type: fixed
diff --git a/changelogs/unreleased/depracated-migration-inheritance.yml b/changelogs/unreleased/depracated-migration-inheritance.yml
deleted file mode 100644
index 1ea9b2df59c..00000000000
--- a/changelogs/unreleased/depracated-migration-inheritance.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: ActiveRecord::Migration -> ActiveRecord::Migration[5.0]
-merge_request: 23910
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/deprecated-actiondispatch-paramsparser.yml b/changelogs/unreleased/deprecated-actiondispatch-paramsparser.yml
deleted file mode 100644
index 9cfb00a9544..00000000000
--- a/changelogs/unreleased/deprecated-actiondispatch-paramsparser.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove deprecated ActionDispatch::ParamsParser
-merge_request: 23848
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/deprecated-alias-method-chain.yml b/changelogs/unreleased/deprecated-alias-method-chain.yml
deleted file mode 100644
index 76dd016e4cc..00000000000
--- a/changelogs/unreleased/deprecated-alias-method-chain.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: 'Fix deprecation: alias_method_chain is deprecated. Please, use Module#prepend
- instead'
-merge_request: 23887
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/deprecated-callback-false.yml b/changelogs/unreleased/deprecated-callback-false.yml
deleted file mode 100644
index 6ba01a75ab9..00000000000
--- a/changelogs/unreleased/deprecated-callback-false.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: 'Fix deprecation: returning false in Active Record and Active Model callbacks
- will not implicitly halt a callback chain'
-merge_request: 24134
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/deprecated-comparing-actioncontroller-params-hash.yml b/changelogs/unreleased/deprecated-comparing-actioncontroller-params-hash.yml
deleted file mode 100644
index a7b9d054a4c..00000000000
--- a/changelogs/unreleased/deprecated-comparing-actioncontroller-params-hash.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: 'Fix deprecation: Comparing equality between ActionController::Parameters and
- a Hash is deprecated'
-merge_request: 23855
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/deprecated-delete-all-params.yml b/changelogs/unreleased/deprecated-delete-all-params.yml
deleted file mode 100644
index e23fe92a738..00000000000
--- a/changelogs/unreleased/deprecated-delete-all-params.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: 'Fix deprecation: Passing conditions to delete_all is deprecated'
-merge_request: 23817
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/deprecated-directly-inheriting-migration.yml b/changelogs/unreleased/deprecated-directly-inheriting-migration.yml
deleted file mode 100644
index 2793cc0d44f..00000000000
--- a/changelogs/unreleased/deprecated-directly-inheriting-migration.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: 'Fix deprecation: Directly inheriting from ActiveRecord::Migration is deprecated.'
-merge_request: 23884
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/deprecated-insert-sql.yml b/changelogs/unreleased/deprecated-insert-sql.yml
deleted file mode 100644
index ad21fbd9dde..00000000000
--- a/changelogs/unreleased/deprecated-insert-sql.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: 'Fix deprecation: insert_sql is deprecated and will be removed'
-merge_request: 23944
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/deprecated-migration-inheritance-2.yml b/changelogs/unreleased/deprecated-migration-inheritance-2.yml
deleted file mode 100644
index 467a521dbd4..00000000000
--- a/changelogs/unreleased/deprecated-migration-inheritance-2.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: ActiveRecord::Migration -> ActiveRecord::Migration[5.0] for AddIndexesToCiBuildsAndPipelines
-merge_request: 24167
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/deprecated-passing-activerecord-objects.yml b/changelogs/unreleased/deprecated-passing-activerecord-objects.yml
deleted file mode 100644
index e58647186b8..00000000000
--- a/changelogs/unreleased/deprecated-passing-activerecord-objects.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: 'Fix deprecation: Passing ActiveRecord::Base objects to sanitize_sql_hash_for_assignment'
-merge_request: 23818
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/deprecated-positional-seperator-parameter.yml b/changelogs/unreleased/deprecated-positional-seperator-parameter.yml
deleted file mode 100644
index 0d952e0d5eb..00000000000
--- a/changelogs/unreleased/deprecated-positional-seperator-parameter.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Passing the separator argument as a positional parameter is deprecated
-merge_request: 23334
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/deprecated-positional-spec-arguments.yml b/changelogs/unreleased/deprecated-positional-spec-arguments.yml
deleted file mode 100644
index 8e541df1ad4..00000000000
--- a/changelogs/unreleased/deprecated-positional-spec-arguments.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: 'Fix deprecation: Using positional arguments in integration tests'
-merge_request: 24110
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/deprecated-redirect-back.yml b/changelogs/unreleased/deprecated-redirect-back.yml
deleted file mode 100644
index 7fc567fbdb5..00000000000
--- a/changelogs/unreleased/deprecated-redirect-back.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: 'Fix deprecation: redirect_to :back is deprecated'
-merge_request: 23943
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/diff-empty-state-fixes.yml b/changelogs/unreleased/diff-empty-state-fixes.yml
deleted file mode 100644
index 0d347dd17e4..00000000000
--- a/changelogs/unreleased/diff-empty-state-fixes.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fixed merge request diffs empty states
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/dm-note-email-image-diff-discussion.yml b/changelogs/unreleased/dm-note-email-image-diff-discussion.yml
deleted file mode 100644
index 6532052e132..00000000000
--- a/changelogs/unreleased/dm-note-email-image-diff-discussion.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix notification email for image diff notes
-merge_request:
-author:
-type: fixed
diff --git a/changelogs/unreleased/docs-releases-api.yml b/changelogs/unreleased/docs-releases-api.yml
deleted file mode 100644
index fba70c0006d..00000000000
--- a/changelogs/unreleased/docs-releases-api.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Adds API documentation for releases
-merge_request: 23901
-author:
-type: added
diff --git a/changelogs/unreleased/error_tracking_feature_flag_fe.yml b/changelogs/unreleased/error_tracking_feature_flag_fe.yml
deleted file mode 100644
index 607929eb6b8..00000000000
--- a/changelogs/unreleased/error_tracking_feature_flag_fe.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Display a list of Sentry Issues in GitLab
-merge_request: 23770
-author:
-type: added
diff --git a/changelogs/unreleased/feature-gb-expose-ci-api-url-variable.yml b/changelogs/unreleased/feature-gb-expose-ci-api-url-variable.yml
deleted file mode 100644
index 19dc615c5f8..00000000000
--- a/changelogs/unreleased/feature-gb-expose-ci-api-url-variable.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Expose CI/CD predefined variable `CI_API_V4_URL`
-merge_request: 23936
-author:
-type: added
diff --git a/changelogs/unreleased/feature-option-to-make-variables-protected.yml b/changelogs/unreleased/feature-option-to-make-variables-protected.yml
deleted file mode 100644
index c99c0481c35..00000000000
--- a/changelogs/unreleased/feature-option-to-make-variables-protected.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add option to make ci variables protected by default
-merge_request: 22744
-author: Alexis Reigel
-type: added
diff --git a/changelogs/unreleased/fix-55448.yml b/changelogs/unreleased/fix-55448.yml
deleted file mode 100644
index e0bdbb6eda4..00000000000
--- a/changelogs/unreleased/fix-55448.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove deprecated xhr from specs
-merge_request: 23949
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/fix-calendar-events-fetching-error.yml b/changelogs/unreleased/fix-calendar-events-fetching-error.yml
deleted file mode 100644
index ad4a40cd9a0..00000000000
--- a/changelogs/unreleased/fix-calendar-events-fetching-error.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix calendar events fetching error on private profile page
-merge_request: 23718
-author: Harry Kiselev
-type: other
diff --git a/changelogs/unreleased/fix-n-plus-1-queries-projects.yml b/changelogs/unreleased/fix-n-plus-1-queries-projects.yml
deleted file mode 100644
index cb625784267..00000000000
--- a/changelogs/unreleased/fix-n-plus-1-queries-projects.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Fix some N+1 queries related to Admin Dashboard, User Dashboards and Activity
- Stream
-merge_request: 23034
-author:
-type: performance
diff --git a/changelogs/unreleased/fix-runner-eternal-loop-when-update-job-result.yml b/changelogs/unreleased/fix-runner-eternal-loop-when-update-job-result.yml
deleted file mode 100644
index 5a6c36e6f5f..00000000000
--- a/changelogs/unreleased/fix-runner-eternal-loop-when-update-job-result.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix runner eternal loop when update job result
-merge_request: 24481
-author:
-type: fixed
diff --git a/changelogs/unreleased/fix-udpate-head-pipeline-method.yml b/changelogs/unreleased/fix-udpate-head-pipeline-method.yml
deleted file mode 100644
index 8dbb9f8e42b..00000000000
--- a/changelogs/unreleased/fix-udpate-head-pipeline-method.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix unexpected exception by failure of finding an actual head pipeline
-merge_request: 24257
-author:
-type: fixed
diff --git a/changelogs/unreleased/fj-44679-skip-per-commit-validations.yml b/changelogs/unreleased/fj-44679-skip-per-commit-validations.yml
deleted file mode 100644
index 3f9754409df..00000000000
--- a/changelogs/unreleased/fj-44679-skip-per-commit-validations.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Skip per-commit validations already evaluated
-merge_request: 23984
-author:
-type: performance
diff --git a/changelogs/unreleased/fj-fix-lfs-image-comments-diffs.yml b/changelogs/unreleased/fj-fix-lfs-image-comments-diffs.yml
deleted file mode 100644
index dc1fe5d7417..00000000000
--- a/changelogs/unreleased/fj-fix-lfs-image-comments-diffs.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix bug commenting on LFS images
-merge_request: 23812
-author:
-type: fixed
diff --git a/changelogs/unreleased/force-redeploy-on-updated-secrets.yml b/changelogs/unreleased/force-redeploy-on-updated-secrets.yml
new file mode 100644
index 00000000000..3b727c99dd5
--- /dev/null
+++ b/changelogs/unreleased/force-redeploy-on-updated-secrets.yml
@@ -0,0 +1,5 @@
+---
+title: Redeploy Auto DevOps deployment on variable updates
+merge_request: 24498
+author: walkafwalka
+type: added
diff --git a/changelogs/unreleased/force-reload-arguments-2.yml b/changelogs/unreleased/force-reload-arguments-2.yml
deleted file mode 100644
index 23ab9433b3d..00000000000
--- a/changelogs/unreleased/force-reload-arguments-2.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Passing an argument to force an association to reload is now deprecated
-merge_request: 23894
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/gt-externalize-app-views-shared-notes.yml b/changelogs/unreleased/gt-externalize-app-views-shared-notes.yml
deleted file mode 100644
index 39ca6b67a54..00000000000
--- a/changelogs/unreleased/gt-externalize-app-views-shared-notes.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Externalize strings from `/app/views/shared/notes`
-merge_request: 23696
-author: Tao Wang
-type: other
diff --git a/changelogs/unreleased/gt-remove-unnecessary-line-before-reply-holder.yml b/changelogs/unreleased/gt-remove-unnecessary-line-before-reply-holder.yml
deleted file mode 100644
index 142a9c1f2cc..00000000000
--- a/changelogs/unreleased/gt-remove-unnecessary-line-before-reply-holder.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove unnecessary line before reply holder
-merge_request: 23092
-author: George Tsiolis
-type: changed
diff --git a/changelogs/unreleased/gt-reorder-group-sidebar-menu-items.yml b/changelogs/unreleased/gt-reorder-group-sidebar-menu-items.yml
deleted file mode 100644
index b1ecf2bb1ed..00000000000
--- a/changelogs/unreleased/gt-reorder-group-sidebar-menu-items.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Reorder sidebar menu item for group clusters
-merge_request: 24001
-author: George Tsiolis
-type: changed
diff --git a/changelogs/unreleased/gt-update-environment-breadcrumb.yml b/changelogs/unreleased/gt-update-environment-breadcrumb.yml
deleted file mode 100644
index 53b9673a96c..00000000000
--- a/changelogs/unreleased/gt-update-environment-breadcrumb.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Update environments breadcrumb
-merge_request: 23751
-author: George Tsiolis
-type: changed
diff --git a/changelogs/unreleased/gt-update-navigation-theme-colors.yml b/changelogs/unreleased/gt-update-navigation-theme-colors.yml
deleted file mode 100644
index 749587a6343..00000000000
--- a/changelogs/unreleased/gt-update-navigation-theme-colors.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Update header navigation theme colors
-merge_request: 23734
-author: George Tsiolis
-type: fixed
diff --git a/changelogs/unreleased/include-project.yml b/changelogs/unreleased/include-project.yml
deleted file mode 100644
index c63ac490d21..00000000000
--- a/changelogs/unreleased/include-project.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Allow to include files from another projects in gitlab-ci.yml
-merge_request: 24101
-author:
-type: added
diff --git a/changelogs/unreleased/include-templates.yml b/changelogs/unreleased/include-templates.yml
deleted file mode 100644
index 5601cd185e9..00000000000
--- a/changelogs/unreleased/include-templates.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Allow to include templates in gitlab-ci.yml
-merge_request: 23495
-author:
-type: added
diff --git a/changelogs/unreleased/jivl-update-placeholder-sentry-config.yml b/changelogs/unreleased/jivl-update-placeholder-sentry-config.yml
deleted file mode 100644
index eb860fd3905..00000000000
--- a/changelogs/unreleased/jivl-update-placeholder-sentry-config.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Update url placeholder for the sentry configuration page
-merge_request: 24338
-author:
-type: other
diff --git a/changelogs/unreleased/jlenny-CI_COMMIT_SHORT_SHA.yml b/changelogs/unreleased/jlenny-CI_COMMIT_SHORT_SHA.yml
deleted file mode 100644
index abece81a20d..00000000000
--- a/changelogs/unreleased/jlenny-CI_COMMIT_SHORT_SHA.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add new pipeline variable CI_COMMIT_SHORT_SHA
-merge_request: 23822
-author:
-type: added
diff --git a/changelogs/unreleased/knative-prometheus.yml b/changelogs/unreleased/knative-prometheus.yml
deleted file mode 100644
index 606c5332474..00000000000
--- a/changelogs/unreleased/knative-prometheus.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add Knative metrics to Prometheus
-merge_request: 23972
-author: Chris Baumbauer
-type: added
diff --git a/changelogs/unreleased/knative-rbac-check.yml b/changelogs/unreleased/knative-rbac-check.yml
deleted file mode 100644
index 0c40bb46e7f..00000000000
--- a/changelogs/unreleased/knative-rbac-check.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Require Knative to be installed only on an RBAC kubernetes cluster
-merge_request: 23807
-author: Chris Baumbauer
-type: changed
diff --git a/changelogs/unreleased/mk-avoid-read-only-error.yml b/changelogs/unreleased/mk-avoid-read-only-error.yml
deleted file mode 100644
index 8641f5db9f0..00000000000
--- a/changelogs/unreleased/mk-avoid-read-only-error.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Prevent admins from attempting hashed storage migration on read only DB
-merge_request: 23597
-author:
-type: fixed
diff --git a/changelogs/unreleased/none-syntax-highlighting.yml b/changelogs/unreleased/none-syntax-highlighting.yml
deleted file mode 100644
index b373aac7c02..00000000000
--- a/changelogs/unreleased/none-syntax-highlighting.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Add no-color theme for syntax highlighting.
-merge_request: !20170
-author: khm
-type: added
diff --git a/changelogs/unreleased/osw-cache-discussions-diff-highlighting.yml b/changelogs/unreleased/osw-cache-discussions-diff-highlighting.yml
deleted file mode 100644
index 7abc7d85794..00000000000
--- a/changelogs/unreleased/osw-cache-discussions-diff-highlighting.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Improve the loading time on merge request's discussion page by caching diff
- highlight
-merge_request: 23857
-author:
-type: performance
diff --git a/changelogs/unreleased/osw-fix-quick-suggestion-application-being-reverted.yml b/changelogs/unreleased/osw-fix-quick-suggestion-application-being-reverted.yml
deleted file mode 100644
index 1f80d7535a5..00000000000
--- a/changelogs/unreleased/osw-fix-quick-suggestion-application-being-reverted.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Adjust applied suggestion reverting previous changes
-merge_request: 24250
-author:
-type: fixed
diff --git a/changelogs/unreleased/pl-reactive-caching-primary_key.yml b/changelogs/unreleased/pl-reactive-caching-primary_key.yml
deleted file mode 100644
index a72933c19b1..00000000000
--- a/changelogs/unreleased/pl-reactive-caching-primary_key.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Enable caching for records which primary key is not `id`
-merge_request: 24245
-author:
-type: fixed
diff --git a/changelogs/unreleased/remote-mirror-update-failed-notification.yml b/changelogs/unreleased/remote-mirror-update-failed-notification.yml
deleted file mode 100644
index 50ec8624ae5..00000000000
--- a/changelogs/unreleased/remote-mirror-update-failed-notification.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Send a notification email to project maintainers when a mirror update fails
-merge_request: 23595
-author:
-type: added
diff --git a/changelogs/unreleased/remove-rails4-specific-code.yml b/changelogs/unreleased/remove-rails4-specific-code.yml
deleted file mode 100644
index c6c4c0a5d5b..00000000000
--- a/changelogs/unreleased/remove-rails4-specific-code.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove rails4 specific code
-merge_request: 23847
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/remove-rails4-support.yml b/changelogs/unreleased/remove-rails4-support.yml
deleted file mode 100644
index a05c913a70c..00000000000
--- a/changelogs/unreleased/remove-rails4-support.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove rails 4 support in CI, Gemfiles, bin/ and config/
-merge_request: 23717
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/s3-directories-get.yml b/changelogs/unreleased/s3-directories-get.yml
deleted file mode 100644
index 9f76af2bb09..00000000000
--- a/changelogs/unreleased/s3-directories-get.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Allow 'rake gitlab:cleanup:remote_upload_files' to read bucket files without
- having permissions to see all buckets.
-merge_request: 23981
-author:
-type: fixed
diff --git a/changelogs/unreleased/security-48259-private-snippet.yml b/changelogs/unreleased/security-48259-private-snippet.yml
deleted file mode 100644
index 6cf1e5dc694..00000000000
--- a/changelogs/unreleased/security-48259-private-snippet.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Prevent private snippets from being embeddable
-merge_request:
-author:
-type: security
diff --git a/changelogs/unreleased/security-53543-user-keeps-access-to-mr-issue-when-removed-from-team.yml b/changelogs/unreleased/security-53543-user-keeps-access-to-mr-issue-when-removed-from-team.yml
deleted file mode 100644
index ab12ba539c1..00000000000
--- a/changelogs/unreleased/security-53543-user-keeps-access-to-mr-issue-when-removed-from-team.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Issuable no longer is visible to users when project can't be viewed
-merge_request:
-author:
-type: security
diff --git a/changelogs/unreleased/security-54377-label-milestone-name-xss.yml b/changelogs/unreleased/security-54377-label-milestone-name-xss.yml
deleted file mode 100644
index 76589b2eb4f..00000000000
--- a/changelogs/unreleased/security-54377-label-milestone-name-xss.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Escape label and milestone titles to prevent XSS in GFM autocomplete
-merge_request: 2693
-author:
-type: security
diff --git a/changelogs/unreleased/security-bvl-fix-cross-project-mr-exposure.yml b/changelogs/unreleased/security-bvl-fix-cross-project-mr-exposure.yml
deleted file mode 100644
index 11aae4428fb..00000000000
--- a/changelogs/unreleased/security-bvl-fix-cross-project-mr-exposure.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Don't expose cross project repositories through diffs when creating merge reqeusts
-merge_request:
-author:
-type: security
diff --git a/changelogs/unreleased/security-fix-ssrf-import-url-remote-mirror.yml b/changelogs/unreleased/security-fix-ssrf-import-url-remote-mirror.yml
deleted file mode 100644
index 7ba7aa21090..00000000000
--- a/changelogs/unreleased/security-fix-ssrf-import-url-remote-mirror.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix SSRF with import_url and remote mirror url
-merge_request:
-author:
-type: security
diff --git a/changelogs/unreleased/security-master-group-cicd-settings-accessible-to-maintainer.yml b/changelogs/unreleased/security-master-group-cicd-settings-accessible-to-maintainer.yml
deleted file mode 100644
index 5586fa6cd8e..00000000000
--- a/changelogs/unreleased/security-master-group-cicd-settings-accessible-to-maintainer.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Allow changing group CI/CD settings only for owners.
-merge_request:
-author:
-type: security
diff --git a/changelogs/unreleased/security-master-guests-jobs-api.yml b/changelogs/unreleased/security-master-guests-jobs-api.yml
deleted file mode 100644
index 83022e91aca..00000000000
--- a/changelogs/unreleased/security-master-guests-jobs-api.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Authorize before reading job information via API.
-merge_request:
-author:
-type: security
diff --git a/changelogs/unreleased/security-master-secret-ci-variables-exposed.yml b/changelogs/unreleased/security-master-secret-ci-variables-exposed.yml
deleted file mode 100644
index 702181065f5..00000000000
--- a/changelogs/unreleased/security-master-secret-ci-variables-exposed.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Prevent leaking protected variables for ambiguous refs.
-merge_request:
-author:
-type: security
diff --git a/changelogs/unreleased/security-master-url-rel.yml b/changelogs/unreleased/security-master-url-rel.yml
deleted file mode 100644
index 75f599f6bcd..00000000000
--- a/changelogs/unreleased/security-master-url-rel.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Set URL rel attribute for broken URLs.
-merge_request:
-author:
-type: security
diff --git a/changelogs/unreleased/security-refs-available-to-project-guest.yml b/changelogs/unreleased/security-refs-available-to-project-guest.yml
deleted file mode 100644
index eb6804c52d3..00000000000
--- a/changelogs/unreleased/security-refs-available-to-project-guest.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Project guests no longer are able to see refs page
-merge_request:
-author:
-type: security
diff --git a/changelogs/unreleased/security-todos_not_redacted_for_guests.yml b/changelogs/unreleased/security-todos_not_redacted_for_guests.yml
deleted file mode 100644
index be0ae9a7193..00000000000
--- a/changelogs/unreleased/security-todos_not_redacted_for_guests.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Delete confidential todos for user when downgraded to Guest
-merge_request:
-author:
-type: security
diff --git a/changelogs/unreleased/sh-bump-omniauth-google-gem.yml b/changelogs/unreleased/sh-bump-omniauth-google-gem.yml
deleted file mode 100644
index 2b31a55f8b2..00000000000
--- a/changelogs/unreleased/sh-bump-omniauth-google-gem.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Upgrade Omniauth and JWT gems to switch away from Google+ API
-merge_request: 24068
-author:
-type: changed
diff --git a/changelogs/unreleased/sh-cache-avatar-paths.yml b/changelogs/unreleased/sh-cache-avatar-paths.yml
deleted file mode 100644
index b59a4db413d..00000000000
--- a/changelogs/unreleased/sh-cache-avatar-paths.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Cache avatar URLs and paths within a request
-merge_request: 23950
-author:
-type: performance
diff --git a/changelogs/unreleased/sh-carrierwave-patch-google-acl.yml b/changelogs/unreleased/sh-carrierwave-patch-google-acl.yml
deleted file mode 100644
index 206253a100c..00000000000
--- a/changelogs/unreleased/sh-carrierwave-patch-google-acl.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix object storage not working properly with Google S3 compatibility
-merge_request: 23858
-author:
-type: fixed
diff --git a/changelogs/unreleased/sh-drop-webhooks-project-export.yml b/changelogs/unreleased/sh-drop-webhooks-project-export.yml
deleted file mode 100644
index 217373bce66..00000000000
--- a/changelogs/unreleased/sh-drop-webhooks-project-export.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Drop Webhooks from project import/export config
-merge_request: 24121
-author:
-type: fixed
diff --git a/changelogs/unreleased/sh-fix-branches-api-timeout.yml b/changelogs/unreleased/sh-fix-branches-api-timeout.yml
deleted file mode 100644
index 8cd29a7269d..00000000000
--- a/changelogs/unreleased/sh-fix-branches-api-timeout.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix timeout issues retrieving branches via API
-merge_request: 24034
-author:
-type: performance
diff --git a/changelogs/unreleased/sh-fix-github-import-without-oauth2-config.yml b/changelogs/unreleased/sh-fix-github-import-without-oauth2-config.yml
deleted file mode 100644
index ad548a6ff35..00000000000
--- a/changelogs/unreleased/sh-fix-github-import-without-oauth2-config.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Allow GitHub imports via token even if OAuth2 provider not configured
-merge_request: 23703
-author:
-type: fixed
diff --git a/changelogs/unreleased/sh-fix-issue-55822.yml b/changelogs/unreleased/sh-fix-issue-55822.yml
deleted file mode 100644
index 1267b2ace2f..00000000000
--- a/changelogs/unreleased/sh-fix-issue-55822.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix commit SHA not showing in merge request compare dropdown
-merge_request: 24084
-author:
-type: fixed
diff --git a/changelogs/unreleased/sh-fix-issue-55914.yml b/changelogs/unreleased/sh-fix-issue-55914.yml
deleted file mode 100644
index f6f372f59c7..00000000000
--- a/changelogs/unreleased/sh-fix-issue-55914.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Fix Bitbucket Server import only including first 25 pull requests
-merge_request: 24178
-author:
-type: fixed
diff --git a/changelogs/unreleased/sh-fix-snippet-uploads-path-lookup.yml b/changelogs/unreleased/sh-fix-snippet-uploads-path-lookup.yml
new file mode 100644
index 00000000000..414c8663049
--- /dev/null
+++ b/changelogs/unreleased/sh-fix-snippet-uploads-path-lookup.yml
@@ -0,0 +1,5 @@
+---
+title: Fix 404s with snippet uploads in object storage
+merge_request: 24550
+author:
+type: fixed
diff --git a/changelogs/unreleased/sh-skip-validation-visibility-changed.yml b/changelogs/unreleased/sh-skip-validation-visibility-changed.yml
deleted file mode 100644
index 405be698b2b..00000000000
--- a/changelogs/unreleased/sh-skip-validation-visibility-changed.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Only validate project visibility when it has changed
-merge_request: 24142
-author:
-type: fixed
diff --git a/changelogs/unreleased/spec-positional-arguments.yml b/changelogs/unreleased/spec-positional-arguments.yml
deleted file mode 100644
index 9dc114e5595..00000000000
--- a/changelogs/unreleased/spec-positional-arguments.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: 'Fix deprecation: Using positional arguments in integration tests'
-merge_request: 24009
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/specs-positional-arguments.yml b/changelogs/unreleased/specs-positional-arguments.yml
deleted file mode 100644
index 38b831bd72c..00000000000
--- a/changelogs/unreleased/specs-positional-arguments.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: convert specs in javascripts/ and support/ to new syntax
-merge_request: 23947
-author: Jasper Maes
-type: other
diff --git a/changelogs/unreleased/support-gitaly-tls.yml b/changelogs/unreleased/support-gitaly-tls.yml
deleted file mode 100644
index 2a15500d6da..00000000000
--- a/changelogs/unreleased/support-gitaly-tls.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Support tls communication in gitaly
-merge_request: 22602
-author:
-type: added
diff --git a/changelogs/unreleased/tc-remove-20181218192239-migration.yml b/changelogs/unreleased/tc-remove-20181218192239-migration.yml
deleted file mode 100644
index 81e06a99c1f..00000000000
--- a/changelogs/unreleased/tc-remove-20181218192239-migration.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Remove migration to backfill project_repositories for legacy storage projects
-merge_request: 24299
-author:
-type: removed
diff --git a/changelogs/unreleased/triggermesh-knative-version.yml b/changelogs/unreleased/triggermesh-knative-version.yml
deleted file mode 100644
index 27f400962da..00000000000
--- a/changelogs/unreleased/triggermesh-knative-version.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Knative version bump 0.1.3 -> 0.2.2
-merge_request:
-author: Chris Baumbauer
-type: changed
diff --git a/changelogs/unreleased/tz-user-popover-follow-up.yml b/changelogs/unreleased/tz-user-popover-follow-up.yml
deleted file mode 100644
index d8f004beaa0..00000000000
--- a/changelogs/unreleased/tz-user-popover-follow-up.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-title: Changed Userpopover Fixtures and shadow color
-merge_request: 23768
-author:
-type: other
diff --git a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-43.yml b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-43.yml
deleted file mode 100644
index 24471b028b1..00000000000
--- a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-43.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Update GitLab Runner Helm Chart to 0.1.43
-merge_request: 24083
-author:
-type: other
diff --git a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-45.yml b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-45.yml
new file mode 100644
index 00000000000..7d92929221f
--- /dev/null
+++ b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-1-45.yml
@@ -0,0 +1,5 @@
+---
+title: Update GitLab Runner Helm Chart to 0.1.45
+merge_request: 24564
+author:
+type: other
diff --git a/changelogs/unreleased/user-update-head-pipeline-worker.yml b/changelogs/unreleased/user-update-head-pipeline-worker.yml
deleted file mode 100644
index fd88697f239..00000000000
--- a/changelogs/unreleased/user-update-head-pipeline-worker.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Refactor the logic of updating head pipelines for merge requests
-merge_request: 23502
-author:
-type: other
diff --git a/changelogs/unreleased/winh-dropdown-title-padding.yml b/changelogs/unreleased/winh-dropdown-title-padding.yml
deleted file mode 100644
index 9d65175b536..00000000000
--- a/changelogs/unreleased/winh-dropdown-title-padding.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Adjust padding of .dropdown-title to comply with design specs
-merge_request: 23546
-author:
-type: changed
diff --git a/changelogs/unreleased/winh-merge-request-commit-context.yml b/changelogs/unreleased/winh-merge-request-commit-context.yml
deleted file mode 100644
index 9e12a926af4..00000000000
--- a/changelogs/unreleased/winh-merge-request-commit-context.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Display commit ID for discussions made on merge request commits
-merge_request: 23837
-author:
-type: fixed
diff --git a/changelogs/unreleased/winh-princess-mononospace.yml b/changelogs/unreleased/winh-princess-mononospace.yml
deleted file mode 100644
index e2d33de375e..00000000000
--- a/changelogs/unreleased/winh-princess-mononospace.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Make commit IDs in merge request discussion header monospace
-merge_request: 23562
-author:
-type: changed
diff --git a/changelogs/unreleased/winh-upgrade-gitlab-ui.yml b/changelogs/unreleased/winh-upgrade-gitlab-ui.yml
deleted file mode 100644
index b312a329f5d..00000000000
--- a/changelogs/unreleased/winh-upgrade-gitlab-ui.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Upgrade @gitlab/ui to 1.16.2
-merge_request: 23946
-author:
-type: other
diff --git a/changelogs/unreleased/zj-backup-restore-object-pools.yml b/changelogs/unreleased/zj-backup-restore-object-pools.yml
deleted file mode 100644
index 26e1d49aa04..00000000000
--- a/changelogs/unreleased/zj-backup-restore-object-pools.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Restore Object Pools when restoring an object pool
-merge_request: 23682
-author:
-type: added
diff --git a/config/routes/project.rb b/config/routes/project.rb
index d9afb4e7bc8..21793e7756a 100644
--- a/config/routes/project.rb
+++ b/config/routes/project.rb
@@ -2,6 +2,8 @@ resources :projects, only: [:index, :new, :create]
draw :git_http
+get '/projects/:id' => 'projects#resolve'
+
constraints(::Constraints::ProjectUrlConstrainer.new) do
# If the route has a wildcard segment, the segment has a regex constraint,
# the segment is potentially followed by _another_ wildcard segment, and
diff --git a/danger/documentation/Dangerfile b/danger/documentation/Dangerfile
index 52af837c261..188331cc87c 100644
--- a/danger/documentation/Dangerfile
+++ b/danger/documentation/Dangerfile
@@ -32,7 +32,7 @@ to be reviewed.
| Tech writer | Stage(s) |
| ------------ | ------------------------------------------------------------ |
| `@marcia` | ~Create ~Release + ~"development guidelines" |
-| `@axil` | ~Distribution ~Gitaly ~Gitter ~Monitoring ~Package ~Secure |
+| `@axil` | ~Distribution ~Gitaly ~Gitter ~Monitor ~Package ~Secure |
| `@eread` | ~Manage ~Configure ~Geo ~Verify |
| `@mikelewis` | ~Plan |
diff --git a/doc/administration/gitaly/index.md b/doc/administration/gitaly/index.md
index 05c1923f0cb..abef7a6cd33 100644
--- a/doc/administration/gitaly/index.md
+++ b/doc/administration/gitaly/index.md
@@ -49,6 +49,25 @@ Starting with GitLab 11.4, Gitaly is a replacement for NFS except
when the [Elastic Search indexer](https://gitlab.com/gitlab-org/gitlab-elasticsearch-indexer)
is used.
+### Network architecture
+
+- gitlab-rails shards repositories into "repository storages"
+- gitlab-rails/config/gitlab.yml contains a map from storage names to
+ (Gitaly address, Gitaly token) pairs
+- the `storage name` -\> `(Gitaly address, Gitaly token)` map in
+ gitlab.yml is the single source of truth for the Gitaly network
+ topology
+- a (Gitaly address, Gitaly token) corresponds to a Gitaly server
+- a Gitaly server hosts one or more storages
+- Gitaly addresses must be specified in such a way that they resolve
+ correctly for ALL Gitaly clients
+- Gitaly clients are: unicorn, sidekiq, gitlab-workhorse,
+ gitlab-shell, and Gitaly itself
+- special case: a Gitaly server must be able to make RPC calls **to
+ itself** via its own (Gitaly address, Gitaly token) pair as
+ specified in gitlab-rails/config/gitlab.yml
+- Gitaly servers must not be exposed to the public internet
+
Gitaly network traffic is unencrypted so you should use a firewall to
restrict access to your Gitaly server.
diff --git a/doc/ci/environments.md b/doc/ci/environments.md
index 010c579b83e..b9b5ceab7fb 100644
--- a/doc/ci/environments.md
+++ b/doc/ci/environments.md
@@ -416,81 +416,15 @@ and/or `production`) you can see this information in the merge request itself.
### Go directly from source files to public pages on the environment
-> Introduced in GitLab 8.17. In GitLab 11.5 the file links
-are surfaced to the merge request widget.
-
-You can specify a Route Map to get GitLab to show **View on ...**
-buttons to go directly from a file to that file's representation on the
-[deployed website via Review Apps](review_apps/index.md).
-
-To get this to work, you need to tell GitLab how the paths of files in your repository map to paths of pages on your website, using a Route Map.
-
-A Route Map is a file inside the repository at `.gitlab/route-map.yml`, which contains a YAML array that maps `source` paths (in the repository) to `public` paths (on the website).
-Below is an example of a route map for [Middleman](https://middlemanapp.com) static websites
-like <https://gitlab.com/gitlab-com/www-gitlab-com>:
-
-```yaml
-# Team data
-- source: 'data/team.yml' # data/team.yml
- public: 'team/' # team/
-
-# Blogposts
-- source: /source\/posts\/([0-9]{4})-([0-9]{2})-([0-9]{2})-(.+?)\..*/ # source/posts/2017-01-30-around-the-world-in-6-releases.html.md.erb
- public: '\1/\2/\3/\4/' # 2017/01/30/around-the-world-in-6-releases/
-
-# HTML files
-- source: /source\/(.+?\.html).*/ # source/index.html.haml
- public: '\1' # index.html
-
-# Other files
-- source: /source\/(.*)/ # source/images/blogimages/around-the-world-in-6-releases-cover.png
- public: '\1' # images/blogimages/around-the-world-in-6-releases-cover.png
-```
-
-Mappings are defined as entries in the root YAML array, and are identified by a `-` prefix. Within an entry, we have a hash map with two keys:
-
-- `source`
- - a string, starting and ending with `'`, for an exact match
- - a regular expression, starting and ending with `/`, for a pattern match
- - The regular expression needs to match the entire source path - `^` and `$` anchors are implied.
- - Can include capture groups denoted by `()` that can be referred to in the `public` path.
- - Slashes (`/`) can, but don't have to, be escaped as `\/`.
- - Literal periods (`.`) should be escaped as `\.`.
-- `public`
- - a string, starting and ending with `'`.
- - Can include `\N` expressions to refer to capture groups in the `source` regular expression in order of their occurrence, starting with `\1`.
-
-The public path for a source path is determined by finding the first `source` expression that matches it, and returning the corresponding `public` path, replacing the `\N` expressions with the values of the `()` capture groups if appropriate.
-
-In the example above, the fact that mappings are evaluated in order of their definition is used to ensure that `source/index.html.haml` will match `/source\/(.+?\.html).*/` instead of `/source\/(.*)/`, and will result in a public path of `index.html`, instead of `index.html.haml`.
-
----
-
-Once you have the route mapping set up, it will be exposed in a few places:
-
-- In the merge request widget. The **View app** button will take you to the
- environment URL you have set up in `.gitlab-ci.yml`. The dropdown will render
- the first 5 matched items from the route map, but you can filter them if more
- than 5 are available.
-
- ![View app file list in merge request widget](img/view_on_mr_widget.png)
-
-- In the diff for a merge request, comparison, or commit.
-
- !["View on env" button in merge request diff](img/view_on_env_mr.png)
-
-- In the blob file view.
-
- !["View on env" button in file view](img/view_on_env_blob.png) |
-
----
-
-We now have a full development cycle, where our app is tested, built, deployed
-as a Review app, deployed to a staging server once the merge request is merged,
-and finally manually deployed to the production server. What we just described
-is a single workflow, but imagine tens of developers working on a project
-at the same time. They each push to their branches, and dynamic environments are
-created all the time. In that case, we probably need to do some clean up. Read
+With GitLab's [Route Maps](review_apps/index.md#route-maps) you can go directly
+from source files to public pages on the environment set for Review Apps.
+
+From then on, you have a full development cycle, where your app is tested, built, deployed
+as a Review App, deployed to a staging server once the merge request is merged,
+and finally manually deployed to the production server. This is a simple workflow,
+but when you have multiple developers working on a project
+at the same time, each of them pushing to their own branches, dynamic environments are
+created all the time. In which case, you probably want to do some clean up. Read
next how environments can be stopped.
## Stopping an environment
diff --git a/doc/ci/img/view_on_env_blob.png b/doc/ci/review_apps/img/view_on_env_blob.png
index acc457fbb38..acc457fbb38 100644
--- a/doc/ci/img/view_on_env_blob.png
+++ b/doc/ci/review_apps/img/view_on_env_blob.png
Binary files differ
diff --git a/doc/ci/img/view_on_env_mr.png b/doc/ci/review_apps/img/view_on_env_mr.png
index 2c0bd25a4f2..2c0bd25a4f2 100644
--- a/doc/ci/img/view_on_env_mr.png
+++ b/doc/ci/review_apps/img/view_on_env_mr.png
Binary files differ
diff --git a/doc/ci/img/view_on_mr_widget.png b/doc/ci/review_apps/img/view_on_mr_widget.png
index efe023b07b5..efe023b07b5 100644
--- a/doc/ci/img/view_on_mr_widget.png
+++ b/doc/ci/review_apps/img/view_on_mr_widget.png
Binary files differ
diff --git a/doc/ci/review_apps/index.md b/doc/ci/review_apps/index.md
index 64be011008e..8b3a7b63e62 100644
--- a/doc/ci/review_apps/index.md
+++ b/doc/ci/review_apps/index.md
@@ -102,3 +102,88 @@ The following are example projects that use Review Apps with:
- [OpenShift](https://gitlab.com/gitlab-examples/review-apps-openshift).
See also the video [Demo: Cloud Native Development with GitLab](https://www.youtube.com/watch?v=jfIyQEwrocw), which includes a Review Apps example.
+
+## Route Maps
+
+> Introduced in GitLab 8.17. In GitLab 11.5 the file links
+are surfaced to the merge request widget.
+
+Route Maps allows you to go directly from source files
+to public pages on the [environment](../environments.md) defined for
+Review Apps. Once set up, the review app link in the merge request
+widget can take you directly to the pages changed, making it easier
+and faster to preview proposed modifications.
+
+All you need to do is to tell GitLab how the paths of files
+in your repository map to paths of pages on your website using a Route Map.
+Once set, GitLab will display **View on ...** buttons, which will take you
+to the pages changed directly from merge requests.
+
+To set up a route map, add a a file inside the repository at `.gitlab/route-map.yml`,
+which contains a YAML array that maps `source` paths (in the repository) to `public`
+paths (on the website).
+
+### Route Maps example
+
+Below there's an example of a route map for [Middleman](https://middlemanapp.com),
+a static site generator (SSG) used to build [GitLab's website](https://about.gitlab.com),
+deployed from its [project on GitLab.com](https://gitlab.com/gitlab-com/www-gitlab-com):
+
+```yaml
+# Team data
+- source: 'data/team.yml' # data/team.yml
+ public: 'team/' # team/
+
+# Blogposts
+- source: /source\/posts\/([0-9]{4})-([0-9]{2})-([0-9]{2})-(.+?)\..*/ # source/posts/2017-01-30-around-the-world-in-6-releases.html.md.erb
+ public: '\1/\2/\3/\4/' # 2017/01/30/around-the-world-in-6-releases/
+
+# HTML files
+- source: /source\/(.+?\.html).*/ # source/index.html.haml
+ public: '\1' # index.html
+
+# Other files
+- source: /source\/(.*)/ # source/images/blogimages/around-the-world-in-6-releases-cover.png
+ public: '\1' # images/blogimages/around-the-world-in-6-releases-cover.png
+```
+
+Mappings are defined as entries in the root YAML array, and are identified by a `-` prefix. Within an entry, we have a hash map with two keys:
+
+- `source`
+ - a string, starting and ending with `'`, for an exact match
+ - a regular expression, starting and ending with `/`, for a pattern match
+ - The regular expression needs to match the entire source path - `^` and `$` anchors are implied.
+ - Can include capture groups denoted by `()` that can be referred to in the `public` path.
+ - Slashes (`/`) can, but don't have to, be escaped as `\/`.
+ - Literal periods (`.`) should be escaped as `\.`.
+- `public`
+ - a string, starting and ending with `'`.
+ - Can include `\N` expressions to refer to capture groups in the `source` regular expression in order of their occurrence, starting with `\1`.
+
+The public path for a source path is determined by finding the first
+`source` expression that matches it, and returning the corresponding
+`public` path, replacing the `\N` expressions with the values of the
+`()` capture groups if appropriate.
+
+In the example above, the fact that mappings are evaluated in order
+of their definition is used to ensure that `source/index.html.haml`
+will match `/source\/(.+?\.html).*/` instead of `/source\/(.*)/`,
+and will result in a public path of `index.html`, instead of
+`index.html.haml`.
+
+Once you have the route mapping set up, it will be exposed in a few places:
+
+- In the merge request widget. The **View app** button will take you to the
+ environment URL you have set up in `.gitlab-ci.yml`. The dropdown will render
+ the first 5 matched items from the route map, but you can filter them if more
+ than 5 are available.
+
+ ![View app file list in merge request widget](img/view_on_mr_widget.png)
+
+- In the diff for a merge request, comparison, or commit.
+
+ !["View on env" button in merge request diff](img/view_on_env_mr.png)
+
+- In the blob file view.
+
+ !["View on env" button in file view](img/view_on_env_blob.png)
diff --git a/doc/development/automatic_ce_ee_merge.md b/doc/development/automatic_ce_ee_merge.md
index 0cc083cefc0..fed772b9240 100644
--- a/doc/development/automatic_ce_ee_merge.md
+++ b/doc/development/automatic_ce_ee_merge.md
@@ -148,7 +148,7 @@ merge commit SHA is `138f5e2f20289bb376caffa0303adb0cac859ce1`:
- To cherry-pick multiple commits, such as B and D in a range [A > B > C > D], use:
```shell
- git cherry-pick commmit-B-SHA commit-D-SHA
+ git cherry-pick commit-B-SHA commit-D-SHA
```
For example, suppose commit B SHA = `4f5e4018c09ed797fdf446b3752f82e46f5af502`,
@@ -213,7 +213,7 @@ being able to deploy.
No, not if there is an EE merge request for every CE merge request that causes
conflicts _and_ that EE merge request is merged first. In the past we may have
been a bit more relaxed when it comes to enforcing EE merge requests, but to
-enable automatic merging have to start requiring such merge requests even for
+enable automatic merging we have to start requiring such merge requests even for
the smallest conflicts.
### Some files I work with often conflict, how can I best deal with this?
diff --git a/doc/development/sidekiq_debugging.md b/doc/development/sidekiq_debugging.md
index 84b61bd7e61..2b3a9481b93 100644
--- a/doc/development/sidekiq_debugging.md
+++ b/doc/development/sidekiq_debugging.md
@@ -11,6 +11,11 @@ Example:
gitlab_rails['env'] = {"SIDEKIQ_LOG_ARGUMENTS" => "1"}
```
-Please note: It is not recommend to enable this setting in production because some
+Please note: It is not recommend to enable this setting in production because some
Sidekiq jobs (such as sending a password reset email) take secret arguments (for
-example the password reset token). \ No newline at end of file
+example the password reset token).
+
+When using [Sidekiq JSON logging](../administration/logs.md#sidekiqlog),
+arguments logs are limited to a maximum size of 10 kilobytes of text;
+any arguments after this limit will be discarded and replaced with a
+single argument containing the string `"..."`.
diff --git a/doc/development/testing_guide/flaky_tests.md b/doc/development/testing_guide/flaky_tests.md
index f6bc9fb0979..58a2e53b486 100644
--- a/doc/development/testing_guide/flaky_tests.md
+++ b/doc/development/testing_guide/flaky_tests.md
@@ -7,16 +7,37 @@ eventually.
## Quarantined tests
-Tests can be put in quarantine by assigning `:quarantine` metadata. This means
-they will be skipped unless run with `--tag quarantine`. This can be used for
-tests that are expected to fail while a fix is in progress (similar to how
-[`skip` or `pending`](https://relishapp.com/rspec/rspec-core/v/3-8/docs/pending-and-skipped-examples)
- can be used).
+When a test frequently fails in `master`,
+[a ~"broken master" issue](https://about.gitlab.com/handbook/engineering/workflow/#broken-master)
+should be created.
+If the test cannot be fixed in a timely fashion, there is an impact on the
+productivity of all the developers, so it should be placed in quarantine by
+assigning the `:quarantine` metadata.
-```
+This means it will be skipped unless run with `--tag quarantine`:
+
+```shell
bin/rspec --tag quarantine
```
+**Before putting a test in quarantine, you should make sure that a
+~"broken master" issue exists for it so it won't stay in quarantine forever.**
+
+Once a test is in quarantine, there are 3 choices:
+
+- Should the test be fixed (i.e. get rid of its flakiness)?
+- Should the test be moved to a lower level of testing?
+- Should the test be removed entirely (e.g. because there's already a
+ lower-level test, or it's duplicating another same-level test, or it's testing
+ too much etc.)?
+
+### Quarantine tests on the CI
+
+Quarantined tests are run on the CI in dedicated jobs that are allowed to fail:
+
+- `rspec-pg-quarantine` and `rspec-mysql-quarantine` (CE & EE)
+- `rspec-pg-quarantine-ee` and `rspec-mysql-quarantine-ee` (EE only)
+
## Automatic retries and flaky tests detection
On our CI, we use [rspec-retry] to automatically retry a failing example a few
diff --git a/doc/update/11.5-to-11.6.md b/doc/update/11.5-to-11.6.md
index 2e9ec5d71de..33e09e1915b 100644
--- a/doc/update/11.5-to-11.6.md
+++ b/doc/update/11.5-to-11.6.md
@@ -317,11 +317,11 @@ sudo systemctl daemon-reload
```bash
cd /home/git/gitlab
-# MySQL installations (note: the line below states '--without postgres')
-sudo -u git -H bundle install --without postgres development test --deployment
-
# PostgreSQL installations (note: the line below states '--without mysql')
-sudo -u git -H bundle install --without mysql development test --deployment
+sudo -u git -H bundle install --deployment --without development test mysql aws kerberos
+
+# MySQL installations (note: the line below states '--without postgres')
+sudo -u git -H bundle install --deployment --without development test postgres aws kerberos
# Optional: clean up old gems
sudo -u git -H bundle clean
diff --git a/doc/update/11.6-to-11.7.md b/doc/update/11.6-to-11.7.md
index f9e3f565e0b..9e61d978631 100644
--- a/doc/update/11.6-to-11.7.md
+++ b/doc/update/11.6-to-11.7.md
@@ -317,11 +317,11 @@ sudo systemctl daemon-reload
```bash
cd /home/git/gitlab
-# MySQL installations (note: the line below states '--without postgres')
-sudo -u git -H bundle install --without postgres development test --deployment
-
# PostgreSQL installations (note: the line below states '--without mysql')
-sudo -u git -H bundle install --without mysql development test --deployment
+sudo -u git -H bundle install --deployment --without development test mysql aws kerberos
+
+# MySQL installations (note: the line below states '--without postgres')
+sudo -u git -H bundle install --deployment --without development test postgres aws kerberos
# Optional: clean up old gems
sudo -u git -H bundle clean
diff --git a/doc/update/11.7-to-11.8.md b/doc/update/11.7-to-11.8.md
index 1587c310876..7ab98d80eb9 100644
--- a/doc/update/11.7-to-11.8.md
+++ b/doc/update/11.7-to-11.8.md
@@ -320,11 +320,12 @@ sudo systemctl daemon-reload
```bash
cd /home/git/gitlab
+# PostgreSQL installations (note: the line below states '--without mysql')
+sudo -u git -H bundle install --deployment --without development test mysql aws kerberos
+
# MySQL installations (note: the line below states '--without postgres')
-sudo -u git -H bundle install --without postgres development test --deployment
+sudo -u git -H bundle install --deployment --without development test postgres aws kerberos
-# PostgreSQL installations (note: the line below states '--without mysql')
-sudo -u git -H bundle install --without mysql development test --deployment
# Optional: clean up old gems
sudo -u git -H bundle clean
diff --git a/doc/user/project/clusters/index.md b/doc/user/project/clusters/index.md
index 6f334af4fb7..bb815695cb1 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
diff --git a/doc/user/project/index.md b/doc/user/project/index.md
index ce8bd2de61f..6a1aadf058e 100644
--- a/doc/user/project/index.md
+++ b/doc/user/project/index.md
@@ -149,3 +149,24 @@ 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](../profile/personal_access_tokens.md) in the password field.
+
+For example:
+
+```text
+machine example.gitlab.com
+login <gitlab_user_name>
+password <personal_access_token>
+```
+
+## Access project page with project ID
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/53671) in GitLab 11.8.
+
+To quickly access a project from the GitLab UI using the project ID,
+visit the `/projects/:id` URL in your browser or other tool accessing the project.
diff --git a/doc/user/project/issues/csv_import.md b/doc/user/project/issues/csv_import.md
index 001e0d303e9..032e3a73ad0 100644
--- a/doc/user/project/issues/csv_import.md
+++ b/doc/user/project/issues/csv_import.md
@@ -2,16 +2,30 @@
> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/23532) in GitLab 11.7.
-Issues can be imported by uploading a CSV file. The file will be processed in the background and a notification email
-will be sent to you once the import is completed.
+Issues can be imported to a project by uploading a CSV file. Supported fields are
+`title` and `description`.
+
+The user uploading the CSV file will be set as the author of the imported issues.
> **Note:** A permission level of `Developer` or higher is required to import issues.
+To import issues:
+
+1. Ensure your CSV file meets the [file format](#csv-file-format) requirements.
+1. Navigate to a project's Issues list page.
+1. If existing issues are present, click the import icon at the top right, next to the **Edit issues** button.
+1. For a project without any issues, click the button labeled **Import CSV** in the middle of the page.
+1. Select the file and click the **Import issues** button.
+
+The file is processed in the background and a notification email is sent
+to you once the import is completed.
+
## CSV File Format
### Header row
-CSV files must contain a header row with at least two columns: `title` and `description`, in that order.
+CSV files must contain a header row beginning with at least two columns, `title` and `description`, in that order.
+If additional columns are present, they will be ignored.
### Column separator
@@ -33,7 +47,11 @@ a double-quote (`"`) within a quoted field, use two double-quote characters in s
After the header row, succeeding rows must follow the same column order. The issue title is required while the
description is optional.
-The user uploading the CSV file will be set as the author of the imported issues.
+### File size
+
+The limit depends on the configuration value of Max Attachment Size for the GitLab instance.
+
+For GitLab.com, it is set to 10 MB.
## Sample Data
diff --git a/doc/user/project/issues/img/import_csv_button.png b/doc/user/project/issues/img/import_csv_button.png
deleted file mode 100644
index ab100a95750..00000000000
--- a/doc/user/project/issues/img/import_csv_button.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/issues/index.md b/doc/user/project/issues/index.md
index 40a1f60c4ab..5a3ac9c175b 100644
--- a/doc/user/project/issues/index.md
+++ b/doc/user/project/issues/index.md
@@ -144,12 +144,12 @@ create various boards per project with [Multiple Issue Boards](https://docs.gitl
### Import Issues from CSV
-From the project-level issues list, you can find the import button near the "Edit issues" button in the upper-right
-side.
+You can import a CSV file containing issue titles and descriptions to create
+a batch of issues simultaneously.
-![Import CSV button](img/import_csv_button.png)
+When you navigate to the Issues list page, an import button is displayed.
-Learn more about [importing issues from CSV](csv_import.md)
+For further details, see [Importing issues from CSV](csv_import.md)
### External Issue Tracker
@@ -157,14 +157,14 @@ Alternatively to GitLab's built-in Issue Tracker, you can also use an [external
tracker](../../../integration/external-issue-tracker.md) such as Jira, Redmine,
or Bugzilla.
-### Issue's API
+### Issue API
-Read through the [API documentation](../../../api/issues.md).
+See the [API documentation](../../../api/issues.md).
### Bulk editing issues
-Find out about [bulk editing issues](../../project/bulk_editing.md).
+See the [bulk editing issues](../../project/bulk_editing.md) page.
### Similar issues
-Find out about [similar issues](similar_issues.md).
+See the [similar issues](similar_issues.md) page.
diff --git a/doc/user/project/merge_requests/index.md b/doc/user/project/merge_requests/index.md
index 9015a964781..2c8a590fc45 100644
--- a/doc/user/project/merge_requests/index.md
+++ b/doc/user/project/merge_requests/index.md
@@ -284,7 +284,11 @@ you can preview the changes submitted to a feature-branch through a merge reques
in a per-branch basis. No need to checkout the branch, install and preview locally;
all your changes will be available to preview by anyone with the Review Apps link.
-[Read more about Review Apps.](../../../ci/review_apps/index.md)
+With GitLab's [Route Maps](../../../ci/review_apps/index.md#route-maps) set, the
+merge request widget takes you directly to the pages changed, making it easier and
+faster to preview proposed modifications.
+
+[Read more about Review Apps](../../../ci/review_apps/index.md).
## Pipelines for merge requests
diff --git a/doc/user/project/operations/error_tracking.md b/doc/user/project/operations/error_tracking.md
index 2b5abc7233f..c79fbad5765 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.
diff --git a/doc/user/project/pipelines/settings.md b/doc/user/project/pipelines/settings.md
index 5aa26af5265..bb9b4238ee9 100644
--- a/doc/user/project/pipelines/settings.md
+++ b/doc/user/project/pipelines/settings.md
@@ -1,7 +1,7 @@
# Pipelines settings
To reach the pipelines settings navigate to your project's
-**Settings âž” CI/CD**.
+**Settings > CI/CD**.
The following settings can be configured per project.
@@ -10,14 +10,14 @@ The following settings can be configured per project.
With Git strategy, you can choose the default way your repository is fetched
from GitLab in a job.
-There are two options:
+There are two options. Using:
-- Using `git clone` which is slower since it clones the repository from scratch
+- `git clone`, which is slower since it clones the repository from scratch
for every job, ensuring that the project workspace is always pristine.
-- Using `git fetch` which is faster as it re-uses the project workspace (falling
+- `git fetch`, which is faster as it re-uses the project workspace (falling
back to clone if it doesn't exist).
-The default Git strategy can be overridden by the [GIT_STRATEGY variable][var]
+The default Git strategy can be overridden by the [GIT_STRATEGY variable](../../../ci/yaml/README.md#git-strategy)
in `.gitlab-ci.yml`.
## Timeout
@@ -29,14 +29,14 @@ if the job surpasses the threshold, it is marked as failed.
### Timeout overriding on Runner level
-> - [Introduced][ce-17221] in GitLab 10.7.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/17221) in GitLab 10.7.
Project defined timeout (either specific timeout set by user or the default
-60 minutes timeout) may be [overridden on Runner level][timeout overriding].
+60 minutes timeout) may be [overridden on Runner level](../../../ci/runners/README.html#setting-maximum-job-timeout-for-a-runner).
## Custom CI config path
-> - [Introduced][ce-12509] in GitLab 9.4.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/12509) in GitLab 9.4.
By default we look for the `.gitlab-ci.yml` file in the project's root
directory. If you require a different location **within** the repository,
@@ -59,7 +59,7 @@ job log using a regular expression. In the pipelines settings, search for the
![Pipelines settings test coverage](img/pipelines_settings_test_coverage.png)
Leave blank if you want to disable it or enter a ruby regular expression. You
-can use http://rubular.com to test your regex.
+can use <http://rubular.com> to test your regex.
If the pipeline succeeds, the coverage is shown in the merge request widget and
in the jobs table.
@@ -79,28 +79,28 @@ project setting under your project's **Settings > CI/CD > General pipelines sett
If **Public pipelines** is enabled (default):
-- for **public** projects, anyone can view the pipelines and access the job details
- (output logs and artifacts)
-- for **internal** projects, any logged in user can view the pipelines
+- For **public** projects, anyone can view the pipelines and access the job details
+ (output logs and artifacts).
+- For **internal** projects, any logged in user can view the pipelines
and access the job details
- (output logs and artifacts)
-- for **private** projects, any member (guest or higher) can view the pipelines
+ (output logs and artifacts).
+- For **private** projects, any member (guest or higher) can view the pipelines
and access the job details
- (output logs and artifacts)
+ (output logs and artifacts).
If **Public pipelines** is disabled:
-- for **public** projects, anyone can view the pipelines, but only members
- (reporter or higher) can access the job details (output logs and artifacts)
-- for **internal** projects, any logged in user can view the pipelines,
- but only members (reporter or higher) can access the job details (output logs
- and artifacts)
-- for **private** projects, only members (reporter or higher)
- can view the pipelines and access the job details (output logs and artifacts)
+- For **public** projects, anyone can view the pipelines, but only members
+ (reporter or higher) can access the job details (output logs and artifacts).
+- For **internal** projects, any logged in user can view the pipelines.
+ However, only members (reporter or higher) can access the job details (output logs
+ and artifacts).
+- For **private** projects, only members (reporter or higher)
+ can view the pipelines and access the job details (output logs and artifacts).
## Auto-cancel pending pipelines
-> [Introduced][ce-9362] in GitLab 9.1.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/9362) in GitLab 9.1.
If you want to auto-cancel all pending non-HEAD pipelines on branch, when
new pipeline will be created (after your git push or manually from UI),
@@ -132,19 +132,19 @@ Depending on the status of your job, a badge can have the following values:
You can access a pipeline status badge image using the following link:
-```
+```text
https://example.gitlab.com/<namespace>/<project>/badges/<branch>/build.svg
```
### Test coverage report badge
-GitLab makes it possible to define the regular expression for [coverage report],
+GitLab makes it possible to define the regular expression for [coverage report](#test-coverage-parsing),
that each job log will be matched against. This means that each job in the
pipeline can have the test coverage percentage value defined.
The test coverage badge can be accessed using following link:
-```
+```text
https://example.gitlab.com/<namespace>/<project>/badges/<branch>/coverage.svg
```
@@ -163,7 +163,7 @@ Pipeline badges can be rendered in different styles by adding the `style=style_n
#### Flat (default)
-```
+```text
https://example.gitlab.com/<namespace>/<project>/badges/<branch>/coverage.svg?style=flat
```
@@ -171,7 +171,9 @@ https://example.gitlab.com/<namespace>/<project>/badges/<branch>/coverage.svg?st
#### Flat square
-```
+> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/30120) in GitLab 11.8.
+
+```text
https://example.gitlab.com/<namespace>/<project>/badges/<branch>/coverage.svg?style=flat-square
```
@@ -180,10 +182,3 @@ https://example.gitlab.com/<namespace>/<project>/badges/<branch>/coverage.svg?st
## Environment Variables
[Environment variables](../../../ci/variables/README.html#variables) can be set in an environment to be available to a runner.
-
-[var]: ../../../ci/yaml/README.md#git-strategy
-[coverage report]: #test-coverage-parsing
-[timeout overriding]: ../../../ci/runners/README.html#setting-maximum-job-timeout-for-a-runner
-[ce-9362]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/9362
-[ce-12509]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/12509
-[ce-17221]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/17221
diff --git a/lib/gitlab/ci/pipeline/chain/build.rb b/lib/gitlab/ci/pipeline/chain/build.rb
index d33d1edfe35..41632211374 100644
--- a/lib/gitlab/ci/pipeline/chain/build.rb
+++ b/lib/gitlab/ci/pipeline/chain/build.rb
@@ -17,7 +17,6 @@ module Gitlab
user: @command.current_user,
pipeline_schedule: @command.schedule,
merge_request: @command.merge_request,
- protected: @command.protected_ref?,
variables_attributes: Array(@command.variables_attributes)
)
diff --git a/lib/gitlab/ci/pipeline/chain/populate.rb b/lib/gitlab/ci/pipeline/chain/populate.rb
index 633d3cd4f6b..0405292a25b 100644
--- a/lib/gitlab/ci/pipeline/chain/populate.rb
+++ b/lib/gitlab/ci/pipeline/chain/populate.rb
@@ -13,6 +13,10 @@ module Gitlab
# Allocate next IID. This operation must be outside of transactions of pipeline creations.
pipeline.ensure_project_iid!
+ # Protect the pipeline. This is assigned in Populate instead of
+ # Build to prevent erroring out on ambiguous refs.
+ pipeline.protected = @command.protected_ref?
+
##
# Populate pipeline with block argument of CreatePipelineService#execute.
#
diff --git a/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml b/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml
index 95160e1432f..9362596eb60 100644
--- a/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml
+++ b/lib/gitlab/ci/templates/Auto-DevOps.gitlab-ci.yml
@@ -611,16 +611,16 @@ rollout 100%:
track="${1-stable}"
export APPLICATION_SECRET_NAME=$(application_secret_name "$track")
- bash -c '
- function k8s_prefixed_variables() {
- env | sed -n "s/^K8S_SECRET_\(.*\)$/\1/p"
- }
-
- kubectl create secret \
- -n "$KUBE_NAMESPACE" generic "$APPLICATION_SECRET_NAME" \
- --from-env-file <(k8s_prefixed_variables) -o yaml --dry-run |
- kubectl replace -n "$KUBE_NAMESPACE" --force -f -
- '
+ env | sed -n "s/^K8S_SECRET_\(.*\)$/\1/p" > k8s_prefixed_variables
+
+ kubectl create secret \
+ -n "$KUBE_NAMESPACE" generic "$APPLICATION_SECRET_NAME" \
+ --from-env-file k8s_prefixed_variables -o yaml --dry-run |
+ kubectl replace -n "$KUBE_NAMESPACE" --force -f -
+
+ export APPLICATION_SECRET_CHECKSUM=$(cat k8s_prefixed_variables | sha256sum | cut -d ' ' -f 1)
+
+ rm k8s_prefixed_variables
}
function deploy_name() {
@@ -688,6 +688,7 @@ rollout 100%:
--set application.track="$track" \
--set application.database_url="$DATABASE_URL" \
--set application.secretName="$APPLICATION_SECRET_NAME" \
+ --set application.secretChecksum="$APPLICATION_SECRET_CHECKSUM" \
--set service.url="$CI_ENVIRONMENT_URL" \
--set service.additionalHosts="$additional_hosts" \
--set replicaCount="$replicas" \
@@ -722,6 +723,7 @@ rollout 100%:
--set application.track="$track" \
--set application.database_url="$DATABASE_URL" \
--set application.secretName="$APPLICATION_SECRET_NAME" \
+ --set application.secretChecksum="$APPLICATION_SECRET_CHECKSUM" \
--set service.url="$CI_ENVIRONMENT_URL" \
--set service.additionalHosts="$additional_hosts" \
--set replicaCount="$replicas" \
diff --git a/lib/gitlab/sidekiq_logging/structured_logger.rb b/lib/gitlab/sidekiq_logging/structured_logger.rb
index e86db8db3a1..fdc0d518c59 100644
--- a/lib/gitlab/sidekiq_logging/structured_logger.rb
+++ b/lib/gitlab/sidekiq_logging/structured_logger.rb
@@ -5,6 +5,7 @@ module Gitlab
class StructuredLogger
START_TIMESTAMP_FIELDS = %w[created_at enqueued_at].freeze
DONE_TIMESTAMP_FIELDS = %w[started_at retried_at failed_at completed_at].freeze
+ MAXIMUM_JOB_ARGUMENTS_LENGTH = 10.kilobytes
def call(job, queue)
started_at = current_time
@@ -64,6 +65,7 @@ module Gitlab
job['pid'] = ::Process.pid
job.delete('args') unless ENV['SIDEKIQ_LOG_ARGUMENTS']
+ job['args'] = limited_job_args(job['args']) if job['args']
convert_to_iso8601(job, START_TIMESTAMP_FIELDS)
@@ -93,6 +95,21 @@ module Gitlab
Time.at(timestamp).utc.iso8601(3)
end
+
+ def limited_job_args(args)
+ return unless args.is_a?(Array)
+
+ total_length = 0
+ limited_args = args.take_while do |arg|
+ total_length += arg.to_json.length
+
+ total_length <= MAXIMUM_JOB_ARGUMENTS_LENGTH
+ end
+
+ limited_args.push('...') if total_length > MAXIMUM_JOB_ARGUMENTS_LENGTH
+
+ limited_args
+ end
end
end
end
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 795a46382a7..55e2e82e13e 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -3574,6 +3574,9 @@ msgstr ""
msgid "Here is the public SSH key that needs to be added to the remote server. For more information, please refer to the documentation."
msgstr ""
+msgid "Hide file browser"
+msgstr ""
+
msgid "Hide host keys manual input"
msgstr ""
@@ -6345,6 +6348,9 @@ msgstr ""
msgid "Show complete raw log"
msgstr ""
+msgid "Show file browser"
+msgstr ""
+
msgid "Show latest version"
msgstr ""
@@ -7431,9 +7437,6 @@ msgstr ""
msgid "Toggle discussion"
msgstr ""
-msgid "Toggle file browser"
-msgstr ""
-
msgid "Toggle navigation"
msgstr ""
diff --git a/package.json b/package.json
index 1fd7e53d62c..21431b210cd 100644
--- a/package.json
+++ b/package.json
@@ -161,6 +161,7 @@
"karma-sourcemap-loader": "^0.3.7",
"karma-webpack": "^4.0.0-beta.0",
"nodemon": "^1.18.4",
+ "pixelmatch": "^4.0.2",
"prettier": "1.15.3",
"vue-jest": "^3.0.2",
"webpack-dev-server": "^3.1.14",
diff --git a/qa/qa/git/repository.rb b/qa/qa/git/repository.rb
index 86e00cdbb9c..ac8dcbf0d83 100644
--- a/qa/qa/git/repository.rb
+++ b/qa/qa/git/repository.rb
@@ -11,14 +11,15 @@ module QA
class Repository
include Scenario::Actable
- attr_writer :password
+ attr_writer :password, :use_lfs
attr_accessor :env_vars
def initialize
# We set HOME to the current working directory (which is a
# temporary directory created in .perform()) so the temporarily dropped
# .netrc can be utilised
- self.env_vars = [%Q{HOME="#{File.dirname(netrc_file_path)}"}]
+ self.env_vars = [%Q{HOME="#{tmp_home_dir}"}]
+ @use_lfs = false
end
def self.perform(*args)
@@ -33,17 +34,22 @@ module QA
def username=(username)
@username = username
- @uri.user = username
+ # Only include the user in the URI if we're using HTTP as this breaks
+ # SSH authentication.
+ @uri.user = username unless ssh_key_set?
end
def use_default_credentials
self.username, self.password = default_credentials
-
- add_credentials_to_netrc unless ssh_key_set?
end
def clone(opts = '')
- run("git clone #{opts} #{uri} ./")
+ clone_result = run("git clone #{opts} #{uri} ./")
+ return clone_result.response unless clone_result.success
+
+ enable_lfs_result = enable_lfs if use_lfs?
+
+ clone_result.to_s + enable_lfs_result.to_s
end
def checkout(branch_name, new_branch: false)
@@ -58,8 +64,6 @@ module QA
def configure_identity(name, email)
run(%Q{git config user.name #{name}})
run(%Q{git config user.email #{email}})
-
- add_credentials_to_netrc
end
def commit_file(name, contents, message)
@@ -70,15 +74,22 @@ module QA
def add_file(name, contents)
::File.write(name, contents)
- run(%Q{git add #{name}})
+ if use_lfs?
+ git_lfs_track_result = run(%Q{git lfs track #{name} --lockable})
+ return git_lfs_track_result.response unless git_lfs_track_result.success
+ end
+
+ git_add_result = run(%Q{git add #{name}})
+
+ git_lfs_track_result.to_s + git_add_result.to_s
end
def commit(message)
- run(%Q{git commit -m "#{message}"})
+ run(%Q{git commit -m "#{message}"}).to_s
end
def push_changes(branch = 'master')
- run("git push #{uri} #{branch}")
+ run("git push #{uri} #{branch}").to_s
end
def merge(branch)
@@ -86,7 +97,7 @@ module QA
end
def commits
- run('git log --oneline').split("\n")
+ run('git log --oneline').to_s.split("\n")
end
def use_ssh_key(key)
@@ -98,7 +109,8 @@ module QA
keyscan_params = ['-H']
keyscan_params << "-p #{uri.port}" if uri.port
keyscan_params << uri.host
- run("ssh-keyscan #{keyscan_params.join(' ')} >> #{known_hosts_file.path}")
+ res = run("ssh-keyscan #{keyscan_params.join(' ')} >> #{known_hosts_file.path}")
+ return res.response unless res.success?
self.env_vars << %Q{GIT_SSH_COMMAND="ssh -i #{private_key_file.path} -o UserKnownHostsFile=#{known_hosts_file.path}"}
end
@@ -132,23 +144,66 @@ module QA
output[/git< version (\d+)/, 1] || 'unknown'
end
+ def try_add_credentials_to_netrc
+ return unless add_credentials?
+ return if netrc_already_contains_content?
+
+ # Despite libcurl supporting a custom .netrc location through the
+ # CURLOPT_NETRC_FILE environment variable, git does not support it :(
+ # Info: https://curl.haxx.se/libcurl/c/CURLOPT_NETRC_FILE.html
+ #
+ # This will create a .netrc in the correct working directory, which is
+ # a temporary directory created in .perform()
+ #
+ FileUtils.mkdir_p(tmp_home_dir)
+ File.open(netrc_file_path, 'a') { |file| file.puts(netrc_content) }
+ File.chmod(0600, netrc_file_path)
+ end
+
private
- attr_reader :uri, :username, :password, :known_hosts_file, :private_key_file
+ attr_reader :uri, :username, :password, :known_hosts_file,
+ :private_key_file, :use_lfs
+
+ alias_method :use_lfs?, :use_lfs
+
+ Result = Struct.new(:success, :response) do
+ alias_method :success?, :success
+ alias_method :to_s, :response
+ end
+
+ def add_credentials?
+ return false if !username || !password
+ return true unless ssh_key_set?
+ return true if ssh_key_set? && use_lfs?
+
+ false
+ end
def ssh_key_set?
!private_key_file.nil?
end
+ def enable_lfs
+ # git lfs install *needs* a .gitconfig defined at ${HOME}/.gitconfig
+ FileUtils.mkdir_p(tmp_home_dir)
+ touch_gitconfig_result = run("touch #{tmp_home_dir}/.gitconfig")
+ return touch_gitconfig_result.response unless touch_gitconfig_result.success?
+
+ git_lfs_install_result = run('git lfs install')
+
+ touch_gitconfig_result.to_s + git_lfs_install_result.to_s
+ end
+
def run(command_str, *extra_env)
command = [env_vars, *extra_env, command_str, '2>&1'].compact.join(' ')
- Runtime::Logger.debug "Git: command=[#{command}]"
+ Runtime::Logger.debug "Git: pwd=[#{Dir.pwd}], command=[#{command}]"
- output, _ = Open3.capture2(command)
- output = output.chomp.gsub(/\s+$/, '')
- Runtime::Logger.debug "Git: output=[#{output}]"
+ output, status = Open3.capture2e(command)
+ output.chomp!
+ Runtime::Logger.debug "Git: output=[#{output}], exitstatus=[#{status.exitstatus}]"
- output
+ Result.new(status.exitstatus == 0, output)
end
def default_credentials
@@ -159,12 +214,12 @@ module QA
end
end
- def tmp_netrc_directory
- @tmp_netrc_directory ||= File.join(Dir.tmpdir, "qa-netrc-credentials", $$.to_s)
+ def tmp_home_dir
+ @tmp_home_dir ||= File.join(Dir.tmpdir, "qa-netrc-credentials", $$.to_s)
end
def netrc_file_path
- @netrc_file_path ||= File.join(tmp_netrc_directory, '.netrc')
+ @netrc_file_path ||= File.join(tmp_home_dir, '.netrc')
end
def netrc_content
@@ -175,21 +230,6 @@ module QA
File.exist?(netrc_file_path) &&
File.readlines(netrc_file_path).grep(/^#{netrc_content}$/).any?
end
-
- def add_credentials_to_netrc
- # Despite libcurl supporting a custom .netrc location through the
- # CURLOPT_NETRC_FILE environment variable, git does not support it :(
- # Info: https://curl.haxx.se/libcurl/c/CURLOPT_NETRC_FILE.html
- #
- # This will create a .netrc in the correct working directory, which is
- # a temporary directory created in .perform()
- #
- return if netrc_already_contains_content?
-
- FileUtils.mkdir_p(tmp_netrc_directory)
- File.open(netrc_file_path, 'a') { |file| file.puts(netrc_content) }
- File.chmod(0600, netrc_file_path)
- end
end
end
end
diff --git a/qa/qa/resource/repository/push.rb b/qa/qa/resource/repository/push.rb
index f33aa0acef0..32f15547da2 100644
--- a/qa/qa/resource/repository/push.rb
+++ b/qa/qa/resource/repository/push.rb
@@ -8,7 +8,7 @@ module QA
class Push < Base
attr_accessor :file_name, :file_content, :commit_message,
:branch_name, :new_branch, :output, :repository_http_uri,
- :repository_ssh_uri, :ssh_key, :user
+ :repository_ssh_uri, :ssh_key, :user, :use_lfs
attr_writer :remote_branch
@@ -20,6 +20,7 @@ module QA
@new_branch = true
@repository_http_uri = ""
@ssh_key = nil
+ @use_lfs = false
end
def remote_branch
@@ -33,7 +34,9 @@ module QA
end
def files=(files)
- if !files.is_a?(Array) || files.empty?
+ if !files.is_a?(Array) ||
+ files.empty? ||
+ files.any? { |file| !file.has_key?(:name) || !file.has_key?(:content) }
raise ArgumentError, "Please provide an array of hashes e.g.: [{name: 'file1', content: 'foo'}]"
end
@@ -42,6 +45,8 @@ module QA
def fabricate!
Git::Repository.perform do |repository|
+ @output = ''
+
if ssh_key
repository.uri = repository_ssh_uri
repository.use_ssh_key(ssh_key)
@@ -50,6 +55,8 @@ module QA
repository.use_default_credentials unless user
end
+ repository.use_lfs = use_lfs
+
username = 'GitLab QA'
email = 'root@gitlab.com'
@@ -60,29 +67,27 @@ module QA
email = user.email
end
- repository.clone
+ repository.try_add_credentials_to_netrc
+
+ @output += repository.clone
repository.configure_identity(username, email)
- if new_branch
- repository.checkout(branch_name, new_branch: true)
- else
- repository.checkout(branch_name)
- end
+ @output += repository.checkout(branch_name, new_branch: new_branch)
if @directory
@directory.each_child do |f|
- repository.add_file(f.basename, f.read) if f.file?
+ @output += repository.add_file(f.basename, f.read) if f.file?
end
elsif @files
@files.each do |f|
repository.add_file(f[:name], f[:content])
end
else
- repository.add_file(file_name, file_content)
+ @output += repository.add_file(file_name, file_content)
end
- repository.commit(commit_message)
- @output = repository.push_changes("#{branch_name}:#{remote_branch}")
+ @output += repository.commit(commit_message)
+ @output += repository.push_changes("#{branch_name}:#{remote_branch}")
repository.delete_ssh_key
end
diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb
index f84f069f4db..9801ed19957 100644
--- a/spec/controllers/projects_controller_spec.rb
+++ b/spec/controllers/projects_controller_spec.rb
@@ -955,6 +955,59 @@ describe ProjectsController do
end
end
+ describe 'GET resolve' do
+ shared_examples 'resolvable endpoint' do
+ it 'redirects to the project page' do
+ get :resolve, params: { id: project.id }
+
+ expect(response).to have_gitlab_http_status(302)
+ expect(response).to redirect_to(project_path(project))
+ end
+ end
+
+ context 'with an authenticated user' do
+ before do
+ sign_in(user)
+ end
+
+ context 'when user has access to the project' do
+ before do
+ project.add_developer(user)
+ end
+
+ it_behaves_like 'resolvable endpoint'
+ end
+
+ context 'when user has no access to the project' do
+ it 'gives 404 for existing project' do
+ get :resolve, params: { id: project.id }
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+ end
+
+ it 'gives 404 for non-existing project' do
+ get :resolve, params: { id: '0' }
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+ end
+
+ context 'non authenticated user' do
+ context 'with a public project' do
+ let(:project) { public_project }
+
+ it_behaves_like 'resolvable endpoint'
+ end
+
+ it 'gives 404 for private project' do
+ get :resolve, params: { id: project.id }
+
+ expect(response).to have_gitlab_http_status(404)
+ end
+ end
+ end
+
def project_moved_message(redirect_route, project)
"Project '#{redirect_route.path}' was moved to '#{project.full_path}'. Please update any links and bookmarks that may still have the old path."
end
diff --git a/spec/controllers/uploads_controller_spec.rb b/spec/controllers/uploads_controller_spec.rb
index 19142aa1272..5fbb71eca96 100644
--- a/spec/controllers/uploads_controller_spec.rb
+++ b/spec/controllers/uploads_controller_spec.rb
@@ -12,6 +12,12 @@ shared_examples 'content not cached without revalidation and no-store' do
end
end
+shared_examples 'content publicly cached' do
+ it 'ensures content is publicly cached' do
+ expect(subject['Cache-Control']).to eq('max-age=300, public')
+ end
+end
+
describe UploadsController do
let!(:user) { create(:user, avatar: fixture_file_upload("spec/fixtures/dk.png", "image/png")) }
@@ -184,7 +190,7 @@ describe UploadsController do
expect(response).to have_gitlab_http_status(200)
end
- it_behaves_like 'content not cached without revalidation and no-store' do
+ it_behaves_like 'content publicly cached' do
subject do
get :show, params: { model: 'user', mounted_as: 'avatar', id: user.id, filename: 'dk.png' }
@@ -201,7 +207,7 @@ describe UploadsController do
expect(response).to have_gitlab_http_status(200)
end
- it_behaves_like 'content not cached without revalidation' do
+ it_behaves_like 'content publicly cached' do
subject do
get :show, params: { model: 'user', mounted_as: 'avatar', id: user.id, filename: 'dk.png' }
@@ -537,7 +543,7 @@ describe UploadsController do
expect(response).to have_gitlab_http_status(200)
end
- it_behaves_like 'content not cached without revalidation' do
+ it_behaves_like 'content publicly cached' do
subject do
get :show, params: { model: 'appearance', mounted_as: 'header_logo', id: appearance.id, filename: 'dk.png' }
@@ -557,7 +563,7 @@ describe UploadsController do
expect(response).to have_gitlab_http_status(200)
end
- it_behaves_like 'content not cached without revalidation' do
+ it_behaves_like 'content publicly cached' do
subject do
get :show, params: { model: 'appearance', mounted_as: 'logo', id: appearance.id, filename: 'dk.png' }
diff --git a/spec/features/groups_spec.rb b/spec/features/groups_spec.rb
index d01fc04311a..00d81b26ce2 100644
--- a/spec/features/groups_spec.rb
+++ b/spec/features/groups_spec.rb
@@ -154,7 +154,7 @@ describe 'Group' do
end
describe 'group edit', :js do
- let(:group) { create(:group) }
+ let(:group) { create(:group, :public) }
let(:path) { edit_group_path(group) }
let(:new_name) { 'new-name' }
@@ -163,6 +163,8 @@ describe 'Group' do
end
it_behaves_like 'dirty submit form', [{ form: '.js-general-settings-form', input: 'input[name="group[name]"]' },
+ { form: '.js-general-settings-form', input: '#group_visibility_level_0' },
+ { form: '.js-general-permissions-form', input: '#group_request_access_enabled' },
{ form: '.js-general-permissions-form', input: 'input[name="group[two_factor_grace_period]"]' }]
it 'saves new settings' do
diff --git a/spec/features/issuables/markdown_references/internal_references_spec.rb b/spec/features/issuables/markdown_references/internal_references_spec.rb
index 9613e22bf24..23385ba65fc 100644
--- a/spec/features/issuables/markdown_references/internal_references_spec.rb
+++ b/spec/features/issuables/markdown_references/internal_references_spec.rb
@@ -64,11 +64,13 @@ describe "Internal references", :js do
it "shows references" do
page.within("#merge-requests .merge-requests-title") do
- expect(page).to have_content("1 Related Merge Request")
+ expect(page).to have_content("Related merge requests")
+ expect(page).to have_css(".mr-count-badge")
end
page.within("#merge-requests ul") do
expect(page).to have_content(private_project_merge_request.title)
+ expect(page).to have_css(".merge-request-status")
end
expect(page).to have_content("mentioned in merge request #{private_project_merge_request.to_reference(public_project)}")
diff --git a/spec/features/issues/user_creates_branch_and_merge_request_spec.rb b/spec/features/issues/user_creates_branch_and_merge_request_spec.rb
index 32bc851f00f..693ad89069c 100644
--- a/spec/features/issues/user_creates_branch_and_merge_request_spec.rb
+++ b/spec/features/issues/user_creates_branch_and_merge_request_spec.rb
@@ -141,7 +141,7 @@ describe 'User creates branch and merge request on issue page', :js do
it 'disables the create branch button' do
expect(page).to have_css('.create-mr-dropdown-wrap .unavailable:not(.hidden)')
expect(page).to have_css('.create-mr-dropdown-wrap .available.hidden', visible: false)
- expect(page).to have_content /1 Related Merge Request/
+ expect(page).to have_content /Related merge requests/
end
end
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 4135f31e051..b81249a1e29 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -168,6 +168,21 @@ describe ApplicationHelper do
end
end
+ describe '#client_class_list' do
+ it 'returns string containing CSS classes representing client browser and platform' do
+ class_list = helper.client_class_list
+ expect(class_list).to eq('gl-browser-generic gl-platform-other')
+ end
+ end
+
+ describe '#client_js_flags' do
+ it 'returns map containing JS flags representing client browser and platform' do
+ flags_list = helper.client_js_flags
+ expect(flags_list[:isGeneric]).to eq(true)
+ expect(flags_list[:isOther]).to eq(true)
+ end
+ end
+
describe '#autocomplete_data_sources' do
let(:project) { create(:project) }
let(:noteable_type) { Issue }
diff --git a/spec/javascripts/diffs/components/compare_versions_spec.js b/spec/javascripts/diffs/components/compare_versions_spec.js
index 50135b0cf86..a976c6b837f 100644
--- a/spec/javascripts/diffs/components/compare_versions_spec.js
+++ b/spec/javascripts/diffs/components/compare_versions_spec.js
@@ -22,10 +22,10 @@ describe('CompareVersions', () => {
const treeListBtn = vm.$el.querySelector('.js-toggle-tree-list');
expect(treeListBtn).not.toBeNull();
- expect(treeListBtn.dataset.originalTitle).toBe('Toggle file browser');
+ expect(treeListBtn.dataset.originalTitle).toBe('Hide file browser');
expect(treeListBtn.querySelectorAll('svg use').length).not.toBe(0);
expect(treeListBtn.querySelector('svg use').getAttribute('xlink:href')).toContain(
- '#hamburger',
+ '#collapse-left',
);
});
diff --git a/spec/javascripts/dirty_submit/dirty_submit_collection_spec.js b/spec/javascripts/dirty_submit/dirty_submit_collection_spec.js
index 08ffc44605f..47be0b3ce9d 100644
--- a/spec/javascripts/dirty_submit/dirty_submit_collection_spec.js
+++ b/spec/javascripts/dirty_submit/dirty_submit_collection_spec.js
@@ -1,5 +1,5 @@
import DirtySubmitCollection from '~/dirty_submit/dirty_submit_collection';
-import { setInput, createForm } from './helper';
+import { setInputValue, createForm } from './helper';
describe('DirtySubmitCollection', () => {
it('disables submits until there are changes', done => {
@@ -14,11 +14,11 @@ describe('DirtySubmitCollection', () => {
expect(submit.disabled).toBe(true);
- return setInput(input, `${originalValue} changes`)
+ return setInputValue(input, `${originalValue} changes`)
.then(() => {
expect(submit.disabled).toBe(false);
})
- .then(() => setInput(input, originalValue))
+ .then(() => setInputValue(input, originalValue))
.then(() => {
expect(submit.disabled).toBe(true);
})
diff --git a/spec/javascripts/dirty_submit/dirty_submit_form_spec.js b/spec/javascripts/dirty_submit/dirty_submit_form_spec.js
index 093fec97951..ae2a785de52 100644
--- a/spec/javascripts/dirty_submit/dirty_submit_form_spec.js
+++ b/spec/javascripts/dirty_submit/dirty_submit_form_spec.js
@@ -1,14 +1,14 @@
import DirtySubmitForm from '~/dirty_submit/dirty_submit_form';
-import { setInput, createForm } from './helper';
+import { getInputValue, setInputValue, createForm } from './helper';
function expectToToggleDisableOnDirtyUpdate(submit, input) {
- const originalValue = input.value;
+ const originalValue = getInputValue(input);
expect(submit.disabled).toBe(true);
- return setInput(input, `${originalValue} changes`)
+ return setInputValue(input, `${originalValue} changes`)
.then(() => expect(submit.disabled).toBe(false))
- .then(() => setInput(input, originalValue))
+ .then(() => setInputValue(input, originalValue))
.then(() => expect(submit.disabled).toBe(true));
}
@@ -33,4 +33,24 @@ describe('DirtySubmitForm', () => {
.then(done)
.catch(done.fail);
});
+
+ it('disables submit until there are changes for radio inputs', done => {
+ const { form, input, submit } = createForm('radio');
+
+ new DirtySubmitForm(form); // eslint-disable-line no-new
+
+ return expectToToggleDisableOnDirtyUpdate(submit, input)
+ .then(done)
+ .catch(done.fail);
+ });
+
+ it('disables submit until there are changes for checkbox inputs', done => {
+ const { form, input, submit } = createForm('checkbox');
+
+ new DirtySubmitForm(form); // eslint-disable-line no-new
+
+ return expectToToggleDisableOnDirtyUpdate(submit, input)
+ .then(done)
+ .catch(done.fail);
+ });
});
diff --git a/spec/javascripts/dirty_submit/helper.js b/spec/javascripts/dirty_submit/helper.js
index 6d1e643553c..b51783cb915 100644
--- a/spec/javascripts/dirty_submit/helper.js
+++ b/spec/javascripts/dirty_submit/helper.js
@@ -1,25 +1,42 @@
import DirtySubmitForm from '~/dirty_submit/dirty_submit_form';
import setTimeoutPromiseHelper from '../helpers/set_timeout_promise_helper';
-export function setInput(element, value) {
- element.value = value;
+function isCheckableType(type) {
+ return /^(radio|checkbox)$/.test(type);
+}
+
+export function setInputValue(element, value) {
+ const { type } = element;
+ let eventType;
+
+ if (isCheckableType(type)) {
+ element.checked = !element.checked;
+ eventType = 'change';
+ } else {
+ element.value = value;
+ eventType = 'input';
+ }
element.dispatchEvent(
- new Event('input', {
+ new Event(eventType, {
bubbles: true,
- cancelable: true,
}),
);
return setTimeoutPromiseHelper(DirtySubmitForm.THROTTLE_DURATION);
}
-export function createForm() {
+export function getInputValue(input) {
+ return isCheckableType(input.type) ? input.checked : input.value;
+}
+
+export function createForm(type = 'text') {
const form = document.createElement('form');
form.innerHTML = `
- <input type="text" value="original" class="js-input" name="input" />
+ <input type="${type}" name="${type}" class="js-input"/>
<button type="submit" class="js-dirty-submit"></button>
`;
+
const input = form.querySelector('.js-input');
const submit = form.querySelector('.js-dirty-submit');
diff --git a/spec/javascripts/lib/utils/common_utils_spec.js b/spec/javascripts/lib/utils/common_utils_spec.js
index 0dc7e93539a..121c4040212 100644
--- a/spec/javascripts/lib/utils/common_utils_spec.js
+++ b/spec/javascripts/lib/utils/common_utils_spec.js
@@ -3,6 +3,25 @@ import * as commonUtils from '~/lib/utils/common_utils';
import MockAdapter from 'axios-mock-adapter';
import { faviconDataUrl, overlayDataUrl, faviconWithOverlayDataUrl } from './mock_data';
+const PIXEL_TOLERANCE = 0.2;
+
+/**
+ * Loads a data URL as the src of an
+ * {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/Image|Image}
+ * and resolves to that Image once loaded.
+ *
+ * @param url
+ * @returns {Promise}
+ */
+const urlToImage = url =>
+ new Promise(resolve => {
+ const img = new Image();
+ img.onload = function() {
+ resolve(img);
+ };
+ img.src = url;
+ });
+
describe('common_utils', () => {
describe('parseUrl', () => {
it('returns an anchor tag with url', () => {
@@ -513,8 +532,9 @@ describe('common_utils', () => {
it('should return the favicon with the overlay', done => {
commonUtils
.createOverlayIcon(faviconDataUrl, overlayDataUrl)
- .then(url => {
- expect(url).toEqual(faviconWithOverlayDataUrl);
+ .then(url => Promise.all([urlToImage(url), urlToImage(faviconWithOverlayDataUrl)]))
+ .then(([actual, expected]) => {
+ expect(actual).toImageDiffEqual(expected, PIXEL_TOLERANCE);
done();
})
.catch(done.fail);
@@ -536,10 +556,10 @@ describe('common_utils', () => {
it('should set page favicon to provided favicon overlay', done => {
commonUtils
.setFaviconOverlay(overlayDataUrl)
- .then(() => {
- expect(document.getElementById('favicon').getAttribute('href')).toEqual(
- faviconWithOverlayDataUrl,
- );
+ .then(() => document.getElementById('favicon').getAttribute('href'))
+ .then(url => Promise.all([urlToImage(url), urlToImage(faviconWithOverlayDataUrl)]))
+ .then(([actual, expected]) => {
+ expect(actual).toImageDiffEqual(expected, PIXEL_TOLERANCE);
done();
})
.catch(done.fail);
@@ -582,10 +602,10 @@ describe('common_utils', () => {
commonUtils
.setCiStatusFavicon(BUILD_URL)
- .then(() => {
- const favicon = document.getElementById('favicon');
-
- expect(favicon.getAttribute('href')).toEqual(faviconWithOverlayDataUrl);
+ .then(() => document.getElementById('favicon').getAttribute('href'))
+ .then(url => Promise.all([urlToImage(url), urlToImage(faviconWithOverlayDataUrl)]))
+ .then(([actual, expected]) => {
+ expect(actual).toImageDiffEqual(expected, PIXEL_TOLERANCE);
done();
})
.catch(done.fail);
diff --git a/spec/javascripts/matchers.js b/spec/javascripts/matchers.js
index 0d465510fd3..406527b08a3 100644
--- a/spec/javascripts/matchers.js
+++ b/spec/javascripts/matchers.js
@@ -1,3 +1,5 @@
+import pixelmatch from 'pixelmatch';
+
export default {
toContainText: () => ({
compare(vm, text) {
@@ -54,4 +56,41 @@ export default {
return result;
},
}),
+ toImageDiffEqual: () => {
+ const getImageData = img => {
+ const canvas = document.createElement('canvas');
+ canvas.width = img.width;
+ canvas.height = img.height;
+ canvas.getContext('2d').drawImage(img, 0, 0);
+ return canvas.getContext('2d').getImageData(0, 0, img.width, img.height).data;
+ };
+
+ return {
+ compare(actual, expected, threshold = 0.1) {
+ if (actual.height !== expected.height || actual.width !== expected.width) {
+ return {
+ pass: false,
+ message: `Expected image dimensions (h x w) of ${expected.height}x${expected.width}.
+ Received an image with ${actual.height}x${actual.width}`,
+ };
+ }
+
+ const { width, height } = actual;
+ const differentPixels = pixelmatch(
+ getImageData(actual),
+ getImageData(expected),
+ null,
+ width,
+ height,
+ { threshold },
+ );
+
+ return {
+ pass: differentPixels < 20,
+ message: `${differentPixels} pixels differ more than ${threshold *
+ 100} percent between input and output.`,
+ };
+ },
+ };
+ },
};
diff --git a/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb
index 1b014ecfaa4..3459939267a 100644
--- a/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb
+++ b/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb
@@ -79,6 +79,31 @@ describe Gitlab::Ci::Pipeline::Chain::Populate do
end
end
+ describe 'pipeline protect' do
+ subject { step.perform! }
+
+ context 'when ref is protected' do
+ before do
+ allow(project).to receive(:protected_for?).with('master').and_return(true)
+ allow(project).to receive(:protected_for?).with('refs/heads/master').and_return(true)
+ end
+
+ it 'does not protect the pipeline' do
+ subject
+
+ expect(pipeline.protected).to eq(true)
+ end
+ end
+
+ context 'when ref is not protected' do
+ it 'does not protect the pipeline' do
+ subject
+
+ expect(pipeline.protected).to eq(false)
+ end
+ end
+ end
+
context 'when pipeline has validation errors' do
let(:pipeline) do
build(:ci_pipeline, project: project, ref: nil)
diff --git a/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb b/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb
index f773f370ee2..a9d15f1d522 100644
--- a/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb
+++ b/spec/lib/gitlab/sidekiq_logging/structured_logger_spec.rb
@@ -82,15 +82,36 @@ describe Gitlab::SidekiqLogging::StructuredLogger do
end.to raise_error(ArgumentError)
end
end
+
+ context 'when the job args are bigger than the maximum allowed' do
+ it 'keeps args from the front until they exceed the limit' do
+ Timecop.freeze(timestamp) do
+ job['args'] = [
+ 1,
+ 2,
+ 'a' * (described_class::MAXIMUM_JOB_ARGUMENTS_LENGTH / 2),
+ 'b' * (described_class::MAXIMUM_JOB_ARGUMENTS_LENGTH / 2),
+ 3
+ ]
+
+ expected_args = job['args'].take(3) + ['...']
+
+ expect(logger).to receive(:info).with(start_payload.merge('args' => expected_args)).ordered
+ expect(logger).to receive(:info).with(end_payload.merge('args' => expected_args)).ordered
+ expect(subject).to receive(:log_job_start).and_call_original
+ expect(subject).to receive(:log_job_done).and_call_original
+
+ subject.call(job, 'test_queue') { }
+ end
+ end
+ end
end
context 'with SIDEKIQ_LOG_ARGUMENTS disabled' do
- it 'logs start and end of job' do
+ it 'logs start and end of job without args' do
Timecop.freeze(timestamp) do
- start_payload.delete('args')
-
- expect(logger).to receive(:info).with(start_payload).ordered
- expect(logger).to receive(:info).with(end_payload).ordered
+ expect(logger).to receive(:info).with(start_payload.except('args')).ordered
+ expect(logger).to receive(:info).with(end_payload.except('args')).ordered
expect(subject).to receive(:log_job_start).and_call_original
expect(subject).to receive(:log_job_done).and_call_original
diff --git a/spec/models/clusters/applications/runner_spec.rb b/spec/models/clusters/applications/runner_spec.rb
index 3d0735c6d0b..8ad41e997c2 100644
--- a/spec/models/clusters/applications/runner_spec.rb
+++ b/spec/models/clusters/applications/runner_spec.rb
@@ -18,7 +18,7 @@ describe Clusters::Applications::Runner do
let(:application) { create(:clusters_applications_runner, :scheduled, version: '0.1.30') }
it 'updates the application version' do
- expect(application.reload.version).to eq('0.1.43')
+ expect(application.reload.version).to eq('0.1.45')
end
end
end
@@ -46,7 +46,7 @@ describe Clusters::Applications::Runner do
it 'should be initialized with 4 arguments' do
expect(subject.name).to eq('runner')
expect(subject.chart).to eq('runner/gitlab-runner')
- expect(subject.version).to eq('0.1.43')
+ expect(subject.version).to eq('0.1.45')
expect(subject).to be_rbac
expect(subject.repository).to eq('https://charts.gitlab.io')
expect(subject.files).to eq(gitlab_runner.files)
@@ -64,7 +64,7 @@ describe Clusters::Applications::Runner do
let(:gitlab_runner) { create(:clusters_applications_runner, :errored, runner: ci_runner, version: '0.1.13') }
it 'should be initialized with the locked version' do
- expect(subject.version).to eq('0.1.43')
+ expect(subject.version).to eq('0.1.45')
end
end
end
diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb
index 6f900a60213..5d18e085a6f 100644
--- a/spec/models/issue_spec.rb
+++ b/spec/models/issue_spec.rb
@@ -721,39 +721,28 @@ describe Issue do
end
end
- describe '#check_for_spam' do
- let(:project) { create :project, visibility_level: visibility_level }
- let(:issue) { create :issue, project: project }
+ describe '#check_for_spam?' do
+ using RSpec::Parameterized::TableSyntax
- subject do
- issue.assign_attributes(description: description)
- issue.check_for_spam?
+ where(:visibility_level, :confidential, :new_attributes, :check_for_spam?) do
+ Gitlab::VisibilityLevel::PUBLIC | false | { description: 'woo' } | true
+ Gitlab::VisibilityLevel::PUBLIC | false | { title: 'woo' } | true
+ Gitlab::VisibilityLevel::PUBLIC | true | { confidential: false } | true
+ Gitlab::VisibilityLevel::PUBLIC | true | { description: 'woo' } | false
+ Gitlab::VisibilityLevel::PUBLIC | false | { title: 'woo', confidential: true } | false
+ Gitlab::VisibilityLevel::PUBLIC | false | { description: 'original description' } | false
+ Gitlab::VisibilityLevel::INTERNAL | false | { description: 'woo' } | false
+ Gitlab::VisibilityLevel::PRIVATE | false | { description: 'woo' } | false
end
- context 'when project is public and spammable attributes changed' do
- let(:visibility_level) { Gitlab::VisibilityLevel::PUBLIC }
- let(:description) { 'woo' }
+ with_them do
+ it 'checks for spam on issues that can be seen anonymously' do
+ project = create(:project, visibility_level: visibility_level)
+ issue = create(:issue, project: project, confidential: confidential, description: 'original description')
- it 'returns true' do
- is_expected.to be_truthy
- end
- end
-
- context 'when project is private' do
- let(:visibility_level) { Gitlab::VisibilityLevel::PRIVATE }
- let(:description) { issue.description }
-
- it 'returns false' do
- is_expected.to be_falsey
- end
- end
-
- context 'when spammable attributes have not changed' do
- let(:visibility_level) { Gitlab::VisibilityLevel::PUBLIC }
- let(:description) { issue.description }
+ issue.assign_attributes(new_attributes)
- it 'returns false' do
- is_expected.to be_falsey
+ expect(issue.check_for_spam?).to eq(check_for_spam?)
end
end
end
diff --git a/spec/requests/api/submodules_spec.rb b/spec/requests/api/submodules_spec.rb
index c482a85c68f..064392fb185 100644
--- a/spec/requests/api/submodules_spec.rb
+++ b/spec/requests/api/submodules_spec.rb
@@ -64,7 +64,7 @@ describe API::Submodules do
expect(response).to have_gitlab_http_status(400)
end
- it 'returns the commmit' do
+ it 'returns the commit' do
head_commit = project.repository.commit.id
put api(route(submodule), user), params: params
@@ -81,7 +81,7 @@ describe API::Submodules do
let(:branch) { 'submodule_inside_folder' }
let(:encoded_submodule) { CGI.escape(submodule) }
- it 'returns the commmit' do
+ it 'returns the commit' do
expect(Submodules::UpdateService)
.to receive(:new)
.with(any_args, hash_including(submodule: submodule))
diff --git a/spec/routing/project_routing_spec.rb b/spec/routing/project_routing_spec.rb
index 5c3b37ef11c..a0d01fc8263 100644
--- a/spec/routing/project_routing_spec.rb
+++ b/spec/routing/project_routing_spec.rb
@@ -122,6 +122,10 @@ describe 'project routing' do
route_to('projects#preview_markdown', namespace_id: 'gitlab', id: 'gitlabhq')
)
end
+
+ it 'to #resolve' do
+ expect(get('/projects/1')).to route_to('projects#resolve', id: '1')
+ end
end
# members_namespace_project_autocomplete_sources_path GET /:project_id/autocomplete_sources/members(.:format) projects/autocomplete_sources#members
diff --git a/spec/support/shared_examples/dirty_submit_form_shared_examples.rb b/spec/support/shared_examples/dirty_submit_form_shared_examples.rb
index ba363593120..52a2ee49495 100644
--- a/spec/support/shared_examples/dirty_submit_form_shared_examples.rb
+++ b/spec/support/shared_examples/dirty_submit_form_shared_examples.rb
@@ -1,24 +1,36 @@
shared_examples 'dirty submit form' do |selector_args|
selectors = selector_args.is_a?(Array) ? selector_args : [selector_args]
+ def expect_disabled_state(form, submit, is_disabled = true)
+ disabled_selector = is_disabled == true ? '[disabled]' : ':not([disabled])'
+
+ form.find(".js-dirty-submit#{disabled_selector}", match: :first)
+
+ expect(submit.disabled?).to be is_disabled
+ end
+
selectors.each do |selector|
- it "disables #{selector[:form]} submit until there are changes", :js do
+ it "disables #{selector[:form]} submit until there are changes on #{selector[:input]}", :js do
form = find(selector[:form])
submit = form.first('.js-dirty-submit')
input = form.first(selector[:input])
+ is_radio = input[:type] == 'radio'
+ is_checkbox = input[:type] == 'checkbox'
+ is_checkable = is_radio || is_checkbox
original_value = input.value
+ original_checkable = form.find("input[name='#{input[:name]}'][checked]") if is_radio
+ original_checkable = input if is_checkbox
expect(submit.disabled?).to be true
+ expect(input.checked?).to be false
- input.set("#{original_value} changes")
+ is_checkable ? input.click : input.set("#{original_value} changes")
- form.find('.js-dirty-submit:not([disabled])', match: :first)
- expect(submit.disabled?).to be false
+ expect_disabled_state(form, submit, false)
- input.set(original_value)
+ is_checkable ? original_checkable.click : input.set(original_value)
- form.find('.js-dirty-submit[disabled]', match: :first)
- expect(submit.disabled?).to be true
+ expect_disabled_state(form, submit)
end
end
end
diff --git a/spec/uploaders/personal_file_uploader_spec.rb b/spec/uploaders/personal_file_uploader_spec.rb
index 2896e9a112d..97758f0243e 100644
--- a/spec/uploaders/personal_file_uploader_spec.rb
+++ b/spec/uploaders/personal_file_uploader_spec.rb
@@ -4,19 +4,13 @@ describe PersonalFileUploader do
let(:model) { create(:personal_snippet) }
let(:uploader) { described_class.new(model) }
let(:upload) { create(:upload, :personal_snippet_upload) }
- let(:identifier) { %r{\h+/\S+} }
subject { uploader }
- it_behaves_like 'builds correct paths' do
- let(:patterns) do
- {
- store_dir: %r[uploads/-/system/personal_snippet/\d+],
- upload_path: identifier,
- absolute_path: %r[#{CarrierWave.root}/uploads/-/system/personal_snippet/\d+/#{identifier}]
- }
- end
- end
+ it_behaves_like 'builds correct paths',
+ store_dir: %r[uploads/-/system/personal_snippet/\d+],
+ upload_path: %r[\h+/\S+],
+ absolute_path: %r[#{CarrierWave.root}/uploads/-/system/personal_snippet\/\d+\/\h+\/\S+$]
context "object_store is REMOTE" do
before do
@@ -25,13 +19,17 @@ describe PersonalFileUploader do
include_context 'with storage', described_class::Store::REMOTE
- it_behaves_like 'builds correct paths' do
- let(:patterns) do
- {
- store_dir: %r[\d+/\h+],
- upload_path: identifier
- }
- end
+ it_behaves_like 'builds correct paths',
+ store_dir: %r[\d+/\h+],
+ upload_path: %r[^personal_snippet\/\d+\/\h+\/<filename>]
+ end
+
+ describe '#upload_paths' do
+ it 'builds correct paths for both local and remote storage' do
+ paths = uploader.upload_paths('test.jpg')
+
+ expect(paths.first).to match(%r[\h+\/test.jpg])
+ expect(paths.second).to match(%r[^personal_snippet\/\d+\/\h+\/test.jpg])
end
end
diff --git a/yarn.lock b/yarn.lock
index 7b3144fca16..1486f6f8642 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7735,6 +7735,13 @@ pinkie@^2.0.0:
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+pixelmatch@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854"
+ integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=
+ dependencies:
+ pngjs "^3.0.0"
+
pkg-dir@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
@@ -7766,6 +7773,11 @@ pn@^1.1.0:
resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==
+pngjs@^3.0.0:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.3.3.tgz#85173703bde3edac8998757b96e5821d0966a21b"
+ integrity sha512-1n3Z4p3IOxArEs1VRXnZ/RXdfEniAUS9jb68g58FIXMNkPJeZd+Qh4Uq7/e0LVxAQGos1eIUrqrt4FpjdnEd+Q==
+
pofile@^1:
version "1.0.11"
resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.0.11.tgz#35aff58c17491d127a07336d5522ebc9df57c954"