diff options
252 files changed, 981 insertions, 1525 deletions
diff --git a/.gitlab/ci/reports.gitlab-ci.yml b/.gitlab/ci/reports.gitlab-ci.yml index df1fec61c25..8bcf8d4cb48 100644 --- a/.gitlab/ci/reports.gitlab-ci.yml +++ b/.gitlab/ci/reports.gitlab-ci.yml @@ -1,5 +1,5 @@ include: - - local: /lib/gitlab/ci/templates/Code-Quality.gitlab-ci.yml + - template: Code-Quality.gitlab-ci.yml code_quality: extends: .dedicated-no-docs-no-db-pull-cache-job diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml index dee72930a28..9cfb50eeefc 100644 --- a/.gitlab/ci/review.gitlab-ci.yml +++ b/.gitlab/ci/review.gitlab-ci.yml @@ -32,7 +32,6 @@ environment: &review-environment name: review/${CI_COMMIT_REF_NAME} url: https://gitlab-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN} - before_script: [] .review-docker: &review-docker <<: *review-base @@ -48,6 +47,7 @@ DOCKER_HOST: tcp://docker:2375 LATEST_QA_IMAGE: "gitlab/${CI_PROJECT_NAME}-qa:nightly" QA_IMAGE: "${CI_REGISTRY}/${CI_PROJECT_PATH}/gitlab/${CI_PROJECT_NAME}-qa:${CI_COMMIT_REF_SLUG}" + before_script: [] build-qa-image: <<: *review-docker @@ -85,6 +85,7 @@ schedule:review-build-cng: .review-deploy-base: &review-deploy-base <<: *review-base + retry: 2 allow_failure: true variables: HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" diff --git a/CHANGELOG.md b/CHANGELOG.md index 41506746c98..c512585ff6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,237 @@ documentation](doc/development/changelog.md) for instructions on adding your own entry. +## 11.10.0 (2019-04-22) + +### Security (9 changes) + +- Update Rails to 5.0.7.2. !27022 +- Disallow guest users from accessing Releases. +- Return cached languages if they've been detected before. +- Added rake task for removing EXIF data from existing uploads. +- Disallow updating namespace when updating a project. +- Fix XSS in resolve conflicts form. +- Hide "related branches" when user does not have permission. +- Fix PDF.js vulnerability. +- Use UntrustedRegexp for matching refs policy. + +### Fixed (81 changes, 21 of them are from the community) + +- Update `border-radius` of form controls and remove extra space above page titles. !24497 +- Disallow reopening of a locked merge request. !24882 (Jan Beckmann) +- Align EmailValidator to validate_email gem implementation. !24971 (Horatiu Eugen Vlad) +- add a uniq constraints on issues and mrs labels. !25435 (Antoine Huret) +- Display draft when toggling replies. !25563 +- Fix markdown table header and table content borders. !25666 +- Fix authorized application count. !25715 (moyuru) +- Added "Add List" checkbox to create label dropdown to make creation of list optional. !25716 (Tucker Chapman) +- Makes emoji picker full width on mobile. !25883 (Jacopo Beschi @jacopo-beschi) +- Don't cutoff letters in MR and Issue links. !25910 (gfyoung) +- Fix unwanted character replacement on project members page caused by usage of sanitize function. !25946 (Elias Werberich) +- Fix UI for closed MR when source project is removed. !25967 (Takuya Noguchi) +- Keep inline as much as possible in system notes on issuable. !25968 (Takuya Noguchi) +- Fixes long review app subdomains. !25990 (walkafwalka) +- Fix counting of groups in admin dashboard. !26009 +- Disable inaccessible navigation links upon archiving a project. !26020 (Elias Werberich) +- Fixed - Create project label window is cut off at the bottom. !26049 +- Fix error shown when loading links to specific comments. !26092 +- Fix group transfer selection possibilities. !26123 (Peter Marko) +- Fix UI layout on Commits on mobile. !26133 (Takuya Noguchi) +- Fix continuous bitbucket import loading spinner. !26175 +- Resolves Branch name is lost if I change commit mode in Web IDE. !26180 +- Fix removing remote mirror failure which leaves unnecessary refs behind. !26213 +- Fix Error 500 when user commits Wiki page with no commit message. !26247 +- Handle missing keys in sentry api response. !26264 +- Implemented whitespace-trimming for file names in Web IDE. !26270 +- Fix misalignment of group overview page buttons. !26292 +- Reject HEAD requests to info/refs endpoint. !26334 +- Prevent namespace dropdown in new project form from exceeding container. !26343 +- Fix hover animation consistency in top navbar items. !26345 +- Exclude system notes from commits in merge request discussions. !26396 +- Resolve Code in other column of side-by-side diff is highlighted when selecting code on one side. !26423 +- Prevent fade out transition on loading-button component. !26428 +- Fix merge commits being used as default squash commit messages. !26445 +- Expand resolved discussion when linking to a comment in the discussion. !26483 +- Show statistics also when repository is disabled. !26509 (Peter Marko) +- Fix multiple series queries on metrics dashboard. !26514 +- Releases will now be automatically deleted when deleting corresponding tag. !26530 +- Make stylistic improvements to diff nav header. !26557 +- Clear pipeline status cache after destruction of pipeline. !26575 +- Update fugit which fixes a potential infinite loop. !26579 +- Fixes job link in artifacts page breadcrumb. !26592 +- Fix quick actions add label name middle word overlaps. !26602 (Jacopo Beschi @jacopo-beschi) +- Fix Auto DevOps missing domain error handling. !26627 +- Fix jupyter rendering bug that ended in an infinite loop. !26656 (ROSPARS Benoit) +- Use a fixed git abbrev parameter when we fetch a git revision. !26707 +- Enabled text selection highlighting in diffs in Web IDE. !26721 (Isaac Smith) +- Remove `path` and `branch` labels from metrics. !26744 +- Resolve "Hide Kubernetes cluster warning if project has cluster related". !26749 +- Fix long label overflow on metrics dashboard. !26775 +- Group transfer now properly redirects to edit on failure. !26837 +- Only execute system hooks once when pushing tags. !26888 +- Fix UI anchor links after docs refactor. !26890 +- Fix MWPS does not work for merge request pipelines. !26906 +- Create pipelines for merge requests only when source branch is updated. !26921 +- Fix notfication emails having wrong encoding. !26931 +- Allow task lists that follow a blockquote to work correctly. !26937 +- Fix image diff swipe view on commit and compare pages. !26968 (ftab) +- Fix IDE detection of MR from fork with same branch name. !26986 +- Fix single string values for the 'include' keyword validation of gitlab-ci.yml. !26998 (Paul Bonaud (@paulrbr)) +- Do not display Ingress IP help text when there isn’t an Ingress IP assigned. !27057 +- Fix real-time updates for projects that contain a reserved word. !27060 +- Remove duplicates from issue related merge requests. !27067 +- Add to white-space nowrap to all buttons. !27069 +- Handle possible HTTP exception for Sentry client. !27080 +- Guard against nil dereferenced_target. !27192 +- Update GitLab Workhorse to v8.5.1. !27217 +- Fix long file header names bug in diffs. !27233 +- Always return the deployment in the UpdateDeploymentService#execute method. !27322 +- Fix remove_source_branch merge request API handling. !27392 +- Fixed bug with hashes in urls in WebIDE. !54376 (Kieran Andrews) +- Fix bug where MR popover doesn't go away on mouse leave. +- Only consider active milestones when using the special Started milestone filter. +- Scroll to diff file content when clicking on file header name and it is not a link to other page. +- Remove non-functional add issue button on welcome list. +- Fixed expand full file button showing on images. +- Fixed Web IDE web workers not working with relative URLs. +- Fixed Web IDE not loading merge request files. +- Fixed duplicated diff too large error message. +- Fixed sticky headers in merge request creation diffs. +- Fix bug when reopening milestone from index page. + +### Deprecated (1 change) + +- Allow to use untrusted Regexp via feature flag. !26905 + +### Changed (35 changes, 4 of them are from the community) + +- Create MR pipelines with `refs/merge-requests/:iid/head`. !25504 +- Create Kubernetes resources for projects when their deployment jobs run. !25586 +- Remove unnecessary folder prefix from environment name. !25600 +- Update deploy boards to additionally select on "app.gitlab.com" annotations. !25623 +- Allow failed custom hook script errors to safely appear in GitLab UI by filtering error messages by the prefix GL-HOOK-ERR:. !25625 +- Add link on two-factor authorization settings page to leave group that enforces two-factor authorization. !25731 +- Reduce height of instance system header and footer. !25752 +- Unify behaviour of 'Copy commit SHA to clipboard' to use full commit SHA. !25829 (Max Winterstein) +- Show loading spinner while Ingress/Knative IP is being assigned. !25912 +- Hashed Storage: Prevent a migration and rollback running at the same time. !25976 +- Make time counters show 'just now' for everything under one minute. !25992 (Sergiu Marton) +- Allow filtering labels list by one or two characters. !26012 +- Implements the creation strategy for multi-line suggestions. !26057 +- Automate base domain help text on Clusters page. !26124 +- Set user.name limit to 128 characters. !26146 +- Update gitlab-markup to 1.7.0 which requies python3. !26246 +- Update system message banner font size to 12px. !26293 +- Extend timezone dropdown. !26311 +- Upgrade to Gitaly v1.29.0. !26406 +- Automatically set Prometheus step interval. !26441 +- Knative version bump 0.2.2 -> 0.3.0. !26459 (Chris Baumbauer) +- Display cluster form validation error messages inline. !26502 +- Split Auto-DevOps.gitlab-ci.yml into reusable templates. !26520 +- Update spinners in group list component. !26572 +- Allow removing last owner from subgroup if parent group has owners. !26718 +- Check mergeability in MergeToRefService. !26757 +- Show download diff links for closed MRs. !26772 +- Fix Container Scanning in Kubernetes Runners. !26793 +- Move "Authorize project access with external service" to Core. !26823 +- Localize notifications dropdown. !26844 +- Order labels alphabetically in issue boards. !26927 +- Upgrade to Gitaly v1.32.0. !26989 +- Upgrade to Gitaly v1.33.0. !27065 +- collapse file tree by default if the merge request changes only one file. (Riccardo Padovani <riccardo@rpadovani.com>) +- Removes the undescriptive CI Charts header. + +### Performance (17 changes) + +- Drop legacy artifacts usage as there are no leftovers. !24294 +- Cache Repository#root_ref within a request. !25903 +- Allow ref name caching CommitService#find_commit. !26248 +- Avoid loading pipeline status in project search. !26342 +- Fix some N+1s in loading routes and counting members for groups in @-autocomplete. !26491 +- GitHub import: Run housekeeping after initial import. !26600 +- Add initial complexity limits to GraphQL queries. !26629 +- Cache FindCommit results in pipelines view. !26776 +- Fix and expand Gitaly FindCommit caching. !27018 +- Enable FindCommit caching for project and commits pages. !27048 +- Expand FindCommit caching to blob and refs. !27084 +- Enable Gitaly FindCommit caching for TreeController. !27100 +- Improve performance of PR import. !27121 +- Process at most 4 pipelines during push. !27205 +- Disable method instrumentation for diffs. !27235 +- Speed up filtering issues in a project when searching. +- Speed up generation of avatar URLs when using object storage. + +### Added (35 changes, 6 of them are from the community) + +- Add users search results to global search. !21197 (Alexis Reigel) +- Add target branch filter to merge requests search bar. !24380 (Hiroyuki Sato) +- Add Knative metrics to Prometheus. !24663 (Chris Baumbauer <cab@cabnetworks.net>) +- Support multi-line suggestions. !25211 +- Allow to sort wiki pages by date and title. !25365 +- Allow external diffs to be used conditionally. !25432 +- Add usage counts for error tracking feature. !25472 +- Enable/disable Auto DevOps at the Group level. !25533 +- Update pipeline list view to accommodate post-merge pipeline information. !25690 +- GraphQL Types can be made to always authorize access to resources of that Type. !25724 +- Update clair-local-scan to 2.0.6. !25743 (Takuya Noguchi) +- Update pipeline block on merge request page to accommodate post-merge pipeline information. !25745 +- Support multiple queries per chart on metrics dash. !25758 +- Update pipeline detail view to accommodate post-merge pipelines. !25775 +- Update job detail sidebar to accommodate post-merge pipeline information. !25777 +- Add merge request pipeline flag to pipeline entity. !25846 +- Expose group id on home panel. !25897 (Peter Marko) +- Move allow developers to create projects in groups to Core. !25975 +- Add two new warning messages to the MR widget about merge request pipelines. !25983 +- Support installing Group runner on group-level cluster. !26260 +- Improve the Knative installation on Clusters. !26339 +- Show error when namespace/svc account missing. !26362 +- Add select by title to milestones API. !26573 +- Implemented support for creation of new files from URL in Web IDE. !26622 +- Add control for masking variable values in runner logs. !26751 +- Allow merge requests to be created via git push options. !26752 +- Create a shortcut for a new MR in the Web IDE. !26792 +- Allow reactive caching to be used in services. !26839 +- Add a Prometheus API per environment. !26841 +- Allow merge requests to be set to merge when pipeline succeeds via git push options. !26842 +- Use gitlabktl to build and deploy GitLab Serverless Functions. !26926 +- Make touch events work on image diff swipe view and onion skin. !26971 (ftab) +- Add extended merge request tooltip. +- Added prometheus monitoring to GraphQL. +- Adding highest role property to admin's user details page. + +### Other (29 changes, 6 of them are from the community) + +- Update rack-oauth2 1.2.1 -> 1.9.3. !17868 +- Merge the gitlab-shell "gitlab-keys" functionality into GitLab CE. !25598 +- Refactor all_pipelines in Merge request. !25676 +- Show error backtrace when logging errors to kubernetes.log. !25726 +- Apply recaptcha API change in 4.0. !25921 (Praveen Arimbrathodiyil) +- Remove fake repository_path response. !25942 (Fabio Papa) +- Use curl silent/show-error options on Auto DevOps. !25954 (Takuya Noguchi) +- Explicitly set master_auth setting to enable basic auth and client certificate for new GKE clusters. !26018 +- Project: Improve empty repository state UI. !26024 +- Externalize strings from `/app/views/projects/pipelines`. !26035 (George Tsiolis) +- Prepare multi-line suggestions for rendering in Markdown. !26107 +- Improve mobile UI on User Profile page. !26240 (Takuya Noguchi) +- Update GitLab Runner Helm Chart to 0.3.0/11.9.0. !26467 +- Improve project merge request settings. !26495 +- Bump kubectl to 1.11.9 and Helm to 2.13.1 in Auto-DevOps.gitlab-ci.yml. !26534 +- Upgrade bootstrap_form Gem. !26568 +- Add API access check to Graphql. !26570 +- Change project avatar remove button to a link. !26589 +- Log Gitaly RPC duration to api_json.log and production_json.log. !26652 +- Add cluster domain to Project Cluster API. !26735 +- Move project tags to separate line. !26797 +- Changed button label at /pipelines/new. !26893 (antfobe,leonardofl) +- Update GitLab Shell to v9.0.0. !27002 +- Migrate clusters tests to jest. !27013 +- Rewrite related MRs widget with Vue. !27027 +- Restore HipChat project service. !27172 +- Externalize admin deploy keys strings. +- Removes EE differences for environments_table.vue. +- Removes EE differences for environment_item.vue. + + ## 11.9.8 (2019-04-11) ### Deprecated (1 change) @@ -1 +1 @@ -11.10.0-pre +11.11.0-pre diff --git a/app/assets/stylesheets/pages/diff.scss b/app/assets/stylesheets/pages/diff.scss index 5ea96392afa..b2b3720fdde 100644 --- a/app/assets/stylesheets/pages/diff.scss +++ b/app/assets/stylesheets/pages/diff.scss @@ -431,9 +431,9 @@ table.code { &.diff-line-num { user-select: none; margin: 0; - border: 0; padding: 0 10px 0 5px; - border-right: 1px solid; + border-right-width: 1px; + border-right-style: solid; text-align: right; width: 50px; position: relative; diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index 3d16a368f23..2ef5c207d67 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -10,11 +10,11 @@ class Projects::IssuesController < Projects::ApplicationController include SpammableActions include RecordUserLastActivity - def self.issue_except_actions + def issue_except_actions %i[index calendar new create bulk_update import_csv] end - def self.set_issuables_index_only_actions + def set_issuables_index_only_actions %i[index calendar] end @@ -25,9 +25,9 @@ class Projects::IssuesController < Projects::ApplicationController before_action :whitelist_query_limiting, only: [:create, :create_merge_request, :move, :bulk_update] before_action :check_issues_available! - before_action :issue, except: issue_except_actions + before_action :issue, unless: ->(c) { c.issue_except_actions.include?(c.action_name.to_sym) } - before_action :set_issuables_index, only: set_issuables_index_only_actions + before_action :set_issuables_index, if: ->(c) { c.set_issuables_index_only_actions.include?(c.action_name.to_sym) } # Allow write(create) issue before_action :authorize_create_issue!, only: [:new, :create] diff --git a/app/helpers/notifications_helper.rb b/app/helpers/notifications_helper.rb index 5318ab4ddef..a7ce7667916 100644 --- a/app/helpers/notifications_helper.rb +++ b/app/helpers/notifications_helper.rb @@ -93,4 +93,11 @@ module NotificationsHelper s_(event.to_s.humanize) end end + + def notification_setting_icon(notification_setting) + sprite_icon( + notification_setting.disabled? ? "notifications-off" : "notifications", + css_class: "icon notifications-icon js-notifications-icon" + ) + end end diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 5cf9bb4979a..e5236051118 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -15,6 +15,7 @@ module Ci include Gitlab::Utils::StrongMemoize include Deployable include HasRef + include UpdateProjectStatistics BuildArchivedError = Class.new(StandardError) @@ -157,8 +158,7 @@ module Ci run_after_commit { BuildHooksWorker.perform_async(build.id) } end - after_save :update_project_statistics_after_save, if: :artifacts_size_changed? - after_destroy :update_project_statistics_after_destroy, unless: :project_destroyed? + update_project_statistics stat: :build_artifacts_size, attribute: :artifacts_size class << self # This is needed for url_for to work, @@ -847,21 +847,5 @@ module Ci pipeline.config_processor.build_attributes(name) end - - def update_project_statistics_after_save - update_project_statistics(read_attribute(:artifacts_size).to_i - artifacts_size_was.to_i) - end - - def update_project_statistics_after_destroy - update_project_statistics(-artifacts_size) - end - - def update_project_statistics(difference) - ProjectStatistics.increment_statistic(project_id, :build_artifacts_size, difference) - end - - def project_destroyed? - project.pending_delete? - end end end diff --git a/app/models/ci/job_artifact.rb b/app/models/ci/job_artifact.rb index 9695d49d18b..7c836c6f95c 100644 --- a/app/models/ci/job_artifact.rb +++ b/app/models/ci/job_artifact.rb @@ -4,6 +4,7 @@ module Ci class JobArtifact < ApplicationRecord include AfterCommitQueue include ObjectStorage::BackgroundMove + include UpdateProjectStatistics extend Gitlab::Ci::Model NotSupportedAdapterError = Class.new(StandardError) @@ -52,8 +53,8 @@ module Ci validates :file_format, presence: true, unless: :trace?, on: :create validate :valid_file_format?, unless: :trace?, on: :create before_save :set_size, if: :file_changed? - after_save :update_project_statistics_after_save, if: :size_changed? - after_destroy :update_project_statistics_after_destroy, unless: :project_destroyed? + + update_project_statistics stat: :build_artifacts_size after_save :update_file_store, if: :file_changed? @@ -176,18 +177,6 @@ module Ci self.size = file.size end - def update_project_statistics_after_save - update_project_statistics(size.to_i - size_was.to_i) - end - - def update_project_statistics_after_destroy - update_project_statistics(-self.size.to_i) - end - - def update_project_statistics(difference) - ProjectStatistics.increment_statistic(project_id, :build_artifacts_size, difference) - end - def project_destroyed? # Use job.project to avoid extra DB query for project job.project.pending_delete? diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index 3232c51bfbd..775aaa44e5b 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -128,10 +128,6 @@ module Issuable assignees.count > 1 end - def milestone_available? - project_id == milestone&.project_id || project.ancestors_upto.compact.include?(milestone&.group) - end - private def milestone_is_valid @@ -277,6 +273,10 @@ module Issuable end end + def milestone_available? + project_id == milestone&.project_id || project.ancestors_upto.compact.include?(milestone&.group) + end + def assignee_or_author?(user) author_id == user.id || assignees.exists?(user.id) end diff --git a/app/models/concerns/update_project_statistics.rb b/app/models/concerns/update_project_statistics.rb new file mode 100644 index 00000000000..bffc711c886 --- /dev/null +++ b/app/models/concerns/update_project_statistics.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true + +# This module is providing helpers for updating `ProjectStatistics` with `after_save` and `before_destroy` hooks. +# +# It deals with `ProjectStatistics.increment_statistic` making sure not to update statistics on a cascade delete from the +# project, and keeping track of value deltas on each save. It updates the DB only when a change is needed. +# +# How to use +# - Invoke `update_project_statistics stat: :a_project_statistics_column, attribute: :an_attr_to_track` in a model class body. +# +# Expectation +# - `attribute` must be an ActiveRecord attribute +# - The model must implement `project` and `project_id`. i.e. direct Project relationship or delegation +module UpdateProjectStatistics + extend ActiveSupport::Concern + + class_methods do + attr_reader :statistic_name, :statistic_attribute + + # Configure the model to update +stat+ on ProjectStatistics when +attribute+ changes + # + # +stat+:: a column of ProjectStatistics to update + # +attribute+:: an attribute of the current model, default to +:size+ + def update_project_statistics(stat:, attribute: :size) + @statistic_name = stat + @statistic_attribute = attribute + + after_save(:update_project_statistics_after_save, if: :update_project_statistics_attribute_changed?) + after_destroy(:update_project_statistics_after_destroy, unless: :project_destroyed?) + end + private :update_project_statistics + end + + included do + private + + def project_destroyed? + project.pending_delete? + end + + def update_project_statistics_attribute_changed? + attribute_changed?(self.class.statistic_attribute) + end + + def update_project_statistics_after_save + attr = self.class.statistic_attribute + delta = read_attribute(attr).to_i - attribute_was(attr).to_i + + update_project_statistics(delta) + end + + def update_project_statistics_after_destroy + update_project_statistics(-read_attribute(self.class.statistic_attribute).to_i) + end + + def update_project_statistics(delta) + ProjectStatistics.increment_statistic(project_id, self.class.statistic_name, delta) + end + end +end diff --git a/app/models/namespace.rb b/app/models/namespace.rb index dea34e812ca..8638c5a9c53 100644 --- a/app/models/namespace.rb +++ b/app/models/namespace.rb @@ -51,6 +51,7 @@ class Namespace < ApplicationRecord validate :nesting_level_allowed delegate :name, to: :owner, allow_nil: true, prefix: true + delegate :avatar_url, to: :owner, allow_nil: true after_commit :refresh_access_of_projects_invited_groups, on: :update, if: -> { previous_changes.key?('share_with_group_lock') } @@ -149,6 +150,10 @@ class Namespace < ApplicationRecord type == 'Group' ? 'group' : 'user' end + def user? + kind == 'user' + end + def find_fork_of(project) return unless project.fork_network diff --git a/app/presenters/project_presenter.rb b/app/presenters/project_presenter.rb index 161eebcfb3f..9afbaf035c7 100644 --- a/app/presenters/project_presenter.rb +++ b/app/presenters/project_presenter.rb @@ -37,7 +37,7 @@ class ProjectPresenter < Gitlab::View::Presenter::Delegated autodevops_anchor_data(show_auto_devops_callout: show_auto_devops_callout), kubernetes_cluster_anchor_data, gitlab_ci_anchor_data - ].compact.reject(&:is_link) + ].compact.reject(&:is_link).sort_by.with_index { |item, idx| [item.class_modifier ? 0 : 1, idx] } end def empty_repo_statistics_anchors @@ -259,7 +259,7 @@ class ProjectPresenter < Gitlab::View::Presenter::Delegated if current_user && can?(current_user, :admin_pipeline, project) && repository.gitlab_ci_yml.blank? && !show_auto_devops_callout if auto_devops_enabled? AnchorData.new(false, - statistic_icon('doc-text') + _('Auto DevOps enabled'), + statistic_icon('settings') + _('Auto DevOps enabled'), project_settings_ci_cd_path(project, anchor: 'autodevops-settings'), 'default') else diff --git a/app/views/shared/notifications/_new_button.html.haml b/app/views/shared/notifications/_new_button.html.haml index 6d26dbebbc8..af8ab992f0e 100644 --- a/app/views/shared/notifications/_new_button.html.haml +++ b/app/views/shared/notifications/_new_button.html.haml @@ -10,14 +10,14 @@ %div{ class: ("btn-group" if notification_setting.custom?) } - if notification_setting.custom? %button.dropdown-new.btn.btn-default.has-tooltip.notifications-btn#notifications-button{ type: "button", title: _("Notification setting - %{notification_title}") % { notification_title: notification_title(notification_setting.level) }, class: "#{btn_class}", "aria-label" => _("Notification setting - %{notification_title}") % { notification_title: notification_title(notification_setting.level) }, data: { container: "body", placement: 'top', toggle: "modal", target: "#" + notifications_menu_identifier("modal", notification_setting), display: 'static' } } - = sprite_icon("notifications", css_class: "icon notifications-icon js-notifications-icon") + = notification_setting_icon(notification_setting) %span.js-notification-loading.fa.hidden %button.btn.dropdown-toggle{ data: { toggle: "dropdown", target: notifications_menu_identifier("dropdown", notification_setting), flip: "false" }, class: "#{btn_class}" } = sprite_icon("arrow-down", css_class: "icon mr-0") .sr-only Toggle dropdown - else %button.dropdown-new.btn.btn-default.has-tooltip.notifications-btn#notifications-button{ type: "button", title: "Notification setting - #{notification_title(notification_setting.level)}", class: "#{btn_class}", "aria-label" => "Notification setting: #{notification_title(notification_setting.level)}", data: { container: "body", placement: 'top', toggle: "dropdown", target: notifications_menu_identifier("dropdown", notification_setting), flip: "false" } } - = sprite_icon("notifications", css_class: "icon notifications-icon js-notifications-icon") + = notification_setting_icon(notification_setting) %span.js-notification-loading.fa.hidden = sprite_icon("arrow-down", css_class: "icon") diff --git a/changelogs/unreleased/10029-env-item.yml b/changelogs/unreleased/10029-env-item.yml deleted file mode 100644 index f4e742d3e17..00000000000 --- a/changelogs/unreleased/10029-env-item.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Removes EE differences for environment_item.vue -merge_request: -author: -type: other diff --git a/changelogs/unreleased/10081-env-table.yml b/changelogs/unreleased/10081-env-table.yml deleted file mode 100644 index b27a1be8cca..00000000000 --- a/changelogs/unreleased/10081-env-table.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Removes EE differences for environments_table.vue -merge_request: -author: -type: other diff --git a/changelogs/unreleased/10735-geo-gitlab-revision-can-return-not-consistent-results.yml b/changelogs/unreleased/10735-geo-gitlab-revision-can-return-not-consistent-results.yml deleted file mode 100644 index 2360295b022..00000000000 --- a/changelogs/unreleased/10735-geo-gitlab-revision-can-return-not-consistent-results.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use a fixed git abbrev parameter when we fetch a git revision -merge_request: 26707 -author: -type: fixed diff --git a/changelogs/unreleased/11124-update-deployment-service-fails-if-project-is-nil.yml b/changelogs/unreleased/11124-update-deployment-service-fails-if-project-is-nil.yml deleted file mode 100644 index 355743f4cb0..00000000000 --- a/changelogs/unreleased/11124-update-deployment-service-fails-if-project-is-nil.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Always return the deployment in the UpdateDeploymentService#execute method -merge_request: 27322 -author: -type: fixed diff --git a/changelogs/unreleased/13784-validate-variables-for-masking.yml b/changelogs/unreleased/13784-validate-variables-for-masking.yml deleted file mode 100644 index e8e97fac3d2..00000000000 --- a/changelogs/unreleased/13784-validate-variables-for-masking.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add control for masking variable values in runner logs -merge_request: 26751 -author: -type: added diff --git a/changelogs/unreleased/24936-remove-type-from-review-app-name.yml b/changelogs/unreleased/24936-remove-type-from-review-app-name.yml deleted file mode 100644 index 639333264f6..00000000000 --- a/changelogs/unreleased/24936-remove-type-from-review-app-name.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove unnecessary folder prefix from environment name -merge_request: 25600 -author: -type: changed diff --git a/changelogs/unreleased/24971-align-emailvalidator-to-validate_email-gem-implementation.yml b/changelogs/unreleased/24971-align-emailvalidator-to-validate_email-gem-implementation.yml deleted file mode 100644 index 04dbc3a1d5a..00000000000 --- a/changelogs/unreleased/24971-align-emailvalidator-to-validate_email-gem-implementation.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Align EmailValidator to validate_email gem implementation -merge_request: 24971 -author: Horatiu Eugen Vlad -type: fixed diff --git a/changelogs/unreleased/25942-remove-fake-repository-path-response.yml b/changelogs/unreleased/25942-remove-fake-repository-path-response.yml deleted file mode 100644 index e1da28ab03c..00000000000 --- a/changelogs/unreleased/25942-remove-fake-repository-path-response.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove fake repository_path response -merge_request: 25942 -author: Fabio Papa -type: other diff --git a/changelogs/unreleased/29249-show-download-diff-even-when-merge-request-is-closed.yml b/changelogs/unreleased/29249-show-download-diff-even-when-merge-request-is-closed.yml deleted file mode 100644 index 5942860a20f..00000000000 --- a/changelogs/unreleased/29249-show-download-diff-even-when-merge-request-is-closed.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show download diff links for closed MRs -merge_request: 26772 -author: -type: changed diff --git a/changelogs/unreleased/38564-cant-leave-subgroup.yml b/changelogs/unreleased/38564-cant-leave-subgroup.yml deleted file mode 100644 index a6397062343..00000000000 --- a/changelogs/unreleased/38564-cant-leave-subgroup.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow removing last owner from subgroup if parent group has owners -merge_request: 26718 -author: -type: changed diff --git a/changelogs/unreleased/43263-git-push-option-to-create-mr.yml b/changelogs/unreleased/43263-git-push-option-to-create-mr.yml deleted file mode 100644 index d50c33da162..00000000000 --- a/changelogs/unreleased/43263-git-push-option-to-create-mr.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow merge requests to be created via git push options -merge_request: 26752 -author: -type: added diff --git a/changelogs/unreleased/43297-authorized-application-count.yml b/changelogs/unreleased/43297-authorized-application-count.yml deleted file mode 100644 index d22e155fb14..00000000000 --- a/changelogs/unreleased/43297-authorized-application-count.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix authorized application count -merge_request: 25715 -author: moyuru -type: fixed diff --git a/changelogs/unreleased/46787-create-project-label-window-is-cut-off-at-the-bottom.yml b/changelogs/unreleased/46787-create-project-label-window-is-cut-off-at-the-bottom.yml deleted file mode 100644 index dca1d57d14e..00000000000 --- a/changelogs/unreleased/46787-create-project-label-window-is-cut-off-at-the-bottom.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed - Create project label window is cut off at the bottom -merge_request: 26049 -author: -type: fixed diff --git a/changelogs/unreleased/47234-composable-auto-devops.yml b/changelogs/unreleased/47234-composable-auto-devops.yml deleted file mode 100644 index 9403c5ae6d3..00000000000 --- a/changelogs/unreleased/47234-composable-auto-devops.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Split Auto-DevOps.gitlab-ci.yml into reusable templates -merge_request: 26520 -author: -type: changed diff --git a/changelogs/unreleased/47771-highlighting-in-diff.yml b/changelogs/unreleased/47771-highlighting-in-diff.yml deleted file mode 100644 index a8e8cbf0174..00000000000 --- a/changelogs/unreleased/47771-highlighting-in-diff.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Enabled text selection highlighting in diffs in Web IDE -merge_request: 26721 -author: Isaac Smith -type: fixed diff --git a/changelogs/unreleased/48090-filter-sensitive-metric-labels.yml b/changelogs/unreleased/48090-filter-sensitive-metric-labels.yml deleted file mode 100644 index e588fa79619..00000000000 --- a/changelogs/unreleased/48090-filter-sensitive-metric-labels.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove `path` and `branch` labels from metrics -merge_request: 26744 -author: -type: fixed diff --git a/changelogs/unreleased/48132-display-output-from-pre-receive-scripts.yml b/changelogs/unreleased/48132-display-output-from-pre-receive-scripts.yml deleted file mode 100644 index e06a4d5ee75..00000000000 --- a/changelogs/unreleased/48132-display-output-from-pre-receive-scripts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Allow failed custom hook script errors to safely appear in GitLab UI by filtering error messages by the prefix GL-HOOK-ERR:" -merge_request: 25625 -author: -type: changed diff --git a/changelogs/unreleased/48297-fix-code-selection.yml b/changelogs/unreleased/48297-fix-code-selection.yml deleted file mode 100644 index 14841b00969..00000000000 --- a/changelogs/unreleased/48297-fix-code-selection.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Resolve Code in other column of side-by-side diff is highlighted when selecting - code on one side -merge_request: 26423 -author: -type: fixed diff --git a/changelogs/unreleased/49856-upgrade-bootstrap-form-gem.yml b/changelogs/unreleased/49856-upgrade-bootstrap-form-gem.yml deleted file mode 100644 index 1dc8d5b4179..00000000000 --- a/changelogs/unreleased/49856-upgrade-bootstrap-form-gem.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade bootstrap_form Gem -merge_request: 26568 -author: -type: other diff --git a/changelogs/unreleased/49863-ingress-ip-loading-state.yml b/changelogs/unreleased/49863-ingress-ip-loading-state.yml deleted file mode 100644 index 51bb27d3153..00000000000 --- a/changelogs/unreleased/49863-ingress-ip-loading-state.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show loading spinner while Ingress/Knative IP is being assigned -merge_request: 25912 -author: -type: changed diff --git a/changelogs/unreleased/49910-reopening-a-closed-milestone-from-the-closed-milestones-page-fails2.yml b/changelogs/unreleased/49910-reopening-a-closed-milestone-from-the-closed-milestones-page-fails2.yml deleted file mode 100644 index 68d38cd56c5..00000000000 --- a/changelogs/unreleased/49910-reopening-a-closed-milestone-from-the-closed-milestones-page-fails2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix bug when reopening milestone from index page -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/51988-install-group-runner-on-group-cluster.yml b/changelogs/unreleased/51988-install-group-runner-on-group-cluster.yml deleted file mode 100644 index 86f08dd1798..00000000000 --- a/changelogs/unreleased/51988-install-group-runner-on-group-cluster.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Support installing Group runner on group-level cluster -merge_request: 26260 -author: -type: added diff --git a/changelogs/unreleased/52258-labels-with-long-names-overflow-on-metrics-dashboard.yml b/changelogs/unreleased/52258-labels-with-long-names-overflow-on-metrics-dashboard.yml deleted file mode 100644 index 5dd25d0ffc1..00000000000 --- a/changelogs/unreleased/52258-labels-with-long-names-overflow-on-metrics-dashboard.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix long label overflow on metrics dashboard -merge_request: 26775 -author: -type: fixed diff --git a/changelogs/unreleased/52366-improved-group-lists-ui-spinners.yml b/changelogs/unreleased/52366-improved-group-lists-ui-spinners.yml deleted file mode 100644 index ab09272eaf4..00000000000 --- a/changelogs/unreleased/52366-improved-group-lists-ui-spinners.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update spinners in group list component -merge_request: 26572 -author: -type: changed diff --git a/changelogs/unreleased/52447-auto-devops-at-group-level.yml b/changelogs/unreleased/52447-auto-devops-at-group-level.yml deleted file mode 100644 index 0a21c6a2b7b..00000000000 --- a/changelogs/unreleased/52447-auto-devops-at-group-level.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Enable/disable Auto DevOps at the Group level -merge_request: 25533 -author: -type: added diff --git a/changelogs/unreleased/52560-fix-duplicate-tag-system-hooks.yml b/changelogs/unreleased/52560-fix-duplicate-tag-system-hooks.yml deleted file mode 100644 index b8d58d6bd30..00000000000 --- a/changelogs/unreleased/52560-fix-duplicate-tag-system-hooks.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Only execute system hooks once when pushing tags -merge_request: 26888 -author: -type: fixed diff --git a/changelogs/unreleased/53139-hide-tree-single-file.yml b/changelogs/unreleased/53139-hide-tree-single-file.yml deleted file mode 100644 index 17fe957e42e..00000000000 --- a/changelogs/unreleased/53139-hide-tree-single-file.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: collapse file tree by default if the merge request changes only one file -merge_request: -author: Riccardo Padovani <riccardo@rpadovani.com> -type: changed diff --git a/changelogs/unreleased/53198-git-push-option-merge-when-pipeline-succeeds.yml b/changelogs/unreleased/53198-git-push-option-merge-when-pipeline-succeeds.yml deleted file mode 100644 index 6fefd05049c..00000000000 --- a/changelogs/unreleased/53198-git-push-option-merge-when-pipeline-succeeds.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Allow merge requests to be set to merge when pipeline succeeds via git push - options -merge_request: 26842 -author: -type: added diff --git a/changelogs/unreleased/53210-add-uniq-constraints-on-issues-and-mrs-labels.yml b/changelogs/unreleased/53210-add-uniq-constraints-on-issues-and-mrs-labels.yml deleted file mode 100644 index f9cd8716b92..00000000000 --- a/changelogs/unreleased/53210-add-uniq-constraints-on-issues-and-mrs-labels.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: add a uniq constraints on issues and mrs labels -merge_request: 25435 -author: Antoine Huret -type: fixed diff --git a/changelogs/unreleased/53459-quick-action-adds-multiple-labels-to-issue-if-middle-words-overlap-with-existing-label.yml b/changelogs/unreleased/53459-quick-action-adds-multiple-labels-to-issue-if-middle-words-overlap-with-existing-label.yml deleted file mode 100644 index 30d8c0e95d7..00000000000 --- a/changelogs/unreleased/53459-quick-action-adds-multiple-labels-to-issue-if-middle-words-overlap-with-existing-label.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix quick actions add label name middle word overlaps -merge_request: 26602 -author: Jacopo Beschi @jacopo-beschi -type: fixed diff --git a/changelogs/unreleased/54417-graphql-type-authorization.yml b/changelogs/unreleased/54417-graphql-type-authorization.yml deleted file mode 100644 index 528b58a858a..00000000000 --- a/changelogs/unreleased/54417-graphql-type-authorization.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: GraphQL Types can be made to always authorize access to resources of that Type -merge_request: 25724 -author: -type: added diff --git a/changelogs/unreleased/54506-show-error-when-namespace-svc-missing.yml b/changelogs/unreleased/54506-show-error-when-namespace-svc-missing.yml deleted file mode 100644 index 3e3784d5413..00000000000 --- a/changelogs/unreleased/54506-show-error-when-namespace-svc-missing.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show error when namespace/svc account missing -merge_request: 26362 -author: -type: added diff --git a/changelogs/unreleased/54670-external-diffs-when-outdated.yml b/changelogs/unreleased/54670-external-diffs-when-outdated.yml deleted file mode 100644 index 2a0b9e75cb4..00000000000 --- a/changelogs/unreleased/54670-external-diffs-when-outdated.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Allow external diffs to be used conditionally' -merge_request: 25432 -author: -type: added diff --git a/changelogs/unreleased/54916-extended-tooltip-for-merge-request-links.yml b/changelogs/unreleased/54916-extended-tooltip-for-merge-request-links.yml deleted file mode 100644 index 7fd0bcd1c00..00000000000 --- a/changelogs/unreleased/54916-extended-tooltip-for-merge-request-links.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add extended merge request tooltip -merge_request: !25221 -author: -type: added diff --git a/changelogs/unreleased/55268-exclude-system-notes-from-commits-in-mr.yml b/changelogs/unreleased/55268-exclude-system-notes-from-commits-in-mr.yml deleted file mode 100644 index 7af4739136b..00000000000 --- a/changelogs/unreleased/55268-exclude-system-notes-from-commits-in-mr.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Exclude system notes from commits in merge request discussions -merge_request: 26396 -author: -type: fixed diff --git a/changelogs/unreleased/55964-fix-email-encoding.yml b/changelogs/unreleased/55964-fix-email-encoding.yml deleted file mode 100644 index 2195a853702..00000000000 --- a/changelogs/unreleased/55964-fix-email-encoding.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix notfication emails having wrong encoding -merge_request: 26931 -author: -type: fixed diff --git a/changelogs/unreleased/55980-remove-add-issue-on-blank-list.yml b/changelogs/unreleased/55980-remove-add-issue-on-blank-list.yml deleted file mode 100644 index 4c16b635297..00000000000 --- a/changelogs/unreleased/55980-remove-add-issue-on-blank-list.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove non-functional add issue button on welcome list -merge_request: !26742 -author: -type: fixed diff --git a/changelogs/unreleased/56015-remove-remote-timeout.yml b/changelogs/unreleased/56015-remove-remote-timeout.yml deleted file mode 100644 index 9b40ada5291..00000000000 --- a/changelogs/unreleased/56015-remove-remote-timeout.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix removing remote mirror failure which leaves unnecessary refs behind -merge_request: 26213 -author: -type: fixed diff --git a/changelogs/unreleased/56089-merge-gitlab-keys.yml b/changelogs/unreleased/56089-merge-gitlab-keys.yml deleted file mode 100644 index 5e2cafd3254..00000000000 --- a/changelogs/unreleased/56089-merge-gitlab-keys.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Merge the gitlab-shell "gitlab-keys" functionality into GitLab CE -merge_request: 25598 -author: -type: other diff --git a/changelogs/unreleased/56762-fix-commit-swipe-view-26968.yml b/changelogs/unreleased/56762-fix-commit-swipe-view-26968.yml deleted file mode 100644 index 18bd51711d9..00000000000 --- a/changelogs/unreleased/56762-fix-commit-swipe-view-26968.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Fix image diff swipe view on commit and compare pages" -merge_request: 26968 -author: ftab -type: fixed
\ No newline at end of file diff --git a/changelogs/unreleased/56833-project-improve-empty-repository-state-ui-fe.yml b/changelogs/unreleased/56833-project-improve-empty-repository-state-ui-fe.yml deleted file mode 100644 index 19cf3d69db1..00000000000 --- a/changelogs/unreleased/56833-project-improve-empty-repository-state-ui-fe.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Project: Improve empty repository state UI' -merge_request: 26024 -author: -type: other diff --git a/changelogs/unreleased/56864-reopen-locked-mr.yml b/changelogs/unreleased/56864-reopen-locked-mr.yml deleted file mode 100644 index d1d71531ac8..00000000000 --- a/changelogs/unreleased/56864-reopen-locked-mr.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Disallow reopening of a locked merge request -merge_request: 24882 -author: Jan Beckmann -type: fixed diff --git a/changelogs/unreleased/56954-improve-knative-after-installing-tiller.yml b/changelogs/unreleased/56954-improve-knative-after-installing-tiller.yml deleted file mode 100644 index b9fb27c3218..00000000000 --- a/changelogs/unreleased/56954-improve-knative-after-installing-tiller.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve the Knative installation on Clusters -merge_request: 26339 -author: -type: added diff --git a/changelogs/unreleased/57115-just-in-time-k8s-resource-creation.yml b/changelogs/unreleased/57115-just-in-time-k8s-resource-creation.yml deleted file mode 100644 index 2141c75ec72..00000000000 --- a/changelogs/unreleased/57115-just-in-time-k8s-resource-creation.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Create Kubernetes resources for projects when their deployment jobs run. -merge_request: 25586 -author: -type: changed diff --git a/changelogs/unreleased/57131-external_auth_to_core.yml b/changelogs/unreleased/57131-external_auth_to_core.yml deleted file mode 100644 index aacd3916c82..00000000000 --- a/changelogs/unreleased/57131-external_auth_to_core.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move "Authorize project access with external service" to Core -merge_request: 26823 -author: -type: changed diff --git a/changelogs/unreleased/57319-hide-kubernetes-cluster-warning-if-project-has-cluster-related.yml b/changelogs/unreleased/57319-hide-kubernetes-cluster-warning-if-project-has-cluster-related.yml deleted file mode 100644 index a6953a68a76..00000000000 --- a/changelogs/unreleased/57319-hide-kubernetes-cluster-warning-if-project-has-cluster-related.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolve "Hide Kubernetes cluster warning if project has cluster related" -merge_request: 26749 -author: -type: fixed diff --git a/changelogs/unreleased/57357-automate-base-domain-help-text.yml b/changelogs/unreleased/57357-automate-base-domain-help-text.yml deleted file mode 100644 index fa1831b66ea..00000000000 --- a/changelogs/unreleased/57357-automate-base-domain-help-text.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Automate base domain help text on Clusters page -merge_request: 26124 -author: -type: changed diff --git a/changelogs/unreleased/57364-improve-diff-nav-header.yml b/changelogs/unreleased/57364-improve-diff-nav-header.yml deleted file mode 100644 index 95d119b949c..00000000000 --- a/changelogs/unreleased/57364-improve-diff-nav-header.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make stylistic improvements to diff nav header -merge_request: 26557 -author: -type: fixed diff --git a/changelogs/unreleased/57409-loading-button-transition.yml b/changelogs/unreleased/57409-loading-button-transition.yml deleted file mode 100644 index 3cf169d79de..00000000000 --- a/changelogs/unreleased/57409-loading-button-transition.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent fade out transition on loading-button component. -merge_request: 26428 -author: -type: fixed diff --git a/changelogs/unreleased/57482-shortcut-to-create-merge-request-from-web-ide.yml b/changelogs/unreleased/57482-shortcut-to-create-merge-request-from-web-ide.yml deleted file mode 100644 index c188d59fe94..00000000000 --- a/changelogs/unreleased/57482-shortcut-to-create-merge-request-from-web-ide.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Create a shortcut for a new MR in the Web IDE -merge_request: 26792 -author: -type: added diff --git a/changelogs/unreleased/57493-add-limit-to-user-name.yml b/changelogs/unreleased/57493-add-limit-to-user-name.yml deleted file mode 100644 index e6c78572d23..00000000000 --- a/changelogs/unreleased/57493-add-limit-to-user-name.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Set user.name limit to 128 characters -merge_request: 26146 -author: -type: changed diff --git a/changelogs/unreleased/57540-filename-trailing-space.yml b/changelogs/unreleased/57540-filename-trailing-space.yml deleted file mode 100644 index db85fb350db..00000000000 --- a/changelogs/unreleased/57540-filename-trailing-space.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Implemented whitespace-trimming for file names in Web IDE -merge_request: 26270 -author: -type: fixed diff --git a/changelogs/unreleased/57602-create-cluster-validations.yml b/changelogs/unreleased/57602-create-cluster-validations.yml deleted file mode 100644 index 35349c1e9f4..00000000000 --- a/changelogs/unreleased/57602-create-cluster-validations.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display cluster form validation error messages inline -merge_request: 26502 -author: -type: changed diff --git a/changelogs/unreleased/57648-make-emoji-picker-full-width-on-mobile.yml b/changelogs/unreleased/57648-make-emoji-picker-full-width-on-mobile.yml deleted file mode 100644 index d92fd2a762e..00000000000 --- a/changelogs/unreleased/57648-make-emoji-picker-full-width-on-mobile.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Makes emoji picker full width on mobile. -merge_request: 25883 -author: Jacopo Beschi @jacopo-beschi -type: fixed diff --git a/changelogs/unreleased/57655-fix-markdown-tables-border.yml b/changelogs/unreleased/57655-fix-markdown-tables-border.yml deleted file mode 100644 index 6a8ba8c4353..00000000000 --- a/changelogs/unreleased/57655-fix-markdown-tables-border.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix markdown table header and table content borders -merge_request: 25666 -author: -type: fixed diff --git a/changelogs/unreleased/57668-create-file-from-url.yml b/changelogs/unreleased/57668-create-file-from-url.yml deleted file mode 100644 index b6033fa24ca..00000000000 --- a/changelogs/unreleased/57668-create-file-from-url.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Implemented support for creation of new files from URL in Web IDE -merge_request: 26622 -author: -type: added diff --git a/changelogs/unreleased/57669-fix-bug-clicking-file-header-refreshes-page.yml b/changelogs/unreleased/57669-fix-bug-clicking-file-header-refreshes-page.yml deleted file mode 100644 index c6161870096..00000000000 --- a/changelogs/unreleased/57669-fix-bug-clicking-file-header-refreshes-page.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Scroll to diff file content when clicking on file header name and it is not - a link to other page -merge_request: !26422 -author: -type: fixed diff --git a/changelogs/unreleased/57894-buttons-on-group-page-are-misaligned.yml b/changelogs/unreleased/57894-buttons-on-group-page-are-misaligned.yml deleted file mode 100644 index ca0f529df6c..00000000000 --- a/changelogs/unreleased/57894-buttons-on-group-page-are-misaligned.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix misalignment of group overview page buttons -merge_request: 26292 -author: -type: fixed diff --git a/changelogs/unreleased/57984-store-branch-name.yml b/changelogs/unreleased/57984-store-branch-name.yml deleted file mode 100644 index 26dfdb7a5d6..00000000000 --- a/changelogs/unreleased/57984-store-branch-name.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Resolves Branch name is lost if I change commit mode in Web IDE -merge_request: 26180 -author: -type: fixed diff --git a/changelogs/unreleased/58208-explicitly-set-masterauth.yml b/changelogs/unreleased/58208-explicitly-set-masterauth.yml deleted file mode 100644 index e3512d11113..00000000000 --- a/changelogs/unreleased/58208-explicitly-set-masterauth.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Explicitly set master_auth setting to enable basic auth and client certificate - for new GKE clusters -merge_request: 26018 -author: -type: other diff --git a/changelogs/unreleased/58375-api-controller.yml b/changelogs/unreleased/58375-api-controller.yml deleted file mode 100644 index 60f21b37ae7..00000000000 --- a/changelogs/unreleased/58375-api-controller.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add a Prometheus API per environment -merge_request: 26841 -author: -type: added diff --git a/changelogs/unreleased/58375-reactive-caching-changes.yml b/changelogs/unreleased/58375-reactive-caching-changes.yml deleted file mode 100644 index cf73736b8ef..00000000000 --- a/changelogs/unreleased/58375-reactive-caching-changes.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow reactive caching to be used in services -merge_request: 26839 -author: -type: added diff --git a/changelogs/unreleased/58405-basic-limiting-complexity-of-graphql-queries.yml b/changelogs/unreleased/58405-basic-limiting-complexity-of-graphql-queries.yml deleted file mode 100644 index 058a120b500..00000000000 --- a/changelogs/unreleased/58405-basic-limiting-complexity-of-graphql-queries.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add initial complexity limits to GraphQL queries -merge_request: 26629 -author: -type: performance diff --git a/changelogs/unreleased/58410-change-pixel-size-of-instance-header-footer-message-to-16px.yml b/changelogs/unreleased/58410-change-pixel-size-of-instance-header-footer-message-to-16px.yml deleted file mode 100644 index 3e494847e75..00000000000 --- a/changelogs/unreleased/58410-change-pixel-size-of-instance-header-footer-message-to-16px.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Reduce height of instance system header and footer -merge_request: 25752 -author: -type: changed diff --git a/changelogs/unreleased/58482-update-airminc-clair-local-scan-to-2-0-6.yml b/changelogs/unreleased/58482-update-airminc-clair-local-scan-to-2-0-6.yml deleted file mode 100644 index be9c38aba1e..00000000000 --- a/changelogs/unreleased/58482-update-airminc-clair-local-scan-to-2-0-6.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update clair-local-scan to 2.0.6 -merge_request: 25743 -author: Takuya Noguchi -type: added diff --git a/changelogs/unreleased/58717-checkbox-cannot-be-checked-if-a-blockquote-is-above.yml b/changelogs/unreleased/58717-checkbox-cannot-be-checked-if-a-blockquote-is-above.yml deleted file mode 100644 index 9f5881966c7..00000000000 --- a/changelogs/unreleased/58717-checkbox-cannot-be-checked-if-a-blockquote-is-above.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow task lists that follow a blockquote to work correctly -merge_request: 26937 -author: -type: fixed diff --git a/changelogs/unreleased/58739-hashed-storage-prevent-a-migration-and-rollback-running-at-the-same-time.yml b/changelogs/unreleased/58739-hashed-storage-prevent-a-migration-and-rollback-running-at-the-same-time.yml deleted file mode 100644 index 765a991bb6a..00000000000 --- a/changelogs/unreleased/58739-hashed-storage-prevent-a-migration-and-rollback-running-at-the-same-time.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Hashed Storage: Prevent a migration and rollback running at the same time' -merge_request: 25976 -author: -type: changed diff --git a/changelogs/unreleased/58751-fix-project-name-members-page.yml b/changelogs/unreleased/58751-fix-project-name-members-page.yml deleted file mode 100644 index a295afc5c48..00000000000 --- a/changelogs/unreleased/58751-fix-project-name-members-page.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Fix unwanted character replacement on project members page caused by usage of sanitize function" -merge_request: 25946 -author: Elias Werberich -type: fixed diff --git a/changelogs/unreleased/58781-silent-progress-in-auto-devops.yml b/changelogs/unreleased/58781-silent-progress-in-auto-devops.yml deleted file mode 100644 index e45db8eafc3..00000000000 --- a/changelogs/unreleased/58781-silent-progress-in-auto-devops.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use curl silent/show-error options on Auto DevOps -merge_request: 25954 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/58789-some-system-notes-on-issuable-are-folded-on-mobile.yml b/changelogs/unreleased/58789-some-system-notes-on-issuable-are-folded-on-mobile.yml deleted file mode 100644 index ebfb7aeaa1f..00000000000 --- a/changelogs/unreleased/58789-some-system-notes-on-issuable-are-folded-on-mobile.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Keep inline as much as possible in system notes on issuable -merge_request: 25968 -author: Takuya Noguchi -type: fixed diff --git a/changelogs/unreleased/58793-fix-nav-links-archived-project.yml b/changelogs/unreleased/58793-fix-nav-links-archived-project.yml deleted file mode 100644 index a8250804c34..00000000000 --- a/changelogs/unreleased/58793-fix-nav-links-archived-project.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Disable inaccessible navigation links upon archiving a project" -merge_request: 26020 -author: Elias Werberich -type: fixed diff --git a/changelogs/unreleased/58797-broken-ui-on-a-closed-merge-request-from-a-deleted-source-project.yml b/changelogs/unreleased/58797-broken-ui-on-a-closed-merge-request-from-a-deleted-source-project.yml deleted file mode 100644 index e30f48ed1a8..00000000000 --- a/changelogs/unreleased/58797-broken-ui-on-a-closed-merge-request-from-a-deleted-source-project.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix UI for closed MR when source project is removed -merge_request: 25967 -author: Takuya Noguchi -type: fixed diff --git a/changelogs/unreleased/58805-allow-incomplete-commit-data-to-be-fetched-from-collection.yml b/changelogs/unreleased/58805-allow-incomplete-commit-data-to-be-fetched-from-collection.yml deleted file mode 100644 index 4377ebfdbdf..00000000000 --- a/changelogs/unreleased/58805-allow-incomplete-commit-data-to-be-fetched-from-collection.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix merge commits being used as default squash commit messages -merge_request: 26445 -author: -type: fixed diff --git a/changelogs/unreleased/58835-button-run-pipeline.yml b/changelogs/unreleased/58835-button-run-pipeline.yml deleted file mode 100644 index 39407a60780..00000000000 --- a/changelogs/unreleased/58835-button-run-pipeline.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Changed button label at /pipelines/new -merge_request: 26893 -author: antfobe,leonardofl -type: other diff --git a/changelogs/unreleased/58839-automatically-set-prometheus-step-interval.yml b/changelogs/unreleased/58839-automatically-set-prometheus-step-interval.yml deleted file mode 100644 index 2c6edf45ae2..00000000000 --- a/changelogs/unreleased/58839-automatically-set-prometheus-step-interval.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Automatically set Prometheus step interval -merge_request: 26441 -author: -type: changed diff --git a/changelogs/unreleased/58883-fix-fetching-comments.yml b/changelogs/unreleased/58883-fix-fetching-comments.yml deleted file mode 100644 index 14c0f1687f2..00000000000 --- a/changelogs/unreleased/58883-fix-fetching-comments.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix error shown when loading links to specific comments -merge_request: 26092 -author: -type: fixed diff --git a/changelogs/unreleased/58889-spinners-are-active-prematurely-in-bitbucket-cloud-import.yml b/changelogs/unreleased/58889-spinners-are-active-prematurely-in-bitbucket-cloud-import.yml deleted file mode 100644 index ec357d9a832..00000000000 --- a/changelogs/unreleased/58889-spinners-are-active-prematurely-in-bitbucket-cloud-import.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix continuous bitbucket import loading spinner -merge_request: 26175 -author: -type: fixed diff --git a/changelogs/unreleased/58933-broken-ui-on-commits-on-mobile.yml b/changelogs/unreleased/58933-broken-ui-on-commits-on-mobile.yml deleted file mode 100644 index ca9f9dd21c9..00000000000 --- a/changelogs/unreleased/58933-broken-ui-on-commits-on-mobile.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix UI layout on Commits on mobile -merge_request: 26133 -author: Takuya Noguchi -type: fixed diff --git a/changelogs/unreleased/58971-sentry-api-keyerror.yml b/changelogs/unreleased/58971-sentry-api-keyerror.yml deleted file mode 100644 index 0f195c4b4f7..00000000000 --- a/changelogs/unreleased/58971-sentry-api-keyerror.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Handle missing keys in sentry api response -merge_request: 26264 -author: -type: fixed diff --git a/changelogs/unreleased/58981-migrate-clusters-tests-to-jest.yml b/changelogs/unreleased/58981-migrate-clusters-tests-to-jest.yml deleted file mode 100644 index 3df13dbb960..00000000000 --- a/changelogs/unreleased/58981-migrate-clusters-tests-to-jest.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Migrate clusters tests to jest -merge_request: 27013 -author: -type: other diff --git a/changelogs/unreleased/59057-buttons-on-top-from-a-user-profile-page-on-mobile.yml b/changelogs/unreleased/59057-buttons-on-top-from-a-user-profile-page-on-mobile.yml deleted file mode 100644 index febbbce2139..00000000000 --- a/changelogs/unreleased/59057-buttons-on-top-from-a-user-profile-page-on-mobile.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve mobile UI on User Profile page -merge_request: 26240 -author: Takuya Noguchi -type: other diff --git a/changelogs/unreleased/59062-update-gitlab-markup-python-3.yml b/changelogs/unreleased/59062-update-gitlab-markup-python-3.yml deleted file mode 100644 index 265a7e36841..00000000000 --- a/changelogs/unreleased/59062-update-gitlab-markup-python-3.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update gitlab-markup to 1.7.0 which requies python3 -merge_request: 26246 -author: -type: changed diff --git a/changelogs/unreleased/59079-fix-jupyter-render-loop.yml b/changelogs/unreleased/59079-fix-jupyter-render-loop.yml deleted file mode 100644 index 29264b33dfa..00000000000 --- a/changelogs/unreleased/59079-fix-jupyter-render-loop.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix jupyter rendering bug that ended in an infinite loop -merge_request: 26656 -author: ROSPARS Benoit -type: fixed diff --git a/changelogs/unreleased/59117-inconsistent-hover-behavior-on-navbar-items.yml b/changelogs/unreleased/59117-inconsistent-hover-behavior-on-navbar-items.yml deleted file mode 100644 index eb9dcef4a89..00000000000 --- a/changelogs/unreleased/59117-inconsistent-hover-behavior-on-navbar-items.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix hover animation consistency in top navbar items -merge_request: 26345 -author: -type: fixed diff --git a/changelogs/unreleased/59131-set-the-size-of-instance-system-message-text-12px.yml b/changelogs/unreleased/59131-set-the-size-of-instance-system-message-text-12px.yml deleted file mode 100644 index 688190f4458..00000000000 --- a/changelogs/unreleased/59131-set-the-size-of-instance-system-message-text-12px.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update system message banner font size to 12px -merge_request: 26293 -author: -type: changed diff --git a/changelogs/unreleased/59189-long-names-in-project-path-namespace-dropdown-breaks-past-container.yml b/changelogs/unreleased/59189-long-names-in-project-path-namespace-dropdown-breaks-past-container.yml deleted file mode 100644 index bed7fcf2651..00000000000 --- a/changelogs/unreleased/59189-long-names-in-project-path-namespace-dropdown-breaks-past-container.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prevent namespace dropdown in new project form from exceeding container -merge_request: 26343 -author: -type: fixed diff --git a/changelogs/unreleased/59273-update-fugit.yml b/changelogs/unreleased/59273-update-fugit.yml deleted file mode 100644 index 3a1c64d87ef..00000000000 --- a/changelogs/unreleased/59273-update-fugit.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update fugit which fixes a potential infinite loop -merge_request: 26579 -author: -type: fixed diff --git a/changelogs/unreleased/59296-add-filter-by-title-milestones-api.yml b/changelogs/unreleased/59296-add-filter-by-title-milestones-api.yml deleted file mode 100644 index 440b24a548c..00000000000 --- a/changelogs/unreleased/59296-add-filter-by-title-milestones-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add select by title to milestones API -merge_request: 26573 -author: -type: added diff --git a/changelogs/unreleased/59324-queries-which-return-multiple-series-are-not-working-correctly.yml b/changelogs/unreleased/59324-queries-which-return-multiple-series-are-not-working-correctly.yml deleted file mode 100644 index 9ab8d2b8596..00000000000 --- a/changelogs/unreleased/59324-queries-which-return-multiple-series-are-not-working-correctly.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix multiple series queries on metrics dashboard -merge_request: 26514 -author: -type: fixed diff --git a/changelogs/unreleased/59352-fix-mr-discussion-expansion.yml b/changelogs/unreleased/59352-fix-mr-discussion-expansion.yml deleted file mode 100644 index ab9ad53835c..00000000000 --- a/changelogs/unreleased/59352-fix-mr-discussion-expansion.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expand resolved discussion when linking to a comment in the discussion -merge_request: 26483 -author: -type: fixed diff --git a/changelogs/unreleased/59441-add-base-domain-to-cluster-api.yml b/changelogs/unreleased/59441-add-base-domain-to-cluster-api.yml deleted file mode 100644 index cb5cbba4e92..00000000000 --- a/changelogs/unreleased/59441-add-base-domain-to-cluster-api.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add cluster domain to Project Cluster API -merge_request: 26735 -author: -type: other diff --git a/changelogs/unreleased/59502-fix-breadcrumb-artifacts.yml b/changelogs/unreleased/59502-fix-breadcrumb-artifacts.yml deleted file mode 100644 index da65c3bc870..00000000000 --- a/changelogs/unreleased/59502-fix-breadcrumb-artifacts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes job link in artifacts page breadcrumb -merge_request: 26592 -author: -type: fixed diff --git a/changelogs/unreleased/59546-fix-error-handling-for-missing-domain.yml b/changelogs/unreleased/59546-fix-error-handling-for-missing-domain.yml deleted file mode 100644 index 8f0ce5d57c5..00000000000 --- a/changelogs/unreleased/59546-fix-error-handling-for-missing-domain.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix Auto DevOps missing domain error handling -merge_request: 26627 -author: -type: fixed diff --git a/changelogs/unreleased/59621-order-labels-alphabetically-in-issue-boards.yml b/changelogs/unreleased/59621-order-labels-alphabetically-in-issue-boards.yml deleted file mode 100644 index 8b82d757303..00000000000 --- a/changelogs/unreleased/59621-order-labels-alphabetically-in-issue-boards.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Order labels alphabetically in issue boards -merge_request: 26927 -author: -type: changed diff --git a/changelogs/unreleased/60006-add-touch-events-to-image-diff-26971.yml b/changelogs/unreleased/60006-add-touch-events-to-image-diff-26971.yml deleted file mode 100644 index bfea3ac52af..00000000000 --- a/changelogs/unreleased/60006-add-touch-events-to-image-diff-26971.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Make touch events work on image diff swipe view and onion skin" -merge_request: 26971 -author: ftab -type: added diff --git a/changelogs/unreleased/60068-avoid-null-domain-help-text.yml b/changelogs/unreleased/60068-avoid-null-domain-help-text.yml deleted file mode 100644 index 5305b8584a8..00000000000 --- a/changelogs/unreleased/60068-avoid-null-domain-help-text.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Do not display Ingress IP help text when there isn’t an Ingress IP assigned -merge_request: 27057 -author: -type: fixed diff --git a/changelogs/unreleased/60116-fix-button-wrapping.yml b/changelogs/unreleased/60116-fix-button-wrapping.yml deleted file mode 100644 index d6df920b51d..00000000000 --- a/changelogs/unreleased/60116-fix-button-wrapping.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add to white-space nowrap to all buttons -merge_request: 27069 -author: -type: fixed diff --git a/changelogs/unreleased/60149-nameerror-uninitialized-constant-sentry-client-sentryerror.yml b/changelogs/unreleased/60149-nameerror-uninitialized-constant-sentry-client-sentryerror.yml deleted file mode 100644 index 8c3a47cf62c..00000000000 --- a/changelogs/unreleased/60149-nameerror-uninitialized-constant-sentry-client-sentryerror.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Handle possible HTTP exception for Sentry client -merge_request: 27080 -author: -type: fixed diff --git a/changelogs/unreleased/60241-merge-request-popover-doesn-t-go-away-on-mouse-leave.yml b/changelogs/unreleased/60241-merge-request-popover-doesn-t-go-away-on-mouse-leave.yml deleted file mode 100644 index ce942777dca..00000000000 --- a/changelogs/unreleased/60241-merge-request-popover-doesn-t-go-away-on-mouse-leave.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix bug where MR popover doesn't go away on mouse leave -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/60304-long-file-names-in-mr-diffs-cause-horizontal-scrolling.yml b/changelogs/unreleased/60304-long-file-names-in-mr-diffs-cause-horizontal-scrolling.yml deleted file mode 100644 index ec5e9e4703b..00000000000 --- a/changelogs/unreleased/60304-long-file-names-in-mr-diffs-cause-horizontal-scrolling.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix long file header names bug in diffs -merge_request: 27233 -author: -type: fixed diff --git a/changelogs/unreleased/MaxWinterstein-master-patch-23232.yml b/changelogs/unreleased/MaxWinterstein-master-patch-23232.yml deleted file mode 100644 index 8fb9f1057fe..00000000000 --- a/changelogs/unreleased/MaxWinterstein-master-patch-23232.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Unify behaviour of 'Copy commit SHA to clipboard' to use full commit SHA. -merge_request: 25829 -author: Max Winterstein -type: changed diff --git a/changelogs/unreleased/_acet-related-mrs-widget-rewrite.yml b/changelogs/unreleased/_acet-related-mrs-widget-rewrite.yml deleted file mode 100644 index b773eb2720c..00000000000 --- a/changelogs/unreleased/_acet-related-mrs-widget-rewrite.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Rewrite related MRs widget with Vue -merge_request: 27027 -author: -type: other diff --git a/changelogs/unreleased/add-runner-access-level-registration.yml b/changelogs/unreleased/add-runner-access-level-registration.yml new file mode 100644 index 00000000000..7ae95025abb --- /dev/null +++ b/changelogs/unreleased/add-runner-access-level-registration.yml @@ -0,0 +1,5 @@ +--- +title: Add option to set access_level of runners upon registration +merge_request: 27490 +author: Zelin L +type: added diff --git a/changelogs/unreleased/add_backtrace_to_kubernetes_log.yml b/changelogs/unreleased/add_backtrace_to_kubernetes_log.yml deleted file mode 100644 index 26b8ac4b1ef..00000000000 --- a/changelogs/unreleased/add_backtrace_to_kubernetes_log.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show error backtrace when logging errors to kubernetes.log -merge_request: 25726 -author: -type: other diff --git a/changelogs/unreleased/allow-filtering-labels-by-a-single-character.yml b/changelogs/unreleased/allow-filtering-labels-by-a-single-character.yml deleted file mode 100644 index 31165bbadb7..00000000000 --- a/changelogs/unreleased/allow-filtering-labels-by-a-single-character.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow filtering labels list by one or two characters -merge_request: 26012 -author: -type: changed diff --git a/changelogs/unreleased/allow-ref-name-caching-projects-controller.yml b/changelogs/unreleased/allow-ref-name-caching-projects-controller.yml deleted file mode 100644 index 61236b9b82b..00000000000 --- a/changelogs/unreleased/allow-ref-name-caching-projects-controller.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Enable FindCommit caching for project and commits pages -merge_request: 27048 -author: -type: performance diff --git a/changelogs/unreleased/avoid_es_loading_project_ci_status.yml b/changelogs/unreleased/avoid_es_loading_project_ci_status.yml deleted file mode 100644 index 514909c730d..00000000000 --- a/changelogs/unreleased/avoid_es_loading_project_ci_status.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Avoid loading pipeline status in project search -merge_request: 26342 -author: -type: performance diff --git a/changelogs/unreleased/ce-56153-error-tracking-counts.yml b/changelogs/unreleased/ce-56153-error-tracking-counts.yml deleted file mode 100644 index fc3d8c01d7f..00000000000 --- a/changelogs/unreleased/ce-56153-error-tracking-counts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add usage counts for error tracking feature -merge_request: 25472 -author: -type: added diff --git a/changelogs/unreleased/ce-proj-settings-ok-avatar-only.yml b/changelogs/unreleased/ce-proj-settings-ok-avatar-only.yml deleted file mode 100644 index 10475824a75..00000000000 --- a/changelogs/unreleased/ce-proj-settings-ok-avatar-only.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Change project avatar remove button to a link -merge_request: 26589 -author: -type: other diff --git a/changelogs/unreleased/ce-proj-settings-ok-mr-settings-only.yml b/changelogs/unreleased/ce-proj-settings-ok-mr-settings-only.yml deleted file mode 100644 index 4bbbc706e62..00000000000 --- a/changelogs/unreleased/ce-proj-settings-ok-mr-settings-only.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Improve project merge request settings -merge_request: 26495 -author: -type: other diff --git a/changelogs/unreleased/check-mergeability-in-merge-to-ref-service.yml b/changelogs/unreleased/check-mergeability-in-merge-to-ref-service.yml deleted file mode 100644 index 9f615bbb54a..00000000000 --- a/changelogs/unreleased/check-mergeability-in-merge-to-ref-service.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Check mergeability in MergeToRefService -merge_request: 26757 -author: -type: changed diff --git a/changelogs/unreleased/create-label-and-list-checkbox.yml b/changelogs/unreleased/create-label-and-list-checkbox.yml deleted file mode 100644 index 330372df1be..00000000000 --- a/changelogs/unreleased/create-label-and-list-checkbox.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'Added "Add List" checkbox to create label dropdown to make creation of list optional' -merge_request: 25716 -author: Tucker Chapman -type: fixed diff --git a/changelogs/unreleased/delete-release-when-delete-tag.yml b/changelogs/unreleased/delete-release-when-delete-tag.yml deleted file mode 100644 index 58acd449bf1..00000000000 --- a/changelogs/unreleased/delete-release-when-delete-tag.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Releases will now be automatically deleted when deleting corresponding tag -merge_request: 26530 -author: -type: fixed diff --git a/changelogs/unreleased/deploy-keys-ext.yml b/changelogs/unreleased/deploy-keys-ext.yml deleted file mode 100644 index e1d2fe08425..00000000000 --- a/changelogs/unreleased/deploy-keys-ext.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize admin deploy keys strings -merge_request: -author: -type: other diff --git a/changelogs/unreleased/disallow-guests-to-access-releases.yml b/changelogs/unreleased/disallow-guests-to-access-releases.yml deleted file mode 100644 index f2d518108d2..00000000000 --- a/changelogs/unreleased/disallow-guests-to-access-releases.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Disallow guest users from accessing Releases -merge_request: -author: -type: security diff --git a/changelogs/unreleased/do-not-force-2fa.yml b/changelogs/unreleased/do-not-force-2fa.yml deleted file mode 100644 index f9be40e8f37..00000000000 --- a/changelogs/unreleased/do-not-force-2fa.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Add link on two-factor authorization settings page to leave group that enforces - two-factor authorization -merge_request: 25731 -author: -type: changed diff --git a/changelogs/unreleased/drop-usage-of-leagcy-artifacts.yml b/changelogs/unreleased/drop-usage-of-leagcy-artifacts.yml deleted file mode 100644 index d99187d8d41..00000000000 --- a/changelogs/unreleased/drop-usage-of-leagcy-artifacts.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Drop legacy artifacts usage as there are no leftovers -merge_request: 24294 -author: -type: performance diff --git a/changelogs/unreleased/duplicate-related-mrs.yml b/changelogs/unreleased/duplicate-related-mrs.yml deleted file mode 100644 index 0f5f6ede9f8..00000000000 --- a/changelogs/unreleased/duplicate-related-mrs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Remove duplicates from issue related merge requests -merge_request: 27067 -author: -type: fixed diff --git a/changelogs/unreleased/ekigbo-extend-timezone-dropdown.yml b/changelogs/unreleased/ekigbo-extend-timezone-dropdown.yml deleted file mode 100644 index 42bc320a542..00000000000 --- a/changelogs/unreleased/ekigbo-extend-timezone-dropdown.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Extend timezone dropdown -merge_request: 26311 -author: -type: changed diff --git a/changelogs/unreleased/expose-group-id-on-home-panel.yml b/changelogs/unreleased/expose-group-id-on-home-panel.yml deleted file mode 100644 index 1efe15a6e1a..00000000000 --- a/changelogs/unreleased/expose-group-id-on-home-panel.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expose group id on home panel -merge_request: 25897 -author: Peter Marko -type: added diff --git a/changelogs/unreleased/extend-cte-optimisations-to-projects.yml b/changelogs/unreleased/extend-cte-optimisations-to-projects.yml deleted file mode 100644 index e5407127b2f..00000000000 --- a/changelogs/unreleased/extend-cte-optimisations-to-projects.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Speed up filtering issues in a project when searching -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/feature-gb-serverless-switch-to-gitlabktl.yml b/changelogs/unreleased/feature-gb-serverless-switch-to-gitlabktl.yml deleted file mode 100644 index 81cf5cb810d..00000000000 --- a/changelogs/unreleased/feature-gb-serverless-switch-to-gitlabktl.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use gitlabktl to build and deploy GitLab Serverless Functions -merge_request: 26926 -author: -type: added diff --git a/changelogs/unreleased/feature-users-search-results.yml b/changelogs/unreleased/feature-users-search-results.yml deleted file mode 100644 index 151d08bce12..00000000000 --- a/changelogs/unreleased/feature-users-search-results.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add users search results to global search -merge_request: 21197 -author: Alexis Reigel -type: added diff --git a/changelogs/unreleased/feature-webide_escaping.yml b/changelogs/unreleased/feature-webide_escaping.yml deleted file mode 100644 index 88fa1bd948e..00000000000 --- a/changelogs/unreleased/feature-webide_escaping.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed bug with hashes in urls in WebIDE -merge_request: 54376 -author: Kieran Andrews -type: fixed diff --git a/changelogs/unreleased/filter-merge-requests-by-target-branch.yml b/changelogs/unreleased/filter-merge-requests-by-target-branch.yml deleted file mode 100644 index d0aba631c96..00000000000 --- a/changelogs/unreleased/filter-merge-requests-by-target-branch.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add target branch filter to merge requests search bar -merge_request: 24380 -author: Hiroyuki Sato -type: added diff --git a/changelogs/unreleased/fix-UI-links-to-route-map-info.yml b/changelogs/unreleased/fix-UI-links-to-route-map-info.yml deleted file mode 100644 index bb506507080..00000000000 --- a/changelogs/unreleased/fix-UI-links-to-route-map-info.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix UI anchor links after docs refactor -merge_request: 26890 -author: -type: fixed diff --git a/changelogs/unreleased/fix-container-scanning-on-k8s.yml b/changelogs/unreleased/fix-container-scanning-on-k8s.yml deleted file mode 100644 index f4500370a0b..00000000000 --- a/changelogs/unreleased/fix-container-scanning-on-k8s.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix Container Scanning in Kubernetes Runners -merge_request: 26793 -author: -type: changed diff --git a/changelogs/unreleased/fix-expand-full-file-on-image.yml b/changelogs/unreleased/fix-expand-full-file-on-image.yml deleted file mode 100644 index a88d30cfa38..00000000000 --- a/changelogs/unreleased/fix-expand-full-file-on-image.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed expand full file button showing on images -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/fix-hidden-statistics.yml b/changelogs/unreleased/fix-hidden-statistics.yml deleted file mode 100644 index 4d99bd00136..00000000000 --- a/changelogs/unreleased/fix-hidden-statistics.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Show statistics also when repository is disabled -merge_request: 26509 -author: Peter Marko -type: fixed diff --git a/changelogs/unreleased/fix-ide-web-worker-relative-url.yml b/changelogs/unreleased/fix-ide-web-worker-relative-url.yml deleted file mode 100644 index 2accad68c4e..00000000000 --- a/changelogs/unreleased/fix-ide-web-worker-relative-url.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed Web IDE web workers not working with relative URLs -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/fix-include-ci-yaml.yml b/changelogs/unreleased/fix-include-ci-yaml.yml deleted file mode 100644 index 042413b89aa..00000000000 --- a/changelogs/unreleased/fix-include-ci-yaml.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix single string values for the 'include' keyword validation of gitlab-ci.yml. -merge_request: 26998 -author: Paul Bonaud (@paulrbr) -type: fixed diff --git a/changelogs/unreleased/fix-issues-time-counter.yml b/changelogs/unreleased/fix-issues-time-counter.yml deleted file mode 100644 index 76f17063db5..00000000000 --- a/changelogs/unreleased/fix-issues-time-counter.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Make time counters show 'just now' for everything under one minute -merge_request: 25992 -author: Sergiu Marton -type: changed diff --git a/changelogs/unreleased/fix-merge-request-relations-with-pipeline-on-mwps.yml b/changelogs/unreleased/fix-merge-request-relations-with-pipeline-on-mwps.yml deleted file mode 100644 index 9ccc79109d8..00000000000 --- a/changelogs/unreleased/fix-merge-request-relations-with-pipeline-on-mwps.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix MWPS does not work for merge request pipelines -merge_request: 26906 -author: -type: fixed diff --git a/changelogs/unreleased/fix-new-merge-request-diff-headers-sticky-position.yml b/changelogs/unreleased/fix-new-merge-request-diff-headers-sticky-position.yml deleted file mode 100644 index dadbd5c940f..00000000000 --- a/changelogs/unreleased/fix-new-merge-request-diff-headers-sticky-position.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed sticky headers in merge request creation diffs -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/fix-pipeline-entity.yml b/changelogs/unreleased/fix-pipeline-entity.yml deleted file mode 100644 index b429139402c..00000000000 --- a/changelogs/unreleased/fix-pipeline-entity.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add merge request pipeline flag to pipeline entity -merge_request: 25846 -author: -type: added diff --git a/changelogs/unreleased/fix-review-app-env-url.yml b/changelogs/unreleased/fix-review-app-env-url.yml deleted file mode 100644 index 963cd0c2992..00000000000 --- a/changelogs/unreleased/fix-review-app-env-url.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixes long review app subdomains -merge_request: 25990 -author: walkafwalka -type: fixed diff --git a/changelogs/unreleased/fix-routes-n-plus-one-in-user-autocomplete.yml b/changelogs/unreleased/fix-routes-n-plus-one-in-user-autocomplete.yml deleted file mode 100644 index ae097e859d9..00000000000 --- a/changelogs/unreleased/fix-routes-n-plus-one-in-user-autocomplete.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix some N+1s in loading routes and counting members for groups in @-autocomplete -merge_request: 26491 -author: -type: performance diff --git a/changelogs/unreleased/fix-transfer-group-possibilities.yml b/changelogs/unreleased/fix-transfer-group-possibilities.yml deleted file mode 100644 index ebefb47b3da..00000000000 --- a/changelogs/unreleased/fix-transfer-group-possibilities.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix group transfer selection possibilities -merge_request: 26123 -author: Peter Marko -type: fixed diff --git a/changelogs/unreleased/fixed-duplicated-large-text-on-diffs.yml b/changelogs/unreleased/fixed-duplicated-large-text-on-diffs.yml deleted file mode 100644 index 770186a64b0..00000000000 --- a/changelogs/unreleased/fixed-duplicated-large-text-on-diffs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed duplicated diff too large error message -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/fixed-web-ide-merge-request-review.yml b/changelogs/unreleased/fixed-web-ide-merge-request-review.yml deleted file mode 100644 index 2799f5ee38a..00000000000 --- a/changelogs/unreleased/fixed-web-ide-merge-request-review.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fixed Web IDE not loading merge request files -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/gitaly-version-v1.29.0.yml b/changelogs/unreleased/gitaly-version-v1.29.0.yml deleted file mode 100644 index b6ce14c33a2..00000000000 --- a/changelogs/unreleased/gitaly-version-v1.29.0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade to Gitaly v1.29.0 -merge_request: 26406 -author: -type: changed diff --git a/changelogs/unreleased/gitaly-version-v1.32.0.yml b/changelogs/unreleased/gitaly-version-v1.32.0.yml deleted file mode 100644 index 8413f31278e..00000000000 --- a/changelogs/unreleased/gitaly-version-v1.32.0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade to Gitaly v1.32.0 -merge_request: 26989 -author: -type: changed diff --git a/changelogs/unreleased/gitaly-version-v1.33.0.yml b/changelogs/unreleased/gitaly-version-v1.33.0.yml deleted file mode 100644 index d21e521a0bb..00000000000 --- a/changelogs/unreleased/gitaly-version-v1.33.0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Upgrade to Gitaly v1.33.0 -merge_request: 27065 -author: -type: changed diff --git a/changelogs/unreleased/graphql-prometheus.yml b/changelogs/unreleased/graphql-prometheus.yml deleted file mode 100644 index 180577f3aec..00000000000 --- a/changelogs/unreleased/graphql-prometheus.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added prometheus monitoring to GraphQL -merge_request: -author: -type: added diff --git a/changelogs/unreleased/gt-externalize-app-views-projects-pipelines.yml b/changelogs/unreleased/gt-externalize-app-views-projects-pipelines.yml deleted file mode 100644 index 094cd3ab751..00000000000 --- a/changelogs/unreleased/gt-externalize-app-views-projects-pipelines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Externalize strings from `/app/views/projects/pipelines` -merge_request: 26035 -author: George Tsiolis -type: other diff --git a/changelogs/unreleased/id-51433-sort-wiki-by-date.yml b/changelogs/unreleased/id-51433-sort-wiki-by-date.yml deleted file mode 100644 index 86fcf195fa7..00000000000 --- a/changelogs/unreleased/id-51433-sort-wiki-by-date.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow to sort wiki pages by date and title -merge_request: 25365 -author: -type: added diff --git a/changelogs/unreleased/ide-fix-detect-mr-from-fork.yml b/changelogs/unreleased/ide-fix-detect-mr-from-fork.yml deleted file mode 100644 index 8f4f49896d7..00000000000 --- a/changelogs/unreleased/ide-fix-detect-mr-from-fork.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix IDE detection of MR from fork with same branch name -merge_request: 26986 -author: -type: fixed diff --git a/changelogs/unreleased/issue_58547.yml b/changelogs/unreleased/issue_58547.yml deleted file mode 100644 index 553c752e72d..00000000000 --- a/changelogs/unreleased/issue_58547.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add API access check to Graphql -merge_request: 26570 -author: -type: other diff --git a/changelogs/unreleased/jc-guard-against-empty-dereferenced_target.yml b/changelogs/unreleased/jc-guard-against-empty-dereferenced_target.yml deleted file mode 100644 index 94e5b4a81b7..00000000000 --- a/changelogs/unreleased/jc-guard-against-empty-dereferenced_target.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Guard against nil dereferenced_target -merge_request: 27192 -author: -type: fixed diff --git a/changelogs/unreleased/k8s_new_deployment_labels.yml b/changelogs/unreleased/k8s_new_deployment_labels.yml deleted file mode 100644 index e9ef3ee0082..00000000000 --- a/changelogs/unreleased/k8s_new_deployment_labels.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update deploy boards to additionally select on "app.gitlab.com" annotations -merge_request: 25623 -author: -type: changed diff --git a/changelogs/unreleased/knative-prometheus.yml b/changelogs/unreleased/knative-prometheus.yml deleted file mode 100644 index e24f53b7225..00000000000 --- a/changelogs/unreleased/knative-prometheus.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add Knative metrics to Prometheus -merge_request: 24663 -author: Chris Baumbauer <cab@cabnetworks.net> -type: added diff --git a/changelogs/unreleased/knative-update.yml b/changelogs/unreleased/knative-update.yml deleted file mode 100644 index e84940ae7e0..00000000000 --- a/changelogs/unreleased/knative-update.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Knative version bump 0.2.2 -> 0.3.0 -merge_request: 26459 -author: Chris Baumbauer -type: changed diff --git a/changelogs/unreleased/kube_helm_auto_devops_213.yml b/changelogs/unreleased/kube_helm_auto_devops_213.yml deleted file mode 100644 index 3c718d4a22c..00000000000 --- a/changelogs/unreleased/kube_helm_auto_devops_213.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Bump kubectl to 1.11.9 and Helm to 2.13.1 in Auto-DevOps.gitlab-ci.yml -merge_request: 26534 -author: -type: other diff --git a/changelogs/unreleased/limit-amount-of-created-pipelines.yml b/changelogs/unreleased/limit-amount-of-created-pipelines.yml deleted file mode 100644 index 51fdbb4d7ff..00000000000 --- a/changelogs/unreleased/limit-amount-of-created-pipelines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Process at most 4 pipelines during push -merge_request: 27205 -author: -type: performance diff --git a/changelogs/unreleased/localize-notification-dropdown.yml b/changelogs/unreleased/localize-notification-dropdown.yml deleted file mode 100644 index 9599aaf344b..00000000000 --- a/changelogs/unreleased/localize-notification-dropdown.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Localize notifications dropdown -merge_request: 26844 -author: -type: changed diff --git a/changelogs/unreleased/minimized-multiple-queries-ce.yml b/changelogs/unreleased/minimized-multiple-queries-ce.yml deleted file mode 100644 index d8c20d492d6..00000000000 --- a/changelogs/unreleased/minimized-multiple-queries-ce.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Support multiple queries per chart on metrics dash -merge_request: 25758 -author: -type: added diff --git a/changelogs/unreleased/move-allow-developers-to-create-projects-in-groups-to-core.yml b/changelogs/unreleased/move-allow-developers-to-create-projects-in-groups-to-core.yml deleted file mode 100644 index 34fd0c1b787..00000000000 --- a/changelogs/unreleased/move-allow-developers-to-create-projects-in-groups-to-core.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move allow developers to create projects in groups to Core -merge_request: 25975 -author: -type: added diff --git a/changelogs/unreleased/nfriend-css-updates-for-gitlab-design-system-compliance.yml b/changelogs/unreleased/nfriend-css-updates-for-gitlab-design-system-compliance.yml deleted file mode 100644 index 8cde0958f7a..00000000000 --- a/changelogs/unreleased/nfriend-css-updates-for-gitlab-design-system-compliance.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update `border-radius` of form controls and remove extra space above page titles -merge_request: 24497 -author: -type: fixed diff --git a/changelogs/unreleased/nfriend-update-job-detail-view-sidebar.yml b/changelogs/unreleased/nfriend-update-job-detail-view-sidebar.yml deleted file mode 100644 index 5364d29710a..00000000000 --- a/changelogs/unreleased/nfriend-update-job-detail-view-sidebar.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update job detail sidebar to accommodate post-merge pipeline information -merge_request: 25777 -author: -type: added diff --git a/changelogs/unreleased/nfriend-update-merge-request-widget-for-post-merge-pipelines.yml b/changelogs/unreleased/nfriend-update-merge-request-widget-for-post-merge-pipelines.yml deleted file mode 100644 index 420c8f2923c..00000000000 --- a/changelogs/unreleased/nfriend-update-merge-request-widget-for-post-merge-pipelines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add two new warning messages to the MR widget about merge request pipelines -merge_request: 25983 -author: -type: added diff --git a/changelogs/unreleased/nfriend-update-merge-request-widget-pipeline-block.yml b/changelogs/unreleased/nfriend-update-merge-request-widget-pipeline-block.yml deleted file mode 100644 index bd4120eb06f..00000000000 --- a/changelogs/unreleased/nfriend-update-merge-request-widget-pipeline-block.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Update pipeline block on merge request page to accommodate post-merge pipeline - information -merge_request: 25745 -author: -type: added diff --git a/changelogs/unreleased/nfriend-update-pipeline-detail-view.yml b/changelogs/unreleased/nfriend-update-pipeline-detail-view.yml deleted file mode 100644 index a24325c4eb6..00000000000 --- a/changelogs/unreleased/nfriend-update-pipeline-detail-view.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update pipeline detail view to accommodate post-merge pipelines -merge_request: 25775 -author: -type: added diff --git a/changelogs/unreleased/nfriend-update-pipeline-list-view.yml b/changelogs/unreleased/nfriend-update-pipeline-list-view.yml deleted file mode 100644 index 34e43162b5c..00000000000 --- a/changelogs/unreleased/nfriend-update-pipeline-list-view.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update pipeline list view to accommodate post-merge pipeline information -merge_request: 25690 -author: -type: added diff --git a/changelogs/unreleased/only-counted-active-milestones-as-started.yml b/changelogs/unreleased/only-counted-active-milestones-as-started.yml deleted file mode 100644 index 1a9c4b9023b..00000000000 --- a/changelogs/unreleased/only-counted-active-milestones-as-started.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Only consider active milestones when using the special Started milestone filter -merge_request: -author: -type: fixed diff --git a/changelogs/unreleased/osw-multi-line-suggestions-creation-strategy.yml b/changelogs/unreleased/osw-multi-line-suggestions-creation-strategy.yml deleted file mode 100644 index 01bd7ede270..00000000000 --- a/changelogs/unreleased/osw-multi-line-suggestions-creation-strategy.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Implements the creation strategy for multi-line suggestions -merge_request: 26057 -author: -type: changed diff --git a/changelogs/unreleased/osw-multi-line-suggestions-parsing.yml b/changelogs/unreleased/osw-multi-line-suggestions-parsing.yml deleted file mode 100644 index 985b01e9254..00000000000 --- a/changelogs/unreleased/osw-multi-line-suggestions-parsing.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Prepare multi-line suggestions for rendering in Markdown -merge_request: 26107 -author: -type: other diff --git a/changelogs/unreleased/osw-support-multi-line-suggestions.yml b/changelogs/unreleased/osw-support-multi-line-suggestions.yml deleted file mode 100644 index 8c8206c3822..00000000000 --- a/changelogs/unreleased/osw-support-multi-line-suggestions.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Support multi-line suggestions -merge_request: 25211 -author: -type: added diff --git a/changelogs/unreleased/persist-fulll-ref-path-for-mr-pipelines.yml b/changelogs/unreleased/persist-fulll-ref-path-for-mr-pipelines.yml deleted file mode 100644 index ca42a26e8ff..00000000000 --- a/changelogs/unreleased/persist-fulll-ref-path-for-mr-pipelines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Create MR pipelines with `refs/merge-requests/:iid/head` -merge_request: 25504 -author: -type: changed diff --git a/changelogs/unreleased/pravi-gitlab-ce-update-recaptcha.yml b/changelogs/unreleased/pravi-gitlab-ce-update-recaptcha.yml deleted file mode 100644 index 95379fb2ec1..00000000000 --- a/changelogs/unreleased/pravi-gitlab-ce-update-recaptcha.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Apply recaptcha API change in 4.0 -merge_request: 25921 -author: Praveen Arimbrathodiyil -type: other diff --git a/changelogs/unreleased/prevent-running-mr-pipelines-when-target-updated.yml b/changelogs/unreleased/prevent-running-mr-pipelines-when-target-updated.yml deleted file mode 100644 index d003ca55feb..00000000000 --- a/changelogs/unreleased/prevent-running-mr-pipelines-when-target-updated.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Create pipelines for merge requests only when source branch is updated -merge_request: 26921 -author: -type: fixed diff --git a/changelogs/unreleased/related-mr-link-cutoff.yml b/changelogs/unreleased/related-mr-link-cutoff.yml deleted file mode 100644 index 8cf77b6231a..00000000000 --- a/changelogs/unreleased/related-mr-link-cutoff.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Don't cutoff letters in MR and Issue links -merge_request: 25910 -author: gfyoung -type: fixed diff --git a/changelogs/unreleased/remove-ci-charts-undescriptive-header.yml b/changelogs/unreleased/remove-ci-charts-undescriptive-header.yml deleted file mode 100644 index 0e090592101..00000000000 --- a/changelogs/unreleased/remove-ci-charts-undescriptive-header.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Removes the undescriptive CI Charts header -merge_request: !26869 -author: -type: changed diff --git a/changelogs/unreleased/security-55503-fix-pdf-js-vulnerability.yml b/changelogs/unreleased/security-55503-fix-pdf-js-vulnerability.yml deleted file mode 100644 index e5d0cd4fee1..00000000000 --- a/changelogs/unreleased/security-55503-fix-pdf-js-vulnerability.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix PDF.js vulnerability -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-56224.yml b/changelogs/unreleased/security-56224.yml deleted file mode 100644 index a4e274e6ca5..00000000000 --- a/changelogs/unreleased/security-56224.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Hide "related branches" when user does not have permission -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-56927-xss-resolve-conflicts-branch-name.yml b/changelogs/unreleased/security-56927-xss-resolve-conflicts-branch-name.yml deleted file mode 100644 index f92d2c0dcb1..00000000000 --- a/changelogs/unreleased/security-56927-xss-resolve-conflicts-branch-name.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix XSS in resolve conflicts form -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-exif-migration.yml b/changelogs/unreleased/security-exif-migration.yml deleted file mode 100644 index cc529099df5..00000000000 --- a/changelogs/unreleased/security-exif-migration.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Added rake task for removing EXIF data from existing uploads. -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-id-potential-denial-languages.yml b/changelogs/unreleased/security-id-potential-denial-languages.yml deleted file mode 100644 index 2194ecb97dc..00000000000 --- a/changelogs/unreleased/security-id-potential-denial-languages.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Return cached languages if they've been detected before -merge_request: -author: -type: security diff --git a/changelogs/unreleased/security-mass-assignment-on-project-update.yml b/changelogs/unreleased/security-mass-assignment-on-project-update.yml deleted file mode 100644 index 93561cd91b3..00000000000 --- a/changelogs/unreleased/security-mass-assignment-on-project-update.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Disallow updating namespace when updating a project -merge_request: -author: -type: security diff --git a/changelogs/unreleased/sh-add-gitaly-duration-logs.yml b/changelogs/unreleased/sh-add-gitaly-duration-logs.yml deleted file mode 100644 index eea50384278..00000000000 --- a/changelogs/unreleased/sh-add-gitaly-duration-logs.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Log Gitaly RPC duration to api_json.log and production_json.log -merge_request: 26652 -author: -type: other diff --git a/changelogs/unreleased/sh-add-gitaly-ref-name-caching-tree-controller.yml b/changelogs/unreleased/sh-add-gitaly-ref-name-caching-tree-controller.yml deleted file mode 100644 index a051c1f70a8..00000000000 --- a/changelogs/unreleased/sh-add-gitaly-ref-name-caching-tree-controller.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Enable Gitaly FindCommit caching for TreeController -merge_request: 27100 -author: -type: performance diff --git a/changelogs/unreleased/sh-cache-pipeline-find-commits.yml b/changelogs/unreleased/sh-cache-pipeline-find-commits.yml deleted file mode 100644 index 2acf180d6fa..00000000000 --- a/changelogs/unreleased/sh-cache-pipeline-find-commits.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Cache FindCommit results in pipelines view -merge_request: 26776 -author: -type: performance diff --git a/changelogs/unreleased/sh-cache-root-ref-asymetrically.yml b/changelogs/unreleased/sh-cache-root-ref-asymetrically.yml deleted file mode 100644 index 106d070cc05..00000000000 --- a/changelogs/unreleased/sh-cache-root-ref-asymetrically.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Cache Repository#root_ref within a request -merge_request: 25903 -author: -type: performance diff --git a/changelogs/unreleased/sh-clear-pipeline-status-cache-upon-destroy.yml b/changelogs/unreleased/sh-clear-pipeline-status-cache-upon-destroy.yml deleted file mode 100644 index 55779f0f9d3..00000000000 --- a/changelogs/unreleased/sh-clear-pipeline-status-cache-upon-destroy.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Clear pipeline status cache after destruction of pipeline -merge_request: 26575 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-gitaly-find-commit-caching.yml b/changelogs/unreleased/sh-fix-gitaly-find-commit-caching.yml deleted file mode 100644 index 16d349c407c..00000000000 --- a/changelogs/unreleased/sh-fix-gitaly-find-commit-caching.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Allow ref name caching CommitService#find_commit -merge_request: 26248 -author: -type: performance diff --git a/changelogs/unreleased/sh-fix-issue-59065.yml b/changelogs/unreleased/sh-fix-issue-59065.yml deleted file mode 100644 index 41cd5ce0960..00000000000 --- a/changelogs/unreleased/sh-fix-issue-59065.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix Error 500 when user commits Wiki page with no commit message -merge_request: 26247 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-merge-requests-api-remove-branch-param.yml b/changelogs/unreleased/sh-fix-merge-requests-api-remove-branch-param.yml deleted file mode 100644 index d13c972ccc9..00000000000 --- a/changelogs/unreleased/sh-fix-merge-requests-api-remove-branch-param.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix remove_source_branch merge request API handling -merge_request: 27392 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-realtime-changes-with-reserved-words.yml b/changelogs/unreleased/sh-fix-realtime-changes-with-reserved-words.yml deleted file mode 100644 index 3d1501cd667..00000000000 --- a/changelogs/unreleased/sh-fix-realtime-changes-with-reserved-words.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix real-time updates for projects that contain a reserved word -merge_request: 27060 -author: -type: fixed diff --git a/changelogs/unreleased/sh-fix-ref-name-caching.yml b/changelogs/unreleased/sh-fix-ref-name-caching.yml deleted file mode 100644 index 6abd86688b4..00000000000 --- a/changelogs/unreleased/sh-fix-ref-name-caching.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix and expand Gitaly FindCommit caching -merge_request: 27018 -author: -type: performance diff --git a/changelogs/unreleased/sh-git-gc-after-initial-fetch.yml b/changelogs/unreleased/sh-git-gc-after-initial-fetch.yml deleted file mode 100644 index 867d7e6b9df..00000000000 --- a/changelogs/unreleased/sh-git-gc-after-initial-fetch.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 'GitHub import: Run housekeeping after initial import' -merge_request: 26600 -author: -type: performance diff --git a/changelogs/unreleased/sh-improve-find-commit-caching.yml b/changelogs/unreleased/sh-improve-find-commit-caching.yml deleted file mode 100644 index 1b38684d018..00000000000 --- a/changelogs/unreleased/sh-improve-find-commit-caching.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Expand FindCommit caching to blob and refs -merge_request: 27084 -author: -type: performance diff --git a/changelogs/unreleased/sh-reject-info-refs-head-requests.yml b/changelogs/unreleased/sh-reject-info-refs-head-requests.yml deleted file mode 100644 index 0dca18e2fd8..00000000000 --- a/changelogs/unreleased/sh-reject-info-refs-head-requests.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Reject HEAD requests to info/refs endpoint -merge_request: 26334 -author: -type: fixed diff --git a/changelogs/unreleased/sh-skip-sti-tables-reltuples.yml b/changelogs/unreleased/sh-skip-sti-tables-reltuples.yml deleted file mode 100644 index 5bf0ccf3e9d..00000000000 --- a/changelogs/unreleased/sh-skip-sti-tables-reltuples.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Fix counting of groups in admin dashboard -merge_request: 26009 -author: -type: fixed diff --git a/changelogs/unreleased/sh-update-rails-5-0-7-2.yml b/changelogs/unreleased/sh-update-rails-5-0-7-2.yml deleted file mode 100644 index b0bc08d4760..00000000000 --- a/changelogs/unreleased/sh-update-rails-5-0-7-2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update Rails to 5.0.7.2 -merge_request: 27022 -author: -type: security diff --git a/changelogs/unreleased/stop-signing-avatar-paths.yml b/changelogs/unreleased/stop-signing-avatar-paths.yml deleted file mode 100644 index 2c2493f0f21..00000000000 --- a/changelogs/unreleased/stop-signing-avatar-paths.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Speed up generation of avatar URLs when using object storage -merge_request: -author: -type: performance diff --git a/changelogs/unreleased/tpresa-add-highest-role-to-user.yml b/changelogs/unreleased/tpresa-add-highest-role-to-user.yml deleted file mode 100644 index 9714d8dcc99..00000000000 --- a/changelogs/unreleased/tpresa-add-highest-role-to-user.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Adding highest role property to admin's user details page -merge_request: -author: -type: added diff --git a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-3-0.yml b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-3-0.yml deleted file mode 100644 index 2e1adb1e1e9..00000000000 --- a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0-3-0.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update GitLab Runner Helm Chart to 0.3.0/11.9.0 -merge_request: 26467 -author: -type: other diff --git a/changelogs/unreleased/update-gitlab-shell.yml b/changelogs/unreleased/update-gitlab-shell.yml deleted file mode 100644 index 446a5fe1ea9..00000000000 --- a/changelogs/unreleased/update-gitlab-shell.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update GitLab Shell to v9.0.0 -merge_request: 27002 -author: -type: other diff --git a/changelogs/unreleased/update-rack-oauth2.yml b/changelogs/unreleased/update-rack-oauth2.yml deleted file mode 100644 index dc2e7017695..00000000000 --- a/changelogs/unreleased/update-rack-oauth2.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update rack-oauth2 1.2.1 -> 1.9.3 -merge_request: 17868 -author: -type: other diff --git a/changelogs/unreleased/update-workhorse-8-5-1.yml b/changelogs/unreleased/update-workhorse-8-5-1.yml deleted file mode 100644 index 18193701678..00000000000 --- a/changelogs/unreleased/update-workhorse-8-5-1.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Update GitLab Workhorse to v8.5.1 -merge_request: 27217 -author: -type: fixed diff --git a/changelogs/unreleased/use-only-all-pipelines.yml b/changelogs/unreleased/use-only-all-pipelines.yml deleted file mode 100644 index 68364d2a923..00000000000 --- a/changelogs/unreleased/use-only-all-pipelines.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Refactor all_pipelines in Merge request -merge_request: 25676 -author: -type: other diff --git a/changelogs/unreleased/use-untrusted-regexp.yml b/changelogs/unreleased/use-untrusted-regexp.yml deleted file mode 100644 index dd7f1bcaca1..00000000000 --- a/changelogs/unreleased/use-untrusted-regexp.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Use UntrustedRegexp for matching refs policy -merge_request: -author: -type: security diff --git a/changelogs/unreleased/winh-toggle-comment-draft.yml b/changelogs/unreleased/winh-toggle-comment-draft.yml deleted file mode 100644 index 6b4aad55a05..00000000000 --- a/changelogs/unreleased/winh-toggle-comment-draft.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Display draft when toggling replies -merge_request: 25563 -author: -type: fixed diff --git a/changelogs/unreleased/xanf-gitlab-ce-improve-project-overview.yml b/changelogs/unreleased/xanf-gitlab-ce-improve-project-overview.yml new file mode 100644 index 00000000000..9755540953a --- /dev/null +++ b/changelogs/unreleased/xanf-gitlab-ce-improve-project-overview.yml @@ -0,0 +1,5 @@ +--- +title: Improve icons and button order in project overview +merge_request: 26796 +author: +type: other diff --git a/changelogs/unreleased/xanf-gitlab-ce-move-project-tags.yml b/changelogs/unreleased/xanf-gitlab-ce-move-project-tags.yml deleted file mode 100644 index 124584c9bd4..00000000000 --- a/changelogs/unreleased/xanf-gitlab-ce-move-project-tags.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Move project tags to separate line -merge_request: 26797 -author: -type: other diff --git a/changelogs/unreleased/xanf-gitlab-ce-transfer-disables-js.yml b/changelogs/unreleased/xanf-gitlab-ce-transfer-disables-js.yml deleted file mode 100644 index 57c9a1aaa48..00000000000 --- a/changelogs/unreleased/xanf-gitlab-ce-transfer-disables-js.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Group transfer now properly redirects to edit on failure -merge_request: 26837 -author: -type: fixed diff --git a/config/prometheus/common_metrics.yml b/config/prometheus/common_metrics.yml index 356f573c5e9..3c67ca36791 100644 --- a/config/prometheus/common_metrics.yml +++ b/config/prometheus/common_metrics.yml @@ -1,42 +1,33 @@ - # NGINX Ingress metrics for pre-0.16.0 versions +dashboard: 'Environment metrics' +priority: 1 +panel_groups: +# NGINX Ingress metrics for pre-0.16.0 versions - group: Response metrics (NGINX Ingress VTS) priority: 10 - metrics: + panels: - title: "Throughput" + type: "area-chart" y_label: "Requests / Sec" - required_metrics: - - nginx_upstream_responses_total weight: 1 - queries: + metrics: - id: response_metrics_nginx_ingress_throughput_status_code query_range: 'sum(rate(nginx_upstream_responses_total{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) by (status_code)' unit: req / sec label: Status Code - series: - - label: status_code - when: - - value: 2xx - color: green - - value: 4xx - color: orange - - value: 5xx - color: red - title: "Latency" + type: "area-chart" y_label: "Latency (ms)" - required_metrics: - - nginx_upstream_response_msecs_avg weight: 1 - queries: + metrics: - id: response_metrics_nginx_ingress_latency_pod_average query_range: 'avg(nginx_upstream_response_msecs_avg{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"})' label: Pod average unit: ms - title: "HTTP Error Rate" + type: "area-chart" y_label: "HTTP Errors" - required_metrics: - - nginx_upstream_responses_total weight: 1 - queries: + metrics: - id: response_metrics_nginx_ingress_http_error_rate query_range: 'sum(rate(nginx_upstream_responses_total{status_code="5xx", upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) / sum(rate(nginx_upstream_responses_total{upstream=~"%{kube_namespace}-%{ci_environment_slug}-.*"}[2m])) * 100' label: 5xx Errors @@ -44,227 +35,179 @@ # NGINX Ingress metrics for post-0.16.0 versions - group: Response metrics (NGINX Ingress) priority: 10 - metrics: + panels: - title: "Throughput" + type: "area-chart" y_label: "Requests / Sec" - required_metrics: - - nginx_ingress_controller_requests weight: 1 - queries: + metrics: - id: response_metrics_nginx_ingress_16_throughput_status_code query_range: 'sum(label_replace(rate(nginx_ingress_controller_requests{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m]), "status_code", "${1}xx", "status", "(.)..")) by (status_code)' unit: req / sec label: Status Code - series: - - label: status_code - when: - - value: 2xx - color: green - - value: 3xx - color: blue - - value: 4xx - color: orange - - value: 5xx - color: red - title: "Latency" + type: "area-chart" y_label: "Latency (ms)" - required_metrics: - - nginx_ingress_controller_ingress_upstream_latency_seconds_sum weight: 1 - queries: + metrics: - id: response_metrics_nginx_ingress_16_latency_pod_average query_range: 'sum(rate(nginx_ingress_controller_ingress_upstream_latency_seconds_sum{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) / sum(rate(nginx_ingress_controller_ingress_upstream_latency_seconds_count{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) * 1000' label: Pod average unit: ms - title: "HTTP Error Rate" + type: "area-chart" y_label: "HTTP Errors" - required_metrics: - - nginx_ingress_controller_requests weight: 1 - queries: + metrics: - id: response_metrics_nginx_ingress_16_http_error_rate query_range: 'sum(rate(nginx_ingress_controller_requests{status=~"5.*",namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) / sum(rate(nginx_ingress_controller_requests{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) * 100' label: 5xx Errors unit: "%" - group: Response metrics (HA Proxy) priority: 10 - metrics: + panels: - title: "Throughput" + type: "area-chart" y_label: "Requests / Sec" - required_metrics: - - haproxy_frontend_http_requests_total weight: 1 - queries: + metrics: - id: response_metrics_ha_proxy_throughput_status_code query_range: 'sum(rate(haproxy_frontend_http_requests_total{%{environment_filter}}[2m])) by (code)' unit: req / sec label: Status Code - series: - - label: status_code - when: - - value: 2xx - color: green - - value: 4xx - color: yellow - - value: 5xx - color: red - title: "HTTP Error Rate" + type: "area-chart" y_label: "Error Rate (%)" - required_metrics: - - haproxy_frontend_http_responses_total weight: 1 - queries: + metrics: - id: response_metrics_ha_proxy_http_error_rate query_range: 'sum(rate(haproxy_frontend_http_responses_total{code="5xx",%{environment_filter}}[2m])) / sum(rate(haproxy_frontend_http_responses_total{%{environment_filter}}[2m]))' label: HTTP Errors unit: "%" - group: Response metrics (AWS ELB) priority: 10 - metrics: + panels: - title: "Throughput" + type: "area-chart" y_label: "Requests / Sec" - required_metrics: - - aws_elb_request_count_sum weight: 1 - queries: + metrics: - id: response_metrics_aws_elb_throughput_requests query_range: 'sum(aws_elb_request_count_sum{%{environment_filter}}) / 60' label: Total unit: req / sec - title: "Latency" + type: "area-chart" y_label: "Latency (ms)" - required_metrics: - - aws_elb_latency_average weight: 1 - queries: + metrics: - id: response_metrics_aws_elb_latency_average query_range: 'avg(aws_elb_latency_average{%{environment_filter}}) * 1000' label: Average unit: ms - title: "HTTP Error Rate" + type: "area-chart" y_label: "Error Rate (%)" - required_metrics: - - aws_elb_request_count_sum - - aws_elb_httpcode_backend_5_xx_sum weight: 1 - queries: + metrics: - id: response_metrics_aws_elb_http_error_rate query_range: 'sum(aws_elb_httpcode_backend_5_xx_sum{%{environment_filter}}) / sum(aws_elb_request_count_sum{%{environment_filter}})' label: HTTP Errors unit: "%" - group: Response metrics (NGINX) priority: 10 - metrics: + panels: - title: "Throughput" + type: "area-chart" y_label: "Requests / Sec" - required_metrics: - - nginx_server_requests weight: 1 - queries: + metrics: - id: response_metrics_nginx_throughput_status_code query_range: 'sum(rate(nginx_server_requests{server_zone!="*", server_zone!="_", %{environment_filter}}[2m])) by (code)' unit: req / sec label: Status Code - series: - - label: status_code - when: - - value: 2xx - color: green - - value: 4xx - color: orange - - value: 5xx - color: red - title: "Latency" + type: "area-chart" y_label: "Latency (ms)" - required_metrics: - - nginx_server_requestMsec weight: 1 - queries: + metrics: - id: response_metrics_nginx_latency query_range: 'avg(nginx_server_requestMsec{%{environment_filter}})' label: Upstream unit: ms - title: "HTTP Error Rate" + type: "area-chart" y_label: "HTTP 500 Errors / Sec" - required_metrics: - - nginx_server_requests weight: 1 - queries: + metrics: - id: response_metrics_nginx_http_error_rate query_range: 'sum(rate(nginx_server_requests{code="5xx", %{environment_filter}}[2m]))' label: HTTP Errors unit: "errors / sec" - group: System metrics (Kubernetes) priority: 5 - metrics: + panels: - title: "Memory Usage (Total)" + type: "area-chart" y_label: "Total Memory Used" - required_metrics: - - container_memory_usage_bytes weight: 4 - queries: + metrics: - id: system_metrics_kubernetes_container_memory_total query_range: 'avg(sum(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-(.*)",namespace="%{kube_namespace}"}) by (job)) without (job) /1024/1024/1024' label: Total unit: GB - title: "Core Usage (Total)" + type: "area-chart" y_label: "Total Cores" - required_metrics: - - container_cpu_usage_seconds_total weight: 3 - queries: + metrics: - id: system_metrics_kubernetes_container_cores_total query_range: 'avg(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-(.*)",namespace="%{kube_namespace}"}[15m])) by (job)) without (job)' label: Total unit: "cores" - title: "Memory Usage (Pod average)" + type: "area-chart" y_label: "Memory Used per Pod" - required_metrics: - - container_memory_usage_bytes weight: 2 - queries: + metrics: - id: system_metrics_kubernetes_container_memory_average query_range: 'avg(sum(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-(.*)",namespace="%{kube_namespace}"}) by (job)) without (job) / count(avg(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-(.*)",namespace="%{kube_namespace}"}) without (job)) /1024/1024' label: Pod average unit: MB - title: "Canary: Memory Usage (Pod Average)" + type: "area-chart" y_label: "Memory Used per Pod" - required_metrics: - - container_memory_usage_bytes weight: 2 - queries: + metrics: - id: system_metrics_kubernetes_container_memory_average_canary query_range: 'avg(sum(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-canary-(.*)",namespace="%{kube_namespace}"}) by (job)) without (job) / count(avg(container_memory_usage_bytes{container_name!="POD",pod_name=~"^%{ci_environment_slug}-canary-(.*)",namespace="%{kube_namespace}"}) without (job)) /1024/1024' label: Pod average unit: MB track: canary - title: "Core Usage (Pod Average)" + type: "area-chart" y_label: "Cores per Pod" - required_metrics: - - container_cpu_usage_seconds_total weight: 1 - queries: + metrics: - id: system_metrics_kubernetes_container_core_usage query_range: 'avg(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-(.*)",namespace="%{kube_namespace}"}[15m])) by (job)) without (job) / count(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-(.*)",namespace="%{kube_namespace}"}[15m])) by (pod_name))' label: Pod average unit: "cores" - title: "Canary: Core Usage (Pod Average)" + type: "area-chart" y_label: "Cores per Pod" - required_metrics: - - container_cpu_usage_seconds_total weight: 1 - queries: + metrics: - id: system_metrics_kubernetes_container_core_usage_canary query_range: 'avg(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-canary-(.*)",namespace="%{kube_namespace}"}[15m])) by (job)) without (job) / count(sum(rate(container_cpu_usage_seconds_total{container_name!="POD",pod_name=~"^%{ci_environment_slug}-canary-(.*)",namespace="%{kube_namespace}"}[15m])) by (pod_name))' label: Pod average unit: "cores" track: canary - title: "Knative function invocations" + type: "area-chart" y_label: "Invocations" - required_metrics: - - istio_revision_request_count weight: 1 - queries: + metrics: - id: system_metrics_knative_function_invocation_count query_range: 'floor(sum(rate(istio_revision_request_count{destination_configuration="%{function_name}", destination_namespace="%{kube_namespace}"}[1m])/3))' label: invocations / minute diff --git a/db/importers/common_metrics_importer.rb b/db/importers/common_metrics_importer.rb index deadd653ae9..195bde8f34a 100644 --- a/db/importers/common_metrics_importer.rb +++ b/db/importers/common_metrics_importer.rb @@ -53,7 +53,7 @@ module Importers private def process_content(&blk) - content.map do |group| + content['panel_groups'].map do |group| process_group(group, &blk) end end @@ -63,28 +63,28 @@ module Importers group: find_group_title_key(group['group']) } - group['metrics'].map do |metric| - process_metric(metric, attributes, &blk) + group['panels'].map do |panel| + process_panel(panel, attributes, &blk) end end - def process_metric(metric, attributes, &blk) + def process_panel(panel, attributes, &blk) attributes = attributes.merge( - title: metric['title'], - y_label: metric['y_label']) + title: panel['title'], + y_label: panel['y_label']) - metric['queries'].map do |query| - process_metric_query(query, attributes, &blk) + panel['metrics'].map do |metric_details| + process_metric_details(metric_details, attributes, &blk) end end - def process_metric_query(query, attributes, &blk) + def process_metric_details(metric_details, attributes, &blk) attributes = attributes.merge( - legend: query['label'], - query: query['query_range'], - unit: query['unit']) + legend: metric_details['label'], + query: metric_details['query_range'], + unit: metric_details['unit']) - yield(query['id'], attributes) + yield(metric_details['id'], attributes) end def find_or_build_metric!(id) diff --git a/doc/api/projects.md b/doc/api/projects.md index 0a950352ecf..951961e45ff 100644 --- a/doc/api/projects.md +++ b/doc/api/projects.md @@ -494,7 +494,9 @@ GET /projects/:id "name": "Diaspora", "path": "diaspora", "kind": "group", - "full_path": "diaspora" + "full_path": "diaspora", + "avatar_url": "http://localhost:3000/uploads/group/avatar/3/foo.jpg", + "web_url": "http://localhost:3000/groups/diaspora" }, "import_status": "none", "import_error": null, @@ -561,6 +563,8 @@ GET /projects/:id } ``` +**Note**: The `web_url` and `avatar_url` attributes on `namespace` were [introduced][ce-27427] in GitLab 11.11. + If the project is a fork, and you provide a valid token to authenticate, the `forked_from_project` field will appear in the response. @@ -1587,3 +1591,4 @@ GET /projects/:id/snapshot [eep]: https://about.gitlab.com/pricing/ "Available only in GitLab Premium" [ee-6137]: https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/6137 +[ce-27427]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/27427 diff --git a/doc/api/runners.md b/doc/api/runners.md index 46f7b1d2a25..2d91428d1c1 100644 --- a/doc/api/runners.md +++ b/doc/api/runners.md @@ -486,6 +486,7 @@ POST /runners | `locked` | boolean| no | Whether the Runner should be locked for current project | | `run_untagged` | boolean | no | Whether the Runner should handle untagged jobs | | `tag_list` | Array[String] | no | List of Runner's tags | +| `access_level` | string | no | The access_level of the runner; `not_protected` or `ref_protected` | | `maximum_timeout` | integer | no | Maximum timeout set when this Runner will handle the job | ``` diff --git a/doc/ci/examples/code_quality.md b/doc/ci/examples/code_quality.md index 3e7d6e7e3f7..186d4527bb6 100644 --- a/doc/ci/examples/code_quality.md +++ b/doc/ci/examples/code_quality.md @@ -1,7 +1,7 @@ # Analyze your project's Code Quality CAUTION: **Caution:** -The job definition shown below is supported on GitLab 11.5 and later versions. +The job definition shown below is supported on GitLab 11.11 and later versions. It also requires the GitLab Runner 11.5 or later. For earlier versions, use the [previous job definitions](#previous-job-definitions). @@ -11,27 +11,11 @@ and Docker. First, you need GitLab Runner with [docker-in-docker executor](../docker/using_docker_build.md#use-docker-in-docker-executor). -Once you set up the Runner, add a new job to `.gitlab-ci.yml` that -generates the expected report: +Once you set up the Runner, include the CodeQuality template in your CI config: ```yaml -code_quality: - image: docker:stable - variables: - DOCKER_DRIVER: overlay2 - allow_failure: true - services: - - docker:stable-dind - script: - - export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/') - - docker run - --env SOURCE_CODE="$PWD" - --volume "$PWD":/code - --volume /var/run/docker.sock:/var/run/docker.sock - "registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code - artifacts: - reports: - codequality: gl-code-quality-report.json +include: + - template: Code-Quality.gitlab-ci.yml ``` The above example will create a `code_quality` job in your CI/CD pipeline which @@ -54,6 +38,28 @@ While these old job definitions are still maintained they have been deprecated and may be removed in next major release, GitLab 12.0. You are advised to update your current `.gitlab-ci.yml` configuration to reflect that change. +For GitLab 11.5 and earlier, the job should look like: + +```yaml +code_quality: + image: docker:stable + variables: + DOCKER_DRIVER: overlay2 + allow_failure: true + services: + - docker:stable-dind + script: + - export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/') + - docker run + --env SOURCE_CODE="$PWD" + --volume "$PWD":/code + --volume /var/run/docker.sock:/var/run/docker.sock + "registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code + artifacts: + reports: + codequality: gl-code-quality-report.json +``` + For GitLab 11.4 and earlier, the job should look like: ```yaml diff --git a/doc/user/profile/account/delete_account.md b/doc/user/profile/account/delete_account.md index b497cc414af..0d7bbb0af79 100644 --- a/doc/user/profile/account/delete_account.md +++ b/doc/user/profile/account/delete_account.md @@ -14,7 +14,7 @@ Deleting a user will delete all projects in that user namespace. [GitLab 9.1][ce-10273], and from the API in [GitLab 9.3][ce-11853]. When a user account is deleted, not all associated records are deleted with it. -Here's a list of things that will not be deleted: +Here's a list of things that will **not** be deleted: - Issues that the user created - Merge requests that the user created diff --git a/doc/user/project/clusters/index.md b/doc/user/project/clusters/index.md index ccd60b9761f..0db95e5a64c 100644 --- a/doc/user/project/clusters/index.md +++ b/doc/user/project/clusters/index.md @@ -124,26 +124,26 @@ To add an existing Kubernetes cluster to your project: 1. Create a file called `gitlab-admin-service-account.yaml` with contents: - ```yaml - apiVersion: v1 - kind: ServiceAccount - metadata: - name: gitlab-admin - namespace: kube-system - --- - apiVersion: rbac.authorization.k8s.io/v1beta1 - kind: ClusterRoleBinding - metadata: - name: gitlab-admin - roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: cluster-admin - subjects: - - kind: ServiceAccount - name: gitlab-admin - namespace: kube-system - ``` + ```yaml + apiVersion: v1 + kind: ServiceAccount + metadata: + name: gitlab-admin + namespace: kube-system + --- + apiVersion: rbac.authorization.k8s.io/v1beta1 + kind: ClusterRoleBinding + metadata: + name: gitlab-admin + roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin + subjects: + - kind: ServiceAccount + name: gitlab-admin + namespace: kube-system + ``` 1. Apply the service account and cluster role binding to your cluster: diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 4bdac278add..ee8480122c4 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -922,7 +922,15 @@ module API end class NamespaceBasic < Grape::Entity - expose :id, :name, :path, :kind, :full_path, :parent_id + expose :id, :name, :path, :kind, :full_path, :parent_id, :avatar_url + + expose :web_url do |namespace| + if namespace.user? + Gitlab::Routing.url_helpers.user_url(namespace.owner) + else + namespace.web_url + end + end end class Namespace < NamespaceBasic diff --git a/lib/api/runner.rb b/lib/api/runner.rb index c60d25b88cb..ea36c24eca2 100644 --- a/lib/api/runner.rb +++ b/lib/api/runner.rb @@ -15,12 +15,14 @@ module API optional :info, type: Hash, desc: %q(Runner's metadata) optional :active, type: Boolean, desc: 'Should Runner be active' optional :locked, type: Boolean, desc: 'Should Runner be locked for current project' + optional :access_level, type: String, values: Ci::Runner.access_levels.keys, + desc: 'The access_level of the runner' optional :run_untagged, type: Boolean, desc: 'Should Runner handle untagged jobs' optional :tag_list, type: Array[String], desc: %q(List of Runner's tags) optional :maximum_timeout, type: Integer, desc: 'Maximum timeout set when this Runner will handle the job' end post '/' do - attributes = attributes_for_keys([:description, :active, :locked, :run_untagged, :tag_list, :maximum_timeout]) + attributes = attributes_for_keys([:description, :active, :locked, :run_untagged, :tag_list, :access_level, :maximum_timeout]) .merge(get_runner_details_from_request) attributes = diff --git a/lib/gitlab/graphql/authorize.rb b/lib/gitlab/graphql/authorize.rb index f62813db82c..f8d0208e275 100644 --- a/lib/gitlab/graphql/authorize.rb +++ b/lib/gitlab/graphql/authorize.rb @@ -8,7 +8,7 @@ module Gitlab extend ActiveSupport::Concern def self.use(schema_definition) - schema_definition.instrument(:field, Instrumentation.new) + schema_definition.instrument(:field, Instrumentation.new, after_built_ins: true) end end end diff --git a/lib/gitlab/graphql/authorize/authorize_field_service.rb b/lib/gitlab/graphql/authorize/authorize_field_service.rb index 8deff79fc84..03d6aabb0e3 100644 --- a/lib/gitlab/graphql/authorize/authorize_field_service.rb +++ b/lib/gitlab/graphql/authorize/authorize_field_service.rb @@ -15,15 +15,10 @@ module Gitlab def authorized_resolve proc do |parent_typed_object, args, ctx| - resolved_obj = @old_resolve_proc.call(parent_typed_object, args, ctx) - authorizing_obj = authorize_against(parent_typed_object) - checker = build_checker(ctx[:current_user], authorizing_obj) - - if resolved_obj.respond_to?(:then) - resolved_obj.then(&checker) - else - checker.call(resolved_obj) - end + resolved_type = @old_resolve_proc.call(parent_typed_object, args, ctx) + authorizing_object = authorize_against(parent_typed_object, resolved_type) + + filter_allowed(ctx[:current_user], resolved_type, authorizing_object) end end @@ -38,7 +33,7 @@ module Gitlab type = @field.type # When the return type of @field is a collection, find the singular type - if type.get_field('edges') + if @field.connection? type = node_type_for_relay_connection(type) elsif type.list? type = node_type_for_basic_connection(type) @@ -52,43 +47,60 @@ module Gitlab Array.wrap(@field.metadata[:authorize]) end - # If it's a built-in/scalar type, authorize using its parent object. - # nil means authorize using the resolved object - def authorize_against(parent_typed_object) - parent_typed_object.object if built_in_type? && parent_typed_object.respond_to?(:object) + def authorize_against(parent_typed_object, resolved_type) + if built_in_type? + # The field is a built-in/scalar type, or a list of scalars + # authorize using the parent's object + parent_typed_object.object + elsif resolved_type.respond_to?(:object) + # The field is a type representing a single object, we'll authorize + # against the object directly + resolved_type.object + elsif @field.connection? || resolved_type.is_a?(Array) + # The field is a connection or a list of non-built-in types, we'll + # authorize each element when rendering + nil + else + # Resolved type is a single object that might not be loaded yet by + # the batchloader, we'll authorize that + resolved_type + end end - def build_checker(current_user, authorizing_obj) - lambda do |resolved_obj| - # Load the elements if they were not loaded by BatchLoader yet - resolved_obj = resolved_obj.sync if resolved_obj.respond_to?(:sync) - - check = lambda do |object| - authorizations.all? do |ability| - Ability.allowed?(current_user, ability, authorizing_obj || object) - end + def filter_allowed(current_user, resolved_type, authorizing_object) + if authorizing_object + # Authorizing fields representing scalars, or a simple field with an object + resolved_type if allowed_access?(current_user, authorizing_object) + elsif @field.connection? + # A connection with pagination, modify the visible nodes in on the + # connection type in place + resolved_type.edge_nodes.to_a.keep_if { |node| allowed_access?(current_user, node) } + resolved_type + elsif resolved_type.is_a? Array + # A simple list of rendered types each object being an object to authorize + resolved_type.select do |single_object_type| + allowed_access?(current_user, single_object_type.object) end + elsif resolved_type.nil? + # We're not rendering anything, for example when a record was not found + # no need to do anything + else + raise "Can't authorize #{@field}" + end + end - case resolved_obj - when Array, ActiveRecord::Relation - resolved_obj.select(&check) - else - resolved_obj if check.call(resolved_obj) - end + def allowed_access?(current_user, object) + object = object.sync if object.respond_to?(:sync) + + authorizations.all? do |ability| + Ability.allowed?(current_user, ability, object) end end # Returns the singular type for relay connections. # This will be the type class of edges.node def node_type_for_relay_connection(type) - type = type.get_field('edges').type.unwrap.get_field('node')&.type - - if type.nil? - raise Gitlab::Graphql::Errors::ConnectionDefinitionError, - 'Connection Type must conform to the Relay Cursor Connections Specification' - end - - type + type.unwrap.get_field('edges').type.unwrap.get_field('node').type end # Returns the singular type for basic connections, for example `[Types::ProjectType]` diff --git a/lib/gitlab/graphql/connections/keyset_connection.rb b/lib/gitlab/graphql/connections/keyset_connection.rb index 851054c0393..715963a44c1 100644 --- a/lib/gitlab/graphql/connections/keyset_connection.rb +++ b/lib/gitlab/graphql/connections/keyset_connection.rb @@ -22,8 +22,17 @@ module Gitlab end # rubocop: enable CodeReuse/ActiveRecord - # rubocop: disable CodeReuse/ActiveRecord def paged_nodes + # These are the nodes that will be loaded into memory for rendering + # So we're ok loading them into memory here as that's bound to happen + # anyway. Having them ready means we can modify the result while + # rendering the fields. + @paged_nodes ||= load_paged_nodes.to_a + end + + private + + def load_paged_nodes if first && last raise Gitlab::Graphql::Errors::ArgumentError.new("Can only provide either `first` or `last`, not both") end @@ -31,12 +40,9 @@ module Gitlab if last sliced_nodes.last(limit_value) else - sliced_nodes.limit(limit_value) + sliced_nodes.limit(limit_value) # rubocop: disable CodeReuse/ActiveRecord end end - # rubocop: enable CodeReuse/ActiveRecord - - private def before_slice if sort_direction == :asc diff --git a/lib/gitlab/graphql/errors.rb b/lib/gitlab/graphql/errors.rb index bcbba72e017..fe74549e322 100644 --- a/lib/gitlab/graphql/errors.rb +++ b/lib/gitlab/graphql/errors.rb @@ -6,7 +6,6 @@ module Gitlab BaseError = Class.new(GraphQL::ExecutionError) ArgumentError = Class.new(BaseError) ResourceNotAvailable = Class.new(BaseError) - ConnectionDefinitionError = Class.new(BaseError) end end end diff --git a/lib/quality/kubernetes_client.rb b/lib/quality/kubernetes_client.rb index 2ff9e811425..190b48ba7cb 100644 --- a/lib/quality/kubernetes_client.rb +++ b/lib/quality/kubernetes_client.rb @@ -18,6 +18,8 @@ module Quality 'delete', 'ingress,svc,pdb,hpa,deploy,statefulset,job,pod,secret,configmap,pvc,secret,clusterrole,clusterrolebinding,role,rolebinding,sa', '--now', + '--ignore-not-found', + '--include-uninitialized', %(-l release="#{release_name}") ] diff --git a/scripts/review_apps/review-apps.sh b/scripts/review_apps/review-apps.sh index 51cfd145ba8..b55ce1af55e 100755 --- a/scripts/review_apps/review-apps.sh +++ b/scripts/review_apps/review-apps.sh @@ -68,7 +68,7 @@ function delete() { echoinfo "Deleting release '$name'..." true - helm delete --purge "$name" || true + helm delete --purge "$name" } function cleanup() { @@ -81,8 +81,8 @@ function cleanup() { kubectl -n "$KUBE_NAMESPACE" delete \ ingress,svc,pdb,hpa,deploy,statefulset,job,pod,secret,configmap,pvc,secret,clusterrole,clusterrolebinding,role,rolebinding,sa \ - -l release="$CI_ENVIRONMENT_SLUG" \ - || true + --now --ignore-not-found --include-uninitialized \ + -l release="$CI_ENVIRONMENT_SLUG" } function get_pod() { diff --git a/spec/db/importers/common_metrics_importer_spec.rb b/spec/db/importers/common_metrics_importer_spec.rb index 6133b17ac61..a717c8cd04d 100644 --- a/spec/db/importers/common_metrics_importer_spec.rb +++ b/spec/db/importers/common_metrics_importer_spec.rb @@ -23,10 +23,10 @@ describe Importers::CommonMetricsImporter do subject { described_class.new } context "does import common_metrics.yml" do - let(:groups) { subject.content } - let(:metrics) { groups.map { |group| group['metrics'] }.flatten } - let(:queries) { metrics.map { |group| group['queries'] }.flatten } - let(:query_ids) { queries.map { |query| query['id'] } } + let(:groups) { subject.content['panel_groups'] } + let(:panels) { groups.map { |group| group['panels'] }.flatten } + let(:metrics) { panels.map { |group| group['metrics'] }.flatten } + let(:metric_ids) { metrics.map { |metric| metric['id'] } } before do subject.execute @@ -36,20 +36,20 @@ describe Importers::CommonMetricsImporter do expect(PrometheusMetric.common.group(:group).count.count).to eq(groups.count) end - it "has the same amount of metrics" do - expect(PrometheusMetric.common.group(:group, :title).count.count).to eq(metrics.count) + it "has the same amount of panels" do + expect(PrometheusMetric.common.group(:group, :title).count.count).to eq(panels.count) end - it "has the same amount of queries" do - expect(PrometheusMetric.common.count).to eq(queries.count) + it "has the same amount of metrics" do + expect(PrometheusMetric.common.count).to eq(metrics.count) end it "does not have duplicate IDs" do - expect(query_ids).to eq(query_ids.uniq) + expect(metric_ids).to eq(metric_ids.uniq) end it "imports all IDs" do - expect(PrometheusMetric.common.pluck(:identifier)).to contain_exactly(*query_ids) + expect(PrometheusMetric.common.pluck(:identifier)).to contain_exactly(*metric_ids) end end @@ -65,24 +65,26 @@ describe Importers::CommonMetricsImporter do context 'does import properly all fields' do let(:query_identifier) { 'response-metric' } - let(:group) do + let(:dashboard) do { - group: 'Response metrics (NGINX Ingress)', - metrics: [{ - title: "Throughput", - y_label: "Requests / Sec", - queries: [{ - id: query_identifier, - query_range: 'my-query', - unit: 'my-unit', - label: 'status code' + panel_groups: [{ + group: 'Response metrics (NGINX Ingress)', + panels: [{ + title: "Throughput", + y_label: "Requests / Sec", + metrics: [{ + id: query_identifier, + query_range: 'my-query', + unit: 'my-unit', + label: 'status code' + }] }] }] } end before do - expect(subject).to receive(:content) { [group.deep_stringify_keys] } + expect(subject).to receive(:content) { dashboard.deep_stringify_keys } end shared_examples 'stores metric' do diff --git a/spec/features/projects/show/user_manages_notifications_spec.rb b/spec/features/projects/show/user_manages_notifications_spec.rb index 88f3397608f..e9dd1dc0f66 100644 --- a/spec/features/projects/show/user_manages_notifications_spec.rb +++ b/spec/features/projects/show/user_manages_notifications_spec.rb @@ -20,6 +20,16 @@ describe 'Projects > Show > User manages notifications', :js do click_notifications_button expect(find('.update-notification.is-active')).to have_content('On mention') + expect(find('.notifications-icon use')[:'xlink:href']).to end_with('#notifications') + end + + it 'changes the notification setting to disabled' do + click_notifications_button + click_link 'Disabled' + + wait_for_requests + + expect(find('.notifications-icon use')[:'xlink:href']).to end_with('#notifications-off') end context 'custom notification settings' do diff --git a/spec/graphql/features/authorization_spec.rb b/spec/graphql/features/authorization_spec.rb index 00e31568a9e..f5eb628a982 100644 --- a/spec/graphql/features/authorization_spec.rb +++ b/spec/graphql/features/authorization_spec.rb @@ -177,6 +177,7 @@ describe 'Gitlab::Graphql::Authorization' do describe 'type authorizations when applied to a relay connection' do let(:query_string) { '{ object() { edges { node { name } } } }' } + let(:second_test_object) { double(name: 'Second thing') } let(:type) do type_factory do |type| @@ -186,22 +187,41 @@ describe 'Gitlab::Graphql::Authorization' do let(:query_type) do query_factory do |query| - query.field :object, type.connection_type, null: true, resolve: ->(obj, args, ctx) { [test_object] } + query.field :object, type.connection_type, null: true, resolve: ->(obj, args, ctx) { [test_object, second_test_object] } end end subject { result.dig('object', 'edges') } - it 'returns the protected field when user has permission' do + it 'returns only the elements visible to the user' do permit(permission_single) - expect(subject).not_to be_empty + expect(subject.size).to eq 1 expect(subject.first['node']).to eq('name' => test_object.name) end it 'returns nil when user is not authorized' do expect(subject).to be_empty end + + describe 'limiting connections with multiple objects' do + let(:query_type) do + query_factory do |query| + query.field :object, type.connection_type, null: true, resolve: ->(obj, args, ctx) do + [test_object, second_test_object] + end + end + end + + let(:query_string) { '{ object(first: 1) { edges { node { name } } } }' } + + it 'only checks permissions for the first object' do + expect(Ability).to receive(:allowed?).with(user, permission_single, test_object) { true } + expect(Ability).not_to receive(:allowed?).with(user, permission_single, second_test_object) + + expect(subject.size).to eq(1) + end + end end describe 'type authorizations when applied to a basic connection' do @@ -222,28 +242,53 @@ describe 'Gitlab::Graphql::Authorization' do include_examples 'authorization with a single permission' end - describe 'when connections do not follow the correct specification' do - let(:query_string) { '{ object() { edges { node { name }} } }' } + describe 'Authorizations on active record relations' do + let!(:visible_project) { create(:project, :private) } + let!(:other_project) { create(:project, :private) } + let!(:visible_issues) { create_list(:issue, 2, project: visible_project) } + let!(:other_issues) { create_list(:issue, 2, project: other_project) } + let!(:user) { visible_project.owner } - let(:type) do - bad_node = type_factory do |type| - type.graphql_name 'BadNode' - type.field :bad_node, GraphQL::STRING_TYPE, null: true + let(:issue_type) do + type_factory do |type| + type.graphql_name 'FakeIssueType' + type.authorize :read_issue + type.field :id, GraphQL::ID_TYPE, null: false end - + end + let(:project_type) do |type| type_factory do |type| - type.field :edges, [bad_node], null: true + type.graphql_name 'FakeProjectType' + type.field :test_issues, issue_type.connection_type, null: false, resolve: -> (_, _, _) { Issue.where(project: [visible_project, other_project]) } end end - let(:query_type) do query_factory do |query| - query.field :object, type, null: true + query.field :test_project, project_type, null: false, resolve: -> (_, _, _) { visible_project } end end + let(:query_string) do + <<~QRY + { testProject { testIssues(first: 3) { edges { node { id } } } } } + QRY + end + + before do + allow(Ability).to receive(:allowed?).and_call_original + end + + it 'renders the issues the user has access to' do + issue_edges = result['testProject']['testIssues']['edges'] + issue_ids = issue_edges.map { |issue_edge| issue_edge['node']&.fetch('id') } + + expect(issue_edges.size).to eq(visible_issues.size) + expect(issue_ids).to eq(visible_issues.map { |i| i.id.to_s }) + end + + it 'does not check access on fields that will not be rendered' do + expect(Ability).not_to receive(:allowed?).with(user, :read_issue, other_issues.last) - it 'throws an error' do - expect { result }.to raise_error(Gitlab::Graphql::Errors::ConnectionDefinitionError) + result end end @@ -276,6 +321,8 @@ describe 'Gitlab::Graphql::Authorization' do def execute_query(query_type) schema = Class.new(GraphQL::Schema) do use Gitlab::Graphql::Authorize + use Gitlab::Graphql::Connections + query(query_type) end diff --git a/spec/graphql/gitlab_schema_spec.rb b/spec/graphql/gitlab_schema_spec.rb index 74e93b2c4df..05f10fb40f0 100644 --- a/spec/graphql/gitlab_schema_spec.rb +++ b/spec/graphql/gitlab_schema_spec.rb @@ -74,6 +74,6 @@ describe GitlabSchema do end def field_instrumenters - described_class.instrumenters[:field] + described_class.instrumenters[:field] + described_class.instrumenters[:field_after_built_ins] end end diff --git a/spec/javascripts/boards/board_list_common_spec.js b/spec/javascripts/boards/board_list_common_spec.js new file mode 100644 index 00000000000..cb337e4cc83 --- /dev/null +++ b/spec/javascripts/boards/board_list_common_spec.js @@ -0,0 +1,58 @@ +/* global List */ +/* global ListIssue */ + +import MockAdapter from 'axios-mock-adapter'; +import Vue from 'vue'; +import axios from '~/lib/utils/axios_utils'; +import Sortable from 'sortablejs'; +import BoardList from '~/boards/components/board_list.vue'; + +import '~/boards/models/issue'; +import '~/boards/models/list'; +import { listObj, boardsMockInterceptor, mockBoardService } from './mock_data'; +import boardsStore from '~/boards/stores/boards_store'; + +window.Sortable = Sortable; + +export default function createComponent({ done, listIssueProps = {}, componentProps = {} }) { + const el = document.createElement('div'); + + document.body.appendChild(el); + const mock = new MockAdapter(axios); + mock.onAny().reply(boardsMockInterceptor); + gl.boardService = mockBoardService(); + boardsStore.create(); + + const BoardListComp = Vue.extend(BoardList); + const list = new List(listObj); + const issue = new ListIssue({ + title: 'Testing', + id: 1, + iid: 1, + confidential: false, + labels: [], + assignees: [], + ...listIssueProps, + }); + list.issuesSize = 1; + list.issues.push(issue); + + const component = new BoardListComp({ + el, + propsData: { + disabled: false, + list, + issues: list.issues, + loading: false, + issueLinkBase: '/issues', + rootPath: '/', + ...componentProps, + }, + }).$mount(); + + Vue.nextTick(() => { + done(); + }); + + return { component, mock }; +} diff --git a/spec/javascripts/boards/board_list_spec.js b/spec/javascripts/boards/board_list_spec.js index 396fc823ef5..9c9b435d7fd 100644 --- a/spec/javascripts/boards/board_list_spec.js +++ b/spec/javascripts/boards/board_list_spec.js @@ -1,60 +1,13 @@ -/* global List */ -/* global ListIssue */ - import Vue from 'vue'; -import MockAdapter from 'axios-mock-adapter'; -import axios from '~/lib/utils/axios_utils'; -import Sortable from 'sortablejs'; -import BoardList from '~/boards/components/board_list.vue'; import eventHub from '~/boards/eventhub'; -import '~/boards/models/issue'; -import '~/boards/models/list'; -import boardsStore from '~/boards/stores/boards_store'; -import { listObj, boardsMockInterceptor, mockBoardService } from './mock_data'; - -window.Sortable = Sortable; +import createComponent from './board_list_common_spec'; describe('Board list component', () => { let mock; let component; beforeEach(done => { - const el = document.createElement('div'); - - document.body.appendChild(el); - mock = new MockAdapter(axios); - mock.onAny().reply(boardsMockInterceptor); - gl.boardService = mockBoardService(); - boardsStore.create(); - - const BoardListComp = Vue.extend(BoardList); - const list = new List(listObj); - const issue = new ListIssue({ - title: 'Testing', - id: 1, - iid: 1, - confidential: false, - labels: [], - assignees: [], - }); - list.issuesSize = 1; - list.issues.push(issue); - - component = new BoardListComp({ - el, - propsData: { - disabled: false, - list, - issues: list.issues, - loading: false, - issueLinkBase: '/issues', - rootPath: '/', - }, - }).$mount(); - - Vue.nextTick(() => { - done(); - }); + ({ mock, component } = createComponent({ done })); }); afterEach(() => { diff --git a/spec/lib/gitlab/graphql/authorize/authorize_field_service_spec.rb b/spec/lib/gitlab/graphql/authorize/authorize_field_service_spec.rb index 6114aca0616..95a4eb296fb 100644 --- a/spec/lib/gitlab/graphql/authorize/authorize_field_service_spec.rb +++ b/spec/lib/gitlab/graphql/authorize/authorize_field_service_spec.rb @@ -5,92 +5,104 @@ require 'spec_helper' # Also see spec/graphql/features/authorization_spec.rb for # integration tests of AuthorizeFieldService describe Gitlab::Graphql::Authorize::AuthorizeFieldService do - describe '#build_checker' do - let(:current_user) { double(:current_user) } - let(:abilities) { [double(:first_ability), double(:last_ability)] } - - context 'when authorizing against the object' do - let(:checker) do - service = described_class.new(double(resolve_proc: proc {})) - allow(service).to receive(:authorizations).and_return(abilities) - service.__send__(:build_checker, current_user, nil) - end + def type(type_authorizations = []) + Class.new(Types::BaseObject) do + graphql_name "TestType" - it 'returns a checker which checks for a single object' do - object = double(:object) + authorize type_authorizations + end + end - abilities.each do |ability| - spy_ability_check_for(ability, object, passed: true) - end + def type_with_field(field_type, field_authorizations = [], resolved_value = "Resolved value") + Class.new(Types::BaseObject) do + graphql_name "TestTypeWithField" + field :test_field, field_type, null: true, authorize: field_authorizations, resolve: -> (_, _, _) { resolved_value} + end + end - expect(checker.call(object)).to eq(object) - end + let(:current_user) { double(:current_user) } + subject(:service) { described_class.new(field) } - it 'returns a checker which checks for all objects' do - objects = [double(:first), double(:last)] + describe "#authorized_resolve" do + let(:presented_object) { double("presented object") } + let(:presented_type) { double("parent type", object: presented_object) } + subject(:resolved) { service.authorized_resolve.call(presented_type, {}, { current_user: current_user }) } - abilities.each do |ability| - objects.each do |object| - spy_ability_check_for(ability, object, passed: true) + context "scalar types" do + shared_examples "checking permissions on the presented object" do + it "checks the abilities on the object being presented and returns the value" do + expected_permissions.each do |permission| + spy_ability_check_for(permission, presented_object, passed: true) end + + expect(resolved).to eq("Resolved value") end - expect(checker.call(objects)).to eq(objects) + it "returns nil if the value wasn't authorized" do + allow(Ability).to receive(:allowed?).and_return false + + expect(resolved).to be_nil + end end - context 'when some objects would not pass the check' do - it 'returns nil when it is single object' do - disallowed = double(:object) + context "when the field is a scalar type" do + let(:field) { type_with_field(GraphQL::STRING_TYPE, :read_field).fields["testField"].to_graphql } + let(:expected_permissions) { [:read_field] } - spy_ability_check_for(abilities.first, disallowed, passed: false) + it_behaves_like "checking permissions on the presented object" + end - expect(checker.call(disallowed)).to be_nil - end + context "when the field is a list of scalar types" do + let(:field) { type_with_field([GraphQL::STRING_TYPE], :read_field).fields["testField"].to_graphql } + let(:expected_permissions) { [:read_field] } - it 'returns only objects which passed when there are more than one' do - allowed = double(:allowed) - disallowed = double(:disallowed) + it_behaves_like "checking permissions on the presented object" + end + end - spy_ability_check_for(abilities.first, disallowed, passed: false) + context "when the field is a specific type" do + let(:custom_type) { type(:read_type) } + let(:object_in_field) { double("presented in field") } + let(:field) { type_with_field(custom_type, :read_field, object_in_field).fields["testField"].to_graphql } - abilities.each do |ability| - spy_ability_check_for(ability, allowed, passed: true) - end + it "checks both field & type permissions" do + spy_ability_check_for(:read_field, object_in_field, passed: true) + spy_ability_check_for(:read_type, object_in_field, passed: true) - expect(checker.call([disallowed, allowed])).to contain_exactly(allowed) - end + expect(resolved).to eq(object_in_field) end - end - context 'when authorizing against another object' do - let(:authorizing_obj) { double(:object) } + it "returns nil if viewing was not allowed" do + spy_ability_check_for(:read_field, object_in_field, passed: false) + spy_ability_check_for(:read_type, object_in_field, passed: true) - let(:checker) do - service = described_class.new(double(resolve_proc: proc {})) - allow(service).to receive(:authorizations).and_return(abilities) - service.__send__(:build_checker, current_user, authorizing_obj) + expect(resolved).to be_nil end - it 'returns a checker which checks for a single object' do - object = double(:object) + context "when the field is a list" do + let(:object_1) { double("presented in field 1") } + let(:object_2) { double("presented in field 2") } + let(:presented_types) { [double(object: object_1), double(object: object_2)] } + let(:field) { type_with_field([custom_type], :read_field, presented_types).fields["testField"].to_graphql } - abilities.each do |ability| - spy_ability_check_for(ability, authorizing_obj, passed: true) + it "checks all permissions" do + allow(Ability).to receive(:allowed?) { true } + + spy_ability_check_for(:read_field, object_1, passed: true) + spy_ability_check_for(:read_type, object_1, passed: true) + spy_ability_check_for(:read_field, object_2, passed: true) + spy_ability_check_for(:read_type, object_2, passed: true) + + expect(resolved).to eq(presented_types) end - expect(checker.call(object)).to eq(object) - end + it "filters out objects that the user cannot see" do + allow(Ability).to receive(:allowed?) { true } - it 'returns a checker which checks for all objects' do - objects = [double(:first), double(:last)] + spy_ability_check_for(:read_type, object_1, passed: false) - abilities.each do |ability| - objects.each do |object| - spy_ability_check_for(ability, authorizing_obj, passed: true) - end + expect(resolved.map(&:object)).to contain_exactly(object_2) end - - expect(checker.call(objects)).to eq(objects) end end end diff --git a/spec/lib/gitlab/graphql/connections/keyset_connection_spec.rb b/spec/lib/gitlab/graphql/connections/keyset_connection_spec.rb index 9bcc1e78a78..fefa2881b18 100644 --- a/spec/lib/gitlab/graphql/connections/keyset_connection_spec.rb +++ b/spec/lib/gitlab/graphql/connections/keyset_connection_spec.rb @@ -85,6 +85,11 @@ describe Gitlab::Graphql::Connections::KeysetConnection do expect(subject.paged_nodes.size).to eq(3) end + it 'is a loaded memoized array' do + expect(subject.paged_nodes).to be_an(Array) + expect(subject.paged_nodes.object_id).to eq(subject.paged_nodes.object_id) + end + context 'when `first` is passed' do let(:arguments) { { first: 2 } } diff --git a/spec/lib/quality/kubernetes_client_spec.rb b/spec/lib/quality/kubernetes_client_spec.rb index f35d9464d48..4e77dcc97e6 100644 --- a/spec/lib/quality/kubernetes_client_spec.rb +++ b/spec/lib/quality/kubernetes_client_spec.rb @@ -13,7 +13,7 @@ RSpec.describe Quality::KubernetesClient do expect(Gitlab::Popen).to receive(:popen_with_detail) .with([%(kubectl --namespace "#{namespace}" delete ) \ 'ingress,svc,pdb,hpa,deploy,statefulset,job,pod,secret,configmap,pvc,secret,clusterrole,clusterrolebinding,role,rolebinding,sa ' \ - "--now -l release=\"#{release_name}\""]) + "--now --ignore-not-found --include-uninitialized -l release=\"#{release_name}\""]) .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: false))) expect { subject.cleanup(release_name: release_name) }.to raise_error(described_class::CommandFailedError) @@ -23,7 +23,7 @@ RSpec.describe Quality::KubernetesClient do expect(Gitlab::Popen).to receive(:popen_with_detail) .with([%(kubectl --namespace "#{namespace}" delete ) \ 'ingress,svc,pdb,hpa,deploy,statefulset,job,pod,secret,configmap,pvc,secret,clusterrole,clusterrolebinding,role,rolebinding,sa ' \ - "--now -l release=\"#{release_name}\""]) + "--now --ignore-not-found --include-uninitialized -l release=\"#{release_name}\""]) .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: true))) # We're not verifying the output here, just silencing it diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb index 66be192ab21..95b9bd4a4d9 100644 --- a/spec/models/ci/build_spec.rb +++ b/spec/models/ci/build_spec.rb @@ -31,6 +31,10 @@ describe Ci::Build do it { is_expected.to be_a(ArtifactMigratable) } + it_behaves_like 'UpdateProjectStatistics' do + subject { FactoryBot.build(:ci_build, pipeline: pipeline, artifacts_size: 23) } + end + describe 'associations' do it 'has a bidirectional relationship with projects' do expect(described_class.reflect_on_association(:project).has_inverse?).to eq(:builds) @@ -2119,54 +2123,6 @@ describe Ci::Build do end end - context 'when updating the build' do - let(:build) { create(:ci_build, artifacts_size: 23) } - - it 'updates project statistics' do - build.artifacts_size = 42 - - expect(build).to receive(:update_project_statistics_after_save).and_call_original - - expect { build.save! } - .to change { build.project.statistics.reload.build_artifacts_size } - .by(19) - end - - context 'when the artifact size stays the same' do - it 'does not update project statistics' do - build.name = 'changed' - - expect(build).not_to receive(:update_project_statistics_after_save) - - build.save! - end - end - end - - context 'when destroying the build' do - let!(:build) { create(:ci_build, artifacts_size: 23) } - - it 'updates project statistics' do - expect(ProjectStatistics) - .to receive(:increment_statistic) - .and_call_original - - expect { build.destroy! } - .to change { build.project.statistics.reload.build_artifacts_size } - .by(-23) - end - - context 'when the build is destroyed due to the project being destroyed' do - it 'does not update the project statistics' do - expect(ProjectStatistics) - .not_to receive(:increment_statistic) - - build.project.update(pending_delete: true) - build.project.destroy! - end - end - end - describe '#variables' do let(:container_registry_enabled) { false } diff --git a/spec/models/ci/job_artifact_spec.rb b/spec/models/ci/job_artifact_spec.rb index d7abd54eec1..5964f66c398 100644 --- a/spec/models/ci/job_artifact_spec.rb +++ b/spec/models/ci/job_artifact_spec.rb @@ -5,6 +5,10 @@ require 'spec_helper' describe Ci::JobArtifact do let(:artifact) { create(:ci_job_artifact, :archive) } + it_behaves_like 'UpdateProjectStatistics' do + subject { build(:ci_job_artifact, :archive, size: 106365) } + end + describe "Associations" do it { is_expected.to belong_to(:project) } it { is_expected.to belong_to(:job) } @@ -102,12 +106,6 @@ describe Ci::JobArtifact do it 'sets the size from the file size' do expect(artifact.size).to eq(106365) end - - it 'updates the project statistics' do - expect { artifact } - .to change { project.statistics.reload.build_artifacts_size } - .by(106365) - end end context 'updating the artifact file' do @@ -115,12 +113,6 @@ describe Ci::JobArtifact do artifact.update!(file: fixture_file_upload('spec/fixtures/dk.png')) expect(artifact.size).to eq(1062) end - - it 'updates the project statistics' do - expect { artifact.update!(file: fixture_file_upload('spec/fixtures/dk.png')) } - .to change { artifact.project.statistics.reload.build_artifacts_size } - .by(1062 - 106365) - end end describe 'validates file format' do @@ -259,34 +251,6 @@ describe Ci::JobArtifact do end end - context 'when destroying the artifact' do - let(:project) { create(:project, :repository) } - let(:pipeline) { create(:ci_pipeline, project: project) } - let!(:build) { create(:ci_build, :artifacts, pipeline: pipeline) } - - it 'updates the project statistics' do - artifact = build.job_artifacts.first - - expect(ProjectStatistics) - .to receive(:increment_statistic) - .and_call_original - - expect { artifact.destroy } - .to change { project.statistics.reload.build_artifacts_size } - .by(-106365) - end - - context 'when it is destroyed from the project level' do - it 'does not update the project statistics' do - expect(ProjectStatistics) - .not_to receive(:increment_statistic) - - project.update(pending_delete: true) - project.destroy! - end - end - end - describe 'file is being stored' do subject { create(:ci_job_artifact, :archive) } diff --git a/spec/models/namespace_spec.rb b/spec/models/namespace_spec.rb index 387d1221c76..95a4b0f6d71 100644 --- a/spec/models/namespace_spec.rb +++ b/spec/models/namespace_spec.rb @@ -63,6 +63,11 @@ describe Namespace do end end + describe 'delegate' do + it { is_expected.to delegate_method(:name).to(:owner).with_prefix.with_arguments(allow_nil: true) } + it { is_expected.to delegate_method(:avatar_url).to(:owner).with_arguments(allow_nil: true) } + end + describe "Respond to" do it { is_expected.to respond_to(:human_name) } it { is_expected.to respond_to(:to_param) } @@ -801,4 +806,21 @@ describe Namespace do end end end + + describe '#user?' do + subject { namespace.user? } + + context 'when type is a user' do + let(:user) { create(:user) } + let(:namespace) { user.namespace } + + it { is_expected.to be_truthy } + end + + context 'when type is a group' do + let(:namespace) { create(:group) } + + it { is_expected.to be_falsy } + end + end end diff --git a/spec/presenters/project_presenter_spec.rb b/spec/presenters/project_presenter_spec.rb index 456de5f1b9a..5bf80f6e318 100644 --- a/spec/presenters/project_presenter_spec.rb +++ b/spec/presenters/project_presenter_spec.rb @@ -411,4 +411,23 @@ describe ProjectPresenter do end end end + + describe '#statistics_buttons' do + let(:project) { build(:project) } + let(:presenter) { described_class.new(project, current_user: user) } + + it 'orders the items correctly' do + allow(project.repository).to receive(:readme).and_return(double(name: 'readme')) + allow(project.repository).to receive(:changelog).and_return(nil) + allow(project.repository).to receive(:contribution_guide).and_return(double(name: 'foo')) + allow(presenter).to receive(:filename_path).and_return('fake/path') + allow(presenter).to receive(:contribution_guide_path).and_return('fake_path') + + buttons = presenter.statistics_buttons(show_auto_devops_callout: false) + expect(buttons.map(&:label)).to start_with( + a_string_including('README'), + a_string_including('CONTRIBUTING') + ) + end + end end diff --git a/spec/requests/api/badges_spec.rb b/spec/requests/api/badges_spec.rb index 1271324a2ba..1dd0cb4817c 100644 --- a/spec/requests/api/badges_spec.rb +++ b/spec/requests/api/badges_spec.rb @@ -73,7 +73,7 @@ describe API::Badges do let(:badge) { source.badges.first } context "as a #{type}" do - it 'returns 200' do + it 'returns 200', :quarantine do user = public_send(type) get api("/#{source_type.pluralize}/#{source.id}/badges/#{badge.id}", user) @@ -193,7 +193,7 @@ describe API::Badges do end context 'when authenticated as a maintainer/owner' do - it 'updates the member' do + it 'updates the member', :quarantine do put api("/#{source_type.pluralize}/#{source.id}/badges/#{badge.id}", maintainer), params: { link_url: example_url, image_url: example_url2 } @@ -239,7 +239,7 @@ describe API::Badges do end end - context 'when authenticated as a maintainer/owner' do + context 'when authenticated as a maintainer/owner', :quarantine do it 'deletes the badge' do expect do delete api("/#{source_type.pluralize}/#{source.id}/badges/#{badge.id}", maintainer) diff --git a/spec/requests/api/graphql/project/issues_spec.rb b/spec/requests/api/graphql/project/issues_spec.rb index c2934430821..4f9f916f22e 100644 --- a/spec/requests/api/graphql/project/issues_spec.rb +++ b/spec/requests/api/graphql/project/issues_spec.rb @@ -7,8 +7,8 @@ describe 'getting an issue list for a project' do let(:current_user) { create(:user) } let(:issues_data) { graphql_data['project']['issues']['edges'] } let!(:issues) do - create(:issue, project: project, discussion_locked: true) - create(:issue, project: project) + [create(:issue, project: project, discussion_locked: true), + create(:issue, project: project)] end let(:fields) do <<~QUERY @@ -47,6 +47,30 @@ describe 'getting an issue list for a project' do expect(issues_data[1]['node']['discussionLocked']).to eq true end + context 'when limiting the number of results' do + let(:query) do + graphql_query_for( + 'project', + { 'fullPath' => project.full_path }, + "issues(first: 1) { #{fields} }" + ) + end + + it_behaves_like 'a working graphql query' do + before do + post_graphql(query, current_user: current_user) + end + end + + it "is expected to check permissions on the first issue only" do + allow(Ability).to receive(:allowed?).and_call_original + # Newest first, we only want to see the newest checked + expect(Ability).not_to receive(:allowed?).with(current_user, :read_issue, issues.first) + + post_graphql(query, current_user: current_user) + end + end + context 'when the user does not have access to the issue' do it 'returns nil' do project.project_feature.update!(issues_access_level: ProjectFeature::PRIVATE) diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index 352ea448c00..577f61ae8d0 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -1047,7 +1047,6 @@ describe API::Projects do expect(json_response['http_url_to_repo']).to be_present expect(json_response['web_url']).to be_present expect(json_response['owner']).to be_a Hash - expect(json_response['owner']).to be_a Hash expect(json_response['name']).to eq(project.name) expect(json_response['path']).to be_present expect(json_response['issues_enabled']).to be_present @@ -1135,7 +1134,9 @@ describe API::Projects do 'path' => user.namespace.path, 'kind' => user.namespace.kind, 'full_path' => user.namespace.full_path, - 'parent_id' => nil + 'parent_id' => nil, + 'avatar_url' => user.avatar_url, + 'web_url' => Gitlab::Routing.url_helpers.user_url(user) }) end @@ -1337,6 +1338,37 @@ describe API::Projects do end end end + + context 'when project belongs to a group namespace' do + let(:group) { create(:group, :with_avatar) } + let(:project) { create(:project, namespace: group) } + let!(:project_member) { create(:project_member, :developer, user: user, project: project) } + + it 'returns group web_url and avatar_url' do + get api("/projects/#{project.id}", user) + + expect(response).to have_gitlab_http_status(200) + + group_data = json_response['namespace'] + expect(group_data['web_url']).to eq(group.web_url) + expect(group_data['avatar_url']).to eq(group.avatar_url) + end + end + + context 'when project belongs to a user namespace' do + let(:user) { create(:user) } + let(:project) { create(:project, namespace: user.namespace) } + + it 'returns user web_url and avatar_url' do + get api("/projects/#{project.id}", user) + + expect(response).to have_gitlab_http_status(200) + + user_data = json_response['namespace'] + expect(user_data['web_url']).to eq("http://localhost/#{user.username}") + expect(user_data['avatar_url']).to eq(user.avatar_url) + end + end end context 'with external authorization' do diff --git a/spec/requests/api/runner_spec.rb b/spec/requests/api/runner_spec.rb index 3585a827838..29515709a74 100644 --- a/spec/requests/api/runner_spec.rb +++ b/spec/requests/api/runner_spec.rb @@ -168,6 +168,32 @@ describe API::Runner, :clean_gitlab_redis_shared_state do end end + context 'when access_level is provided for Runner' do + context 'when access_level is set to ref_protected' do + it 'creates runner' do + post api('/runners'), params: { + token: registration_token, + access_level: 'ref_protected' + } + + expect(response).to have_gitlab_http_status 201 + expect(Ci::Runner.first.ref_protected?).to be true + end + end + + context 'when access_level is set to not_protected' do + it 'creates runner' do + post api('/runners'), params: { + token: registration_token, + access_level: 'not_protected' + } + + expect(response).to have_gitlab_http_status 201 + expect(Ci::Runner.first.ref_protected?).to be false + end + end + end + context 'when maximum job timeout is specified' do it 'creates runner' do post api('/runners'), params: { diff --git a/spec/support/shared_examples/models/update_project_statistics_spec.rb b/spec/support/shared_examples/models/update_project_statistics_spec.rb new file mode 100644 index 00000000000..7a04e940ee5 --- /dev/null +++ b/spec/support/shared_examples/models/update_project_statistics_spec.rb @@ -0,0 +1,76 @@ +# frozen_string_literal: true + +require 'spec_helper' + +shared_examples_for 'UpdateProjectStatistics' do + let(:project) { subject.project } + let(:stat) { described_class.statistic_name } + let(:attribute) { described_class.statistic_attribute } + + def reload_stat + project.statistics.reload.send(stat).to_i + end + + def read_attribute + subject.read_attribute(attribute).to_i + end + + it { is_expected.to be_new_record } + + context 'when creating' do + it 'updates the project statistics' do + delta = read_attribute + + expect { subject.save! } + .to change { reload_stat } + .by(delta) + end + end + + context 'when updating' do + before do + subject.save! + end + + it 'updates project statistics' do + delta = 42 + + expect(ProjectStatistics) + .to receive(:increment_statistic) + .and_call_original + + subject.write_attribute(attribute, read_attribute + delta) + expect { subject.save! } + .to change { reload_stat } + .by(delta) + end + end + + context 'when destroying' do + before do + subject.save! + end + + it 'updates the project statistics' do + delta = -read_attribute + + expect(ProjectStatistics) + .to receive(:increment_statistic) + .and_call_original + + expect { subject.destroy } + .to change { reload_stat } + .by(delta) + end + + context 'when it is destroyed from the project level' do + it 'does not update the project statistics' do + expect(ProjectStatistics) + .not_to receive(:increment_statistic) + + project.update(pending_delete: true) + project.destroy! + end + end + end +end |