Commit 26342bf0 authored by Filipa Lacerda's avatar Filipa Lacerda

Merge branch 'master' into fl-eslint-vue-house-keeping

* master:
  Restoring user v3 endpoint
  Resolve "Use one column form layout on Admin Area Settings page"
  Resolve "Participants tooltip is cutoff when too close to the window edge"
  Fix group member filter layout
  Align nav bar items
  Fix labels too large
  Added with_statsoption for GET /projects/:id/repository/commits
  Fixed IDE jobs empty state showing when loading
  Fixes Microsoft Teams notifications for pipeline events
  Migrate compare_source_branch to use only Gitaly
  Clean up stale Prometheus metrics in before_exec unicorn hook
  Remove top padding from .col-form-label
parents b97e7cd3 4666ef68
......@@ -122,6 +122,7 @@ export default {
@scroll="scrollBuildLog"
>
<code
v-show="!detailJob.isLoading"
class="bash"
v-html="jobOutput"
>
......
......@@ -85,6 +85,8 @@ export default {
<template>
<img
v-tooltip
class="avatar"
data-boundary="window"
:class="{
lazy: lazy,
[avatarSizeClass]: true,
......
......@@ -94,6 +94,7 @@ hr {
}
.form-group.row .col-form-label {
padding-top: 0;
// Bootstrap 4 aligns labels to the left
// for horizontal forms
@include media-breakpoint-up(md) {
......
......@@ -268,6 +268,8 @@
.navbar-sub-nav,
.navbar-nav {
align-items: center;
> li {
> a:hover,
> a:focus {
......
......@@ -58,7 +58,7 @@
}
.color-label {
padding: $gl-padding-4 $grid-size;
padding: 0 $grid-size;
line-height: 16px;
border-radius: $label-border-radius;
color: $white-light;
......@@ -112,6 +112,10 @@
}
}
}
.color-label {
padding: $gl-padding-4 $grid-size;
}
}
.prioritized-labels {
......
......@@ -121,10 +121,6 @@
background: transparent;
border: 0;
outline: 0;
@include media-breakpoint-up(sm) {
right: 160px;
}
}
.flex-project-members-panel {
......
......@@ -26,13 +26,18 @@ module ChatMessage
end
end
def pretext
def summary
return message if markdown
format(message)
end
def pretext
summary
end
def fallback
format(message)
end
def attachments
......
......@@ -23,10 +23,6 @@ module ChatMessage
''
end
def fallback
format(message)
end
def attachments
return message if markdown
......
......@@ -44,7 +44,7 @@ class MicrosoftTeamsService < ChatNotificationService
def notify(message, opts)
MicrosoftTeams::Notifier.new(webhook).ping(
title: message.project_name,
pretext: message.pretext,
summary: message.summary,
activity: message.activity,
attachments: message.attachments
)
......
......@@ -2,9 +2,8 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
= f.label :admin_notification_email, 'Abuse reports notification email', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :admin_notification_email, 'Abuse reports notification email', class: 'label-light'
= f.text_field :admin_notification_email, class: 'form-control'
.form-text.text-muted
Abuse reports will be sent to this address if it is set. Abuse reports are always available in the admin area.
......
......@@ -2,35 +2,29 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :gravatar_enabled, class: 'form-check-input'
= f.label :gravatar_enabled, class: 'form-check-label' do
Gravatar enabled
.form-group.row
= f.label :default_projects_limit, class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :default_projects_limit, class: 'label-light'
= f.number_field :default_projects_limit, class: 'form-control'
.form-group.row
= f.label :max_attachment_size, 'Maximum attachment size (MB)', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :max_attachment_size, 'Maximum attachment size (MB)', class: 'label-light'
= f.number_field :max_attachment_size, class: 'form-control'
.form-group.row
= f.label :session_expire_delay, 'Session duration (minutes)', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :session_expire_delay, 'Session duration (minutes)', class: 'label-light'
= f.number_field :session_expire_delay, class: 'form-control'
%span.form-text.text-muted#session_expire_delay_help_block GitLab restart is required to apply changes
.form-group.row
= f.label :user_oauth_applications, 'User OAuth applications', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :user_oauth_applications, 'User OAuth applications', class: 'label-light'
.form-check
= f.check_box :user_oauth_applications, class: 'form-check-input'
= f.label :user_oauth_applications, class: 'form-check-label' do
Allow users to register any application to use GitLab as an OAuth provider
.form-group.row
= f.label :user_default_external, 'New users set to external', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :user_default_external, 'New users set to external', class: 'label-light'
.form-check
= f.check_box :user_default_external, class: 'form-check-input'
= f.label :user_default_external, class: 'form-check-label' do
......
......@@ -6,23 +6,20 @@
These settings require a
= link_to 'restart', help_page_path('administration/restart_gitlab')
to take effect.
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :sidekiq_throttling_enabled, class: 'form-check-input'
= f.label :sidekiq_throttling_enabled, class: 'form-check-label' do
Enable Sidekiq Job Throttling
.form-text.text-muted
Limit the amount of resources slow running jobs are assigned.
.form-group.row
= f.label :sidekiq_throttling_queues, 'Sidekiq queues to throttle', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :sidekiq_throttling_queues, 'Sidekiq queues to throttle', class: 'label-light'
= f.select :sidekiq_throttling_queues, sidekiq_queue_options_for_select, { include_hidden: false }, multiple: true, class: 'select2 select-wide', data: { field: 'sidekiq_throttling_queues' }
.form-text.text-muted
Choose which queues you wish to throttle.
.form-group.row
= f.label :sidekiq_throttling_factor, 'Throttling Factor', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :sidekiq_throttling_factor, 'Throttling Factor', class: 'label-light'
= f.number_field :sidekiq_throttling_factor, class: 'form-control', min: '0.01', max: '0.99', step: '0.01'
.form-text.text-muted
The factor by which the queues should be throttled. A value between 0.0 and 1.0, exclusive.
......
......@@ -2,8 +2,7 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :auto_devops_enabled, class: 'form-check-input'
= f.label :auto_devops_enabled, class: 'form-check-label' do
......@@ -11,33 +10,28 @@
.form-text.text-muted
It will automatically build, test, and deploy applications based on a predefined CI/CD configuration
= link_to icon('question-circle'), help_page_path('topics/autodevops/index.md')
.form-group.row
= f.label :auto_devops_domain, class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :auto_devops_domain, class: 'label-light'
= f.text_field :auto_devops_domain, class: 'form-control', placeholder: 'domain.com'
.form-text.text-muted
= s_("AdminSettings|Specify a domain to use by default for every project's Auto Review Apps and Auto Deploy stages.")
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :shared_runners_enabled, class: 'form-check-input'
= f.label :shared_runners_enabled, class: 'form-check-label' do
Enable shared runners for new projects
.form-group.row
= f.label :shared_runners_text, class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :shared_runners_text, class: 'label-light'
= f.text_area :shared_runners_text, class: 'form-control', rows: 4
.form-text.text-muted Markdown enabled
.form-group.row
= f.label :max_artifacts_size, 'Maximum artifacts size (MB)', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :max_artifacts_size, 'Maximum artifacts size (MB)', class: 'label-light'
= f.number_field :max_artifacts_size, class: 'form-control'
.form-text.text-muted
Set the maximum file size for each job's artifacts
= link_to icon('question-circle'), help_page_path('user/admin_area/settings/continuous_integration', anchor: 'maximum-artifacts-size')
.form-group.row
= f.label :default_artifacts_expire_in, 'Default artifacts expiration', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :default_artifacts_expire_in, 'Default artifacts expiration', class: 'label-light'
= f.text_field :default_artifacts_expire_in, class: 'form-control'
.form-text.text-muted
Set the default expiration time for each job's artifacts.
......
......@@ -2,8 +2,7 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :email_author_in_body, class: 'form-check-input'
= f.label :email_author_in_body, class: 'form-check-label' do
......@@ -12,8 +11,7 @@
Some email servers do not support overriding the email sender name.
Enable this option to include the name of the author of the issue,
merge request or comment in the email body instead.
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :html_emails_enabled, class: 'form-check-input'
= f.label :html_emails_enabled, class: 'form-check-label' do
......
......@@ -2,24 +2,21 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
= f.label :gitaly_timeout_default, 'Default Timeout Period', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :gitaly_timeout_default, 'Default Timeout Period', class: 'label-light'
= f.number_field :gitaly_timeout_default, class: 'form-control'
.form-text.text-muted
Timeout for Gitaly calls from the GitLab application (in seconds). This timeout is not enforced
for git fetch/push operations or Sidekiq jobs.
.form-group.row
= f.label :gitaly_timeout_fast, 'Fast Timeout Period', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :gitaly_timeout_fast, 'Fast Timeout Period', class: 'label-light'
= f.number_field :gitaly_timeout_fast, class: 'form-control'
.form-text.text-muted
Fast operation timeout (in seconds). Some Gitaly operations are expected to be fast.
If they exceed this threshold, there may be a problem with a storage shard and 'failing fast'
can help maintain the stability of the GitLab instance.
.form-group.row
= f.label :gitaly_timeout_medium, 'Medium Timeout Period', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :gitaly_timeout_medium, 'Medium Timeout Period', class: 'label-light'
= f.number_field :gitaly_timeout_medium, class: 'form-control'
.form-text.text-muted
Medium operation timeout (in seconds). This should be a value between the Fast and the Default timeout.
......
......@@ -2,20 +2,17 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
= f.label :help_page_text, class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :help_page_text, class: 'label-light'
= f.text_area :help_page_text, class: 'form-control', rows: 4
.form-text.text-muted Markdown enabled
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :help_page_hide_commercial_content, class: 'form-check-input'
= f.label :help_page_hide_commercial_content, class: 'form-check-label' do
Hide marketing-related entries from help
.form-group.row
= f.label :help_page_support_url, 'Support page URL', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :help_page_support_url, 'Support page URL', class: 'label-light'
= f.text_field :help_page_support_url, class: 'form-control', placeholder: 'http://company.example.com/getting-help', :'aria-describedby' => 'support_help_block'
%span.form-text.text-muted#support_help_block Alternate support URL for help page
......
......@@ -8,58 +8,50 @@
= link_to 'restart', help_page_path('administration/restart_gitlab')
to take effect.
= link_to icon('question-circle'), help_page_path('administration/monitoring/performance/introduction')
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :metrics_enabled, class: 'form-check-input'
= f.label :metrics_enabled, class: 'form-check-label' do
Enable InfluxDB Metrics
.form-group.row
= f.label :metrics_host, 'InfluxDB host', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :metrics_host, 'InfluxDB host', class: 'label-light'
= f.text_field :metrics_host, class: 'form-control', placeholder: 'influxdb.example.com'
.form-group.row
= f.label :metrics_port, 'InfluxDB port', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :metrics_port, 'InfluxDB port', class: 'label-light'
= f.text_field :metrics_port, class: 'form-control', placeholder: '8089'
.form-text.text-muted
The UDP port to use for connecting to InfluxDB. InfluxDB requires that
your server configuration specifies a database to store data in when
sending messages to this port, without it metrics data will not be
saved.
.form-group.row
= f.label :metrics_pool_size, 'Connection pool size', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :metrics_pool_size, 'Connection pool size', class: 'label-light'
= f.number_field :metrics_pool_size, class: 'form-control'
.form-text.text-muted
The amount of InfluxDB connections to open. Connections are opened
lazily. Users using multi-threaded application servers should ensure
enough connections are available (at minimum the amount of application
server threads).
.form-group.row
= f.label :metrics_timeout, 'Connection timeout', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :metrics_timeout, 'Connection timeout', class: 'label-light'
= f.number_field :metrics_timeout, class: 'form-control'
.form-text.text-muted
The amount of seconds after which an InfluxDB connection will time
out.
.form-group.row
= f.label :metrics_method_call_threshold, 'Method Call Threshold (ms)', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :metrics_method_call_threshold, 'Method Call Threshold (ms)', class: 'label-light'
= f.number_field :metrics_method_call_threshold, class: 'form-control'
.form-text.text-muted
A method call is only tracked when it takes longer to complete than
the given amount of milliseconds.
.form-group.row
= f.label :metrics_sample_interval, 'Sampler Interval (sec)', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :metrics_sample_interval, 'Sampler Interval (sec)', class: 'label-light'
= f.number_field :metrics_sample_interval, class: 'form-control'
.form-text.text-muted
The sampling interval in seconds. Sampled data includes memory usage,
retained Ruby objects, file descriptors and so on.
.form-group.row
= f.label :metrics_packet_size, 'Metrics per packet', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :metrics_packet_size, 'Metrics per packet', class: 'label-light'
= f.number_field :metrics_packet_size, class: 'form-control'
.form-text.text-muted
The amount of points to store in a single UDP packet. More points
......
......@@ -2,53 +2,44 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :throttle_unauthenticated_enabled, class: 'form-check-input'
= f.label :throttle_unauthenticated_enabled, class: 'form-check-label' do
Enable unauthenticated request rate limit
%span.form-text.text-muted
Helps reduce request volume (e.g. from crawlers or abusive bots)
.form-group.row
= f.label :throttle_unauthenticated_requests_per_period, 'Max requests per period per IP', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :throttle_unauthenticated_requests_per_period, 'Max requests per period per IP', class: 'label-light'
= f.number_field :throttle_unauthenticated_requests_per_period, class: 'form-control'
.form-group.row
= f.label :throttle_unauthenticated_period_in_seconds, 'Rate limit period in seconds', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :throttle_unauthenticated_period_in_seconds, 'Rate limit period in seconds', class: 'label-light'
= f.number_field :throttle_unauthenticated_period_in_seconds, class: 'form-control'
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :throttle_authenticated_api_enabled, class: 'form-check-input'
= f.label :throttle_authenticated_api_enabled, class: 'form-check-label' do
Enable authenticated API request rate limit
%span.form-text.text-muted
Helps reduce request volume (e.g. from crawlers or abusive bots)
.form-group.row
= f.label :throttle_authenticated_api_requests_per_period, 'Max requests per period per user', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :throttle_authenticated_api_requests_per_period, 'Max requests per period per user', class: 'label-light'
= f.number_field :throttle_authenticated_api_requests_per_period, class: 'form-control'
.form-group.row
= f.label :throttle_authenticated_api_period_in_seconds, 'Rate limit period in seconds', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :throttle_authenticated_api_period_in_seconds, 'Rate limit period in seconds', class: 'label-light'
= f.number_field :throttle_authenticated_api_period_in_seconds, class: 'form-control'
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :throttle_authenticated_web_enabled, class: 'form-check-input'
= f.label :throttle_authenticated_web_enabled, class: 'form-check-label' do
Enable authenticated web request rate limit
%span.form-text.text-muted
Helps reduce request volume (e.g. from crawlers or abusive bots)
.form-group.row
= f.label :throttle_authenticated_web_requests_per_period, 'Max requests per period per user', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :throttle_authenticated_web_requests_per_period, 'Max requests per period per user', class: 'label-light'
= f.number_field :throttle_authenticated_web_requests_per_period, class: 'form-control'
.form-group.row
= f.label :throttle_authenticated_web_period_in_seconds, 'Rate limit period in seconds', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :throttle_authenticated_web_period_in_seconds, 'Rate limit period in seconds', class: 'label-light'
= f.number_field :throttle_authenticated_web_period_in_seconds, class: 'form-control'
= f.submit 'Save changes', class: "btn btn-success"
......@@ -2,17 +2,15 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :koding_enabled, class: 'form-check-input'
= f.label :koding_enabled, class: 'form-check-label' do
Enable Koding
.form-text.text-muted
Koding integration has been deprecated since GitLab 10.0. If you disable your Koding integration, you will not be able to enable it again.
.form-group.row
= f.label :koding_url, 'Koding URL', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :koding_url, 'Koding URL', class: 'label-light'
= f.text_field :koding_url, class: 'form-control', placeholder: 'http://gitlab.your-koding-instance.com:8090'
.form-text.text-muted
Koding has integration enabled out of the box for the
......
......@@ -2,8 +2,7 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :sentry_enabled, class: 'form-check-input'
= f.label :sentry_enabled, class: 'form-check-label' do
......@@ -13,13 +12,11 @@
Sentry is an error reporting and logging tool which is currently not shipped with GitLab, get it here:
%a{ href: 'https://getsentry.com', target: '_blank', rel: 'noopener noreferrer' } https://getsentry.com
.form-group.row
= f.label :sentry_dsn, 'Sentry DSN', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :sentry_dsn, 'Sentry DSN', class: 'label-light'
= f.text_field :sentry_dsn, class: 'form-control'
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :clientside_sentry_enabled, class: 'form-check-input'
= f.label :clientside_sentry_enabled, class: 'form-check-label' do
......@@ -28,9 +25,8 @@
Sentry can also be used for reporting and logging clientside exceptions.
%a{ href: 'https://sentry.io/for/javascript/', target: '_blank', rel: 'noopener noreferrer' } https://sentry.io/for/javascript/
.form-group.row
= f.label :clientside_sentry_dsn, 'Clientside Sentry DSN', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :clientside_sentry_dsn, 'Clientside Sentry DSN', class: 'label-light'
= f.text_field :clientside_sentry_dsn, class: 'form-control'
= f.submit 'Save changes', class: "btn btn-success"
......@@ -2,8 +2,7 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :allow_local_requests_from_hooks_and_services, class: 'form-check-input'
= f.label :allow_local_requests_from_hooks_and_services, class: 'form-check-label' do
......
......@@ -2,13 +2,11 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
= f.label :max_pages_size, 'Maximum size of pages (MB)', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :max_pages_size, 'Maximum size of pages (MB)', class: 'label-light'
= f.number_field :max_pages_size, class: 'form-control'
.form-text.text-muted 0 for unlimited
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :pages_domain_verification_enabled, class: 'form-check-input'
= f.label :pages_domain_verification_enabled, class: 'form-check-label' do
......
......@@ -2,8 +2,7 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :authorized_keys_enabled, class: 'form-check-input'
= f.label :authorized_keys_enabled, class: 'form-check-label' do
......
......@@ -2,15 +2,13 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :performance_bar_enabled, class: 'form-check-input'
= f.label :performance_bar_enabled, class: 'form-check-label' do
Enable the Performance Bar
.form-group.row
= f.label :performance_bar_allowed_group_path, 'Allowed group', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :performance_bar_allowed_group_path, 'Allowed group', class: 'label-light'
= f.text_field :performance_bar_allowed_group_path, class: 'form-control', placeholder: 'my-org/my-group', value: @application_setting.performance_bar_allowed_group&.full_path
= f.submit 'Save changes', class: "btn btn-success"
......@@ -2,15 +2,13 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :plantuml_enabled, class: 'form-check-input'
= f.label :plantuml_enabled, class: 'form-check-label' do
Enable PlantUML
.form-group.row
= f.label :plantuml_url, 'PlantUML URL', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :plantuml_url, 'PlantUML URL', class: 'label-light'
= f.text_field :plantuml_url, class: 'form-control', placeholder: 'http://gitlab.your-plantuml-instance.com:8080'
.form-text.text-muted
Allow rendering of
......
......@@ -11,8 +11,7 @@
= link_to 'restart', help_page_path('administration/restart_gitlab')
to take effect.
= link_to icon('question-circle'), help_page_path('administration/monitoring/prometheus/index')
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :prometheus_metrics_enabled, class: 'form-check-input'
= f.label :prometheus_metrics_enabled, class: 'form-check-label' do
......
......@@ -2,9 +2,8 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
= f.label :polling_interval_multiplier, 'Polling interval multiplier', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :polling_interval_multiplier, 'Polling interval multiplier', class: 'label-light'
= f.text_field :polling_interval_multiplier, class: 'form-control'
.form-text.text-muted
Change this value to influence how frequently the GitLab UI polls for updates.
......
......@@ -2,9 +2,8 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
= f.label :container_registry_token_expire_delay, 'Authorization token duration (minutes)', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :container_registry_token_expire_delay, 'Authorization token duration (minutes)', class: 'label-light'
= f.number_field :container_registry_token_expire_delay, class: 'form-control'
= f.submit 'Save changes', class: "btn btn-success"
......@@ -4,8 +4,7 @@
%fieldset
.sub-section
%h4 Repository checks
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :repository_checks_enabled, class: 'form-check-input'
= f.label :repository_checks_enabled, class: 'form-check-label' do
......@@ -14,16 +13,14 @@
GitLab will periodically run
%a{ href: 'https://git-scm.com/docs/git-fsck', target: 'blank' } 'git fsck'
in all project and wiki repositories to look for silent disk corruption issues.
.form-group.row
.offset-sm-2.col-sm-10
.form-group
= link_to 'Clear all repository checks', clear_repository_check_states_admin_application_settings_path, data: { confirm: 'This will clear repository check states for ALL projects in the database. This cannot be undone. Are you sure?' }, method: :put, class: "btn btn-sm btn-remove"
.form-text.text-muted
If you got a lot of false alarms from repository checks you can choose to clear all repository check information from the database.
.sub-section
%h4 Housekeeping
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :housekeeping_enabled, class: 'form-check-input'
= f.label :housekeeping_enabled, class: 'form-check-label' do
......@@ -40,21 +37,18 @@
.form-text.text-muted
Creating pack file bitmaps makes housekeeping take a little longer but
bitmaps should accelerate 'git clone' performance.
.form-group.row
= f.label :housekeeping_incremental_repack_period, 'Incremental repack period', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :housekeeping_incremental_repack_period, 'Incremental repack period', class: 'label-light'
= f.number_field :housekeeping_incremental_repack_period, class: 'form-control'
.form-text.text-muted
Number of Git pushes after which an incremental 'git repack' is run.
.form-group.row
= f.label :housekeeping_full_repack_period, 'Full repack period', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :housekeeping_full_repack_period, 'Full repack period', class: 'label-light'
= f.number_field :housekeeping_full_repack_period, class: 'form-control'
.form-text.text-muted
Number of Git pushes after which a full 'git repack' is run.
.form-group.row
= f.label :housekeeping_gc_period, 'Git GC period', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :housekeeping_gc_period, 'Git GC period', class: 'label-light'
= f.number_field :housekeeping_gc_period, class: 'form-control'
.form-text.text-muted
Number of Git pushes after which 'git gc' is run.
......
......@@ -2,9 +2,8 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
= f.label :mirror_available, 'Enable mirror configuration', class: 'control-label col-sm-4'
.col-sm-8
.form-group
= f.label :mirror_available, 'Enable mirror configuration', class: 'label-light'
.form-check
= f.check_box :mirror_available, class: 'form-check-input'
= f.label :mirror_available, class: 'form-check-label' do
......
......@@ -3,8 +3,7 @@
%fieldset
.sub-section
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :hashed_storage_enabled, class: 'form-check-input'
= f.label :hashed_storage_enabled, class: 'form-check-label' do
......@@ -13,9 +12,8 @@
Enable immutable, hash-based paths and repository names to store repositories on disk. This prevents
repositories from having to be moved or renamed when the Project URL changes and may improve disk I/O performance.
%em (EXPERIMENTAL)
.form-group.row
= f.label :repository_storages, 'Storage paths for new projects', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :repository_storages, 'Storage paths for new projects', class: 'label-light'
= f.select :repository_storages, repository_storages_options_for_select(@application_setting.repository_storages),
{include_hidden: false}, multiple: true, class: 'form-control'
.form-text.text-muted
......@@ -24,33 +22,28 @@
= link_to "repository storages documentation", help_page_path("administration/repository_storage_paths")
.sub-section
%h4 Circuit breaker
.form-group.row
= f.label :circuitbreaker_check_interval, _('Check interval'), class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :circuitbreaker_check_interval, _('Check interval'), class: 'label-light'
= f.number_field :circuitbreaker_check_interval, class: 'form-control'
.form-text.text-muted
= circuitbreaker_check_interval_help_text
.form-group.row
= f.label :circuitbreaker_access_retries, _('Number of access attempts'), class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :circuitbreaker_access_retries, _('Number of access attempts'), class: 'label-light'
= f.number_field :circuitbreaker_access_retries, class: 'form-control'
.form-text.text-muted
= circuitbreaker_access_retries_help_text
.form-group.row
= f.label :circuitbreaker_storage_timeout, _('Seconds to wait for a storage access attempt'), class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :circuitbreaker_storage_timeout, _('Seconds to wait for a storage access attempt'), class: 'label-light'
= f.number_field :circuitbreaker_storage_timeout, class: 'form-control'
.form-text.text-muted
= circuitbreaker_storage_timeout_help_text
.form-group.row
= f.label :circuitbreaker_failure_count_threshold, _('Maximum git storage failures'), class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :circuitbreaker_failure_count_threshold, _('Maximum git storage failures'), class: 'label-light'
= f.number_field :circuitbreaker_failure_count_threshold, class: 'form-control'
.form-text.text-muted
= circuitbreaker_failure_count_help_text
.form-group.row
= f.label :circuitbreaker_failure_reset_time, _('Seconds before reseting failure information'), class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :circuitbreaker_failure_reset_time, _('Seconds before reseting failure information'), class: 'label-light'
= f.number_field :circuitbreaker_failure_reset_time, class: 'form-control'
.form-text.text-muted
= circuitbreaker_failure_reset_time_help_text
......
......@@ -2,16 +2,14 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :password_authentication_enabled_for_web, class: 'form-check-input'
= f.label :password_authentication_enabled_for_web, class: 'form-check-label' do
Password authentication enabled for web interface
.form-text.text-muted
When disabled, an external authentication provider must be used.
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :password_authentication_enabled_for_git, class: 'form-check-input'
= f.label :password_authentication_enabled_for_git, class: 'form-check-label' do
......@@ -22,38 +20,32 @@
or LDAP password
must be used to authenticate.
- if omniauth_enabled? && button_based_providers.any?
.form-group.row
= f.label :enabled_oauth_sign_in_sources, 'Enabled OAuth sign-in sources', class: 'col-form-label col-sm-2'
.form-group
= f.label :enabled_oauth_sign_in_sources, 'Enabled OAuth sign-in sources', class: 'label-light'
= hidden_field_tag 'application_setting[enabled_oauth_sign_in_sources][]'
.col-sm-10
.btn-group{ data: { toggle: 'buttons' } }
- oauth_providers_checkboxes.each do |source|
= source
.form-group.row
= f.label :two_factor_authentication, 'Two-factor authentication', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :two_factor_authentication, 'Two-factor authentication', class: 'label-light'
.form-check
= f.check_box :require_two_factor_authentication, class: 'form-check-input'
= f.label :require_two_factor_authentication, class: 'form-check-label' do
Require all users to setup Two-factor authentication
.form-group.row
= f.label :two_factor_authentication, 'Two-factor grace period (hours)', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :two_factor_authentication, 'Two-factor grace period (hours)', class: 'label-light'
= f.number_field :two_factor_grace_period, min: 0, class: 'form-control', placeholder: '0'
.form-text.text-muted Amount of time (in hours) that users are allowed to skip forced configuration of two-factor authentication
.form-group.row
= f.label :home_page_url, 'Home page URL', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :home_page_url, 'Home page URL', class: 'label-light'
= f.text_field :home_page_url, class: 'form-control', placeholder: 'http://company.example.com', :'aria-describedby' => 'home_help_block'
%span.form-text.text-muted#home_help_block We will redirect non-logged in users to this page
.form-group.row
= f.label :after_sign_out_path, class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :after_sign_out_path, class: 'label-light'
= f.text_field :after_sign_out_path, class: 'form-control', placeholder: 'http://company.example.com', :'aria-describedby' => 'after_sign_out_path_help_block'
%span.form-text.text-muted#after_sign_out_path_help_block We will redirect users to this page after they sign out
.form-group.row
= f.label :sign_in_text, class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :sign_in_text, class: 'label-light'
= f.text_area :sign_in_text, class: 'form-control', rows: 4
.form-text.text-muted Markdown enabled
......
......@@ -2,34 +2,29 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :signup_enabled, class: 'form-check-input'
= f.label :signup_enabled, class: 'form-check-label' do
Sign-up enabled
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :send_user_confirmation_email, class: 'form-check-input'
= f.label :send_user_confirmation_email, class: 'form-check-label' do
Send confirmation email on sign-up
.form-group.row
= f.label :domain_whitelist, 'Whitelisted domains for sign-ups', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :domain_whitelist, 'Whitelisted domains for sign-ups', class: 'label-light'
= f.text_area :domain_whitelist_raw, placeholder: 'domain.com', class: 'form-control', rows: 8
.form-text.text-muted ONLY users with e-mail addresses that match these domain(s) will be able to sign-up. Wildcards allowed. Use separate lines for multiple entries. Ex: domain.com, *.domain.com
.form-group.row
= f.label :domain_blacklist_enabled, 'Domain Blacklist', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :domain_blacklist_enabled, 'Domain Blacklist', class: 'label-light'
.form-check
= f.check_box :domain_blacklist_enabled, class: 'form-check-input'
= f.label :domain_blacklist_enabled, class: 'form-check-label' do
Enable domain blacklist for sign ups
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= radio_button_tag :blacklist_type, :file, class: 'form-check-input'
= radio_button_tag :blacklist_type, :file, false, class: 'form-check-input'
= label_tag :blacklist_type_file, class: 'form-check-label' do
.option-title
Upload blacklist file
......@@ -38,20 +33,17 @@
= label_tag :blacklist_type_raw, class: 'form-check-label' do
.option-title
Enter blacklist manually
.form-group.row.blacklist-file
= f.label :domain_blacklist_file, 'Blacklist file', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group.blacklist-file
= f.label :domain_blacklist_file, 'Blacklist file', class: 'label-light'
= f.file_field :domain_blacklist_file, class: 'form-control', accept: '.txt,.conf'
.form-text.text-muted Users with e-mail addresses that match these domain(s) will NOT be able to sign-up. Wildcards allowed. Use separate lines or commas for multiple entries.
.form-group.row.blacklist-raw
= f.label :domain_blacklist, 'Blacklisted domains for sign-ups', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group.blacklist-raw
= f.label :domain_blacklist, 'Blacklisted domains for sign-ups', class: 'label-light'
= f.text_area :domain_blacklist_raw, placeholder: 'domain.com', class: 'form-control', rows: 8
.form-text.text-muted Users with e-mail addresses that match these domain(s) will NOT be able to sign-up. Wildcards allowed. Use separate lines for multiple entries. Ex: domain.com, *.domain.com
.form-group.row
= f.label :after_sign_up_text, class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :after_sign_up_text, class: 'label-light'
= f.text_area :after_sign_up_text, class: 'form-control', rows: 4
.form-text.text-muted Markdown enabled
......
......@@ -2,45 +2,39 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :recaptcha_enabled, class: 'form-check-input'
= f.label :recaptcha_enabled, class: 'form-check-label' do
Enable reCAPTCHA
%span.form-text.text-muted#recaptcha_help_block Helps prevent bots from creating accounts
.form-group.row
= f.label :recaptcha_site_key, 'reCAPTCHA Site Key', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :recaptcha_site_key, 'reCAPTCHA Site Key', class: 'label-light'
= f.text_field :recaptcha_site_key, class: 'form-control'
.form-text.text-muted
Generate site and private keys at
%a{ href: 'http://www.google.com/recaptcha', target: 'blank' } http://www.google.com/recaptcha
.form-group.row
= f.label :recaptcha_private_key, 'reCAPTCHA Private Key', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :recaptcha_private_key, 'reCAPTCHA Private Key', class: 'label-light'
= f.text_field :recaptcha_private_key, class: 'form-control'
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :akismet_enabled, class: 'form-check-input'
= f.label :akismet_enabled, class: 'form-check-label' do
Enable Akismet
%span.form-text.text-muted#akismet_help_block Helps prevent bots from creating issues
.form-group.row
= f.label :akismet_api_key, 'Akismet API Key', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :akismet_api_key, 'Akismet API Key', class: 'label-light'
= f.text_field :akismet_api_key, class: 'form-control'
.form-text.text-muted
Generate API key at
%a{ href: 'http://www.akismet.com', target: 'blank' } http://www.akismet.com
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :unique_ips_limit_enabled, class: 'form-check-input'
= f.label :unique_ips_limit_enabled, class: 'form-check-label' do
......@@ -48,16 +42,14 @@
%span.form-text.text-muted#unique_ip_help_block
Helps prevent malicious users hide their activity
.form-group.row
= f.label :unique_ips_limit_per_user, 'IPs per user', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :unique_ips_limit_per_user, 'IPs per user', class: 'label-light'
= f.number_field :unique_ips_limit_per_user, class: 'form-control'
.form-text.text-muted
Maximum number of unique IPs per user
.form-group.row
= f.label :unique_ips_limit_time_window, 'IP expiration time', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :unique_ips_limit_time_window, 'IP expiration time', class: 'label-light'
= f.number_field :unique_ips_limit_time_window, class: 'form-control'
.form-text.text-muted
How many seconds an IP will be counted towards the limit
......
......@@ -2,9 +2,8 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
= f.label :terminal_max_session_time, 'Max session time', class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :terminal_max_session_time, 'Max session time', class: 'label-light'
= f.number_field :terminal_max_session_time, class: 'form-control'
.form-text.text-muted
Maximum time for web terminal websocket connection (in seconds).
......
......@@ -2,19 +2,16 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
.col-sm-12
.form-group
.form-check
= f.check_box :enforce_terms, class: 'form-check-input'
= f.label :enforce_terms, class: 'form-check-label' do
= _("Require all users to accept Terms of Service and Privacy Policy when they access GitLab.")
.form-text.text-muted
= _("When enabled, users cannot use GitLab until the terms have been accepted.")
.form-group.row
.col-sm-12
.form-group
= f.label :terms do
= _("Terms of Service Agreement and Privacy Policy")
.col-sm-12
= f.text_area :terms, class: 'form-control', rows: 8
.form-text.text-muted
= _("Markdown enabled")
......
......@@ -2,8 +2,7 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :version_check_enabled, class: 'form-check-input'
= f.label :version_check_enabled, class: 'form-check-label' do
......@@ -12,8 +11,7 @@
GitLab will inform you if a new version is available.
= link_to 'Learn more', help_page_path("user/admin_area/settings/usage_statistics", anchor: "version-check")
about what information is shared with GitLab Inc.
.form-group.row
.offset-sm-2.col-sm-10
.form-group
- can_be_configured = @application_setting.usage_ping_can_be_configured?
.form-check
= f.check_box :usage_ping_enabled, disabled: !can_be_configured, class: 'form-check-input'
......
......@@ -2,25 +2,20 @@
= form_errors(@application_setting)
%fieldset
.form-group.row
= f.label :default_branch_protection, class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :default_branch_protection, class: 'label-light'
= f.select :default_branch_protection, options_for_select(Gitlab::Access.protection_options, @application_setting.default_branch_protection), {}, class: 'form-control'
.form-group.row.visibility-level-setting
= f.label :default_project_visibility, class: 'col-form-label col-sm-2'
.col-sm-10
.form-group.visibility-level-setting
= f.label :default_project_visibility, class: 'label-light'
= render('shared/visibility_radios', model_method: :default_project_visibility, form: f, selected_level: @application_setting.default_project_visibility, form_model: Project.new)
.form-group.row.visibility-level-setting
= f.label :default_snippet_visibility, class: 'col-form-label col-sm-2'
.col-sm-10
.form-group.visibility-level-setting
= f.label :default_snippet_visibility, class: 'label-light'
= render('shared/visibility_radios', model_method: :default_snippet_visibility, form: f, selected_level: @application_setting.default_snippet_visibility, form_model: ProjectSnippet.new)
.form-group.row.visibility-level-setting
= f.label :default_group_visibility, class: 'col-form-label col-sm-2'
.col-sm-10
.form-group.visibility-level-setting
= f.label :default_group_visibility, class: 'label-light'
= render('shared/visibility_radios', model_method: :default_group_visibility, form: f, selected_level: @application_setting.default_group_visibility, form_model: Group.new)
.form-group.row
= f.label :restricted_visibility_levels, class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :restricted_visibility_levels, class: 'label-light'
- checkbox_name = 'application_setting[restricted_visibility_levels][]'
= hidden_field_tag(checkbox_name)
- restricted_level_checkboxes('restricted-visibility-help', checkbox_name, class: 'form-check-input').each do |level|
......@@ -29,9 +24,8 @@
%span.form-text.text-muted#restricted-visibility-help
Selected levels cannot be used by non-admin users for groups, projects or snippets.
If the public level is restricted, user profiles are only visible to logged in users.
.form-group.row
= f.label :import_sources, class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label :import_sources, class: 'label-light'
= hidden_field_tag 'application_setting[import_sources][]'
- import_sources_checkboxes('import-sources-help', class: 'form-check-input').each do |source|
.form-check= source
......@@ -43,25 +37,22 @@
and GitLab.com
= link_to "(?)", help_page_path("integration/gitlab")
.form-group.row
.offset-sm-2.col-sm-10
.form-group
.form-check
= f.check_box :project_export_enabled, class: 'form-check-input'
= f.label :project_export_enabled, class: 'form-check-label' do
Project export enabled
.form-group.row
%label.col-form-label.col-sm-2 Enabled Git access protocols
.col-sm-10
.form-group
%label.label-light Enabled Git access protocols
= select(:application_setting, :enabled_git_access_protocol, [['Both SSH and HTTP(S)', nil], ['Only SSH', 'ssh'], ['Only HTTP(S)', 'http']], {}, class: 'form-control')
%span.form-text.text-muted#clone-protocol-help
Allow only the selected protocols to be used for Git access.
- ApplicationSetting::SUPPORTED_KEY_TYPES.each do |type|
- field_name = :"#{type}_key_restriction"
.form-group.row
= f.label field_name, "#{type.upcase} SSH keys", class: 'col-form-label col-sm-2'
.col-sm-10
.form-group
= f.label field_name, "#{type.upcase} SSH keys", class: 'label-light'
= f.select field_name, key_restriction_options_for_select(type), {}, class: 'form-control'
= f.submit 'Save changes', class: "btn btn-success"
......@@ -25,6 +25,7 @@
%span.badge= @members.total_count
= form_tag group_group_members_path(@group), method: :get, class: 'form-inline member-search-form flex-project-members-form' do
.form-group
.position-relative.append-right-8
= search_field_tag :search, params[:search], { placeholder: 'Find existing members by name', class: 'form-control', spellcheck: false }
%button.member-search-btn{ type: "submit", "aria-label" => "Submit search" }
= icon("search")
......
......@@ -9,6 +9,7 @@
%span.badge.badge-pill= members.total_count
= form_tag project_project_members_path(project), method: :get, class: 'form-inline member-search-form flex-project-members-form' do
.form-group
.position-relative
= search_field_tag :search, params[:search], { placeholder: 'Find existing members by name', class: 'form-control', spellcheck: false }
%button.member-search-btn{ type: "submit", "aria-label" => "Submit search" }
= icon("search")
......
---
title: Fixes Microsoft Teams notifications for pipeline events
merge_request: 19632
author: Jeff Brown
type: fixed
---
title: Use one column form layout on Admin Area Settings page
merge_request:
author:
type: changed
---
title: Added with_statsoption for GET /projects/:id/repository/commits
merge_request:
author:
type: added
---
title: Restore API v3 user endpoint
merge_request:
author:
type: changed
......@@ -81,6 +81,17 @@ GC.respond_to?(:copy_on_write_friendly=) and
# fast LAN.
check_client_connection false
before_exec do |server|
# The following is necessary to ensure stale Prometheus metrics don't
# accumulate over time. It needs to be done in this hook as opposed to
# inside an init script to ensure metrics files aren't deleted after new
# unicorn workers start after a SIGUSR2 is received.
if ENV['prometheus_multiproc_dir']
old_metrics = Dir[File.join(ENV['prometheus_multiproc_dir'], '*.db')]
FileUtils.rm_rf(old_metrics)
end
end
before_fork do |server, worker|
# the following is highly recommended for Rails + "preload_app true"
# as there's no need for the master process to hold a connection
......
......@@ -16,6 +16,7 @@ GET /projects/:id/repository/commits
| `until` | string | no | Only commits before or on this date will be returned in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ |
| `path` | string | no | The file path |
| `all` | boolean | no | Retrieve every commit from the repository |
| `with_stats` | boolean | no | Stats about each commit will be added to the response |
```bash
......
......@@ -19,6 +19,7 @@ module API
optional :until, type: DateTime, desc: 'Only commits before or on this date will be returned'
optional :path, type: String, desc: 'The file path'
optional :all, type: Boolean, desc: 'Every commit will be returned'
optional :with_stats, type: Boolean, desc: 'Stats about each commit will be added to the response'
use :pagination
end
get ':id/repository/commits' do
......@@ -28,6 +29,7 @@ module API
ref = params[:ref_name] || user_project.try(:default_branch) || 'master' unless params[:all]
offset = (params[:page] - 1) * params[:per_page]
all = params[:all]
with_stats = params[:with_stats]
commits = user_project.repository.commits(ref,
path: path,
......@@ -47,7 +49,9 @@ module API
paginated_commits = Kaminari.paginate_array(commits, total_count: commit_count)
present paginate(paginated_commits), with: Entities::Commit
serializer = with_stats ? Entities::CommitWithStats : Entities::Commit
present paginate(paginated_commits), with: serializer
end
desc 'Commit multiple file changes as one commit' do
......
......@@ -308,6 +308,10 @@ module API
expose :additions, :deletions, :total
end
class CommitWithStats < Commit
expose :stats, using: Entities::CommitStats
end
class CommitDetail < Commit
expose :stats, using: Entities::CommitStats, if: :stats
expose :status
......
......@@ -531,6 +531,9 @@ module API
authenticate!
end
# Enabling /user endpoint for the v3 version to allow oauth
# authentication through this endpoint.
version %w(v3 v4), using: :path do
desc 'Get the currently authenticated user' do
success Entities::UserPublic
end
......@@ -544,6 +547,7 @@ module API
present current_user, with: entity
end
end
desc "Get the currently authenticated user's SSH keys" do
success Entities::SSHKey
......
......@@ -1181,18 +1181,18 @@ module Gitlab
end
def compare_source_branch(target_branch_name, source_repository, source_branch_name, straight:)
Gitlab::GitalyClient::StorageSettings.allow_disk_access do
with_repo_branch_commit(source_repository, source_branch_name) do |commit|
break unless commit
tmp_ref = "refs/tmp/#{SecureRandom.hex}"
return unless fetch_source_branch!(source_repository, source_branch_name, tmp_ref)
Gitlab::Git::Compare.new(
self,
target_branch_name,
commit.sha,
tmp_ref,
straight: straight
)
end
end
ensure
delete_refs(tmp_ref)
end
def write_ref(ref_path, ref, old_ref: nil, shell: true)
......
......@@ -30,7 +30,7 @@ module MicrosoftTeams
result = { 'sections' => [] }
result['title'] = options[:title]
result['summary'] = options[:pretext]
result['summary'] = options[:summary]
result['sections'] << MicrosoftTeams::Activity.new(options[:activity]).prepare
attachments = options[:attachments]
......
{
"type": "object",
"allOf": [
{ "$ref": "basic.json" },
{
"required" : [
"stats"
],
"properties": {
"stats": { "$ref": "../commit_stats.json" }
}
}
]
}
{
"type": "array",
"items": { "$ref": "commit/with_stats.json" }
}
......@@ -62,6 +62,11 @@ describe('IDE jobs detail view', () => {
expect(vm.$el.querySelector('.build-loader-animation').style.display).toBe('');
});
it('hides output when loading', () => {
expect(vm.$el.querySelector('.bash')).not.toBe(null);
expect(vm.$el.querySelector('.bash').style.display).toBe('none');
});
it('hide loading icon when isLoading is false', done => {
vm.$store.state.pipelines.detailJob.isLoading = false;
......
......@@ -8,7 +8,7 @@ describe MicrosoftTeams::Notifier do
let(:options) do
{
title: 'JohnDoe4/project2',
pretext: '[[JohnDoe4/project2](http://localhost/namespace2/gitlabhq)] Issue [#1 Awesome issue](http://localhost/namespace2/gitlabhq/issues/1) opened by user6',
summary: '[[JohnDoe4/project2](http://localhost/namespace2/gitlabhq)] Issue [#1 Awesome issue](http://localhost/namespace2/gitlabhq/issues/1) opened by user6',
activity: {
title: 'Issue opened by user6',
subtitle: 'in [JohnDoe4/project2](http://localhost/namespace2/gitlabhq)',
......
......@@ -225,10 +225,15 @@ describe MicrosoftTeamsService do
it 'calls Microsoft Teams API for pipeline events' do
data = Gitlab::DataBuilder::Pipeline.build(pipeline)
data[:markdown] = true
chat_service.execute(data)
expect(WebMock).to have_requested(:post, webhook_url).once
message = ChatMessage::PipelineMessage.new(data)
expect(WebMock).to have_requested(:post, webhook_url)
.with(body: hash_including({ summary: message.summary }))
.once
end
end
......
......@@ -18,14 +18,14 @@ describe API::Commits do
describe 'GET /projects/:id/repository/commits' do
let(:route) { "/projects/#{project_id}/repository/commits" }
shared_examples_for 'project commits' do
shared_examples_for 'project commits' do |schema: 'public_api/v4/commits'|
it "returns project commits" do
commit = project.repository.commit
get api(route, current_user)
expect(response).to have_gitlab_http_status(200)
expect(response).to match_response_schema('public_api/v4/commits')
expect(response).to match_response_schema(schema)
expect(json_response.first['id']).to eq(commit.id)
expect(json_response.first['committer_name']).to eq(commit.committer_name)
expect(json_response.first['committer_email']).to eq(commit.committer_email)
......@@ -161,6 +161,23 @@ describe API::Commits do
end
end
context 'with_stats optional parameter' do
let(:project) { create(:project, :public, :repository) }
it_behaves_like 'project commits', schema: 'public_api/v4/commits_with_stats' do
let(:route) { "/projects/#{project_id}/repository/commits?with_stats=true" }
it 'include commits details' do
commit = project.repository.commit
get api(route, current_user)
expect(json_response.first['stats']['additions']).to eq(commit.stats.additions)
expect(json_response.first['stats']['deletions']).to eq(commit.stats.deletions)
expect(json_response.first['stats']['total']).to eq(commit.stats.total)
end
end
end
context 'with pagination params' do
let(:page) { 1 }
let(:per_page) { 5 }
......
......@@ -1123,17 +1123,18 @@ describe API::Users do
describe "GET /user" do
let(:personal_access_token) { create(:personal_access_token, user: user).token }
shared_examples 'get user info' do |version|
context 'with regular user' do
context 'with personal access token' do
it 'returns 403 without private token when sudo is defined' do
get api("/user?private_token=#{personal_access_token}&sudo=123")
get api("/user?private_token=#{personal_access_token}&sudo=123", version: version)
expect(response).to have_gitlab_http_status(403)
end
end
it 'returns current user without private token when sudo not defined' do
get api("/user", user)
get api("/user", user, version: version)
expect(response).to have_gitlab_http_status(200)
expect(response).to match_response_schema('public_api/v4/user/public')
......@@ -1144,7 +1145,7 @@ describe API::Users do
let(:path) { "/user" }
let(:api_call) { method(:api) }
include_examples 'allows the "read_user" scope'
include_examples 'allows the "read_user" scope', version
end
end
......@@ -1153,13 +1154,13 @@ describe API::Users do
context 'with personal access token' do
it 'returns 403 without private token when sudo defined' do
get api("/user?private_token=#{admin_personal_access_token}&sudo=#{user.id}")
get api("/user?private_token=#{admin_personal_access_token}&sudo=#{user.id}", version: version)
expect(response).to have_gitlab_http_status(403)
end
it 'returns initial current user without private token but with is_admin when sudo not defined' do
get api("/user?private_token=#{admin_personal_access_token}")
get api("/user?private_token=#{admin_personal_access_token}", version: version)
expect(response).to have_gitlab_http_status(200)
expect(response).to match_response_schema('public_api/v4/user/admin')
......@@ -1170,13 +1171,17 @@ describe API::Users do
context 'with unauthenticated user' do
it "returns 401 error if user is unauthenticated" do
get api("/user")
get api("/user", version: version)
expect(response).to have_gitlab_http_status(401)
end
end
end
it_behaves_like 'get user info', 'v3'
it_behaves_like 'get user info', 'v4'
end
describe "GET /user/keys" do
context "when unauthenticated" do
it "returns authentication error" do
......
shared_examples_for 'allows the "read_user" scope' do
shared_examples_for 'allows the "read_user" scope' do |api_version|
let(:version) { api_version || 'v4' }
context 'for personal access tokens' do
context 'when the requesting token has the "api" scope' do
let(:token) { create(:personal_access_token, scopes: ['api'], user: user) }
it 'returns a "200" response' do
get api_call.call(path, user, personal_access_token: token)
get api_call.call(path, user, personal_access_token: token, version: version)
expect(response).to have_gitlab_http_status(200)
end
......@@ -14,7 +16,7 @@ shared_examples_for 'allows the "read_user" scope' do
let(:token) { create(:personal_access_token, scopes: ['read_user'], user: user) }
it 'returns a "200" response' do
get api_call.call(path, user, personal_access_token: token)
get api_call.call(path, user, personal_access_token: token, version: version)
expect(response).to have_gitlab_http_status(200)
end
......@@ -28,7 +30,7 @@ shared_examples_for 'allows the "read_user" scope' do
end
it 'returns a "403" response' do
get api_call.call(path, user, personal_access_token: token)
get api_call.call(path, user, personal_access_token: token, version: version)
expect(response).to have_gitlab_http_status(403)
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment