diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml index 29822e97adb..7b044ac4bfb 100644 --- a/.gitlab/ci/rules.gitlab-ci.yml +++ b/.gitlab/ci/rules.gitlab-ci.yml @@ -11,7 +11,7 @@ if: '$CI_PROJECT_NAME != "gitlab-foss" && $CI_PROJECT_NAME != "gitlab-ce" && $CI_PROJECT_NAME != "gitlabhq"' .if-default-refs: &if-default-refs - if: '$CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME =~ /^[\d-]+-stable(-ee)?$/ || $CI_COMMIT_REF_NAME =~ /^\d+-\d+-auto-deploy-\d+$/ || $CI_COMMIT_REF_NAME =~ /^security\// || $CI_MERGE_REQUEST_IID || $CI_COMMIT_TAG' + if: '$CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME =~ /^[\d-]+-stable(-ee)?$/ || $CI_COMMIT_REF_NAME =~ /^\d+-\d+-auto-deploy-\d+$/ || $CI_COMMIT_REF_NAME =~ /^security\// || $CI_MERGE_REQUEST_IID || $CI_COMMIT_TAG || $FORCE_GITLAB_CI' .if-master-refs: &if-master-refs if: '$CI_COMMIT_REF_NAME == "master"' diff --git a/app/assets/javascripts/vue_shared/components/resizable_chart/constants.js b/app/assets/javascripts/vue_shared/components/resizable_chart/constants.js new file mode 100644 index 00000000000..edc5ffb7b77 --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/resizable_chart/constants.js @@ -0,0 +1,6 @@ +export const DEFAULT_RX = 0.4; +export const DEFAULT_BAR_WIDTH = 6; +export const DEFAULT_LABEL_WIDTH = 4; +export const DEFAULT_LABEL_HEIGHT = 5; +export const BAR_HEIGHTS = [5, 7, 9, 14, 21, 35, 50, 80]; +export const GRID_YS = [30, 60, 90]; diff --git a/app/assets/javascripts/vue_shared/components/resizable_chart/skeleton_loader.vue b/app/assets/javascripts/vue_shared/components/resizable_chart/skeleton_loader.vue new file mode 100644 index 00000000000..306fa61780f --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/resizable_chart/skeleton_loader.vue @@ -0,0 +1,95 @@ + + diff --git a/app/assets/stylesheets/components/design_management/design.scss b/app/assets/stylesheets/components/design_management/design.scss index 380b2280490..77354456fe5 100644 --- a/app/assets/stylesheets/components/design_management/design.scss +++ b/app/assets/stylesheets/components/design_management/design.scss @@ -151,6 +151,7 @@ .design-dropzone-card { transition: border $general-hover-transition-duration $general-hover-transition-curve; + color: $gl-text-color; &:focus, &:active { diff --git a/app/assets/stylesheets/framework/forms.scss b/app/assets/stylesheets/framework/forms.scss index 44c8ace9040..eebd3ce654e 100644 --- a/app/assets/stylesheets/framework/forms.scss +++ b/app/assets/stylesheets/framework/forms.scss @@ -4,6 +4,8 @@ textarea { input { border-radius: $border-radius-base; + color: $gl-text-color; + background-color: $input-bg; } input[type='text'].danger { diff --git a/app/assets/stylesheets/framework/timeline.scss b/app/assets/stylesheets/framework/timeline.scss index ff6ac87db76..1504f3ee50f 100644 --- a/app/assets/stylesheets/framework/timeline.scss +++ b/app/assets/stylesheets/framework/timeline.scss @@ -27,7 +27,13 @@ .timeline-entry { color: $gl-text-color; - background-color: $white; + + // [dark-theme]: only give background color to actual notes + // in the timeline, the note form textarea has a background + // of it's own + &:not(.note-form) { + background-color: $white; + } .timeline-entry-inner { position: relative; diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss index 22cafc8d1fe..fc64dae14eb 100644 --- a/app/assets/stylesheets/framework/variables.scss +++ b/app/assets/stylesheets/framework/variables.scss @@ -479,9 +479,9 @@ $gl-btn-active-gradient: inset 0 2px 3px $gl-btn-active-background; $added: #63c363; $deleted: #f77; $line-added: #ecfdf0; -$line-added-dark: #c7f0d2; +$line-added-dark: #c7f0d2 !default; $line-removed: #fbe9eb; -$line-removed-dark: #fac5cd; +$line-removed-dark: #fac5cd !default; $line-number-old: #f9d7dc; $line-number-new: #ddfbe6; $line-number-select: #fbf2da; diff --git a/app/assets/stylesheets/framework/variables_overrides.scss b/app/assets/stylesheets/framework/variables_overrides.scss index c7a50bdb5a3..fc5a30a5d7b 100644 --- a/app/assets/stylesheets/framework/variables_overrides.scss +++ b/app/assets/stylesheets/framework/variables_overrides.scss @@ -14,7 +14,7 @@ $btn-line-height: 20px; $table-accent-bg: $gray-light; $table-border-color: $gray-200; $card-border-color: $border-color; -$card-cap-bg: $gray-light; +$card-cap-bg: $gray-light !default; $success: $green-500; $info: $blue-500; $warning: $orange-500; diff --git a/app/assets/stylesheets/pages/note_form.scss b/app/assets/stylesheets/pages/note_form.scss index 2334be02986..aebc5cb757a 100644 --- a/app/assets/stylesheets/pages/note_form.scss +++ b/app/assets/stylesheets/pages/note_form.scss @@ -62,7 +62,8 @@ background-color: $white; &.is-focused { - @extend .form-control:focus; + border-color: $input-focus-border-color; + box-shadow: $input-focus-box-shadow; .comment-toolbar, .nav-links { diff --git a/app/assets/stylesheets/themes/_dark.scss b/app/assets/stylesheets/themes/_dark.scss index 1cea469e206..e2b4d6b8e7a 100644 --- a/app/assets/stylesheets/themes/_dark.scss +++ b/app/assets/stylesheets/themes/_dark.scss @@ -103,6 +103,8 @@ $input-focus-bg: $gray-100; $input-color: $gray-900; $input-group-addon-bg: $gray-900; +$card-cap-bg: $gray-50; + $tooltip-bg: $gray-800; $tooltip-color: $gray-10; @@ -118,6 +120,11 @@ $issues-today-border: #333a40; $yiq-text-dark: $gray-50; $yiq-text-light: $gray-950; +// Commit Diff Colors +$line-added-dark: $green-200; +$line-removed-dark: $red-200; + +// Misc component overrides that should live elsewhere .gl-label { filter: brightness(0.9) contrast(1.1); } diff --git a/app/controllers/dashboard/projects_controller.rb b/app/controllers/dashboard/projects_controller.rb index b9200534dee..4028ea46406 100644 --- a/app/controllers/dashboard/projects_controller.rb +++ b/app/controllers/dashboard/projects_controller.rb @@ -3,7 +3,6 @@ class Dashboard::ProjectsController < Dashboard::ApplicationController include ParamsBackwardCompatibility include RendersMemberAccess - include OnboardingExperimentHelper include SortingHelper include SortingPreference include FiltersEvents diff --git a/app/graphql/types/alert_management/alert_sort_enum.rb b/app/graphql/types/alert_management/alert_sort_enum.rb index 3faac9ce53c..51e7bef0a7f 100644 --- a/app/graphql/types/alert_management/alert_sort_enum.rb +++ b/app/graphql/types/alert_management/alert_sort_enum.rb @@ -16,10 +16,10 @@ module Types value 'UPDATED_TIME_DESC', 'Created time by descending order', value: :updated_at_desc value 'EVENT_COUNT_ASC', 'Events count by ascending order', value: :event_count_asc value 'EVENT_COUNT_DESC', 'Events count by descending order', value: :event_count_desc - value 'SEVERITY_ASC', 'Severity by ascending order', value: :severity_asc - value 'SEVERITY_DESC', 'Severity by descending order', value: :severity_desc - value 'STATUS_ASC', 'Status by ascending order', value: :status_asc - value 'STATUS_DESC', 'Status by descending order', value: :status_desc + value 'SEVERITY_ASC', 'Severity from less critical to more critical', value: :severity_asc + value 'SEVERITY_DESC', 'Severity from more critical to less critical', value: :severity_desc + value 'STATUS_ASC', 'Status by order: Ignored > Resolved > Acknowledged > Triggered', value: :status_asc + value 'STATUS_DESC', 'Status by order: Triggered > Acknowledged > Resolved > Ignored', value: :status_desc end end end diff --git a/app/helpers/onboarding_experiment_helper.rb b/app/helpers/onboarding_experiment_helper.rb deleted file mode 100644 index 138fc60479d..00000000000 --- a/app/helpers/onboarding_experiment_helper.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -module OnboardingExperimentHelper - def allow_access_to_onboarding? - ::Gitlab.dev_env_or_com? && Feature.enabled?(:user_onboarding) - end -end - -OnboardingExperimentHelper.prepend_if_ee('EE::OnboardingExperimentHelper') diff --git a/app/models/alert_management/alert.rb b/app/models/alert_management/alert.rb index c897a777d2a..482531199d4 100644 --- a/app/models/alert_management/alert.rb +++ b/app/models/alert_management/alert.rb @@ -121,8 +121,16 @@ module AlertManagement scope :order_start_time, -> (sort_order) { order(started_at: sort_order) } scope :order_end_time, -> (sort_order) { order(ended_at: sort_order) } scope :order_event_count, -> (sort_order) { order(events: sort_order) } - scope :order_severity, -> (sort_order) { order(severity: sort_order) } - scope :order_status, -> (sort_order) { order(status: sort_order) } + + # Ascending sort order sorts severity from less critical to more critical. + # Descending sort order sorts severity from more critical to less critical. + # https://gitlab.com/gitlab-org/gitlab/-/issues/221242#what-is-the-expected-correct-behavior + scope :order_severity, -> (sort_order) { order(severity: sort_order == :asc ? :desc : :asc) } + + # Ascending sort order sorts statuses: Ignored > Resolved > Acknowledged > Triggered + # Descending sort order sorts statuses: Triggered > Acknowledged > Resolved > Ignored + # https://gitlab.com/gitlab-org/gitlab/-/issues/221242#what-is-the-expected-correct-behavior + scope :order_status, -> (sort_order) { order(status: sort_order == :asc ? :desc : :asc) } scope :counts_by_status, -> { group(:status).count } scope :counts_by_project_id, -> { group(:project_id).count } diff --git a/app/models/clusters/applications/runner.rb b/app/models/clusters/applications/runner.rb index e35c4b3b552..9ec7c194a26 100644 --- a/app/models/clusters/applications/runner.rb +++ b/app/models/clusters/applications/runner.rb @@ -3,7 +3,7 @@ module Clusters module Applications class Runner < ApplicationRecord - VERSION = '0.18.0' + VERSION = '0.18.1' self.table_name = 'clusters_applications_runners' diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index d4a56709edb..6a3fba93aea 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -107,6 +107,7 @@ class MergeRequest < ApplicationRecord after_create :ensure_merge_request_diff after_update :clear_memoized_shas + after_update :clear_memoized_source_branch_exists after_update :reload_diff_if_branch_changed after_commit :ensure_metrics, on: [:create, :update], unless: :importing? after_commit :expire_etag_cache, unless: :importing? @@ -862,6 +863,10 @@ class MergeRequest < ApplicationRecord clear_memoization(:target_branch_head) end + def clear_memoized_source_branch_exists + clear_memoization(:source_branch_exists) + end + def reload_diff_if_branch_changed if (saved_change_to_source_branch? || saved_change_to_target_branch?) && (source_branch_head && target_branch_head) @@ -1109,9 +1114,17 @@ class MergeRequest < ApplicationRecord end def source_branch_exists? - return false unless self.source_project + if Feature.enabled?(:memoize_source_branch_merge_request, project) + strong_memoize(:source_branch_exists) do + next false unless self.source_project - self.source_project.repository.branch_exists?(self.source_branch) + self.source_project.repository.branch_exists?(self.source_branch) + end + else + return false unless self.source_project + + self.source_project.repository.branch_exists?(self.source_branch) + end end def target_branch_exists? diff --git a/app/views/profiles/keys/_form.html.haml b/app/views/profiles/keys/_form.html.haml index d507f15ab4b..078b5907623 100644 --- a/app/views/profiles/keys/_form.html.haml +++ b/app/views/profiles/keys/_form.html.haml @@ -10,7 +10,7 @@ .col.form-group = f.label :title, _('Title'), class: 'label-bold' = f.text_field :title, class: "form-control input-lg qa-key-title-field", required: true, placeholder: s_('Profiles|e.g. My MacBook key') - %p.form-text.text-muted= s_('Profiles|Give your individual key a title') + %p.form-text.text-muted= s_('Profiles|Give your individual key a title. This will be publically visible.') .col.form-group = f.label :expires_at, s_('Profiles|Expires at'), class: 'label-bold' diff --git a/changelogs/unreleased/209786-improve-performance-of-diffs_batch-diffs-metadata-source-branch-ex.yml b/changelogs/unreleased/209786-improve-performance-of-diffs_batch-diffs-metadata-source-branch-ex.yml new file mode 100644 index 00000000000..215d64bbacb --- /dev/null +++ b/changelogs/unreleased/209786-improve-performance-of-diffs_batch-diffs-metadata-source-branch-ex.yml @@ -0,0 +1,5 @@ +--- +title: Further improve the performance for loading large diffs on a Merge request +merge_request: 34516 +author: +type: performance diff --git a/changelogs/unreleased/221242-change-alert-severity-and-status-sort-order.yml b/changelogs/unreleased/221242-change-alert-severity-and-status-sort-order.yml new file mode 100644 index 00000000000..5278ee53798 --- /dev/null +++ b/changelogs/unreleased/221242-change-alert-severity-and-status-sort-order.yml @@ -0,0 +1,5 @@ +--- +title: Change the sort order for alert severity and status. +merge_request: 35774 +author: +type: fixed diff --git a/changelogs/unreleased/25953-api-exposes-comment-field-of-user-uploaded-ssh-keys.yml b/changelogs/unreleased/25953-api-exposes-comment-field-of-user-uploaded-ssh-keys.yml new file mode 100644 index 00000000000..17e97151815 --- /dev/null +++ b/changelogs/unreleased/25953-api-exposes-comment-field-of-user-uploaded-ssh-keys.yml @@ -0,0 +1,5 @@ +--- +title: Add note about SSH key title being public information +merge_request: 35574 +author: +type: added diff --git a/changelogs/unreleased/psi-dark-mode-issue-fixes.yml b/changelogs/unreleased/psi-dark-mode-issue-fixes.yml new file mode 100644 index 00000000000..da513844bc4 --- /dev/null +++ b/changelogs/unreleased/psi-dark-mode-issue-fixes.yml @@ -0,0 +1,5 @@ +--- +title: Minor UI fixes for Issue page in dark mode +merge_request: 35395 +author: +type: fixed diff --git a/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0.18.1.yml b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0.18.1.yml new file mode 100644 index 00000000000..ee3f216ebcc --- /dev/null +++ b/changelogs/unreleased/update-gitlab-runner-helm-chart-to-0.18.1.yml @@ -0,0 +1,5 @@ +--- +title: Update GitLab Runner Helm Chart to 0.18.1 +merge_request: 35712 +author: +type: other diff --git a/doc/api/graphql/reference/gitlab_schema.graphql b/doc/api/graphql/reference/gitlab_schema.graphql index 70aab7a8c4c..04b84c6eb65 100644 --- a/doc/api/graphql/reference/gitlab_schema.graphql +++ b/doc/api/graphql/reference/gitlab_schema.graphql @@ -395,12 +395,12 @@ enum AlertManagementAlertSort { EVENT_COUNT_DESC """ - Severity by ascending order + Severity from less critical to more critical """ SEVERITY_ASC """ - Severity by descending order + Severity from more critical to less critical """ SEVERITY_DESC @@ -415,12 +415,12 @@ enum AlertManagementAlertSort { STARTED_AT_DESC """ - Status by ascending order + Status by order: Ignored > Resolved > Acknowledged > Triggered """ STATUS_ASC """ - Status by descending order + Status by order: Triggered > Acknowledged > Resolved > Ignored """ STATUS_DESC diff --git a/doc/api/graphql/reference/gitlab_schema.json b/doc/api/graphql/reference/gitlab_schema.json index cc75fbcf91d..ef35dd55883 100644 --- a/doc/api/graphql/reference/gitlab_schema.json +++ b/doc/api/graphql/reference/gitlab_schema.json @@ -1103,25 +1103,25 @@ }, { "name": "SEVERITY_ASC", - "description": "Severity by ascending order", + "description": "Severity from less critical to more critical", "isDeprecated": false, "deprecationReason": null }, { "name": "SEVERITY_DESC", - "description": "Severity by descending order", + "description": "Severity from more critical to less critical", "isDeprecated": false, "deprecationReason": null }, { "name": "STATUS_ASC", - "description": "Status by ascending order", + "description": "Status by order: Ignored > Resolved > Acknowledged > Triggered", "isDeprecated": false, "deprecationReason": null }, { "name": "STATUS_DESC", - "description": "Status by descending order", + "description": "Status by order: Triggered > Acknowledged > Resolved > Ignored", "isDeprecated": false, "deprecationReason": null } diff --git a/doc/development/telemetry/usage_ping.md b/doc/development/telemetry/usage_ping.md index c0bc986379c..7cb2eccd519 100644 --- a/doc/development/telemetry/usage_ping.md +++ b/doc/development/telemetry/usage_ping.md @@ -594,6 +594,7 @@ appear to be associated to any of the services running, since they all appear to | `ldap_enabled` | | | | | | | `mattermost_enabled` | | | | | | | `omniauth_enabled` | | | | | | +| `prometheus_enabled` | | | | | Whether the bundled Prometheus is enabled | | `prometheus_metrics_enabled` | | | | | | | `reply_by_email_enabled` | | | | | | | `average` | `avg_cycle_analytics - code` | | | | | @@ -671,6 +672,7 @@ appear to be associated to any of the services running, since they all appear to | `merge_requests_users` | `usage_activity_by_stage_monthly` | `create` | | | Unique count of users who used a merge request | | `duration_s` | `topology` | `enablement` | | | Time it took to collect topology data | | `application_requests_per_hour` | `topology` | `enablement` | | | Number of requests to the web application per hour | +| `failures` | `topology` | `enablement` | | | Contains information about failed queries | | `nodes` | `topology` | `enablement` | | | The list of server nodes on which GitLab components are running | | `node_memory_total_bytes` | `topology > nodes` | `enablement` | | | The total available memory of this node | | `node_cpus` | `topology > nodes` | `enablement` | | | The number of CPU cores of this node | @@ -723,6 +725,7 @@ The following is example content of the Usage Ping payload. "ldap_enabled": false, "mattermost_enabled": false, "omniauth_enabled": true, + "prometheus_enabled": false, "prometheus_metrics_enabled": false, "reply_by_email_enabled": "incoming+%{key}@incoming.gitlab.com", "signup_enabled": true, @@ -879,6 +882,7 @@ The following is example content of the Usage Ping payload. "topology": { "duration_s": 0.013836685999194742, "application_requests_per_hour": 4224, + "failures": [], "nodes": [ { "node_memory_total_bytes": 33269903360, diff --git a/doc/user/admin_area/credentials_inventory.md b/doc/user/admin_area/credentials_inventory.md index 46a3f2e8a36..9259c93cfa3 100644 --- a/doc/user/admin_area/credentials_inventory.md +++ b/doc/user/admin_area/credentials_inventory.md @@ -18,8 +18,8 @@ Using Credentials inventory, GitLab administrators can see all the personal acce - Who they belong to. - Their access scope. - Their usage pattern. -- When they expire. -- When they were revoked. +- When they expire. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/214809) in GitLab 13.2. +- When they were revoked. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/214809) in GitLab 13.2. To access the Credentials inventory, navigate to **Admin Area > Credentials**. diff --git a/doc/user/project/merge_requests/squash_and_merge.md b/doc/user/project/merge_requests/squash_and_merge.md index 924334055b9..398e14617fa 100644 --- a/doc/user/project/merge_requests/squash_and_merge.md +++ b/doc/user/project/merge_requests/squash_and_merge.md @@ -85,6 +85,60 @@ it. This is because squashing is only available when accepting a merge request, so a merge request may need to be rebased before squashing, even though squashing can itself be considered equivalent to rebasing. +## Squash Commits Options + +> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/17613) in GitLab 13.2. +> - It's deployed behind a feature flag, disabled by default. +> - It's disabled on GitLab.com. +> - It's not recommended for production use. +> - To use it in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-squash-commit-options-core-only). **(CORE ONLY)** + +With Squash Commits Options you can configure the behavior of Squash and Merge for your project. +To set it up, navigate to your project's **Settings > General** and expand **Merge requests**. +You will find the following options to choose, which will affect existing and new merge requests +submitted to your project: + +- **Do not allow**: users cannot use Squash and Merge to squash all the commits immediately before + merging. The checkbox to enable or disable it will be unchecked and hidden from the users. +- **Allow**: users will have the option to enable Squash and Merge on a merge request basis. + The checkbox will be unchecked (disabled) by default, but and the user is allowed to enable it. +- **Encourage**: users will have the option to enable Squash and Merge on a merge request basis. + The checkbox will be checked (enabled) by default to encourage its use, but the user is allowed to + disable it. +- **Require**: Squash and Merge is enabled for all merge requests, so it will always be performed. + The checkbox to enable or disable it will be checked and hidden from the users. + +The Squash and Merge checkbox is displayed when you create a merge request and when you edit the description of an existing one, except when Squash Commit Options is set to **Do not allow** or **Require**. + +NOTE: **Note:** +If your project is set to **Do not allow** Squash and Merge, the users still have the option to +squash commits locally through the command line and force-push to their remote branch before merging. + +### Enable or disable Squash Commit Options **(CORE ONLY)** + +Squash Commit Options is under development and not ready for production use. It is +deployed behind a feature flag that is **disabled by default**. +[GitLab administrators with access to the GitLab Rails console](../../../administration/feature_flags.md) +can enable it for your instance. Squash Commit Options can be enabled or disabled per-project. + +To enable it: + +```ruby +# Instance-wide +Feature.enable(:squash_options) +# or by project +Feature.enable(:squash_options, Project.find()) +``` + +To disable it: + +```ruby +# Instance-wide +Feature.enable(:squash_options) +# or by project +Feature.disable(:squash_options, Project.find()) +``` +