Commit a2513470 authored by GitLab Bot's avatar GitLab Bot

Automatic merge of gitlab-org/gitlab master

parents 4ee20b8e 8a5d5b40
......@@ -7,376 +7,374 @@
# versions of Haml-Lint, may require this file to be generated again.
linters:
# Offense count: 1552
NoPlainNodes:
enabled: true
exclude:
- "app/views/admin/abuse_reports/_abuse_report.html.haml"
- "app/views/admin/abuse_reports/index.html.haml"
- "app/views/admin/appearances/_form.html.haml"
- "app/views/admin/application_settings/_abuse.html.haml"
- "app/views/admin/application_settings/_diff_limits.html.haml"
- "app/views/admin/application_settings/_gitaly.html.haml"
- "app/views/admin/application_settings/_ip_limits.html.haml"
- "app/views/admin/application_settings/_performance.html.haml"
- "app/views/admin/application_settings/_plantuml.html.haml"
- "app/views/admin/application_settings/_prometheus.html.haml"
- "app/views/admin/application_settings/_realtime.html.haml"
- "app/views/admin/application_settings/_repository_check.html.haml"
- "app/views/admin/application_settings/_signin.html.haml"
- "app/views/admin/application_settings/_signup.html.haml"
- "app/views/admin/application_settings/_spam.html.haml"
- "app/views/admin/application_settings/_terminal.html.haml"
- "app/views/admin/application_settings/_usage.html.haml"
- "app/views/admin/application_settings/_visibility_and_access.html.haml"
- "app/views/admin/applications/_delete_form.html.haml"
- "app/views/admin/applications/_form.html.haml"
- "app/views/admin/applications/edit.html.haml"
- "app/views/admin/applications/index.html.haml"
- "app/views/admin/applications/new.html.haml"
- "app/views/admin/applications/show.html.haml"
- "app/views/admin/background_jobs/show.html.haml"
- "app/views/admin/broadcast_messages/index.html.haml"
- "app/views/admin/dashboard/index.html.haml"
- "app/views/admin/deploy_keys/new.html.haml"
- "app/views/admin/health_check/show.html.haml"
- "app/views/admin/hook_logs/_index.html.haml"
- "app/views/admin/hook_logs/show.html.haml"
- "app/views/admin/hooks/_form.html.haml"
- "app/views/admin/hooks/edit.html.haml"
- "app/views/admin/logs/show.html.haml"
- "app/views/admin/projects/_projects.html.haml"
- "app/views/admin/requests_profiles/index.html.haml"
- "app/views/admin/runners/_runner.html.haml"
- "app/views/admin/runners/index.html.haml"
- "app/views/admin/runners/show.html.haml"
- "app/views/admin/services/_form.html.haml"
- "app/views/admin/services/index.html.haml"
- "app/views/admin/spam_logs/_spam_log.html.haml"
- "app/views/admin/spam_logs/index.html.haml"
- "app/views/admin/system_info/show.html.haml"
- "app/views/admin/users/_form.html.haml"
- "app/views/admin/users/_head.html.haml"
- "app/views/admin/users/_profile.html.haml"
- "app/views/admin/users/_projects.html.haml"
- "app/views/admin/users/new.html.haml"
- "app/views/admin/users/projects.html.haml"
- "app/views/admin/users/show.html.haml"
- 'app/views/admin/abuse_reports/_abuse_report.html.haml'
- 'app/views/admin/abuse_reports/index.html.haml'
- 'app/views/admin/appearances/_form.html.haml'
- 'app/views/admin/application_settings/_abuse.html.haml'
- 'app/views/admin/application_settings/_diff_limits.html.haml'
- 'app/views/admin/application_settings/_gitaly.html.haml'
- 'app/views/admin/application_settings/_ip_limits.html.haml'
- 'app/views/admin/application_settings/_performance.html.haml'
- 'app/views/admin/application_settings/_plantuml.html.haml'
- 'app/views/admin/application_settings/_prometheus.html.haml'
- 'app/views/admin/application_settings/_realtime.html.haml'
- 'app/views/admin/application_settings/_repository_check.html.haml'
- 'app/views/admin/application_settings/_signin.html.haml'
- 'app/views/admin/application_settings/_signup.html.haml'
- 'app/views/admin/application_settings/_spam.html.haml'
- 'app/views/admin/application_settings/_terminal.html.haml'
- 'app/views/admin/application_settings/_usage.html.haml'
- 'app/views/admin/application_settings/_visibility_and_access.html.haml'
- 'app/views/admin/applications/_delete_form.html.haml'
- 'app/views/admin/applications/_form.html.haml'
- 'app/views/admin/applications/edit.html.haml'
- 'app/views/admin/applications/index.html.haml'
- 'app/views/admin/applications/new.html.haml'
- 'app/views/admin/applications/show.html.haml'
- 'app/views/admin/background_jobs/show.html.haml'
- 'app/views/admin/broadcast_messages/index.html.haml'
- 'app/views/admin/dashboard/index.html.haml'
- 'app/views/admin/deploy_keys/new.html.haml'
- 'app/views/admin/health_check/show.html.haml'
- 'app/views/admin/hook_logs/_index.html.haml'
- 'app/views/admin/hook_logs/show.html.haml'
- 'app/views/admin/hooks/_form.html.haml'
- 'app/views/admin/hooks/edit.html.haml'
- 'app/views/admin/logs/show.html.haml'
- 'app/views/admin/projects/_projects.html.haml'
- 'app/views/admin/requests_profiles/index.html.haml'
- 'app/views/admin/runners/_runner.html.haml'
- 'app/views/admin/runners/index.html.haml'
- 'app/views/admin/runners/show.html.haml'
- 'app/views/admin/services/_form.html.haml'
- 'app/views/admin/services/index.html.haml'
- 'app/views/admin/spam_logs/_spam_log.html.haml'
- 'app/views/admin/spam_logs/index.html.haml'
- 'app/views/admin/system_info/show.html.haml'
- 'app/views/admin/users/_form.html.haml'
- 'app/views/admin/users/_head.html.haml'
- 'app/views/admin/users/_profile.html.haml'
- 'app/views/admin/users/_projects.html.haml'
- 'app/views/admin/users/new.html.haml'
- 'app/views/admin/users/projects.html.haml'
- 'app/views/admin/users/show.html.haml'
- 'app/views/authentication/_authenticate.html.haml'
- 'app/views/authentication/_register.html.haml'
- "app/views/clusters/clusters/_cluster.html.haml"
- "app/views/clusters/clusters/new.html.haml"
- "app/views/dashboard/milestones/index.html.haml"
- "app/views/dashboard/projects/_blank_state_admin_welcome.html.haml"
- "app/views/dashboard/projects/_blank_state_welcome.html.haml"
- "app/views/dashboard/todos/_todo.html.haml"
- "app/views/dashboard/todos/index.html.haml"
- "app/views/devise/confirmations/almost_there.haml"
- "app/views/devise/mailer/_confirmation_instructions_account.html.haml"
- "app/views/devise/mailer/_confirmation_instructions_secondary.html.haml"
- "app/views/devise/mailer/email_changed.html.haml"
- "app/views/devise/mailer/password_change.html.haml"
- "app/views/devise/mailer/reset_password_instructions.html.haml"
- "app/views/devise/mailer/unlock_instructions.html.haml"
- "app/views/devise/passwords/edit.html.haml"
- "app/views/devise/sessions/_new_base.html.haml"
- "app/views/devise/sessions/_new_crowd.html.haml"
- "app/views/devise/sessions/_new_ldap.html.haml"
- "app/views/devise/sessions/new.html.haml"
- "app/views/devise/sessions/two_factor.html.haml"
- "app/views/devise/shared/_omniauth_box.html.haml"
- "app/views/devise/shared/_sign_in_link.html.haml"
- "app/views/devise/shared/_tabs_normal.html.haml"
- "app/views/discussions/_discussion.html.haml"
- "app/views/discussions/_headline.html.haml"
- "app/views/discussions/_notes.html.haml"
- "app/views/doorkeeper/applications/_delete_form.html.haml"
- "app/views/doorkeeper/authorized_applications/_delete_form.html.haml"
- "app/views/errors/encoding.html.haml"
- "app/views/errors/git_not_found.html.haml"
- "app/views/errors/omniauth_error.html.haml"
- "app/views/errors/precondition_failed.html.haml"
- "app/views/events/_event_push.atom.haml"
- "app/views/events/event/_push.html.haml"
- "app/views/groups/_create_chat_team.html.haml"
- "app/views/groups/_group_admin_settings.html.haml"
- "app/views/groups/labels/edit.html.haml"
- "app/views/groups/labels/new.html.haml"
- "app/views/groups/milestones/edit.html.haml"
- "app/views/groups/milestones/index.html.haml"
- "app/views/groups/milestones/new.html.haml"
- "app/views/groups/projects.html.haml"
- "app/views/groups/runners/edit.html.haml"
- "app/views/groups/settings/_advanced.html.haml"
- "app/views/groups/settings/_lfs.html.haml"
- "app/views/help/_shortcuts.html.haml"
- "app/views/help/index.html.haml"
- "app/views/help/instance_configuration.html.haml"
- "app/views/help/instance_configuration/_gitlab_ci.html.haml"
- "app/views/help/instance_configuration/_gitlab_pages.html.haml"
- "app/views/import/bitbucket/status.html.haml"
- "app/views/import/bitbucket_server/status.html.haml"
- "app/views/invites/show.html.haml"
- "app/views/jira_connect/subscriptions/index.html.haml"
- "app/views/layouts/_mailer.html.haml"
- "app/views/layouts/experiment_mailer.html.haml"
- "app/views/layouts/header/_default.html.haml"
- "app/views/layouts/header/_new_dropdown.haml"
- "app/views/layouts/jira_connect.html.haml"
- "app/views/layouts/notify.html.haml"
- "app/views/notify/_failed_builds.html.haml"
- "app/views/notify/_reassigned_issuable_email.html.haml"
- "app/views/notify/_removal_notification.html.haml"
- "app/views/notify/_successful_pipeline.html.haml"
- "app/views/notify/autodevops_disabled_email.html.haml"
- "app/views/notify/changed_milestone_email.html.haml"
- "app/views/notify/import_issues_csv_email.html.haml"
- "app/views/notify/issue_moved_email.html.haml"
- "app/views/notify/member_access_denied_email.html.haml"
- "app/views/notify/member_invite_accepted_email.html.haml"
- "app/views/notify/member_invited_email.html.haml"
- "app/views/notify/new_gpg_key_email.html.haml"
- "app/views/notify/new_mention_in_issue_email.html.haml"
- "app/views/notify/new_ssh_key_email.html.haml"
- "app/views/notify/new_user_email.html.haml"
- "app/views/notify/pages_domain_disabled_email.html.haml"
- "app/views/notify/pages_domain_enabled_email.html.haml"
- "app/views/notify/pages_domain_verification_failed_email.html.haml"
- "app/views/notify/pages_domain_verification_succeeded_email.html.haml"
- "app/views/notify/pipeline_failed_email.html.haml"
- "app/views/notify/project_was_exported_email.html.haml"
- "app/views/notify/project_was_moved_email.html.haml"
- "app/views/notify/project_was_not_exported_email.html.haml"
- "app/views/notify/push_to_merge_request_email.html.haml"
- "app/views/notify/remote_mirror_update_failed_email.html.haml"
- "app/views/notify/removed_milestone_issue_email.html.haml"
- "app/views/notify/removed_milestone_merge_request_email.html.haml"
- "app/views/notify/repository_push_email.html.haml"
- "app/views/profiles/chat_names/_chat_name.html.haml"
- "app/views/profiles/chat_names/index.html.haml"
- "app/views/profiles/chat_names/new.html.haml"
- "app/views/projects/_bitbucket_import_modal.html.haml"
- "app/views/projects/_customize_workflow.html.haml"
- "app/views/projects/_deletion_failed.html.haml"
- "app/views/projects/_fork_suggestion.html.haml"
- "app/views/projects/_gitlab_import_modal.html.haml"
- "app/views/projects/_home_panel.html.haml"
- "app/views/projects/_import_project_pane.html.haml"
- "app/views/projects/_issuable_by_email.html.haml"
- "app/views/projects/_readme.html.haml"
- "app/views/projects/artifacts/_artifact.html.haml"
- "app/views/projects/artifacts/_tree_file.html.haml"
- "app/views/projects/artifacts/browse.html.haml"
- "app/views/projects/blame/_age_map_legend.html.haml"
- "app/views/projects/blame/show.html.haml"
- "app/views/projects/blob/_editor.html.haml"
- "app/views/projects/blob/_header_content.html.haml"
- "app/views/projects/blob/_remove.html.haml"
- "app/views/projects/blob/_render_error.html.haml"
- "app/views/projects/blob/edit.html.haml"
- "app/views/projects/blob/new.html.haml"
- "app/views/projects/blob/preview.html.haml"
- "app/views/projects/blob/viewers/_empty.html.haml"
- "app/views/projects/blob/viewers/_stl.html.haml"
- "app/views/projects/branches/_branch.html.haml"
- "app/views/projects/branches/_delete_protected_modal.html.haml"
- "app/views/projects/branches/new.html.haml"
- "app/views/projects/ci/builds/_build.html.haml"
- "app/views/projects/ci/lints/_create.html.haml"
- "app/views/projects/compare/_form.html.haml"
- "app/views/projects/compare/index.html.haml"
- "app/views/projects/cycle_analytics/_empty_stage.html.haml"
- "app/views/projects/cycle_analytics/_no_access.html.haml"
- "app/views/projects/cycle_analytics/_overview.html.haml"
- "app/views/projects/cycle_analytics/show.html.haml"
- "app/views/projects/deploy_keys/_form.html.haml"
- "app/views/projects/deploy_keys/_index.html.haml"
- "app/views/projects/deploy_keys/edit.html.haml"
- "app/views/projects/deployments/_deployment.html.haml"
- "app/views/projects/diffs/_file_header.html.haml"
- "app/views/projects/diffs/_replaced_image_diff.html.haml"
- "app/views/projects/diffs/_stats.html.haml"
- "app/views/projects/empty.html.haml"
- "app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml"
- "app/views/projects/hook_logs/_index.html.haml"
- "app/views/projects/hook_logs/show.html.haml"
- "app/views/projects/hooks/edit.html.haml"
- "app/views/projects/imports/new.html.haml"
- "app/views/projects/imports/show.html.haml"
- "app/views/projects/issues/_new_branch.html.haml"
- "app/views/projects/issues/import_csv/_modal.html.haml"
- "app/views/projects/issues/show.html.haml"
- "app/views/projects/jobs/_header.html.haml"
- "app/views/projects/jobs/_table.html.haml"
- "app/views/projects/jobs/index.html.haml"
- "app/views/projects/labels/edit.html.haml"
- "app/views/projects/labels/new.html.haml"
- "app/views/projects/mattermosts/_no_teams.html.haml"
- "app/views/projects/mattermosts/_team_selection.html.haml"
- "app/views/projects/mattermosts/new.html.haml"
- "app/views/projects/merge_requests/_commits.html.haml"
- "app/views/projects/merge_requests/_how_to_merge.html.haml"
- "app/views/projects/merge_requests/_mr_title.html.haml"
- "app/views/projects/merge_requests/conflicts/_commit_stats.html.haml"
- "app/views/projects/merge_requests/conflicts/_file_actions.html.haml"
- "app/views/projects/merge_requests/conflicts/_submit_form.html.haml"
- "app/views/projects/merge_requests/conflicts/components/_diff_file_editor.html.haml"
- "app/views/projects/merge_requests/conflicts/components/_inline_conflict_lines.html.haml"
- "app/views/projects/merge_requests/conflicts/show.html.haml"
- "app/views/projects/merge_requests/creations/_diffs.html.haml"
- "app/views/projects/merge_requests/creations/_new_compare.html.haml"
- "app/views/projects/merge_requests/creations/_new_submit.html.haml"
- "app/views/projects/merge_requests/diffs/_different_base.html.haml"
- "app/views/projects/merge_requests/diffs/_diffs.html.haml"
- "app/views/projects/merge_requests/diffs/_version_controls.html.haml"
- "app/views/projects/merge_requests/invalid.html.haml"
- "app/views/projects/merge_requests/widget/open/_error.html.haml"
- "app/views/projects/mirrors/_regenerate_public_ssh_key_confirm_modal.html.haml"
- "app/views/projects/mirrors/_ssh_host_keys.html.haml"
- "app/views/projects/no_repo.html.haml"
- "app/views/projects/pipeline_schedules/_pipeline_schedule.html.haml"
- "app/views/projects/pipelines/_info.html.haml"
- "app/views/projects/protected_branches/shared/_dropdown.html.haml"
- "app/views/projects/protected_branches/shared/_index.html.haml"
- "app/views/projects/protected_branches/shared/_matching_branch.html.haml"
- "app/views/projects/protected_branches/shared/_protected_branch.html.haml"
- "app/views/projects/protected_branches/show.html.haml"
- "app/views/projects/protected_tags/shared/_create_protected_tag.html.haml"
- "app/views/projects/protected_tags/shared/_dropdown.html.haml"
- "app/views/projects/protected_tags/shared/_index.html.haml"
- "app/views/projects/protected_tags/shared/_matching_tag.html.haml"
- "app/views/projects/protected_tags/shared/_protected_tag.html.haml"
- "app/views/projects/protected_tags/shared/_tags_list.html.haml"
- "app/views/projects/protected_tags/show.html.haml"
- "app/views/projects/registry/repositories/_tag.html.haml"
- "app/views/projects/repositories/_feed.html.haml"
- "app/views/projects/runners/_shared_runners.html.haml"
- "app/views/projects/runners/edit.html.haml"
- "app/views/projects/services/mattermost_slash_commands/_detailed_help.html.haml"
- "app/views/projects/services/mattermost_slash_commands/_help.html.haml"
- "app/views/projects/services/prometheus/_metrics.html.haml"
- "app/views/projects/services/slack_slash_commands/_help.html.haml"
- "app/views/projects/settings/ci_cd/_badge.html.haml"
- "app/views/projects/settings/ci_cd/_form.html.haml"
- "app/views/projects/tags/index.html.haml"
- "app/views/projects/tags/releases/edit.html.haml"
- "app/views/projects/tree/_tree_row.html.haml"
- "app/views/projects/tree/_truncated_notice_tree_row.html.haml"
- "app/views/projects/triggers/_form.html.haml"
- "app/views/projects/triggers/_index.html.haml"
- "app/views/projects/triggers/_trigger.html.haml"
- "app/views/projects/triggers/edit.html.haml"
- "app/views/search/results/_issue.html.haml"
- "app/views/search/results/_note.html.haml"
- "app/views/search/results/_snippet_blob.html.haml"
- "app/views/search/results/_snippet_title.html.haml"
- "app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml"
- "app/views/shared/_commit_message_container.html.haml"
- "app/views/shared/_delete_label_modal.html.haml"
- "app/views/shared/_group_form.html.haml"
- "app/views/shared/_group_tips.html.haml"
- "app/views/shared/_md_preview.html.haml"
- "app/views/shared/_milestone_expired.html.haml"
- "app/views/shared/_no_password.html.haml"
- "app/views/shared/_ping_consent.html.haml"
- "app/views/shared/_project_limit.html.haml"
- "app/views/shared/boards/components/_sidebar.html.haml"
- "app/views/shared/boards/components/sidebar/_due_date.html.haml"
- "app/views/shared/boards/components/sidebar/_labels.html.haml"
- "app/views/shared/boards/components/sidebar/_milestone.html.haml"
- "app/views/shared/hook_logs/_content.html.haml"
- "app/views/shared/issuable/_assignees.html.haml"
- "app/views/shared/issuable/_board_create_list_dropdown.html.haml"
- "app/views/shared/issuable/_close_reopen_report_toggle.html.haml"
- "app/views/shared/issuable/_form.html.haml"
- "app/views/shared/issuable/_search_bar.html.haml"
- "app/views/shared/issuable/_sidebar.html.haml"
- "app/views/shared/issuable/form/_default_templates.html.haml"
- "app/views/shared/issuable/form/_template_selector.html.haml"
- "app/views/shared/issuable/form/_title.html.haml"
- "app/views/shared/labels/_form.html.haml"
- "app/views/shared/members/_member.html.haml"
- "app/views/shared/milestones/_form_dates.html.haml"
- "app/views/shared/milestones/_issuable.html.haml"
- "app/views/shared/milestones/_milestone.html.haml"
- "app/views/shared/milestones/_sidebar.html.haml"
- "app/views/shared/milestones/_top.html.haml"
- "app/views/shared/notes/_hints.html.haml"
- "app/views/shared/notifications/_button.html.haml"
- "app/views/shared/notifications/_new_button.html.haml"
- "app/views/shared/runners/_runner_description.html.haml"
- "app/views/shared/runners/show.html.haml"
- "app/views/shared/snippets/_header.html.haml"
- "app/views/shared/snippets/_snippet.html.haml"
- "app/views/shared/web_hooks/_form.html.haml"
- "app/views/shared/web_hooks/_hook.html.haml"
- "app/views/shared/wikis/_pages_wiki_page.html.haml"
- "app/views/users/_deletion_guidance.html.haml"
- "ee/app/views/admin/_namespace_plan_info.html.haml"
- "ee/app/views/admin/application_settings/_templates.html.haml"
- "ee/app/views/admin/audit_logs/index.html.haml"
- "ee/app/views/admin/emails/show.html.haml"
- "ee/app/views/admin/geo/projects/_registry_failed.html.haml"
- "ee/app/views/admin/geo/projects/_registry_never.html.haml"
- "ee/app/views/admin/licenses/_upload_trial_license.html.haml"
- "ee/app/views/admin/licenses/new.html.haml"
- "ee/app/views/admin/monitoring/ee/_nav.html.haml"
- "ee/app/views/admin/projects/_shared_runner_status.html.haml"
- "ee/app/views/admin/users/_auditor_access_level_radio.html.haml"
- "ee/app/views/admin/users/_auditor_user_badge.html.haml"
- "ee/app/views/admin/users/_limits.html.haml"
- "ee/app/views/admin/users/_user_detail_note.html.haml"
- "ee/app/views/dashboard/projects/_blank_state_ee_trial.html.haml"
- "ee/app/views/errors/kerberos_denied.html.haml"
- "ee/app/views/groups/ee/_settings_nav.html.haml"
- "ee/app/views/groups/group_members/_ldap_sync.html.haml"
- "ee/app/views/groups/group_members/_sync_button.html.haml"
- "ee/app/views/groups/hooks/edit.html.haml"
- "ee/app/views/groups/ldap_group_links/index.html.haml"
- "ee/app/views/layouts/nav/ee/admin/_new_monitoring_sidebar.html.haml"
- "ee/app/views/layouts/service_desk.html.haml"
- "ee/app/views/ldap_group_links/_form.html.haml"
- "ee/app/views/ldap_group_links/_ldap_group_link.html.haml"
- "ee/app/views/ldap_group_links/_ldap_group_links.html.haml"
- "ee/app/views/ldap_group_links/_ldap_group_links_show.html.haml"
- "ee/app/views/ldap_group_links/_ldap_group_links_synchronizations.html.haml"
- "ee/app/views/namespaces/_shared_runner_status.html.haml"
- "ee/app/views/namespaces/_shared_runners_minutes_setting.html.haml"
- "ee/app/views/namespaces/pipelines_quota/_extra_shared_runners_minutes_quota.html.haml"
- "ee/app/views/namespaces/pipelines_quota/_list.haml"
- "ee/app/views/notify/approved_merge_request_email.html.haml"
- "ee/app/views/notify/epic_status_changed_email.html.haml"
- "ee/app/views/notify/new_review_email.html.haml"
- "ee/app/views/notify/send_admin_notification.html.haml"
- "ee/app/views/notify/send_unsubscribed_notification.html.haml"
- "ee/app/views/notify/unapproved_merge_request_email.html.haml"
- "ee/app/views/oauth/geo_auth/error.html.haml"
- "ee/app/views/projects/commits/_mirror_status.html.haml"
- "ee/app/views/projects/merge_requests/_approvals_count.html.haml"
- "ee/app/views/projects/merge_requests/widget/open/_geo.html.haml"
- "ee/app/views/projects/mirrors/_mirrored_repositories_count.html.haml"
- "ee/app/views/projects/protected_branches/_update_protected_branch.html.haml"
- "ee/app/views/projects/protected_branches/ee/_create_protected_branch.html.haml"
- "ee/app/views/projects/protected_branches/ee/_dropdown.html.haml"
- "ee/app/views/projects/protected_tags/_protected_tag_extra_create_access_levels.haml"
- "ee/app/views/projects/protected_tags/ee/_create_protected_tag.html.haml"
- "ee/app/views/projects/push_rules/_index.html.haml"
- "ee/app/views/projects/services/gitlab_slack_application/_help.html.haml"
- "ee/app/views/projects/services/gitlab_slack_application/_slack_integration_form.html.haml"
- "ee/app/views/projects/settings/slacks/edit.html.haml"
- "ee/app/views/shared/_mirror_update_button.html.haml"
- "ee/app/views/shared/epic/_search_bar.html.haml"
- "ee/app/views/shared/issuable/_approvals.html.haml"
- "ee/app/views/shared/issuable/_board_create_list_dropdown.html.haml"
- "ee/app/views/shared/issuable/_filter_weight.html.haml"
- "ee/app/views/shared/members/ee/_ldap_tag.html.haml"
- "ee/app/views/shared/members/ee/_override_member_buttons.html.haml"
- "ee/app/views/shared/members/ee/_sso_badge.html.haml"
- "ee/app/views/shared/milestones/_burndown.html.haml"
- "ee/app/views/shared/milestones/_weight.html.haml"
- "ee/app/views/shared/promotions/_promote_issue_weights.html.haml"
- "ee/app/views/shared/promotions/_promote_repository_features.html.haml"
- "ee/app/views/shared/promotions/_promote_servicedesk.html.haml"
- "ee/app/views/shared/push_rules/_form.html.haml"
- "ee/app/views/unsubscribes/show.html.haml"
- 'app/views/clusters/clusters/_cluster.html.haml'
- 'app/views/clusters/clusters/new.html.haml'
- 'app/views/dashboard/milestones/index.html.haml'
- 'app/views/dashboard/projects/_blank_state_admin_welcome.html.haml'
- 'app/views/dashboard/projects/_blank_state_welcome.html.haml'
- 'app/views/dashboard/todos/_todo.html.haml'
- 'app/views/dashboard/todos/index.html.haml'
- 'app/views/devise/confirmations/almost_there.haml'
- 'app/views/devise/mailer/_confirmation_instructions_account.html.haml'
- 'app/views/devise/mailer/_confirmation_instructions_secondary.html.haml'
- 'app/views/devise/mailer/email_changed.html.haml'
- 'app/views/devise/mailer/password_change.html.haml'
- 'app/views/devise/mailer/reset_password_instructions.html.haml'
- 'app/views/devise/mailer/unlock_instructions.html.haml'
- 'app/views/devise/passwords/edit.html.haml'
- 'app/views/devise/sessions/_new_base.html.haml'
- 'app/views/devise/sessions/_new_crowd.html.haml'
- 'app/views/devise/sessions/_new_ldap.html.haml'
- 'app/views/devise/sessions/new.html.haml'
- 'app/views/devise/sessions/two_factor.html.haml'
- 'app/views/devise/shared/_omniauth_box.html.haml'
- 'app/views/devise/shared/_sign_in_link.html.haml'
- 'app/views/devise/shared/_tabs_normal.html.haml'
- 'app/views/discussions/_discussion.html.haml'
- 'app/views/discussions/_headline.html.haml'
- 'app/views/discussions/_notes.html.haml'
- 'app/views/doorkeeper/applications/_delete_form.html.haml'
- 'app/views/doorkeeper/authorized_applications/_delete_form.html.haml'
- 'app/views/errors/encoding.html.haml'
- 'app/views/errors/git_not_found.html.haml'
- 'app/views/errors/omniauth_error.html.haml'
- 'app/views/errors/precondition_failed.html.haml'
- 'app/views/events/_event_push.atom.haml'
- 'app/views/events/event/_push.html.haml'
- 'app/views/groups/_create_chat_team.html.haml'
- 'app/views/groups/_group_admin_settings.html.haml'
- 'app/views/groups/labels/edit.html.haml'
- 'app/views/groups/labels/new.html.haml'
- 'app/views/groups/milestones/edit.html.haml'
- 'app/views/groups/milestones/index.html.haml'
- 'app/views/groups/milestones/new.html.haml'
- 'app/views/groups/projects.html.haml'
- 'app/views/groups/runners/edit.html.haml'
- 'app/views/groups/settings/_advanced.html.haml'
- 'app/views/groups/settings/_lfs.html.haml'
- 'app/views/help/_shortcuts.html.haml'
- 'app/views/help/index.html.haml'
- 'app/views/help/instance_configuration.html.haml'
- 'app/views/help/instance_configuration/_gitlab_ci.html.haml'
- 'app/views/help/instance_configuration/_gitlab_pages.html.haml'
- 'app/views/import/bitbucket/status.html.haml'
- 'app/views/import/bitbucket_server/status.html.haml'
- 'app/views/invites/show.html.haml'
- 'app/views/jira_connect/subscriptions/index.html.haml'
- 'app/views/layouts/_mailer.html.haml'
- 'app/views/layouts/experiment_mailer.html.haml'
- 'app/views/layouts/header/_default.html.haml'
- 'app/views/layouts/header/_new_dropdown.haml'
- 'app/views/layouts/jira_connect.html.haml'
- 'app/views/layouts/notify.html.haml'
- 'app/views/notify/_failed_builds.html.haml'
- 'app/views/notify/_reassigned_issuable_email.html.haml'
- 'app/views/notify/_removal_notification.html.haml'
- 'app/views/notify/_successful_pipeline.html.haml'
- 'app/views/notify/autodevops_disabled_email.html.haml'
- 'app/views/notify/changed_milestone_email.html.haml'
- 'app/views/notify/import_issues_csv_email.html.haml'
- 'app/views/notify/issue_moved_email.html.haml'
- 'app/views/notify/member_access_denied_email.html.haml'
- 'app/views/notify/member_invite_accepted_email.html.haml'
- 'app/views/notify/member_invited_email.html.haml'
- 'app/views/notify/new_gpg_key_email.html.haml'
- 'app/views/notify/new_mention_in_issue_email.html.haml'
- 'app/views/notify/new_ssh_key_email.html.haml'
- 'app/views/notify/new_user_email.html.haml'
- 'app/views/notify/pages_domain_disabled_email.html.haml'
- 'app/views/notify/pages_domain_enabled_email.html.haml'
- 'app/views/notify/pages_domain_verification_failed_email.html.haml'
- 'app/views/notify/pages_domain_verification_succeeded_email.html.haml'
- 'app/views/notify/pipeline_failed_email.html.haml'
- 'app/views/notify/project_was_exported_email.html.haml'
- 'app/views/notify/project_was_moved_email.html.haml'
- 'app/views/notify/project_was_not_exported_email.html.haml'
- 'app/views/notify/push_to_merge_request_email.html.haml'
- 'app/views/notify/remote_mirror_update_failed_email.html.haml'
- 'app/views/notify/removed_milestone_issue_email.html.haml'
- 'app/views/notify/removed_milestone_merge_request_email.html.haml'
- 'app/views/notify/repository_push_email.html.haml'
- 'app/views/profiles/chat_names/_chat_name.html.haml'
- 'app/views/profiles/chat_names/index.html.haml'
- 'app/views/profiles/chat_names/new.html.haml'
- 'app/views/projects/_bitbucket_import_modal.html.haml'
- 'app/views/projects/_customize_workflow.html.haml'
- 'app/views/projects/_deletion_failed.html.haml'
- 'app/views/projects/_fork_suggestion.html.haml'
- 'app/views/projects/_gitlab_import_modal.html.haml'
- 'app/views/projects/_home_panel.html.haml'
- 'app/views/projects/_import_project_pane.html.haml'
- 'app/views/projects/_issuable_by_email.html.haml'
- 'app/views/projects/_readme.html.haml'
- 'app/views/projects/artifacts/_artifact.html.haml'
- 'app/views/projects/artifacts/_tree_file.html.haml'
- 'app/views/projects/artifacts/browse.html.haml'
- 'app/views/projects/blame/_age_map_legend.html.haml'
- 'app/views/projects/blame/show.html.haml'
- 'app/views/projects/blob/_editor.html.haml'
- 'app/views/projects/blob/_header_content.html.haml'
- 'app/views/projects/blob/_remove.html.haml'
- 'app/views/projects/blob/_render_error.html.haml'
- 'app/views/projects/blob/edit.html.haml'
- 'app/views/projects/blob/new.html.haml'
- 'app/views/projects/blob/preview.html.haml'
- 'app/views/projects/blob/viewers/_empty.html.haml'
- 'app/views/projects/blob/viewers/_stl.html.haml'
- 'app/views/projects/branches/_branch.html.haml'
- 'app/views/projects/branches/_delete_protected_modal.html.haml'
- 'app/views/projects/branches/new.html.haml'
- 'app/views/projects/ci/builds/_build.html.haml'
- 'app/views/projects/ci/lints/_create.html.haml'
- 'app/views/projects/compare/_form.html.haml'
- 'app/views/projects/compare/index.html.haml'
- 'app/views/projects/cycle_analytics/_empty_stage.html.haml'
- 'app/views/projects/cycle_analytics/_no_access.html.haml'
- 'app/views/projects/cycle_analytics/_overview.html.haml'
- 'app/views/projects/cycle_analytics/show.html.haml'
- 'app/views/projects/deploy_keys/_form.html.haml'
- 'app/views/projects/deploy_keys/_index.html.haml'
- 'app/views/projects/deploy_keys/edit.html.haml'
- 'app/views/projects/deployments/_deployment.html.haml'
- 'app/views/projects/diffs/_file_header.html.haml'
- 'app/views/projects/diffs/_replaced_image_diff.html.haml'
- 'app/views/projects/diffs/_stats.html.haml'
- 'app/views/projects/empty.html.haml'
- 'app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml'
- 'app/views/projects/hook_logs/_index.html.haml'
- 'app/views/projects/hook_logs/show.html.haml'
- 'app/views/projects/hooks/edit.html.haml'
- 'app/views/projects/imports/new.html.haml'
- 'app/views/projects/imports/show.html.haml'
- 'app/views/projects/issues/_new_branch.html.haml'
- 'app/views/projects/issues/import_csv/_modal.html.haml'
- 'app/views/projects/issues/show.html.haml'
- 'app/views/projects/jobs/_header.html.haml'
- 'app/views/projects/jobs/_table.html.haml'
- 'app/views/projects/jobs/index.html.haml'
- 'app/views/projects/labels/edit.html.haml'
- 'app/views/projects/labels/new.html.haml'
- 'app/views/projects/mattermosts/_no_teams.html.haml'
- 'app/views/projects/mattermosts/_team_selection.html.haml'
- 'app/views/projects/mattermosts/new.html.haml'
- 'app/views/projects/merge_requests/_commits.html.haml'
- 'app/views/projects/merge_requests/_how_to_merge.html.haml'
- 'app/views/projects/merge_requests/_mr_title.html.haml'
- 'app/views/projects/merge_requests/conflicts/_commit_stats.html.haml'
- 'app/views/projects/merge_requests/conflicts/_file_actions.html.haml'
- 'app/views/projects/merge_requests/conflicts/_submit_form.html.haml'
- 'app/views/projects/merge_requests/conflicts/components/_diff_file_editor.html.haml'
- 'app/views/projects/merge_requests/conflicts/components/_inline_conflict_lines.html.haml'
- 'app/views/projects/merge_requests/conflicts/show.html.haml'
- 'app/views/projects/merge_requests/creations/_diffs.html.haml'
- 'app/views/projects/merge_requests/creations/_new_compare.html.haml'
- 'app/views/projects/merge_requests/creations/_new_submit.html.haml'
- 'app/views/projects/merge_requests/diffs/_different_base.html.haml'
- 'app/views/projects/merge_requests/diffs/_diffs.html.haml'
- 'app/views/projects/merge_requests/diffs/_version_controls.html.haml'
- 'app/views/projects/merge_requests/invalid.html.haml'
- 'app/views/projects/merge_requests/widget/open/_error.html.haml'
- 'app/views/projects/mirrors/_regenerate_public_ssh_key_confirm_modal.html.haml'
- 'app/views/projects/mirrors/_ssh_host_keys.html.haml'
- 'app/views/projects/no_repo.html.haml'
- 'app/views/projects/pipeline_schedules/_pipeline_schedule.html.haml'
- 'app/views/projects/pipelines/_info.html.haml'
- 'app/views/projects/protected_branches/shared/_dropdown.html.haml'
- 'app/views/projects/protected_branches/shared/_index.html.haml'
- 'app/views/projects/protected_branches/shared/_matching_branch.html.haml'
- 'app/views/projects/protected_branches/shared/_protected_branch.html.haml'
- 'app/views/projects/protected_branches/show.html.haml'
- 'app/views/projects/protected_tags/shared/_create_protected_tag.html.haml'
- 'app/views/projects/protected_tags/shared/_dropdown.html.haml'
- 'app/views/projects/protected_tags/shared/_index.html.haml'
- 'app/views/projects/protected_tags/shared/_matching_tag.html.haml'
- 'app/views/projects/protected_tags/shared/_protected_tag.html.haml'
- 'app/views/projects/protected_tags/shared/_tags_list.html.haml'
- 'app/views/projects/protected_tags/show.html.haml'
- 'app/views/projects/registry/repositories/_tag.html.haml'
- 'app/views/projects/repositories/_feed.html.haml'
- 'app/views/projects/runners/_shared_runners.html.haml'
- 'app/views/projects/runners/edit.html.haml'
- 'app/views/projects/services/mattermost_slash_commands/_detailed_help.html.haml'
- 'app/views/projects/services/mattermost_slash_commands/_help.html.haml'
- 'app/views/projects/services/prometheus/_metrics.html.haml'
- 'app/views/projects/services/slack_slash_commands/_help.html.haml'
- 'app/views/projects/settings/ci_cd/_badge.html.haml'
- 'app/views/projects/settings/ci_cd/_form.html.haml'
- 'app/views/projects/tags/index.html.haml'
- 'app/views/projects/tags/releases/edit.html.haml'
- 'app/views/projects/tree/_tree_row.html.haml'
- 'app/views/projects/tree/_truncated_notice_tree_row.html.haml'
- 'app/views/projects/triggers/_form.html.haml'
- 'app/views/projects/triggers/_index.html.haml'
- 'app/views/projects/triggers/_trigger.html.haml'
- 'app/views/projects/triggers/edit.html.haml'
- 'app/views/search/results/_issue.html.haml'
- 'app/views/search/results/_note.html.haml'
- 'app/views/search/results/_snippet_blob.html.haml'
- 'app/views/search/results/_snippet_title.html.haml'
- 'app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml'
- 'app/views/shared/_commit_message_container.html.haml'
- 'app/views/shared/_delete_label_modal.html.haml'
- 'app/views/shared/_group_form.html.haml'
- 'app/views/shared/_group_tips.html.haml'
- 'app/views/shared/_md_preview.html.haml'
- 'app/views/shared/_milestone_expired.html.haml'
- 'app/views/shared/_no_password.html.haml'
- 'app/views/shared/_ping_consent.html.haml'
- 'app/views/shared/_project_limit.html.haml'
- 'app/views/shared/boards/components/_sidebar.html.haml'
- 'app/views/shared/boards/components/sidebar/_due_date.html.haml'
- 'app/views/shared/boards/components/sidebar/_labels.html.haml'
- 'app/views/shared/boards/components/sidebar/_milestone.html.haml'
- 'app/views/shared/hook_logs/_content.html.haml'
- 'app/views/shared/issuable/_assignees.html.haml'
- 'app/views/shared/issuable/_board_create_list_dropdown.html.haml'
- 'app/views/shared/issuable/_close_reopen_report_toggle.html.haml'
- 'app/views/shared/issuable/_form.html.haml'
- 'app/views/shared/issuable/_search_bar.html.haml'
- 'app/views/shared/issuable/_sidebar.html.haml'
- 'app/views/shared/issuable/form/_default_templates.html.haml'
- 'app/views/shared/issuable/form/_template_selector.html.haml'
- 'app/views/shared/issuable/form/_title.html.haml'
- 'app/views/shared/labels/_form.html.haml'
- 'app/views/shared/members/_member.html.haml'
- 'app/views/shared/milestones/_form_dates.html.haml'
- 'app/views/shared/milestones/_issuable.html.haml'
- 'app/views/shared/milestones/_milestone.html.haml'
- 'app/views/shared/milestones/_sidebar.html.haml'
- 'app/views/shared/milestones/_top.html.haml'
- 'app/views/shared/notes/_hints.html.haml'
- 'app/views/shared/notifications/_button.html.haml'
- 'app/views/shared/notifications/_new_button.html.haml'
- 'app/views/shared/runners/_runner_description.html.haml'
- 'app/views/shared/runners/show.html.haml'
- 'app/views/shared/snippets/_header.html.haml'
- 'app/views/shared/snippets/_snippet.html.haml'
- 'app/views/shared/web_hooks/_form.html.haml'
- 'app/views/shared/web_hooks/_hook.html.haml'
- 'app/views/shared/wikis/_pages_wiki_page.html.haml'
- 'app/views/users/_deletion_guidance.html.haml'
- 'ee/app/views/admin/_namespace_plan_info.html.haml'
- 'ee/app/views/admin/application_settings/_templates.html.haml'
- 'ee/app/views/admin/audit_logs/index.html.haml'
- 'ee/app/views/admin/emails/show.html.haml'
- 'ee/app/views/admin/geo/projects/_registry_failed.html.haml'
- 'ee/app/views/admin/geo/projects/_registry_never.html.haml'
- 'ee/app/views/admin/licenses/_upload_trial_license.html.haml'
- 'ee/app/views/admin/licenses/new.html.haml'
- 'ee/app/views/admin/monitoring/ee/_nav.html.haml'
- 'ee/app/views/admin/projects/_shared_runner_status.html.haml'
- 'ee/app/views/admin/users/_auditor_access_level_radio.html.haml'
- 'ee/app/views/admin/users/_auditor_user_badge.html.haml'
- 'ee/app/views/admin/users/_limits.html.haml'
- 'ee/app/views/admin/users/_user_detail_note.html.haml'
- 'ee/app/views/dashboard/projects/_blank_state_ee_trial.html.haml'
- 'ee/app/views/errors/kerberos_denied.html.haml'
- 'ee/app/views/groups/ee/_settings_nav.html.haml'
- 'ee/app/views/groups/group_members/_ldap_sync.html.haml'
- 'ee/app/views/groups/group_members/_sync_button.html.haml'
- 'ee/app/views/groups/hooks/edit.html.haml'
- 'ee/app/views/groups/ldap_group_links/index.html.haml'
- 'ee/app/views/layouts/nav/ee/admin/_new_monitoring_sidebar.html.haml'
- 'ee/app/views/layouts/service_desk.html.haml'
- 'ee/app/views/ldap_group_links/_form.html.haml'
- 'ee/app/views/ldap_group_links/_ldap_group_link.html.haml'
- 'ee/app/views/ldap_group_links/_ldap_group_links.html.haml'
- 'ee/app/views/ldap_group_links/_ldap_group_links_show.html.haml'
- 'ee/app/views/namespaces/_shared_runner_status.html.haml'
- 'ee/app/views/namespaces/_shared_runners_minutes_setting.html.haml'
- 'ee/app/views/namespaces/pipelines_quota/_extra_shared_runners_minutes_quota.html.haml'
- 'ee/app/views/namespaces/pipelines_quota/_list.haml'
- 'ee/app/views/notify/approved_merge_request_email.html.haml'
- 'ee/app/views/notify/epic_status_changed_email.html.haml'
- 'ee/app/views/notify/new_review_email.html.haml'
- 'ee/app/views/notify/send_admin_notification.html.haml'
- 'ee/app/views/notify/send_unsubscribed_notification.html.haml'
- 'ee/app/views/notify/unapproved_merge_request_email.html.haml'
- 'ee/app/views/oauth/geo_auth/error.html.haml'
- 'ee/app/views/projects/commits/_mirror_status.html.haml'
- 'ee/app/views/projects/merge_requests/_approvals_count.html.haml'
- 'ee/app/views/projects/merge_requests/widget/open/_geo.html.haml'
- 'ee/app/views/projects/mirrors/_mirrored_repositories_count.html.haml'
- 'ee/app/views/projects/protected_branches/_update_protected_branch.html.haml'
- 'ee/app/views/projects/protected_branches/ee/_create_protected_branch.html.haml'
- 'ee/app/views/projects/protected_branches/ee/_dropdown.html.haml'
- 'ee/app/views/projects/protected_tags/_protected_tag_extra_create_access_levels.haml'
- 'ee/app/views/projects/protected_tags/ee/_create_protected_tag.html.haml'
- 'ee/app/views/projects/push_rules/_index.html.haml'
- 'ee/app/views/projects/services/gitlab_slack_application/_help.html.haml'
- 'ee/app/views/projects/services/gitlab_slack_application/_slack_integration_form.html.haml'
- 'ee/app/views/projects/settings/slacks/edit.html.haml'
- 'ee/app/views/shared/_mirror_update_button.html.haml'
- 'ee/app/views/shared/epic/_search_bar.html.haml'
- 'ee/app/views/shared/issuable/_approvals.html.haml'
- 'ee/app/views/shared/issuable/_board_create_list_dropdown.html.haml'
- 'ee/app/views/shared/issuable/_filter_weight.html.haml'
- 'ee/app/views/shared/members/ee/_ldap_tag.html.haml'
- 'ee/app/views/shared/members/ee/_override_member_buttons.html.haml'
- 'ee/app/views/shared/members/ee/_sso_badge.html.haml'
- 'ee/app/views/shared/milestones/_burndown.html.haml'
- 'ee/app/views/shared/milestones/_weight.html.haml'
- 'ee/app/views/shared/promotions/_promote_issue_weights.html.haml'
- 'ee/app/views/shared/promotions/_promote_repository_features.html.haml'
- 'ee/app/views/shared/promotions/_promote_servicedesk.html.haml'
- 'ee/app/views/shared/push_rules/_form.html.haml'
- 'ee/app/views/unsubscribes/show.html.haml'
......@@ -204,8 +204,13 @@ class CommitStatus < ApplicationRecord
# 'rspec:linux: 1/10' => 'rspec:linux'
common_name = name.to_s.gsub(%r{\d+[\s:\/\\]+\d+\s*}, '')
# 'rspec:linux: [aws, max memory]' => 'rspec:linux'
common_name.gsub!(%r{: \[.*, .*\]\s*\z}, '')
if ::Gitlab::Ci::Features.one_dimensional_matrix_enabled?
# 'rspec:linux: [aws, max memory]' => 'rspec:linux', 'rspec:linux: [aws]' => 'rspec:linux'
common_name.gsub!(%r{: \[.*\]\s*\z}, '')
else
# 'rspec:linux: [aws, max memory]' => 'rspec:linux', 'rspec:linux: [aws]' => 'rspec:linux: [aws]'
common_name.gsub!(%r{: \[.*, .*\]\s*\z}, '')
end
common_name.strip!
common_name
......
......@@ -1384,8 +1384,6 @@ class MergeRequest < ApplicationRecord
end
def has_coverage_reports?
return false unless Feature.enabled?(:coverage_report_view, project, default_enabled: true)
actual_head_pipeline&.has_coverage_reports?
end
......
......@@ -3,7 +3,6 @@ module Ci
module Pipelines
class CreateArtifactService
def execute(pipeline)
return unless ::Gitlab::Ci::Features.coverage_report_view?(pipeline.project)
return unless pipeline.can_generate_coverage_reports?
return if pipeline.has_coverage_reports?
......
......@@ -36,5 +36,3 @@
.form-actions
= f.submit _('Save changes'), class: "btn btn-success", data: { qa_selector: 'save_changes_button' }
= link_to _('Cancel'), admin_group_path(@group), class: "btn btn-cancel"
= render_if_exists 'ldap_group_links/ldap_syncrhonizations', group: @group
---
title: Remove coverage_report_view feature flag
merge_request: 43711
author: David Barr @davebarr
type: removed
---
title: Add internal API to download LFS objects
merge_request: 42161
author:
type: added
---
name: coverage_report_view
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/21791
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/211410
group: 'group::verify testing'
name: one_dimensional_matrix
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/42170
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/256062
type: development
default_enabled: true
group: group::pipeline authoring
default_enabled: false
......@@ -3572,6 +3572,11 @@ job split into three separate jobs.
Use `matrix:` to configure different variables for jobs that are running in parallel.
There can be from 2 to 50 jobs.
In GitLab 13.5 and later, you can have one-dimensional matrices with a single job.
The ability to have one-dimensional matrices is [deployed behind a feature flag](../../user/feature_flags.md),
disabled by default. It's disabled on GitLab.com. To use it in a GitLab self-managed
instance, ask a GitLab administrator to [enable the `one_dimensional_matrix:` feature flag](../../administration/feature_flags.md). **(CORE-ONLY)**
Every job gets the same `CI_NODE_TOTAL` [environment variable](../variables/README.md#predefined-environment-variables) value, and a unique `CI_NODE_INDEX` value.
```yaml
......
......@@ -8,10 +8,7 @@ type: reference, howto
# Test Coverage Visualization
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/3708) in GitLab 12.9.
> - [Feature flag enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/211410) in GitLab 13.4.
> - It's enabled on GitLab.com.
> - It can be disabled per-project.
> - For GitLab self-managed instances, GitLab administrators can opt to [disable it](#enable-or-disable-code-coverage-visualization). **(CORE ONLY)**
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/249811) in GitLab 13.5.
With the help of [GitLab CI/CD](../../../ci/README.md), you can collect the test
coverage information of your favorite testing or coverage-analysis tool, and visualize
......@@ -151,27 +148,3 @@ coverage-jdk11:
reports:
cobertura: build/cobertura.xml
```
## Enable or disable code coverage visualization
This feature comes with the `:coverage_report_view` feature flag enabled by
default. It is enabled on GitLab.com. [GitLab administrators with access to the GitLab Rails console](../../../administration/feature_flags.md)
can disable it for your instance. Test coverage visualization can be enabled or disabled per-project.
To disable it:
```ruby
# Instance-wide
Feature.disable(:coverage_report_view)
# or by project
Feature.disable(:coverage_report_view, Project.find(<project id>))
```
To enable it:
```ruby
# Instance-wide
Feature.enable(:coverage_report_view)
# or by project
Feature.enable(:coverage_report_view, Project.find(<project id>))
```
- group = local_assigns.fetch(:group)
- return unless Gitlab::Auth::Ldap::Config.group_sync_enabled? && group.persisted?
%h3.page-title LDAP synchronizations
= render 'ldap_group_links/form', group: group
= render 'ldap_group_links/ldap_group_links', group: group
......@@ -249,6 +249,7 @@ module API
end
mount ::API::Internal::Base
mount ::API::Internal::Lfs
mount ::API::Internal::Pages
mount ::API::Internal::Kubernetes
......
# frozen_string_literal: true
module API
module Internal
class Lfs < Grape::API::Instance
use Rack::Sendfile
before { authenticate_by_gitlab_shell_token! }
helpers do
def find_lfs_object(lfs_oid)
LfsObject.find_by_oid(lfs_oid)
end
end
namespace 'internal' do
namespace 'lfs' do
desc 'Get LFS URL for object ID' do
detail 'This feature was introduced in GitLab 13.5.'
end
params do
requires :oid, type: String, desc: 'The object ID to query'
requires :gl_repository, type: String, desc: "Project identifier (e.g. project-1)"
end
get "/" do
lfs_object = find_lfs_object(params[:oid])
not_found! unless lfs_object
_, project, repo_type = Gitlab::GlRepository.parse(params[:gl_repository])
not_found! unless repo_type.project? && project
not_found! unless lfs_object.project_allowed_access?(project)
file = lfs_object.file
not_found! unless file&.exists?
content_type 'application/octet-stream'
if file.file_storage?
sendfile file.path
else
workhorse_headers = Gitlab::Workhorse.send_url(file.url)
header workhorse_headers[0], workhorse_headers[1]
env['api.format'] = :binary
body nil
end
end
end
end
end
end
end
......@@ -14,7 +14,7 @@ module Gitlab
validations do
validates :config, variables: { array_values: true }
validates :config, length: {
minimum: 2,
minimum: :minimum,
too_short: 'requires at least %{count} items'
}
end
......@@ -28,6 +28,10 @@ module Gitlab
.map { |key, value| [key.to_s, Array(value).map(&:to_s)] }
.to_h
end
def minimum
::Gitlab::Ci::Features.one_dimensional_matrix_enabled? ? 1 : 2
end
end
end
end
......
......@@ -46,10 +46,6 @@ module Gitlab
Feature.enabled?(:project_transactionless_destroy, project, default_enabled: false)
end
def self.coverage_report_view?(project)
::Feature.enabled?(:coverage_report_view, project, default_enabled: true)
end
def self.child_of_child_pipeline_enabled?(project)
::Feature.enabled?(:ci_child_of_child_pipeline, project, default_enabled: true)
end
......@@ -66,6 +62,10 @@ module Gitlab
def self.new_artifact_file_reader_enabled?(project)
::Feature.enabled?(:ci_new_artifact_file_reader, project, default_enabled: true)
end
def self.one_dimensional_matrix_enabled?
::Feature.enabled?(:one_dimensional_matrix, default_enabled: false)
end
end
end
end
......@@ -109,8 +109,8 @@ RSpec.describe InvitesController, :snowplow do
it 'tracks the user as experiment group' do
request
expect_snowplow_event(snowplow_event.merge(action: 'opened'))
expect_snowplow_event(snowplow_event.merge(action: 'accepted'))
expect_snowplow_event(**snowplow_event.merge(action: 'opened'))
expect_snowplow_event(**snowplow_event.merge(action: 'accepted'))
end
end
......@@ -121,8 +121,8 @@ RSpec.describe InvitesController, :snowplow do
it 'tracks the user as control group' do
request
expect_snowplow_event(snowplow_event.merge(action: 'opened'))
expect_snowplow_event(snowplow_event.merge(action: 'accepted'))
expect_snowplow_event(**snowplow_event.merge(action: 'opened'))
expect_snowplow_event(**snowplow_event.merge(action: 'accepted'))
end
end
......@@ -173,7 +173,7 @@ RSpec.describe InvitesController, :snowplow do
it 'tracks the user as experiment group' do
request
expect_snowplow_event(snowplow_event.merge(action: 'accepted'))
expect_snowplow_event(**snowplow_event.merge(action: 'accepted'))
end
end
......@@ -184,7 +184,7 @@ RSpec.describe InvitesController, :snowplow do
it 'tracks the user as control group' do
request
expect_snowplow_event(snowplow_event.merge(action: 'accepted'))
expect_snowplow_event(**snowplow_event.merge(action: 'accepted'))
end
end
......
# frozen_string_literal: true
require 'fast_spec_helper'
require 'spec_helper'
require_dependency 'active_model'
RSpec.describe ::Gitlab::Ci::Config::Entry::Product::Matrix do
......@@ -46,33 +46,140 @@ RSpec.describe ::Gitlab::Ci::Config::Entry::Product::Matrix do
end
end
context 'when entry config has only one variable' do
let(:config) do
[
{
'VAR_1' => %w[test]
}
]
context 'with one_dimensional_matrix feature flag enabled' do
before do
stub_feature_flags(one_dimensional_matrix: true)
matrix.compose!
end
describe '#valid?' do
it { is_expected.not_to be_valid }
end
context 'when entry config has only one variable with multiple values' do
let(:config) do
[
{
'VAR_1' => %w[build test]
}
]
end
describe '#errors' do
it 'returns error about too many jobs' do
expect(matrix.errors)
.to include('variables config requires at least 2 items')
describe '#valid?' do
it { is_expected.to be_valid }
end
describe '#errors' do
it 'returns no errors' do
expect(matrix.errors)
.to be_empty
end
end
describe '#value' do
before do
matrix.compose!
end
it 'returns the value without raising an error' do
expect(matrix.value).to eq([{ 'VAR_1' => %w[build test] }])
end
end
context 'when entry config has only one variable with one value' do
let(:config) do
[
{
'VAR_1' => %w[test]
}
]
end
describe '#valid?' do
it { is_expected.to be_valid }
end
describe '#errors' do
it 'returns no errors' do
expect(matrix.errors)
.to be_empty
end
end
describe '#value' do
before do
matrix.compose!
end
it 'returns the value without raising an error' do
expect(matrix.value).to eq([{ 'VAR_1' => %w[test] }])
end
end
end
end
end
context 'with one_dimensional_matrix feature flag disabled' do
before do
stub_feature_flags(one_dimensional_matrix: false)
matrix.compose!
end
describe '#value' do
before do
matrix.compose!
context 'when entry config has only one variable with multiple values' do
let(:config) do
[
{
'VAR_1' => %w[build test]
}
]
end
it 'returns the value without raising an error' do
expect(matrix.value).to eq([{ 'VAR_1' => ['test'] }])
describe '#valid?' do
it { is_expected.not_to be_valid }
end
describe '#errors' do
it 'returns error about too many jobs' do
expect(matrix.errors)
.to include('variables config requires at least 2 items')
end
end
describe '#value' do
before do
matrix.compose!
end
it 'returns the value without raising an error' do
expect(matrix.value).to eq([{ 'VAR_1' => %w[build test] }])
end
end
context 'when entry config has only one variable with one value' do
let(:config) do
[
{
'VAR_1' => %w[test]
}
]
end
describe '#valid?' do
it { is_expected.not_to be_valid }
end
describe '#errors' do
it 'returns no errors' do
expect(matrix.errors)
.to include('variables config requires at least 2 items')
end
end
describe '#value' do
before do
matrix.compose!
end
it 'returns the value without raising an error' do
expect(matrix.value).to eq([{ 'VAR_1' => %w[test] }])
end
end
end
end
end
......
# frozen_string_literal: true
require 'fast_spec_helper'
# After Feature one_dimensional_matrix is removed, this can be changed back to fast_spec_helper
require 'spec_helper'
require_dependency 'active_model'
RSpec.describe Gitlab::Ci::Config::Entry::Product::Variables do
......@@ -45,43 +46,71 @@ RSpec.describe Gitlab::Ci::Config::Entry::Product::Variables do
end
end
context 'when entry value is not correct' do
shared_examples 'invalid variables' do |message|
describe '#errors' do
it 'saves errors' do
expect(entry.errors).to include(message)
end
context 'with one_dimensional_matrix feature flag enabled' do
context 'with only one variable' do
before do
stub_feature_flags(one_dimensional_matrix: true)
end
let(:config) { { VAR: 'test' } }
describe '#valid?' do
it 'is not valid' do
expect(entry).not_to be_valid
it 'is valid' do
expect(entry).to be_valid
end
end
describe '#errors' do
it 'does not append errors' do
expect(entry.errors).to be_empty
end
end
end
end
context 'with array' do
let(:config) { [:VAR, 'test'] }
context 'with one_dimensional_matrix feature flag disabled' do
context 'when entry value is not correct' do
before do
stub_feature_flags(one_dimensional_matrix: false)
end
shared_examples 'invalid variables' do |message|
describe '#errors' do
it 'saves errors' do
expect(entry.errors).to include(message)
end
end
it_behaves_like 'invalid variables', /should be a hash of key value pairs/
end
describe '#valid?' do
it 'is not valid' do
expect(entry).not_to be_valid
end
end
end
context 'with empty array' do
let(:config) { { VAR: 'test', VAR2: [] } }
context 'with array' do
let(:config) { [:VAR, 'test'] }
it_behaves_like 'invalid variables', /should be a hash of key value pairs/
end
it_behaves_like 'invalid variables', /should be a hash of key value pairs/
end
context 'with nested array' do
let(:config) { { VAR: 'test', VAR2: [1, [2]] } }
context 'with empty array' do
let(:config) { { VAR: 'test', VAR2: [] } }
it_behaves_like 'invalid variables', /should be a hash of key value pairs/
end
it_behaves_like 'invalid variables', /should be a hash of key value pairs/
end
context 'with only one variable' do
let(:config) { { VAR: 'test' } }
context 'with nested array' do
let(:config) { { VAR: 'test', VAR2: [1, [2]] } }
it_behaves_like 'invalid variables', /should be a hash of key value pairs/
end
it_behaves_like 'invalid variables', /variables config requires at least 2 items/
context 'with one_dimensional_matrix feature flag disabled' do
context 'with only one variable' do
let(:config) { { VAR: 'test' } }
it_behaves_like 'invalid variables', /variables config requires at least 2 items/
end
end
end
end
end
......
......@@ -493,47 +493,104 @@ RSpec.describe CommitStatus do
end
end
describe '#group_name' do
let(:commit_status) do
build(:commit_status, pipeline: pipeline, stage: 'test')
end
subject { commit_status.group_name }
context 'with the one_dimensional_matrix feature flag disabled' do
describe '#group_name' do
before do
stub_feature_flags(one_dimensional_matrix: false)
end
tests = {
'rspec:windows' => 'rspec:windows',
'rspec:windows 0' => 'rspec:windows 0',
'rspec:windows 0 test' => 'rspec:windows 0 test',
'rspec:windows 0 1' => 'rspec:windows',
'rspec:windows 0 1 name' => 'rspec:windows name',
'rspec:windows 0/1' => 'rspec:windows',
'rspec:windows 0/1 name' => 'rspec:windows name',
'rspec:windows 0:1' => 'rspec:windows',
'rspec:windows 0:1 name' => 'rspec:windows name',
'rspec:windows 10000 20000' => 'rspec:windows',
'rspec:windows 0 : / 1' => 'rspec:windows',
'rspec:windows 0 : / 1 name' => 'rspec:windows name',
'0 1 name ruby' => 'name ruby',
'0 :/ 1 name ruby' => 'name ruby',
'rspec: [aws]' => 'rspec: [aws]',
'rspec: [aws] 0/1' => 'rspec: [aws]',
'rspec: [aws, max memory]' => 'rspec',
'rspec:linux: [aws, max memory, data]' => 'rspec:linux',
'rspec: [inception: [something, other thing], value]' => 'rspec',
'rspec:windows 0/1: [name, other]' => 'rspec:windows',
'rspec:windows: [name, other] 0/1' => 'rspec:windows',
'rspec:windows: [name, 0/1] 0/1' => 'rspec:windows',
'rspec:windows: [0/1, name]' => 'rspec:windows',
'rspec:windows: [, ]' => 'rspec:windows',
'rspec:windows: [name]' => 'rspec:windows: [name]',
'rspec:windows: [name,other]' => 'rspec:windows: [name,other]'
}
let(:commit_status) do
build(:commit_status, pipeline: pipeline, stage: 'test')
end
subject { commit_status.group_name }
tests = {
'rspec:windows' => 'rspec:windows',
'rspec:windows 0' => 'rspec:windows 0',
'rspec:windows 0 test' => 'rspec:windows 0 test',
'rspec:windows 0 1' => 'rspec:windows',
'rspec:windows 0 1 name' => 'rspec:windows name',
'rspec:windows 0/1' => 'rspec:windows',
'rspec:windows 0/1 name' => 'rspec:windows name',
'rspec:windows 0:1' => 'rspec:windows',
'rspec:windows 0:1 name' => 'rspec:windows name',
'rspec:windows 10000 20000' => 'rspec:windows',
'rspec:windows 0 : / 1' => 'rspec:windows',
'rspec:windows 0 : / 1 name' => 'rspec:windows name',
'0 1 name ruby' => 'name ruby',
'0 :/ 1 name ruby' => 'name ruby',
'rspec: [aws]' => 'rspec: [aws]',
'rspec: [aws] 0/1' => 'rspec: [aws]',
'rspec: [aws, max memory]' => 'rspec',
'rspec:linux: [aws, max memory, data]' => 'rspec:linux',
'rspec: [inception: [something, other thing], value]' => 'rspec',
'rspec:windows 0/1: [name, other]' => 'rspec:windows',
'rspec:windows: [name, other] 0/1' => 'rspec:windows',
'rspec:windows: [name, 0/1] 0/1' => 'rspec:windows',
'rspec:windows: [0/1, name]' => 'rspec:windows',
'rspec:windows: [, ]' => 'rspec:windows',
'rspec:windows: [name]' => 'rspec:windows: [name]',
'rspec:windows: [name,other]' => 'rspec:windows: [name,other]'
}
tests.each do |name, group_name|
it "'#{name}' puts in '#{group_name}'" do
commit_status.name = name
is_expected.to eq(group_name)
end
end
end
end
tests.each do |name, group_name|
it "'#{name}' puts in '#{group_name}'" do
commit_status.name = name
context 'with one_dimensional_matrix feature flag enabled' do
describe '#group_name' do
before do
stub_feature_flags(one_dimensional_matrix: true)
end
is_expected.to eq(group_name)
let(:commit_status) do
build(:commit_status, pipeline: pipeline, stage: 'test')
end
subject { commit_status.group_name }
tests = {
'rspec:windows' => 'rspec:windows',
'rspec:windows 0' => 'rspec:windows 0',
'rspec:windows 0 test' => 'rspec:windows 0 test',
'rspec:windows 0 1' => 'rspec:windows',
'rspec:windows 0 1 name' => 'rspec:windows name',
'rspec:windows 0/1' => 'rspec:windows',
'rspec:windows 0/1 name' => 'rspec:windows name',
'rspec:windows 0:1' => 'rspec:windows',
'rspec:windows 0:1 name' => 'rspec:windows name',
'rspec:windows 10000 20000' => 'rspec:windows',
'rspec:windows 0 : / 1' => 'rspec:windows',
'rspec:windows 0 : / 1 name' => 'rspec:windows name',
'0 1 name ruby' => 'name ruby',
'0 :/ 1 name ruby' => 'name ruby',
'rspec: [aws]' => 'rspec',
'rspec: [aws] 0/1' => 'rspec',
'rspec: [aws, max memory]' => 'rspec',
'rspec:linux: [aws, max memory, data]' => 'rspec:linux',
'rspec: [inception: [something, other thing], value]' => 'rspec',
'rspec:windows 0/1: [name, other]' => 'rspec:windows',
'rspec:windows: [name, other] 0/1' => 'rspec:windows',
'rspec:windows: [name, 0/1] 0/1' => 'rspec:windows',
'rspec:windows: [0/1, name]' => 'rspec:windows',
'rspec:windows: [, ]' => 'rspec:windows',
'rspec:windows: [name]' => 'rspec:windows',
'rspec:windows: [name,other]' => 'rspec:windows'
}
tests.each do |name, group_name|
it "'#{name}' puts in '#{group_name}'" do
commit_status.name = name
is_expected.to eq(group_name)
end
end
end
end
......
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe API::Internal::Lfs do
include APIInternalBaseHelpers
let_it_be(:project) { create(:project) }
let_it_be(:lfs_object) { create(:lfs_object, :with_file) }
let_it_be(:lfs_objects_project) { create(:lfs_objects_project, project: project, lfs_object: lfs_object) }
let_it_be(:gl_repository) { "project-#{project.id}" }
let_it_be(:filename) { lfs_object.file.path }
let(:secret_token) { Gitlab::Shell.secret_token }
describe 'GET /internal/lfs' do
let(:valid_params) do
{ oid: lfs_object.oid, gl_repository: gl_repository, secret_token: secret_token }
end
context 'with invalid auth' do
let(:invalid_params) { valid_params.merge!(secret_token: 'invalid_tokne') }
it 'returns 401' do
get api("/internal/lfs"), params: invalid_params
end
end
context 'with valid auth' do
context 'LFS in local storage' do
it 'sends the file' do
get api("/internal/lfs"), params: valid_params
expect(response).to have_gitlab_http_status(:ok)
expect(response.headers['Content-Type']).to eq('application/octet-stream')
expect(response.headers['Content-Length'].to_i).to eq(File.stat(filename).size)
expect(response.body).to eq(File.open(filename, 'rb', &:read))
end
# https://www.rubydoc.info/github/rack/rack/master/Rack/Sendfile
it 'delegates sending to Web server' do
get api("/internal/lfs"), params: valid_params, env: { 'HTTP_X_SENDFILE_TYPE' => 'X-Sendfile' }
expect(response).to have_gitlab_http_status(:ok)
expect(response.headers['Content-Type']).to eq('application/octet-stream')
expect(response.headers['Content-Length'].to_i).to eq(0)
expect(response.headers['X-Sendfile']).to be_present
expect(response.body).to eq("")
end
it 'retuns 404 for unknown file' do
params = valid_params.merge(oid: SecureRandom.hex)
get api("/internal/lfs"), params: params
expect(response).to have_gitlab_http_status(:not_found)
end
it 'returns 404 if LFS object does not belong to project' do
other_lfs = create(:lfs_object, :with_file)
params = valid_params.merge(oid: other_lfs.oid)
get api("/internal/lfs"), params: params
expect(response).to have_gitlab_http_status(:not_found)
end
end
context 'LFS in object storage' do
let!(:lfs_object2) { create(:lfs_object, :with_file) }
let!(:lfs_objects_project2) { create(:lfs_objects_project, project: project, lfs_object: lfs_object2) }
let(:valid_params) do
{ oid: lfs_object2.oid, gl_repository: gl_repository, secret_token: secret_token }
end
before do
stub_lfs_object_storage(enabled: true)
lfs_object2.file.migrate!(LfsObjectUploader::Store::REMOTE)
end
it 'notifies Workhorse to send the file' do
get api("/internal/lfs"), params: valid_params
expect(response).to have_gitlab_http_status(:ok)
expect(response.headers[Gitlab::Workhorse::SEND_DATA_HEADER]).to start_with("send-url:")
expect(response.headers['Content-Type']).to eq('application/octet-stream')
expect(response.headers['Content-Length'].to_i).to eq(0)
expect(response.body).to eq("")
end
end
end
end
end
......@@ -35,16 +35,6 @@ RSpec.describe ::Ci::Pipelines::CreateArtifactService do
end
end
context 'when feature is disabled' do
it 'does not create a pipeline artifact' do
stub_feature_flags(coverage_report_view: false)
subject
expect(Ci::PipelineArtifact.count).to eq(0)
end
end
context 'when pipeline artifact has already been created' do
it 'do not raise an error and do not persist the same artifact twice' do
expect { 2.times { described_class.new.execute(pipeline) } }.not_to raise_error(ActiveRecord::RecordNotUnique)
......
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