Commit 4cddeb47 authored by GitLab Bot's avatar GitLab Bot

Automatic merge of gitlab-org/gitlab master

parents 8154198f d897b90f
......@@ -4,7 +4,6 @@ import initSharedRunnersForm from '~/group_settings/mount_shared_runners';
import { FILTERED_SEARCH } from '~/pages/constants';
import initFilteredSearch from '~/pages/search/init_filtered_search';
import { initInstallRunner } from '~/pages/shared/mount_runner_instructions';
import initSearchSettings from '~/search_settings';
import initSettingsPanels from '~/settings_panels';
// Initialize expandable settings panels
......@@ -21,5 +20,3 @@ initSharedRunnersForm();
initVariableList();
initInstallRunner();
initSearchSettings();
import initSearchSettings from '~/search_settings';
initSearchSettings();
import bundle from '~/packages_and_registries/settings/group/bundle';
import initSearchSettings from '~/search_settings';
bundle();
document.addEventListener('DOMContentLoaded', initSearchSettings);
import DueDateSelectors from '~/due_date_select';
import initSearchSettings from '~/search_settings';
import initSettingsPanels from '~/settings_panels';
// Initialize expandable settings panels
initSettingsPanels();
new DueDateSelectors(); // eslint-disable-line no-new
initSearchSettings();
import initSearchSettings from '~/search_settings';
initSearchSettings();
import initSearchSettings from '~/search_settings';
initSearchSettings();
......@@ -6,7 +6,6 @@ import initDeployFreeze from '~/deploy_freeze';
import { initInstallRunner } from '~/pages/shared/mount_runner_instructions';
import initSharedRunnersToggle from '~/projects/settings/mount_shared_runners_toggle';
import registrySettingsApp from '~/registry/settings/registry_settings_bundle';
import initSearchSettings from '~/search_settings';
import initSettingsPanels from '~/settings_panels';
document.addEventListener('DOMContentLoaded', () => {
......@@ -43,6 +42,4 @@ document.addEventListener('DOMContentLoaded', () => {
}
initInstallRunner();
initSearchSettings();
});
import initSearchSettings from '~/search_settings';
initSearchSettings();
......@@ -3,7 +3,6 @@ import mountErrorTrackingForm from '~/error_tracking_settings';
import mountGrafanaIntegration from '~/grafana_integration';
import initIncidentsSettings from '~/incidents_settings';
import mountOperationSettings from '~/operation_settings';
import initSearchSettings from '~/search_settings';
import initSettingsPanels from '~/settings_panels';
initIncidentsSettings();
......@@ -14,7 +13,3 @@ if (!IS_EE) {
initSettingsPanels();
}
mountAlertsSettings(document.querySelector('.js-alerts-settings'));
document.addEventListener('DOMContentLoaded', () => {
initSearchSettings();
});
import MirrorRepos from '~/mirrors/mirror_repos';
import initSearchSettings from '~/search_settings';
import initForm from '../form';
document.addEventListener('DOMContentLoaded', () => {
......@@ -7,6 +6,4 @@ document.addEventListener('DOMContentLoaded', () => {
const mirrorReposContainer = document.querySelector('.js-mirror-settings');
if (mirrorReposContainer) new MirrorRepos(mirrorReposContainer).init();
initSearchSettings();
});
......@@ -65,7 +65,9 @@ export default {
css-class="sidebar-collapsed-icon dont-change-state"
tooltip-placement="left"
/>
<div class="gl-display-flex gl-align-items-center gl-justify-between gl-mb-2 hide-collapsed">
<div
class="gl-display-flex gl-align-items-center gl-justify-content-space-between gl-mb-2 hide-collapsed"
>
<span class="gl-overflow-hidden gl-text-overflow-ellipsis gl-white-space-nowrap">
{{ $options.i18n.text }}: {{ reference }}
<gl-loading-icon v-if="isLoading" inline :label="$options.i18n.text" />
......
......@@ -5,6 +5,7 @@ module Groups
class CiCdController < Groups::ApplicationController
include RunnerSetupScripts
layout 'group_settings'
skip_cross_project_access_check :show
before_action :authorize_admin_group!
before_action :authorize_update_max_artifacts_size!, only: [:update]
......
......@@ -9,6 +9,8 @@ module Groups
feature_category :integrations
layout 'group_settings'
def index
@integrations = Service.find_or_initialize_all_non_project_specific(Service.for_group(group)).sort_by(&:title)
end
......
......@@ -3,6 +3,7 @@
module Groups
module Settings
class PackagesAndRegistriesController < Groups::ApplicationController
layout 'group_settings'
before_action :authorize_admin_group!
before_action :verify_packages_enabled!
......
......@@ -3,6 +3,7 @@
module Groups
module Settings
class RepositoryController < Groups::ApplicationController
layout 'group_settings'
skip_cross_project_access_check :show
before_action :authorize_create_deploy_token!
before_action :define_deploy_token_variables
......
......@@ -5,6 +5,7 @@ module Projects
class AccessTokensController < Projects::ApplicationController
include ProjectsHelper
layout 'project_settings'
before_action :check_feature_availability
feature_category :authentication_and_authorization
......
......@@ -7,6 +7,7 @@ module Projects
NUMBER_OF_RUNNERS_PER_PAGE = 20
layout 'project_settings'
before_action :authorize_admin_pipeline!
before_action :define_variables
before_action do
......
......@@ -3,6 +3,7 @@
module Projects
module Settings
class OperationsController < Projects::ApplicationController
layout 'project_settings'
before_action :authorize_admin_operations!
before_action :authorize_read_prometheus_alerts!, only: [:reset_alerting_token]
......
......@@ -3,6 +3,7 @@
module Projects
module Settings
class RepositoryController < Projects::ApplicationController
layout 'project_settings'
before_action :authorize_admin_project!
before_action :define_variables, only: [:create_deploy_token]
before_action do
......
- enable_search_settings locals: { container_class: 'gl-my-5' }
= form_for @group, html: { multipart: true, class: 'gl-show-field-errors js-general-settings-form' }, authenticity_token: true do |f|
%input{ type: 'hidden', name: 'update_section', value: 'js-general-settings' }
= form_errors(@group)
......
......@@ -4,8 +4,6 @@
- expanded = expanded_by_default?
- general_expanded = @group.errors.empty? ? expanded : true
- enable_search_settings locals: { container_class: 'gl-my-5' }
-# Given we only have one field in this form which is also admin-only,
-# we don't want to show an empty section to non-admin users,
- if can?(current_user, :update_max_artifacts_size, @group)
......
......@@ -2,6 +2,4 @@
- page_title _('Packages & Registries')
- @content_class = 'limit-container-width' unless fluid_layout
- enable_search_settings locals: { container_class: 'gl-my-5' }
%section#js-packages-and-registries-settings{ data: { default_expanded: expanded_by_default?.to_s, group_path: @group.full_path } }
- breadcrumb_title _('Repository Settings')
- page_title _('Repository')
- enable_search_settings locals: { container_class: 'gl-my-5' }
- deploy_token_description = s_('DeployTokens|Group deploy tokens allow access to the packages, repositories, and registry images within the group.')
= render "shared/deploy_tokens/index", group_or_project: @group, description: deploy_token_description
......
- page_title _("Settings")
- nav "group"
- enable_search_settings locals: { container_class: 'gl-my-5' }
= render template: "layouts/group"
- page_title _("Settings")
- nav "project"
- enable_search_settings locals: { container_class: 'gl-my-5' }
= render template: "layouts/project"
......@@ -14,4 +14,4 @@
- if can_create_wiki
%p
= _("Add a homepage to your wiki that contains information about your project and GitLab will display it here instead of this message.")
= link_to _("Create your first page"), wiki_path(@project.wiki) + '?view=create', class: "btn gl-button btn-primary"
= link_to _("Create your first page"), wiki_path(@project.wiki) + '?view=create', class: "btn gl-button btn-confirm"
......@@ -3,8 +3,6 @@
- @content_class = "limit-container-width" unless fluid_layout
- expanded = expanded_by_default?
- enable_search_settings
%section.settings.general-settings.no-animate.expanded#js-general-settings
.settings-header
%h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only= _('Naming, topics, avatar')
......
......@@ -5,8 +5,6 @@
- expanded = expanded_by_default?
- general_expanded = @project.errors.empty? ? expanded : true
- enable_search_settings locals: { container_class: 'gl-my-5' }
%section.settings#js-general-pipeline-settings.no-animate{ class: ('expanded' if general_expanded), data: { qa_selector: 'general_pipelines_settings_content' } }
.settings-header
%h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only
......
......@@ -5,7 +5,7 @@
%section.settings.no-animate#js-alert-management-settings{ class: ('expanded' if expanded) }
.settings-header
%h4
%h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only
= _('Alerts')
%button.btn.js-settings-toggle{ type: 'button' }
= _('Expand')
......
......@@ -4,7 +4,7 @@
%section.settings.no-animate.js-error-tracking-settings
.settings-header
%h4
%h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only
= _('Error tracking')
%button.btn.js-settings-toggle{ type: 'button' }
= _('Expand')
......
%section.settings.no-animate.js-prometheus-settings
.settings-header
%h4
%h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only
= _('Prometheus')
%button.btn.js-settings-toggle{ type: 'button' }
= _('Expand')
......
......@@ -3,7 +3,7 @@
%section.settings.border-0.no-animate
.settings-header{ :class => "border-top" }
%h4
%h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only
= _("Jaeger tracing")
%button.btn.gl-button.js-settings-toggle{ type: 'button' }
= _('Expand')
......
......@@ -2,8 +2,6 @@
- page_title _('Operations Settings')
- breadcrumb_title _('Operations Settings')
- enable_search_settings locals: { container_class: 'gl-my-5' }
= render 'projects/settings/operations/alert_management'
= render 'projects/settings/operations/incidents'
= render 'projects/settings/operations/error_tracking'
......
......@@ -3,8 +3,6 @@
- @content_class = "limit-container-width" unless fluid_layout
- deploy_token_description = s_('DeployTokens|Deploy tokens allow access to packages, your repository, and registry images.')
- enable_search_settings locals: { container_class: 'gl-my-5' }
= render "projects/default_branch/show"
= render_if_exists "projects/push_rules/index"
= render "projects/mirrors/mirror_repos"
......
......@@ -52,6 +52,6 @@
= render 'shared/zen', attr: :release_description, classes: 'note-textarea', placeholder: s_('TagsPage|Write your release notes or drag files here…'), current_text: @release_description, qa_selector: 'release_notes_field'
= render 'shared/notes/hints'
.form-actions
= button_tag s_('TagsPage|Create tag'), class: 'btn btn-success', data: { qa_selector: "create_tag_button" }
= link_to s_('TagsPage|Cancel'), project_tags_path(@project), class: 'btn btn-cancel'
= button_tag s_('TagsPage|Create tag'), class: 'gl-button btn btn-confirm', data: { qa_selector: "create_tag_button" }
= link_to s_('TagsPage|Cancel'), project_tags_path(@project), class: 'gl-button btn btn-default btn-cancel'
%script#availableRefs{ type: "application/json" }= @project.repository.ref_names.to_json.html_safe
......@@ -5,8 +5,6 @@
- add_page_specific_style 'page_bundles/wiki'
.wiki-page-header.top-area.flex-column.flex-lg-row
%h3.page-title.gl-flex-fill-1
= s_("Wiki|Wiki Pages")
......
---
title: Project Settings Operations headers Alerts/Error tracking/Jeager tracing/Jeager
tracing expand/collapse on-click/on-tap
merge_request: 56269
author: Daniel Schömer
type: changed
---
title: Move to btn-confirm from btn-primary in wiki empty state
merge_request: 56192
author: Yogi (@yo)
type: changed
---
title: Fix reference widget icon and text spacing
merge_request: 56759
author:
type: fixed
---
title: Apply new GitLab UI for buttons in create tag page
merge_request:
author: Yogi (@yo)
type: changed
---
stage: none
group: unassigned
stage: Create
group: Source Code
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
type: reference
---
# Dockerfiles API
In GitLab, there is an API endpoint available for Dockerfiles. For more
information on Dockerfiles, see the
[Docker documentation](https://docs.docker.com/engine/reference/builder/).
GitLab provides an API endpoint for instance-level Dockerfile templates.
Default templates are defined at
[`vendor/Dockerfile`](https://gitlab.com/gitlab-org/gitlab-foss/-/tree/master/vendor/Dockerfile)
in the GitLab repository.
## Override Dockerfile API templates **(PREMIUM SELF)**
In [GitLab Premium and higher](https://about.gitlab.com/pricing) tiers, GitLab instance
administrators can override templates in the
[Admin Area](../../user/admin_area/settings/instance_template_repository.md).
## List Dockerfile templates
......
......@@ -239,9 +239,6 @@ from the OmniAuth provider's documentation.
If you have successfully set up a provider that is not shipped with GitLab itself,
please let us know.
You can help others by reporting successful configurations and probably share a
few insights or provide warnings for common errors or pitfalls.
While we can't officially support every possible authentication mechanism out there,
we'd like to at least help those with specific needs.
......
---
stage: Monitor
group: Monitor
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
# On-call Schedule Management **(PREMIUM)**
> [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/4544) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.10.
Use on-call schedule management to create schedules for responders to rotate on-call
responsibilities. Maintain the availability of your software services by putting your teams on-call.
With an on-call schedule, your team is notified immediately when things go wrong so they can quickly
respond to service outages and disruptions.
To use on-call schedules, you must do the following:
1. [Create a schedule](#schedules).
1. [Add a rotation to the schedule](#rotations).
If you have at least Maintainer [permissions](../../user/permissions.md)
to create a schedule, you can do this manually.
## Schedules
Set up an on-call schedule for your team to add rotations to.
Follow these steps to create a schedule:
1. Go to **Operations > On-call Schedules** and select **Add a schedule**.
1. In the **Add schedule** form, enter the schedule's name and description, and select a timezone.
1. Click **Add schedule**.
You now have an empty schedule with no rotations. This renders as an empty state, prompting you to
create [rotations](#rotations) for your schedule.
![Schedule Empty Grid](img/oncall_schedule_empty_grid_v13_10.png)
### Update a schedule
Follow these steps to update a schedule:
1. Go to **Operations > On-call Schedules** and select the **Pencil** icon on the top right of the
schedule card, across from the schedule name.
1. In the **Edit schedule** form, edit the information you wish to update.
1. Click the **Edit schedule** button to save your changes.
### Delete a schedule
Follow these steps to delete a schedule:
1. Go to **Operations > On-call Schedules** and select the **Trash Can** icon on the top right of the
schedule card.
1. In the **Delete schedule** window, click the **Delete schedule** button.
## Rotations
Add rotations to an existing schedule to put your team members on-call.
Follow these steps to create a rotation:
1. Go to **Operations > On-call Schedules** and select **Add a rotation** on the top right of the
current schedule.
1. In the **Add rotation** form, enter the following:
- **Name:** Your rotation's name.
- **Participants:** The people you want in the rotation.
- **Rotation length:** The rotation's duration.
- **Starts on:** The date and time the rotation begins.
- **Enable end date:** With the toggle set to on, you can select the date and time your rotation
ends.
- **Restrict to time intervals:** With the toggle set to on, you can restrict your rotation to
the time period you select.
### Edit a rotation
Follow these steps to edit a rotation:
1. Go to **Operations > On-call Schedules** and select the **Pencil** icon to the right of the title
of the rotation that you want to update.
1. In the **Edit rotation** form, make the changes that you want.
1. Select the **Edit rotation** button.
### Delete a rotation
Follow these steps to delete a rotation:
1. Go to **Operations > On-call Schedules** and select the **Trash Can** icon to the right of the
title of the rotation that you want to delete.
1. In the **Delete rotation** window, select the **Delete rotation** button.
## View schedule rotations
You can view the on-call schedules of a single day or two weeks. To switch between these time
periods, select the **1 day** or **2 weeks** buttons on the schedule. Two weeks is the default view.
Hover over any rotation shift participants in the schedule to view their individual shift details.
![1 Day Grid View](img/oncall_schedule_day_grid_v13_10.png)
## Page an on-call responder
When an alert is created in a project, GitLab sends an email to the on-call responder(s) in the
on-call schedule for that project. If there is no schedule or no one on-call in that schedule at the
time the alert is triggered, no email is sent.
......@@ -32,3 +32,9 @@ a single email notification for new alerts.
1. In the **Alert Integration** tab, select the checkbox
**Send a single email notification to Owners and Maintainers for new alerts**.
1. Select **Save changes**.
## Paging **(PREMIUM)**
In projects that have an [on-call schedule](oncall_schedules.md) configured, on-call responders are
paged through email for triggered alerts. The on-call responder(s) receive one email for triggered
alerts.
---
stage: none
group: unassigned
stage: Create
group: Source Code
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
type: index
---
......
import initSearchSettings from '~/search_settings';
initSearchSettings();
import initSearchSettings from '~/search_settings';
initSearchSettings();
import storageCounter from 'ee/storage_counter';
import LinkedTabs from '~/lib/utils/bootstrap_linked_tabs';
import initSearchSettings from '~/search_settings';
if (document.querySelector('#js-storage-counter-app')) {
storageCounter();
......@@ -11,3 +12,5 @@ if (document.querySelector('#js-storage-counter-app')) {
hashedTabs: true,
});
}
initSearchSettings();
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'User searches group settings', :js do
let_it_be(:user) { create(:user) }
let_it_be(:group) { create(:group) }
before do
group.add_owner(user)
sign_in(user)
end
context 'in Webhooks page' do
before do
visit group_hooks_path(group)
end
it_behaves_like 'can highlight results', 'Group Hooks'
end
context 'in Usage Quotas page' do
before do
visit group_usage_quotas_path(group)
end
it_behaves_like 'can highlight results', 'Usage of group'
end
end
......@@ -5,19 +5,26 @@ require 'spec_helper'
RSpec.describe 'User searches group settings', :js do
let_it_be(:user) { create(:user) }
let_it_be(:group) { create(:group) }
let_it_be(:project) { create(:project, :repository, namespace: group) }
before do
group.add_owner(user)
sign_in(user)
end
context 'in general settings page' do
context 'in General settings page' do
let(:visit_path) { edit_group_path(group) }
it_behaves_like 'can search settings with feature flag check', 'Naming', 'Permissions'
end
context 'in Integrations page' do
before do
visit group_settings_integrations_path(group)
end
it_behaves_like 'can highlight results', 'integration settings'
end
context 'in Repository page' do
before do
visit group_settings_repository_path(group)
......@@ -33,4 +40,12 @@ RSpec.describe 'User searches group settings', :js do
it_behaves_like 'can search settings', 'Variables', 'Runners'
end
context 'in Packages & Registries page' do
before do
visit group_settings_packages_and_registries_path(group)
end
it_behaves_like 'can highlight results', 'GitLab Packages'
end
end
......@@ -4,7 +4,7 @@ require 'spec_helper'
RSpec.describe 'User searches project settings', :js do
let_it_be(:user) { create(:user) }
let_it_be(:project) { create(:project, :repository, namespace: user.namespace) }
let_it_be(:project) { create(:project, :repository, namespace: user.namespace, pages_https_only: false) }
before do
sign_in(user)
......@@ -16,6 +16,30 @@ RSpec.describe 'User searches project settings', :js do
it_behaves_like 'can search settings with feature flag check', 'Naming', 'Visibility'
end
context 'in Integrations page' do
before do
visit project_settings_integrations_path(project)
end
it_behaves_like 'can highlight results', 'third-party applications'
end
context 'in Webhooks page' do
before do
visit project_hooks_path(project)
end
it_behaves_like 'can highlight results', 'Secret token'
end
context 'in Access Tokens page' do
before do
visit project_settings_access_tokens_path(project)
end
it_behaves_like 'can highlight results', 'Expires at'
end
context 'in Repository page' do
before do
visit project_settings_repository_path(project)
......@@ -39,4 +63,14 @@ RSpec.describe 'User searches project settings', :js do
it_behaves_like 'can search settings', 'Alerts', 'Error tracking'
end
context 'in Pages page' do
before do
allow(Gitlab.config.pages).to receive(:enabled).and_return(true)
visit project_pages_path(project)
end
it_behaves_like 'can highlight results', 'static websites'
end
end
......@@ -7,9 +7,7 @@ RSpec.shared_examples 'cannot search settings' do
end
RSpec.shared_examples 'can search settings' do |search_term, non_match_section|
it 'has search settings field' do
expect(page).to have_field(placeholder: SearchHelpers::INPUT_PLACEHOLDER)
end
it_behaves_like 'can highlight results', search_term
it 'hides unmatching sections on search' do
expect(page).to have_content(non_match_section)
......@@ -21,6 +19,23 @@ RSpec.shared_examples 'can search settings' do |search_term, non_match_section|
end
end
RSpec.shared_examples 'can highlight results' do |search_term|
it 'has search settings field' do
expect(page).to have_field(placeholder: SearchHelpers::INPUT_PLACEHOLDER)
end
it 'highlights the search terms' do
selector = '.gl-bg-orange-50'
fill_in SearchHelpers::INPUT_PLACEHOLDER, with: search_term
expect(page).to have_css(selector)
page.find_all(selector) do |element|
expect(element).to have_content(search_term)
end
end
end
RSpec.shared_examples 'can search settings with feature flag check' do |search_term, non_match_section|
let(:flag) { true }
......
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